从YAML文件加载对象,其中标记和对象定义位于导入的模块中

时间:2012-08-08 14:31:41

标签: python import yaml

使用Python和YAML,我有一个误解的问题。我有一个文件GenReport.py,它使用YAML标记定义Report对象。当我只是修改GenReport和我的YAML文件时,一切运行正常。

但是当我创建一个名为GenReportDriver.py的新文件(比如说)并导入GenReport时,现在事情就像我预期的那样无法正常工作。

GenReport.py中,我定义了一个函数:

# To expose object creation to importing modules.        
def create(yaml_file_name):
    report_gen = yaml.load_all(file(yaml_file_name))
    return report_gen

然后在GenReportDriver.py我使用以下内容:

import GenReport
class GenReportDriver(object):

    def __init__(self, yamlFile):

        # Construct the GenReport objects from the YAML specification.
        # pdb.set_trace()
        self.reports = GenReport.create(yamlFile)

意图是GenReportDriver将提供我的程序的消费者想要的有用的东西,并且他们必须改变的是他们的报告的YAML文件。 (与此类控制器功能直接位于GenReport中的报表对象中)相反。

但是,上面的__init__函数(当我使用调试器时)导致我的变量self.reports只是等于我传入的文件名yamlFile。也就是说,它似乎无法使YAML标记定义生效在GenReport.py

所以我的问题是如何在文件A中加载YAML文件,文件A导入文件B,文件B是否包含YAML标记/定义?

澄清评论:

GenReport中,我定义了具有YAML标记标识符的对象,例如

class ManagedInventoryReport(yaml.YAMLObject): 
    yaml_tag = u'!InventoryReport' 
    # rest of class details...

等,...以便用户可以在YAML文件中定义!InventoryReport对象,并将它们作为该类的实例加载。

0 个答案:

没有答案