45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from odoo import fields, models
|
|
|
|
|
|
class TierChannelMixin(models.AbstractModel):
|
|
_name = 'tier.channel.mixin'
|
|
_description = 'Tier Channel Mixin'
|
|
_abstract = True
|
|
|
|
credential_scope = fields.Selection(
|
|
selection=[('company', 'Company'), ('user', 'User')],
|
|
string='Credential Scope',
|
|
default='company',
|
|
required=True,
|
|
)
|
|
|
|
def channel_authenticate(self):
|
|
"""Authenticate with the channel. Returns True by default (e.g. Email needs no auth)."""
|
|
return True
|
|
|
|
def channel_send_message(self, message):
|
|
"""Send a message through this channel. Must be overridden by subclasses."""
|
|
raise NotImplementedError(
|
|
f"channel_send_message() is not implemented for {self._name}"
|
|
)
|
|
|
|
def channel_receive_message(self, payload):
|
|
"""Receive a message from this channel. Must be overridden by subclasses."""
|
|
raise NotImplementedError(
|
|
f"channel_receive_message() is not implemented for {self._name}"
|
|
)
|
|
|
|
def _get_credentials(self):
|
|
"""Return credentials based on credential_scope."""
|
|
if self.credential_scope == 'user':
|
|
return self._get_user_credentials(self.env.user)
|
|
return self._get_company_credentials(self.env.company)
|
|
|
|
def _get_user_credentials(self, user):
|
|
"""Return user-level credentials. Override in subclasses."""
|
|
return {}
|
|
|
|
def _get_company_credentials(self, company):
|
|
"""Return company-level credentials. Override in subclasses."""
|
|
return {}
|