Python 3.x 如何修复odoo中的AttributeError:环境?

Python 3.x 如何修复odoo中的AttributeError:环境?,python-3.x,environment,odoo-12,Python 3.x,Environment,Odoo 12,我创建了一个单独的线程,其中有一个odoo环境,当我在Skype中收到一条新消息时,我会排成一行,并尝试将它作为odoo中的消息发送给用户,但我收到了一个错误 import skpy import logging import threading import odoo DB_NAME = 'odootest' UID = odoo.SUPERUSER_ID _logger = logging.getLogger(__name__) registry = odoo.modules.reg

我创建了一个单独的线程,其中有一个odoo环境,当我在Skype中收到一条新消息时,我会排成一行,并尝试将它作为odoo中的消息发送给用户,但我收到了一个错误

import skpy
import logging
import threading
import odoo

DB_NAME = 'odootest'
UID = odoo.SUPERUSER_ID

_logger = logging.getLogger(__name__)


registry = odoo.modules.registry.Registry.new(DB_NAME)
CR = registry.cursor()
ENV = odoo.api.Environment(CR, UID, {})


class MySkype(skpy.SkypeEventLoop):

    def onEvent(self, event):
        if isinstance(event, skpy.SkypeNewMessageEvent):
            _logger.info('--------' * 5)
            _logger.warning(event)
            _logger.info('--------' * 5)

            message = ('New message from user {} at {}: \'{} \''.format(event.msg.userId,
                                                                     event.msg.time.strftime('%H:%M dd. %d.%m.%Y'),
                                                                     event.msg.content))

            _logger.info('--------' * 5)
            _logger.warning(message)
            _logger.info('--------' * 5)

            partner_id = ENV['res.users'].search([('id', '=', 2)]).partner_id.id

            _logger.info('--------' * 5)
            _logger.warning(partner_id)
            _logger.info('--------' * 5)

            ENV['mail.message'].create({'message_type': 'notification',
                                             'subtype': ENV.ref('mail.mt_comment').id,
                                             'body': message,
                                             'subject': 'Message subject',
                                             'partner_ids': [(4, partner_id), ],
                                             })
            _logger.info('--------' * 5)
            _logger.warning('send')
            _logger.info('--------' * 5)


sk = MySkype('+3767', '12qW', autoAck=True)
thread = threading.Thread(target=sk.loop)
thread.start()
控制台中

2019-02-21 08:45:33,569 3550 INFO ? odoo.addons.skype_bot.models.models: ---------------------------------------- 
2019-02-21 08:45:33,569 3550 WARNING ? odoo.addons.skype_bot.models.models: [SkypeNewMessageEvent]
Id: 1010
Type: NewMessage
Time: 2019-02-21 08:45:33
MsgId: 1550738733239 
2019-02-21 08:45:33,569 3550 INFO ? odoo.addons.skype_bot.models.models: ---------------------------------------- 
2019-02-21 08:45:33,570 3550 INFO ? odoo.addons.skype_bot.models.models: ---------------------------------------- 
2019-02-21 08:45:33,570 3550 WARNING ? odoo.addons.skype_bot.models.models: New message from user andreykychyc at 08:45 dd. 21.02.2019: '132123 ' 
2019-02-21 08:45:33,570 3550 INFO ? odoo.addons.skype_bot.models.models: ---------------------------------------- 
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/home/andrei/.virtualenvs/odoo-venv/lib/python3.6/site-packages/werkzeug/local.py", line 70, in __getattr__
    return self.__storage__[self.__ident_func__()][name]
KeyError: <greenlet.greenlet object at 0x7f6d76aed048>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/home/andrei/.virtualenvs/odoo-venv/lib/python3.6/site-packages/skpy/main.py", line 207, in loop
    self.cycle()
  File "/home/andrei/.virtualenvs/odoo-venv/lib/python3.6/site-packages/skpy/main.py", line 196, in cycle
    self.onEvent(event)
  File "/home/andrei/Projects/odoo/odoo/adoons_my/skype_bot/models/models.py", line 35, in onEvent
    partner_id = ENV['res.users'].search([('id', '=', 2)]).partner_id.id
  File "/home/andrei/Projects/odoo/odoo/odoo/models.py", line 1561, in search
    res = self._search(args, offset=offset, limit=limit, order=order, count=count)
  File "/home/andrei/Projects/odoo/odoo/odoo/addons/base/models/res_users.py", line 422, in _search
    access_rights_uid=access_rights_uid)
  File "/home/andrei/Projects/odoo/odoo/odoo/models.py", line 4055, in _search
    self.sudo(access_rights_uid or self._uid).check_access_rights('read')
  File "/home/andrei/Projects/odoo/odoo/odoo/models.py", line 4714, in sudo
    return self.with_env(self.env(user=user))
  File "/home/andrei/Projects/odoo/odoo/odoo/api.py", line 850, in __call__
    return Environment(cr, uid, context)
  File "/home/andrei/Projects/odoo/odoo/odoo/api.py", line 794, in __new__
    env, envs = None, cls.envs
  File "/home/andrei/Projects/odoo/odoo/odoo/tools/func.py", line 112, in __get__
    return self.fget.__get__(None, owner)()
  File "/home/andrei/Projects/odoo/odoo/odoo/api.py", line 767, in envs
    return cls._local.environments
  File "/home/andrei/.virtualenvs/odoo-venv/lib/python3.6/site-packages/werkzeug/local.py", line 72, in __getattr__
    raise AttributeError(name)
