server-env/server_environment_iap/models/iap_account.py

71 lines
2.6 KiB
Python

# Copyright 2021 Camptocamp SA <https://www.camptocamp.com/>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from odoo import _, api, fields, models
from odoo.exceptions import UserError
from odoo.addons.server_environment.server_env import serv_config
SECTION = "iap.account"
class IapAccount(models.Model):
_inherit = "iap.account"
is_environment = fields.Boolean(
string="Defined by environment",
compute="_compute_is_environment",
help="If check, the value in the database will be ignored"
" and alternatively, the system will use the service name defined"
" in your odoo.cfg environment file.",
)
def _compute_is_environment(self):
for account in self:
account.is_environment = serv_config.has_option(
SECTION, account.service_name
)
@api.model
def get(self, service_name, force_create=True):
account = super().get(service_name, force_create=True)
if serv_config.has_option(SECTION, service_name):
cvalue = serv_config.get(SECTION, service_name)
if not cvalue:
# if service name is empty it's probably not a production instance,
# so we need to remove it from database
account.unlink()
raise UserError(
_("Service name %s is empty in " "server_environment_file")
% (service_name,)
)
if cvalue != account.account_token:
# we write in db on first access;
# should we have preloaded values in database at,
# server startup, modules loading their parameters
# from data files would break on unique key error.
account.account_token = cvalue
return account
@api.model
def create(self, vals):
service_name = vals.get("service_name")
if serv_config.has_option(SECTION, service_name):
# enforce account_token from config file
vals = dict(vals, account_token=serv_config.get(SECTION, service_name))
return super().create(vals)
def write(self, vals):
for rec in self:
service_name = vals.get("service_name") or rec.service_name
if serv_config.has_option(SECTION, service_name):
# enforce account_token from config file
newvals = dict(
vals, account_token=serv_config.get(SECTION, service_name)
)
else:
newvals = vals
super().write(newvals)
return True