首页 > 解决方案 > 在 Odoo11 (Odoo.sh) 上使用 ElementTree 写入 xml 文件时出现“权限错误”(被拒绝)

问题描述

我收到以下错误。这是关于权限的。当我通过操作调用自定义方法时会发生错误。自定义方法将使用 ElementTree 库创建一个 .xml。

该方法中的代码大约有 1500 多行,因此将其放在这里并不是最佳选择。但我相信尝试以下方法时该方法被拒绝

tree.write("20100066603-01-F001-1.xml", "ISO-8859-1", True)

这是错误。Odoo 回归

Error:
Odoo Server Error
Traceback (most recent call last):
  File "/usr/lib/python3.6/xml/etree/ElementTree.py", line 789, in _get_writer
    write = file_or_filename.write
AttributeError: 'str' object has no attribute 'write'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/tools/safe_eval.py", line 350, in safe_eval
    return unsafe_eval(c, globals_dict, locals_dict)
  File "", line 2, in <module>
  File "/usr/lib/python3/dist-packages/odoo/addons/myModule/models/models.py", line 1141, in x_nc_create_xml
    tree.write("20100066603-01-F001-1.xml", "ISO-8859-1", True)
  File "/usr/lib/python3.6/xml/etree/ElementTree.py", line 759, in write
    with _get_writer(file_or_filename, enc_lower) as write:
  File "/usr/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)
  File "/usr/lib/python3.6/xml/etree/ElementTree.py", line 796, in _get_writer
    errors="xmlcharrefreplace")
PermissionError: [Errno 13] Permission denied: '20100066603-01-F001-1.xml'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 650, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 310, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/usr/lib/python3/dist-packages/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 692, in dispatch
    result = self._call_function(**self.params)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 342, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 335, in checked_call
    result = self.endpoint(*a, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 936, in __call__
    return self.method(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 515, in response_wrap
    response = f(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1231, in run
    result = request.env['ir.actions.server'].browse([action_id]).run()
  File "/usr/lib/python3/dist-packages/odoo/addons/base/ir/ir_actions.py", line 554, in run
    res = func(action, eval_context=eval_context)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/ir/ir_actions.py", line 430, in run_action_code_multi
    safe_eval(action.sudo().code.strip(), eval_context, mode="exec", nocopy=True)  # nocopy allows to return 'action'
  File "/usr/lib/python3/dist-packages/odoo/tools/safe_eval.py", line 373, in safe_eval
    pycompat.reraise(ValueError, ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr)), exc_info[2])
  File "/usr/lib/python3/dist-packages/odoo/tools/pycompat.py", line 86, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/odoo/tools/safe_eval.py", line 350, in safe_eval
    return unsafe_eval(c, globals_dict, locals_dict)
  File "", line 2, in <module>
  File "/usr/lib/python3/dist-packages/odoo/addons/myModule/models/models.py", line 1141, in x_nc_create_xml
    tree.write("20100066603-01-F001-1.xml", "ISO-8859-1", True)
  File "/usr/lib/python3.6/xml/etree/ElementTree.py", line 759, in write
    with _get_writer(file_or_filename, enc_lower) as write:
  File "/usr/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)
  File "/usr/lib/python3.6/xml/etree/ElementTree.py", line 796, in _get_writer
    errors="xmlcharrefreplace")
ValueError: <class 'PermissionError'>: "13
Permission denied" while evaluating
'if records: \n                   action = records.x_nc_create_xml()'

我已经在 PyCharm 上尝试过相同的代码并且它有效。所以我相信,这是关于 Odoo 权限的问题。 如何为我的模块设置创建、编辑和删除它创建的文件的权限?

PD:如果这不太可能在 Odoo.sh 上实现,那么我该如何在本地安装上做到这一点?我目前两者都有。

标签: file-permissionsodooelementtreeodoo-11

解决方案


使用命令chmod 777 *这将允许对所有自定义模块进行各种访问,如果您只想授予一个模块权限,请使用模块名称而不是*这样chmod 777 module_name


推荐阅读