在Odoo11(Odoo.sh)上使用ElementTree编写xml文件时出现“权限错误”(被拒绝)

时间:2018-08-10 16:25:06

标签: file-permissions odoo elementtree odoo-11

我收到以下错误。这与权限有关。当我通过操作调用自定义方法时,会发生错误。该自定义方法将使用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上实现,那么如何在本地安装上实现呢?我目前都有。

1 个答案:

答案 0 :(得分:0)

使用命令chmod 777 *,这将允许对您所有自定义模块的各种访问,并且如果您只想允许一个模块使用模块名而不是*,例如 chmod 777 module_name