[IMP] base_changeset: black, isort, prettier
parent
47fbaeda11
commit
d77f2a803e
|
@ -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
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
<field name="name">Allow changeset change access for changeset users</field>
|
||||
<field name="model_id" ref="model_record_changeset_change" />
|
||||
<field name="groups" eval="[(4, ref('group_changeset_user'))]" />
|
||||
<field name="domain_force">[('rule_id.validator_group_ids', 'in', user.groups_id.ids)]</field>
|
||||
<field
|
||||
name="domain_force"
|
||||
>[('rule_id.validator_group_ids', 'in', user.groups_id.ids)]</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)]))
|
||||
|
|
Loading…
Reference in New Issue