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