[IMP] various: implement _neutralize method

As an overridable _neutralize model method was added in a previous
commit, the method is now implemented for various models.

closes odoo/odoo#67825

Related: odoo/enterprise#19042
Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
This commit is contained in:
Christophe Monniez
2022-02-01 09:54:08 +00:00
parent 4fc7b9e329
commit e34430c822
13 changed files with 124 additions and 1 deletions
@@ -191,3 +191,13 @@ class AccountEdiProxyClientUser(models.Model):
)
f = Fernet(key)
return f.decrypt(base64.b64decode(data))
def _neutralize(self):
super()._neutralize()
self.flush()
self.invalidate_cache()
self.env.cr.execute("""
INSERT INTO ir_config_parameter(key, value)
VALUES ('account_edi_proxy_client.demo', true)
ON CONFLICT (key) DO UPDATE SET value = true
""")
+6 -1
View File
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
@@ -21,3 +20,9 @@ class AuthOAuthProvider(models.Model):
css_class = fields.Char(string='CSS class', default='fa fa-fw fa-sign-in text-primary')
body = fields.Char(required=True, help='Link text in Login Dialog', translate=True)
sequence = fields.Integer(default=10)
def _neutralize(self):
super()._neutralize()
self.flush()
self.invalidate_cache()
self.env.cr.execute("UPDATE auth_oauth_provider SET enabled = false")
@@ -358,3 +358,16 @@ class DeliveryCarrier(models.Model):
def _product_price_to_company_currency(self, quantity, product, company):
return company.currency_id._convert(quantity * product.standard_price, product.currency_id, company, fields.Date.today())
# -------------------------- #
# neutralize #
# -------------------------- #
def _neutralize(self):
super()._neutralize()
self.flush()
self.invalidate_cache()
self.env.cr.execute("""
UPDATE delivery_carrier
SET prod_environment = false, active = false
""")
@@ -76,3 +76,9 @@ class TestPacking(TestPackingCommon):
# default weight was set.
pack_wiz = self.env['choose.delivery.package'].with_context(pack_action_ctx).create({})
self.assertEqual(pack_wiz.shipping_weight, 13.5)
def test_delivery_carrier_neutralize(self):
""" ensure that devlivery carriers can be nautralized """
self.assertTrue(self.test_carrier.active)
self.env['delivery.carrier']._neutralize()
self.assertFalse(self.test_carrier.active, "Delivery Carrier was not neutralized")
@@ -42,3 +42,9 @@ class ResCompany(models.Model):
)
else:
company.l10n_es_edi_certificate_id = False
def _neutralize(self):
super()._neutralize()
self.flush()
self.invalidate_cache()
self.env.cr.execute("UPDATE res_company SET l10n_es_edi_test_env = true")
+1
View File
@@ -2,3 +2,4 @@
from . import test_edi_xml
from . import test_edi_web_services
from . import test_neutralize
@@ -0,0 +1,15 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests.common import tagged, TransactionCase
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestL10nEsEdiNeutralize(TransactionCase):
def test_l10n_es_edi_neutralize(self):
ar_company = self.env['res.company'].create({
'name': 'Test ES Company',
'l10n_es_edi_test_env': False,
})
self.env['res.company']._neutralize()
self.assertEqual(ar_company.l10n_es_edi_test_env, True)
+10
View File
@@ -338,3 +338,13 @@ class MailTemplate(models.Model):
if force_send:
mail.send(raise_exception=raise_exception)
return mail.id # TDE CLEANME: return mail + api.returns ?
# ------------------------------------------------------------
# neutralize
# ------------------------------------------------------------
def _neutralize(self):
super()._neutralize()
self.flush()
self.invalidate_cache()
self.env.cr.execute("UPDATE mail_template SET mail_server_id=NULL")
+16
View File
@@ -463,3 +463,19 @@ class TestMailRender(common.MailCommon):
self.assertEqual(result, '''<div style="display:none;font-size:1px;height:0px;width:0px;opacity:0;">
foo<t t-out="&#34;false&#34; if 1 &gt; 2 else &#34;true&#34;"/>bar
</div>body''')
def test_mail_template_neutralize(self):
""" ensure mail templates can be neutralized """
fake_mail_server = self.env['ir.mail_server'].create({
'name': "fake test email server",
'smtp_host': "mail.example.com",
'smtp_port': 15626,
})
self.test_template.mail_server_id = fake_mail_server
self.env['mail.template']._neutralize()
self.assertFalse(self.test_template.mail_server_id)
# bonus test mail server neutralize too
self.assertTrue(fake_mail_server.active)
self.env['ir.mail_server']._neutralize()
self.assertFalse(fake_mail_server.active)
+9
View File
@@ -1758,3 +1758,12 @@ class Website(models.Model):
for word in re.findall(match_pattern, value):
if word[0] == search[0]:
yield word.lower()
# ----------------------------------------------------------
# ORM overrides
# ----------------------------------------------------------
def _neutralize(self):
super()._neutralize()
self.flush()
self.invalidate_cache()
self.env.cr.execute("UPDATE website SET domain=NULL")
+13
View File
@@ -658,6 +658,19 @@ class IrActionsServer(models.Model):
)
return res or False
def _neutralize(self):
# In some cases, cron neutralization is not enough as modifying records
# like `fetchmail.server`, `calendar.alarm` and `base.automation` will
# re-enable their cron jobs as a side-effect.
super()._neutralize()
self.flush()
self.invalidate_cache()
self.env.cr.execute("""
UPDATE ir_act_server
SET code = '#' || REPLACE(code, E'\n', E'\n#')
WHERE usage = 'ir_cron' AND state = 'code'
""")
class IrServerObjectLines(models.Model):
_name = 'ir.server.object.lines'
+13
View File
@@ -465,6 +465,19 @@ class ir_cron(models.Model):
cr.execute('NOTIFY cron_trigger, %s', [self.env.cr.dbname])
_logger.debug("cron workers notified")
def _neutralize(self):
super()._neutralize()
self.flush()
self.invalidate_cache()
self.env.cr.execute("""
UPDATE ir_cron
SET active = false
WHERE id NOT IN (
SELECT res_id FROM ir_model_data
WHERE model='ir.cron' AND name = 'autovacuum_job'
)
""")
class ir_cron_trigger(models.Model):
_name = 'ir.cron.trigger'
@@ -712,3 +712,9 @@ class IrMailServer(models.Model):
outgoing mail server.
"""
return getattr(threading.currentThread(), 'testing', False) or self.env.registry.in_test_mode()
def _neutralize(self):
super()._neutralize()
self.flush()
self.invalidate_cache()
self.env.cr.execute("UPDATE ir_mail_server SET active = false")