我怎样才能在线程中获得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 文件夹中即可完成这项工作
我正在尝试创建一个功能,以便在我的模型中为此向特定用户发送消息我编写了这段代码
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 文件夹中即可完成这项工作