我怎样才能在线程中获得odoo环境

How can i get odoo environment in thread

我正在尝试创建一个功能,以便在我的模型中为此向特定用户发送消息我编写了这段代码

class SkypeBot(models.Model):
    _name = 'my.skype'
    _inherit = ['mail.thread', 'mail.activity', 'res.users']
    _description = 'My Skype'


    skype_login = fields.Char('Your skype Login')
    skype_password = fields.Char('Your skype password')
    skype_message = fields.Char(store=True)

    @api.multi
    def msg(self, message):

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

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

        self.env['mail.message'].create({'message_type': 'notification',
                                         'subtype': self.env.ref('mail.mt_comment').id,  # subject type
                                         'body': message,
                                         'subject': 'Message subject',
                                         'partner_ids': [(4, partner_id), ],
                                         # partner to whom you send notification
                                         })

我需要将 odoo 环境连接到我在此处调用的线程,以便我可以从 SkypeBot class 冷静地调用 msg 方法并向用户发送消息。正确的做法

class MySkype(skpy.SkypeEventLoop):
    def onEvent(self, event):
        if isinstance(event, skpy.SkypeNewMessageEvent):  

            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(event)
            _logger.info('--------' * 5)
            _logger.warning(message)
            _logger.info('--------' * 5)

            sbot = skype_model.SkypeBot()
            sbot.msg(message)

from skpy import Skype

sk = MySkype('+375', '1239qW', autoAck=True)
thread = threading.Thread(target=sk.loop)
thread.start()

你可以试试这个代码

import odoo
DB_NAME = 'YOURDBNAME'
ODOO_CONF = '/opt/odoo/configurations/odoo.conf YOUR CONF PATH'
UID = odoo.SUPERUSER_ID
odoo.tools.config.parse_config(['--config=%s' % ODOO_CONF])
with odoo.api.Environment.manage():
     registry = odoo.modules.registry.RegistryManager.get(DB_NAME)
     with registry.cursor() as cr:
          # Load our context and environment given the database cursor and UID
          ctx = odoo.api.Environment(cr, UID, {})['res.users'].context_get()
          env = odoo.api.Environment(cr, UID, ctx)
          # INSERT YOUR ENV 
          message = env['my.skype'].msg()
          try:
              cr.commit()
          except Exception:
              cr.rollback()
              raise

但是你必须正确安装 odoo(dist-package 中的 odoo)或者这个导入 odoo 将不会被 python 检测到(错误模块名为 odoo 未找到),如果导入 odoo 没有被 [=15 检测到=] 只需将您的代码放在您的 odoo 文件夹中即可完成这项工作