Change _changed_values and _save_values properties to method
Closes #13317
This commit is contained in:
@@ -2334,7 +2334,7 @@ class ModifyHeader(Wizard):
|
||||
Line = pool.get('purchase.line')
|
||||
|
||||
purchase = self.get_purchase()
|
||||
values = self.start._save_values
|
||||
values = self.start._save_values()
|
||||
self.model.write([purchase], values)
|
||||
self.model.log([purchase], 'write', ','.join(sorted(values.keys())))
|
||||
|
||||
|
||||
@@ -830,7 +830,7 @@ class Inspect(Wizard):
|
||||
pool = Pool()
|
||||
Inspection = pool.get('quality.inspection')
|
||||
inspection = self.store.inspections[0]
|
||||
Inspection.write([inspection], self.inspection._save_values)
|
||||
Inspection.write([inspection], self.inspection._save_values())
|
||||
inspection.process()
|
||||
return 'next_'
|
||||
|
||||
|
||||
@@ -2411,7 +2411,7 @@ class ModifyHeader(Wizard):
|
||||
Line = pool.get('sale.line')
|
||||
|
||||
sale = self.get_sale()
|
||||
values = self.start._save_values
|
||||
values = self.start._save_values()
|
||||
self.model.write([sale], values)
|
||||
self.model.log([sale], 'write', ','.join(sorted(values.keys())))
|
||||
|
||||
|
||||
@@ -566,7 +566,7 @@ class Shop(metaclass=PoolMeta):
|
||||
shop = sale.web_shop
|
||||
with shop.shopify_session():
|
||||
sale = Sale.get_from_shopify(shop, order, sale=sale)
|
||||
if sale._changed_values:
|
||||
if sale._changed_values():
|
||||
sale.untaxed_amount_cache = None
|
||||
sale.tax_amount_cache = None
|
||||
sale.total_amount_cache = None
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
* Change _changed_values and _save_values properties to method
|
||||
* Add configuration for report convert command
|
||||
* Use process pool to run cron
|
||||
* Lock only running cron record
|
||||
|
||||
@@ -216,6 +216,31 @@ Class methods:
|
||||
|
||||
Instance methods:
|
||||
|
||||
.. method:: ModelView._changed_values()
|
||||
|
||||
Return the values changed since the instantiation.
|
||||
By default, the value of a field is its internal representation except:
|
||||
|
||||
- for :class:`~trytond.model.fields.Many2One` and
|
||||
:class:`~trytond.model.fields.One2One` field: the
|
||||
:attr:`~trytond.model.Model.id`.
|
||||
|
||||
- for :class:`~trytond.model.fields.Reference` field: the string '<model
|
||||
name>,<record id>'.
|
||||
|
||||
- for :class:`~trytond.model.fields.One2Many` and
|
||||
:class:`~trytond.model.fields.Many2Many`: a dictionary composed of
|
||||
three keys:
|
||||
|
||||
- ``add``: a list of tuple, the first element is the index where the
|
||||
new line is added, the second element is default values.
|
||||
|
||||
- ``update``: a list of dictionary of changed values including the
|
||||
``id``.
|
||||
|
||||
- ``remove``: a list of ids.
|
||||
|
||||
|
||||
.. method:: ModelView.on_change(fieldnames)
|
||||
|
||||
Return the list of changes by calling ``on_change`` method of each field.
|
||||
@@ -523,6 +548,11 @@ Dual methods:
|
||||
|
||||
Instance methods:
|
||||
|
||||
.. method:: ModelStorage._save_values()
|
||||
|
||||
Returns the modified values from the saved one, which can be used with
|
||||
:meth:`~ModelStorage.create` or :meth:`~ModelStorage.write`.
|
||||
|
||||
.. method:: ModelStorage.resources()
|
||||
|
||||
Return a dictionary with the number of attachments (``attachment_count``),
|
||||
|
||||
@@ -192,7 +192,7 @@ def instantiate_context(field, record):
|
||||
|
||||
|
||||
def on_change_result(record):
|
||||
return record._changed_values
|
||||
return record._changed_values()
|
||||
|
||||
|
||||
def on_change_with_result(fieldname):
|
||||
@@ -201,7 +201,7 @@ def on_change_with_result(fieldname):
|
||||
def wrapper(self, *args, **kwargs):
|
||||
value = func(self, *args, **kwargs)
|
||||
setattr(self, fieldname, value)
|
||||
return self._changed_values
|
||||
return self._changed_values()
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
@@ -1881,7 +1881,6 @@ class ModelStorage(Model):
|
||||
**{k: v for k, v in data.items() if k not in to_delete})
|
||||
return value
|
||||
|
||||
@property
|
||||
def _save_values(self):
|
||||
values = {}
|
||||
if not self._values:
|
||||
@@ -1923,13 +1922,13 @@ class ModelStorage(Model):
|
||||
t_values = None
|
||||
try:
|
||||
if target.id is None or target.id < 0:
|
||||
to_create.append(target._save_values)
|
||||
to_create.append(target._save_values())
|
||||
else:
|
||||
if target.id in previous:
|
||||
previous.remove(target.id)
|
||||
else:
|
||||
to_add.append(target.id)
|
||||
target_values = target._save_values
|
||||
target_values = target._save_values()
|
||||
if target_values:
|
||||
to_write.append(
|
||||
('write', [target.id], target_values))
|
||||
@@ -1987,7 +1986,7 @@ class ModelStorage(Model):
|
||||
continue
|
||||
while True:
|
||||
try:
|
||||
save_values[record] = record._save_values
|
||||
save_values[record] = record._save_values()
|
||||
break
|
||||
except _UnsavedRecordError as e:
|
||||
warnings.warn(
|
||||
|
||||
@@ -840,20 +840,7 @@ class ModelView(Model):
|
||||
for r in result]
|
||||
return result
|
||||
|
||||
@property
|
||||
def _changed_values(self):
|
||||
"""Return the values changed since the instantiation.
|
||||
By default, the value of a field is its internal representation except:
|
||||
- for Many2One and One2One field: the id.
|
||||
- for Reference field: the string model,id
|
||||
- for One2Many and Many2Many: a dictionary composed of three keys:
|
||||
- add: a list of tuple, the first element is the index where
|
||||
the new line is added, the second element is
|
||||
`_default_values`
|
||||
- update: a list of dictionary of `_changed_values` including
|
||||
the `id`
|
||||
- remove: a list of ids
|
||||
"""
|
||||
from .modelstorage import ModelStorage
|
||||
changed = {}
|
||||
init_values = self._init_values or self._record()
|
||||
@@ -905,7 +892,7 @@ class ModelView(Model):
|
||||
if target.id in previous:
|
||||
previous.remove(target.id)
|
||||
if isinstance(target, ModelView):
|
||||
target_changed = target._changed_values
|
||||
target_changed = target._changed_values()
|
||||
if target_changed:
|
||||
target_changed['id'] = target.id
|
||||
value['update'].append(target_changed)
|
||||
@@ -916,7 +903,7 @@ class ModelView(Model):
|
||||
target_init_values = target._init_values
|
||||
target._init_values = None
|
||||
try:
|
||||
added_values = target._changed_values
|
||||
added_values = target._changed_values()
|
||||
finally:
|
||||
target._init_values = target_init_values
|
||||
else:
|
||||
|
||||
@@ -164,7 +164,7 @@ class ModelStorageTestCase(TestCase):
|
||||
record.target = target = Target()
|
||||
|
||||
with self.assertRaises(_UnsavedRecordError) as cm:
|
||||
record._save_values
|
||||
record._save_values()
|
||||
|
||||
self.assertEqual(cm.exception.record, target)
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ class ModelView(TestCase):
|
||||
|
||||
record = Model(targets=[], m2m_targets=[], m2m_function=[])
|
||||
|
||||
self.assertEqual(record._changed_values, {})
|
||||
self.assertEqual(record._changed_values(), {})
|
||||
|
||||
record.name = 'foo'
|
||||
record.target = Target(1)
|
||||
@@ -195,7 +195,7 @@ class ModelView(TestCase):
|
||||
record.targets = [Target(name='bar')]
|
||||
record.multiselection = ['a']
|
||||
record.dictionary = {'key': 'value'}
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'name': 'foo',
|
||||
'target': 1,
|
||||
'ref_target': 'test.modelview.changed_values.target,2',
|
||||
@@ -217,7 +217,7 @@ class ModelView(TestCase):
|
||||
dictionary={'key': 'value'},
|
||||
)
|
||||
|
||||
self.assertEqual(record._changed_values, {})
|
||||
self.assertEqual(record._changed_values(), {})
|
||||
|
||||
target = record.targets[0]
|
||||
target.name = 'bar'
|
||||
@@ -229,7 +229,7 @@ class ModelView(TestCase):
|
||||
dico = record.dictionary.copy()
|
||||
dico['key'] = 'another value'
|
||||
record.dictionary = dico
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'targets': {
|
||||
'update': [{'id': 1, 'name': 'bar'}],
|
||||
'delete': [2],
|
||||
@@ -244,12 +244,12 @@ class ModelView(TestCase):
|
||||
|
||||
# change only one2many record
|
||||
record = Model(targets=[{'id': 1, 'name': 'foo'}])
|
||||
self.assertEqual(record._changed_values, {})
|
||||
self.assertEqual(record._changed_values(), {})
|
||||
|
||||
target, = record.targets
|
||||
target.name = 'bar'
|
||||
record.targets = record.targets
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'targets': {
|
||||
'update': [{'id': 1, 'name': 'bar'}],
|
||||
},
|
||||
@@ -261,7 +261,7 @@ class ModelView(TestCase):
|
||||
target = Target(id=1)
|
||||
record._values['targets'] = [target]
|
||||
target.name = 'foo'
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'targets': {
|
||||
'add': [(0, {'id': 1, 'name': 'foo'})],
|
||||
},
|
||||
@@ -279,7 +279,7 @@ class ModelView(TestCase):
|
||||
record = Model()
|
||||
record.m2m_function = record.on_change_with_m2m_function()
|
||||
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'm2m_function': {'add': [(0, {'id': 42})]},
|
||||
})
|
||||
|
||||
@@ -299,7 +299,7 @@ class ModelView(TestCase):
|
||||
target1.name = "test"
|
||||
record.targets = [target1, Target(name="baz")]
|
||||
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'targets': {
|
||||
'delete': [target2.id],
|
||||
'update': [{'id': target1.id, 'name': "test"}],
|
||||
@@ -318,7 +318,7 @@ class ModelView(TestCase):
|
||||
record = Model(targets=[target])
|
||||
Model.targets.remove(record, [target])
|
||||
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'targets': {
|
||||
'remove': [1],
|
||||
},
|
||||
@@ -335,7 +335,7 @@ class ModelView(TestCase):
|
||||
record = Model(m2m_targets=[target])
|
||||
Model.m2m_targets.delete(record, [target])
|
||||
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'm2m_targets': {
|
||||
'delete': [1],
|
||||
},
|
||||
@@ -352,7 +352,7 @@ class ModelView(TestCase):
|
||||
record = Model()
|
||||
record.stored_target = target
|
||||
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'stored_target': target.id,
|
||||
'stored_target.': {
|
||||
'rec_name': "Target",
|
||||
@@ -372,7 +372,7 @@ class ModelView(TestCase):
|
||||
target.name = "Target"
|
||||
record.targets = [target]
|
||||
|
||||
self.assertEqual(record._changed_values, {
|
||||
self.assertEqual(record._changed_values(), {
|
||||
'name': "Record",
|
||||
'targets': {
|
||||
'add': [(0, {'id': None, 'name': "Target"})],
|
||||
|
||||
Reference in New Issue
Block a user