【问题标题】:Import dict without name from a module从模块导入不带名称的字典
【发布时间】:2016-05-09 13:04:14
【问题描述】:

Odoo 模块总是有两个文件__init__.py__openerp__.py

dhl_module
          |-- controller
          |-- models
          |-- views
          |-- __init__.py
          |-- __openerp__.py

文件__openerp__.py 包含一个没有指定名称的字典。这个 dict 存储有关模块的信息。它看起来像这样:

# -*- coding: utf-8 -*-
{
    'name': "DHL connector",
    # used as subtitle
    'summary': "Configuration for DHL connector ",
    'description': """ DHL connector
    """,
    'author': "me",
    'website': "mysite.com",
    'category': 'Technical Settings',
    # Change the version every release for apps.
    'version': '0.0.1',
    # any module necessary for this one to work correctly
    'depends': [],
    # always loaded
    'data': ['views/dhl.xml', ],
    # only loaded in demonstration mode
    'demo': [],
    # only loaded in test
    'test': [],
    'installable': True,
    'application': True,
}

Odoo 或我如何从 __openerp__.py 模块访问此字典? dict 变量未分配给名称。怎么导入?

【问题讨论】:

  • 所以__openerp__.py 似乎根本不是一个有效的 Python 文件。
  • @linusg:它是有效的 Python,只是不会创建任何新名称。
  • @MartijnPieters 啊,谢谢你的信息!我查了一下,Python解释器什么也没做……

标签: python openerp odoo-8 odoo-9


【解决方案1】:

OpenERP 不必导入该模块来获取该字典。他们可以将文件作为文本读取,然后使用eval()评估内容:

>>> text = '''\
... # -*- coding: utf-8 -*-
... {
...     'name': "DHL connector",
...     # used as subtitle
...     'summary': "Configuration for DHL connector ",
...     'description': """ DHL connector
...     """,
...     'author': "me",
...     'website': "mysite.com",
...     'category': 'Technical Settings',
...     # Change the version every release for apps.
...     'version': '0.0.1',
...     # any module necessary for this one to work correctly
...     'depends': [],
...     # always loaded
...     'data': ['views/dhl.xml', ],
...     # only loaded in demonstration mode
...     'demo': [],
...     # only loaded in test
...     'test': [],
...     'installable': True,
...     'application': True,
... }
... '''
>>> eval(text)
{'website': 'mysite.com', 'description': ' DHL connector\n    ', 'demo': [], 'depends': [], 'data': ['views/dhl.xml'], 'category': 'Technical Settings', 'name': 'DHL connector', 'author': 'me', 'summary': 'Configuration for DHL connector ', 'application': True, 'version': '0.0.1', 'test': [], 'installable': True}

那是exactly what OpenERP does:

MANIFEST = '__openerp__.py'

# ...

terp_file = mod_path and opj(mod_path, MANIFEST) or False

# ...

f = tools.file_open(terp_file)
try:
    info.update(eval(f.read()))
finally:
    f.close()

【讨论】:

    猜你喜欢
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多