AttributeError: environments
2019-02-21 08:45:33569 3550信息?odoo.addons.skype\u bot.models.models:-------------------------------------
2019-02-21 08:45:33569 3550警告?odoo.addons.skype_bot.models.models:[SkypeNewMessageEvent]
身份证号码:1010
类型:NewMessage
时间:2019-02-2108:45:33
MsgId:1550738733239
2019-02-21 08:45:33569 3550信息?odoo.addons.skype\u bot.models.models:-------------------------------------
2019-02-21 08:45:335703550信息?odoo.addons.skype\u bot.models.models:-------------------------------------
2019-02-21 08:45:33570 3550警告?odoo.addons.skype_bot.models.models:用户andreykychyc于2019年2月21日08时45分发出的新消息:“132123”
2019-02-21 08:45:335703550信息?odoo.addons.skype\u bot.models.models:-------------------------------------
线程2中的异常:
回溯(最近一次呼叫最后一次):
文件“/home/andrei/.virtualenvs/odoo-venv/lib/python3.6/site-packages/werkzeug/local.py”,第70行,在__
返回self.\u存储\uuuu[self.\u ident\u func\uuuu()][name]
关键错误:
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.6/threading.py”,第916行,在内部引导中
self.run()
文件“/usr/lib/python3.6/threading.py”,第864行,运行中
自我目标(*自我参数,**自我参数)
文件“/home/andrei/.virtualenvs/odoo-venv/lib/python3.6/site-packages/skpy/main.py”,第207行,循环中
self.cycle()
文件“/home/andrei/.virtualenvs/odoo-venv/lib/python3.6/site-packages/skpy/main.py”,第196行,循环
self.onEvent(事件)
文件“/home/andrei/Projects/odoo/odoo/adoons\u my/skype\u bot/models/models.py”,第35行,在OneEvent中
partner_id=ENV['res.users'].search([('id','=',2)]).partner_id.id
文件“/home/andrei/Projects/odoo/odoo/odoo/models.py”,第1561行,搜索中
res=self.\u搜索(args,offset=offset,limit=limit,order=order,count=count)
文件“/home/andrei/Projects/odoo/odoo/addons/base/models/res_users.py”,第422行,在搜索中
访问权限(uid=access\u rights\u uid)
文件“/home/andrei/Projects/odoo/odoo/odoo/models.py”,第4055行,在搜索中
self.sudo(访问权限或self.uid)。检查访问权限(“读取”)
sudo中的文件“/home/andrei/Projects/odoo/odoo/odoo/models.py”,第4714行
返回self.with_env(self.env(user=user))
文件“/home/andrei/Projects/odoo/odoo/odoo/api.py”,第850行,在调用中__
返回环境(cr、uid、上下文)
文件“/home/andrei/Projects/odoo/odoo/odoo/api.py”,第794行,新__
环境,环境=无,cls.envs
文件“/home/andrei/Projects/odoo/odoo/odoo/tools/func.py”,第112行,在__
返回self.fget.\uuuu获取(无,所有者)()
文件“/home/andrei/Projects/odoo/odoo/odoo/api.py”,第767行,在envs中
返回cls.\u local.environment
文件“/home/andrei/.virtualenvs/odoo-venv/lib/python3.6/site-packages/werkzeug/local.py”,第72行,在__
提升属性错误(名称)
属性错误:环境

正如您从日志中看到的,生成了消息,但随后代码停止并发生错误。问题可能是什么,以及如何处理它

需要将
一起使用:

    _logger.info('--------' * 5)
    _logger.warning(message)
    _logger.info('--------' * 5)

    with odoo.api.Environment.manage():
        try:

            partner_id = ENV['res.users'].search([('id', '=', 2)]).partner_id.id

            _logger.info('--------' * 5)
            _logger.warning(partner_id)
            _logger.info('--------' * 5)

            ENV['mail.message'].create({'message_type': 'notification',
                                             'subtype': ENV.ref('mail.mt_comment').id,
                                             'body': message,
                                             'subject': 'Message subject',
                                             'partner_ids': [(4, partner_id), ],
                                             })
        finally:
            ENV.cr.commit()

    _logger.info('--------' * 5)
    _logger.warning('send')
    _logger.info('--------' * 5)