diff --git a/base_changeset/models/base.py b/base_changeset/models/base.py index 923e89810..7680b986b 100644 --- a/base_changeset/models/base.py +++ b/base_changeset/models/base.py @@ -88,10 +88,11 @@ class Base(models.AbstractModel): { field_name: value for field_name, value in vals.items() - if field_name in self._fields and - self._fields[field_name].required + if field_name in self._fields + and self._fields[field_name].required and isinstance( - self._fields[field_name], fields.Many2one, + self._fields[field_name], + fields.Many2one, ) }, this, @@ -99,13 +100,12 @@ class Base(models.AbstractModel): vals, ) local_vals = { - key: value - for key, value in local_vals.items() - if vals[key] != value + key: value for key, value in local_vals.items() if vals[key] != value } if local_vals: this.with_context( - __no_changeset=disable_changeset, tracking_disable=True, + __no_changeset=disable_changeset, + tracking_disable=True, ).write(local_vals) return result diff --git a/base_changeset/models/changeset_field_rule.py b/base_changeset/models/changeset_field_rule.py index f3b308abf..87b224213 100644 --- a/base_changeset/models/changeset_field_rule.py +++ b/base_changeset/models/changeset_field_rule.py @@ -44,11 +44,14 @@ class ChangesetFieldRule(models.Model): "Available variables: object, user", ) validator_group_ids = fields.Many2many( - 'res.groups', 'changeset_field_rule_validator_group_rel', - string='Validator Groups', default=lambda self: self.env.ref( - 'base_changeset.group_changeset_user', + "res.groups", + "changeset_field_rule_validator_group_rel", + string="Validator Groups", + default=lambda self: self.env.ref( + "base_changeset.group_changeset_user", raise_if_not_found=False, - ) or self.env['res.groups'], + ) + or self.env["res.groups"], ) def init(self): @@ -89,7 +92,7 @@ class ChangesetFieldRule(models.Model): def _selection_action(self): return [("auto", "Auto"), ("validate", "Validate"), ("never", "Never")] - @api.constrains('expression') + @api.constrains("expression") def _check_expression(self): for this in self: this._evaluate_expression(self.env[this.model_id.model].new({})) @@ -156,7 +159,7 @@ class ChangesetFieldRule(models.Model): return rules def _evaluate_expression(self, record): - """ Evaluate expression if set """ + """Evaluate expression if set""" self.ensure_one() return not self.expression or tools.safe_eval.safe_eval( self.expression, {"object": record, "user": self.env.user} diff --git a/base_changeset/models/record_changeset.py b/base_changeset/models/record_changeset.py index 7ff82e8a2..fd520c7eb 100644 --- a/base_changeset/models/record_changeset.py +++ b/base_changeset/models/record_changeset.py @@ -144,9 +144,10 @@ class RecordChangeset(models.Model): # overwrite with null value for new records write_values[field] = ( # but create some default for required text fields - record._fields[field].required and - record._fields[field].type in ('char', 'text') and - '/' or record._fields[field].null(record) + record._fields[field].required + and record._fields[field].type in ("char", "text") + and "/" + or record._fields[field].null(record) ) changes.append(change) if changes: diff --git a/base_changeset/models/record_changeset_change.py b/base_changeset/models/record_changeset_change.py index a5e46ea91..4d8cc6682 100644 --- a/base_changeset/models/record_changeset_change.py +++ b/base_changeset/models/record_changeset_change.py @@ -225,8 +225,7 @@ class RecordChangesetChange(models.Model): changes_ok = self.browse() key = attrgetter("changeset_id") for changeset, changes in groupby( - self.with_context(__no_changeset=disable_changeset).sorted(key=key), - key=key + self.with_context(__no_changeset=disable_changeset).sorted(key=key), key=key ): values = {} for change in changes: @@ -247,9 +246,9 @@ class RecordChangesetChange(models.Model): self._check_previous_changesets(changeset) - changeset.record_id.with_context( - __no_changeset=disable_changeset - ).write(values) + changeset.record_id.with_context(__no_changeset=disable_changeset).write( + values + ) changes_ok._finalize_change_approval() diff --git a/base_changeset/security/rules.xml b/base_changeset/security/rules.xml index fd9037712..0c629fb53 100644 --- a/base_changeset/security/rules.xml +++ b/base_changeset/security/rules.xml @@ -26,6 +26,8 @@ Allow changeset change access for changeset users - [('rule_id.validator_group_ids', 'in', user.groups_id.ids)] + [('rule_id.validator_group_ids', 'in', user.groups_id.ids)] diff --git a/base_changeset/tests/test_changeset_field_type.py b/base_changeset/tests/test_changeset_field_type.py index 44db522f8..75df21ff4 100644 --- a/base_changeset/tests/test_changeset_field_type.py +++ b/base_changeset/tests/test_changeset_field_type.py @@ -5,8 +5,8 @@ from odoo import fields from odoo.tests.common import TransactionCase -from .common import ChangesetTestCommon from ..models.base import disable_changeset +from .common import ChangesetTestCommon class TestChangesetFieldType(ChangesetTestCommon, TransactionCase): diff --git a/base_changeset/tests/test_changeset_flow.py b/base_changeset/tests/test_changeset_flow.py index e10f5ca39..d84235b70 100644 --- a/base_changeset/tests/test_changeset_flow.py +++ b/base_changeset/tests/test_changeset_flow.py @@ -8,8 +8,8 @@ from odoo import fields from odoo.exceptions import UserError from odoo.tests.common import TransactionCase -from .common import ChangesetTestCommon from ..models.base import disable_changeset +from .common import ChangesetTestCommon class TestChangesetFlow(ChangesetTestCommon, TransactionCase): @@ -76,7 +76,7 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase): self.assertEqual(self.partner.street2, "street2 X") def test_create_new_changeset(self): - """ Create a new partner with a changeset """ + """Create a new partner with a changeset""" new = ( self.env["res.partner"] .with_context( @@ -120,9 +120,9 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase): """No changeset created when both sides have an empty value""" # we have to ensure that even if we write '' to a False field, we won't # write a changeset - self.partner.with_context( - __no_changeset=disable_changeset - ).write({"street": False}) + self.partner.with_context(__no_changeset=disable_changeset).write( + {"street": False} + ) self.partner._compute_changeset_ids() self.partner._compute_count_pending_changesets() self.assertEqual(self.partner.count_pending_changesets, 0) @@ -409,15 +409,17 @@ class TestChangesetFlow(ChangesetTestCommon, TransactionCase): self.assertIn(bank.acc_number, bank.changeset_ids.name_get()[0][1]) def test_new_changeset_expression(self): - """ Test that rules can be conditional """ - self.env["changeset.field.rule"].search([ - ("field_id", "=", self.field_street.id), - ]).expression = "object.street != 'street X'" + """Test that rules can be conditional""" + self.env["changeset.field.rule"].search( + [ + ("field_id", "=", self.field_street.id), + ] + ).expression = "object.street != 'street X'" self.partner.street = "street Y" self.partner.refresh() - self.assertEqual(self.partner.street, 'street Y') + self.assertEqual(self.partner.street, "street Y") self.assertFalse(self.partner.changeset_ids) self.partner.street = "street Z" self.partner.refresh() self.assertTrue(self.partner.changeset_ids) - self.assertEqual(self.partner.street, 'street Y') + self.assertEqual(self.partner.street, "street Y") diff --git a/base_changeset/tests/test_changeset_origin.py b/base_changeset/tests/test_changeset_origin.py index 4bdb38128..a1f7c91ff 100644 --- a/base_changeset/tests/test_changeset_origin.py +++ b/base_changeset/tests/test_changeset_origin.py @@ -4,8 +4,8 @@ from odoo.tests.common import Form, TransactionCase -from .common import ChangesetTestCommon from ..models.base import disable_changeset +from .common import ChangesetTestCommon class TestChangesetOrigin(ChangesetTestCommon, TransactionCase): @@ -45,18 +45,18 @@ class TestChangesetOrigin(ChangesetTestCommon, TransactionCase): self.assertEqual(self.partner.name, "X") self.assertEqual(change.origin_value_char, "X") self.assertEqual(change.origin_value_display, "X") - with Form(self.partner.with_context( - __no_changeset=disable_changeset - )) as partner_form: + with Form( + self.partner.with_context(__no_changeset=disable_changeset) + ) as partner_form: partner_form.name = "A" self.assertEqual(change.origin_value_char, "A") self.assertEqual(change.origin_value_display, "A") change.apply() self.assertEqual(change.origin_value_char, "A") self.assertEqual(change.origin_value_display, "A") - with Form(self.partner.with_context( - __no_changeset=disable_changeset - )) as partner_form: + with Form( + self.partner.with_context(__no_changeset=disable_changeset) + ) as partner_form: partner_form.name = "B" self.assertEqual(change.origin_value_char, "A") self.assertEqual(change.origin_value_display, "A") @@ -75,18 +75,18 @@ class TestChangesetOrigin(ChangesetTestCommon, TransactionCase): self.assertEqual(self.partner.name, "X") self.assertEqual(change.origin_value_char, "X") self.assertEqual(change.origin_value_display, "X") - with Form(self.partner.with_context( - __no_changeset=disable_changeset - )) as partner_form: + with Form( + self.partner.with_context(__no_changeset=disable_changeset) + ) as partner_form: partner_form.name = "A" self.assertEqual(change.origin_value_char, "A") self.assertEqual(change.origin_value_display, "A") change.cancel() self.assertEqual(change.origin_value_char, "A") self.assertEqual(change.origin_value_display, "A") - with Form(self.partner.with_context( - __no_changeset=disable_changeset - )) as partner_form: + with Form( + self.partner.with_context(__no_changeset=disable_changeset) + ) as partner_form: partner_form.name = "B" self.assertEqual(change.origin_value_char, "A") self.assertEqual(change.origin_value_display, "A") @@ -101,16 +101,16 @@ class TestChangesetOrigin(ChangesetTestCommon, TransactionCase): change = changeset.change_ids self.assertEqual(self.partner.name, "X") self.assertFalse(change.old_value_char) - with Form(self.partner.with_context( - __no_changeset=disable_changeset - )) as partner_form: + with Form( + self.partner.with_context(__no_changeset=disable_changeset) + ) as partner_form: partner_form.name = "A" self.assertFalse(change.old_value_char) change.apply() self.assertEqual(change.old_value_char, "A") - with Form(self.partner.with_context( - __no_changeset=disable_changeset - )) as partner_form: + with Form( + self.partner.with_context(__no_changeset=disable_changeset) + ) as partner_form: partner_form.name = "B" self.assertEqual(change.old_value_char, "A") self.assertEqual(self.partner.count_pending_changesets, 0) @@ -124,16 +124,16 @@ class TestChangesetOrigin(ChangesetTestCommon, TransactionCase): change = changeset.change_ids self.assertEqual(self.partner.name, "X") self.assertFalse(change.old_value_char) - with Form(self.partner.with_context( - __no_changeset=disable_changeset - )) as partner_form: + with Form( + self.partner.with_context(__no_changeset=disable_changeset) + ) as partner_form: partner_form.name = "A" self.assertFalse(change.old_value_char) change.cancel() self.assertEqual(change.old_value_char, "A") - with Form(self.partner.with_context( - __no_changeset=disable_changeset - )) as partner_form: + with Form( + self.partner.with_context(__no_changeset=disable_changeset) + ) as partner_form: partner_form.name = "B" self.assertEqual(change.old_value_char, "A") self.assertEqual(self.partner.count_pending_changesets, 0) diff --git a/base_changeset/tests/test_changeset_security.py b/base_changeset/tests/test_changeset_security.py index 90d05686d..5bb571ea7 100644 --- a/base_changeset/tests/test_changeset_security.py +++ b/base_changeset/tests/test_changeset_security.py @@ -7,27 +7,31 @@ from .common import ChangesetTestCommon class TestChangesetFlow(ChangesetTestCommon, TransactionCase): - """ Check that changesets don't leak information """ + """Check that changesets don't leak information""" def setUp(self): super().setUp() - self.env['changeset.field.rule'].search([]).unlink() - self.rule = self.env['changeset.field.rule'].create({ - 'model_id': self.env.ref('base.model_ir_config_parameter').id, - 'field_id': self.env.ref('base.field_ir_config_parameter__key').id, - 'action': 'auto', - }) + self.env["changeset.field.rule"].search([]).unlink() + self.rule = self.env["changeset.field.rule"].create( + { + "model_id": self.env.ref("base.model_ir_config_parameter").id, + "field_id": self.env.ref("base.field_ir_config_parameter__key").id, + "action": "auto", + } + ) def test_change_unprivileged_user(self): """ Check that unprivileged users can't see changesets they didn't create """ - user = self.env.ref('base.user_demo') - self.env['ir.config_parameter'].with_context( + user = self.env.ref("base.user_demo") + self.env["ir.config_parameter"].with_context( test_record_changeset=True, - ).set_param('hello', 'world') - changeset = self.env['record.changeset.change'].search([ - ('rule_id', '=', self.rule.id), - ]) + ).set_param("hello", "world") + changeset = self.env["record.changeset.change"].search( + [ + ("rule_id", "=", self.rule.id), + ] + ) self.assertTrue(changeset) - self.assertFalse(changeset.sudo(user).search([('id', '=', changeset.id)])) + self.assertFalse(changeset.sudo(user).search([("id", "=", changeset.id)]))