Remove patch issue12473.diff which has been committed into core.
This commit is contained in:
parent
9828e3b77e
commit
36a16f4d6d
407
issue12473.diff
407
issue12473.diff
|
@ -1,407 +0,0 @@
|
||||||
diff --git a/tryton/proteus/proteus/__init__.py b/proteus/proteus/__init__.py
|
|
||||||
index bfad1dc7382cb9fd2c17bef77da699ed36869d3e_cHJvdGV1cy9wcm90ZXVzL19faW5pdF9fLnB5..bf7072adc76db4e62ec3fbde7efde17e7bbd630d_cHJvdGV1cy9wcm90ZXVzL19faW5pdF9fLnB5 100644
|
|
||||||
--- a/tryton/proteus/proteus/__init__.py
|
|
||||||
+++ b/tryton/proteus/proteus/__init__.py
|
|
||||||
@@ -1152,9 +1152,8 @@
|
|
||||||
values.update(self._on_change_args(on_change))
|
|
||||||
if values:
|
|
||||||
context = self._context
|
|
||||||
- changes = getattr(self._proxy, 'on_change')(values, names, context)
|
|
||||||
- for change in changes:
|
|
||||||
- self._set_on_change(change)
|
|
||||||
+ change = getattr(self._proxy, 'on_change')(values, names, context)
|
|
||||||
+ self._set_on_change(change)
|
|
||||||
|
|
||||||
values = {}
|
|
||||||
fieldnames = set(names)
|
|
||||||
diff --git a/tryton/tryton/tryton/gui/window/view_form/model/record.py b/tryton/tryton/gui/window/view_form/model/record.py
|
|
||||||
index bfad1dc7382cb9fd2c17bef77da699ed36869d3e_dHJ5dG9uL3RyeXRvbi9ndWkvd2luZG93L3ZpZXdfZm9ybS9tb2RlbC9yZWNvcmQucHk=..bf7072adc76db4e62ec3fbde7efde17e7bbd630d_dHJ5dG9uL3RyeXRvbi9ndWkvd2luZG93L3ZpZXdfZm9ybS9tb2RlbC9yZWNvcmQucHk= 100644
|
|
||||||
--- a/tryton/tryton/tryton/gui/window/view_form/model/record.py
|
|
||||||
+++ b/tryton/tryton/tryton/gui/window/view_form/model/record.py
|
|
||||||
@@ -577,9 +577,9 @@
|
|
||||||
'on_change_' + fieldname,
|
|
||||||
values, context=self.get_context()))
|
|
||||||
else:
|
|
||||||
- changes = RPCExecute(
|
|
||||||
- 'model', self.model_name, 'on_change',
|
|
||||||
- values, fieldnames, context=self.get_context())
|
|
||||||
+ changes = [RPCExecute(
|
|
||||||
+ 'model', self.model_name, 'on_change',
|
|
||||||
+ values, fieldnames, context=self.get_context())]
|
|
||||||
except RPCException:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
@@ -621,5 +621,5 @@
|
|
||||||
if fieldnames:
|
|
||||||
try:
|
|
||||||
if len(fieldnames) == 1 or 'id' not in values:
|
|
||||||
- result = {}
|
|
||||||
+ changed = {}
|
|
||||||
for fieldname in fieldnames:
|
|
||||||
@@ -625,6 +625,6 @@
|
|
||||||
for fieldname in fieldnames:
|
|
||||||
- result[fieldname] = RPCExecute(
|
|
||||||
- 'model', self.model_name,
|
|
||||||
- 'on_change_with_' + fieldname,
|
|
||||||
- values, context=self.get_context())
|
|
||||||
+ changed.update(RPCExecute(
|
|
||||||
+ 'model', self.model_name,
|
|
||||||
+ 'on_change_with_' + fieldname,
|
|
||||||
+ values, context=self.get_context()))
|
|
||||||
else:
|
|
||||||
@@ -630,6 +630,6 @@
|
|
||||||
else:
|
|
||||||
- result = RPCExecute(
|
|
||||||
+ changed = RPCExecute(
|
|
||||||
'model', self.model_name, 'on_change_with',
|
|
||||||
values, list(fieldnames), context=self.get_context())
|
|
||||||
except RPCException:
|
|
||||||
return
|
|
||||||
@@ -632,8 +632,8 @@
|
|
||||||
'model', self.model_name, 'on_change_with',
|
|
||||||
values, list(fieldnames), context=self.get_context())
|
|
||||||
except RPCException:
|
|
||||||
return
|
|
||||||
- self.set_on_change(result)
|
|
||||||
+ self.set_on_change(changed)
|
|
||||||
if later:
|
|
||||||
values = {}
|
|
||||||
for fieldname in later:
|
|
||||||
@@ -642,5 +642,5 @@
|
|
||||||
values.update(self._get_on_change_args(on_change_with))
|
|
||||||
try:
|
|
||||||
if len(later) == 1 or 'id' not in values:
|
|
||||||
- result = {}
|
|
||||||
+ changed = {}
|
|
||||||
for fieldname in fieldnames:
|
|
||||||
@@ -646,6 +646,6 @@
|
|
||||||
for fieldname in fieldnames:
|
|
||||||
- result[fieldname] = RPCExecute(
|
|
||||||
- 'model', self.model_name,
|
|
||||||
- 'on_change_with_' + fieldname,
|
|
||||||
- values, context=self.get_context())
|
|
||||||
+ changed.update(RPCExecute(
|
|
||||||
+ 'model', self.model_name,
|
|
||||||
+ 'on_change_with_' + fieldname,
|
|
||||||
+ values, context=self.get_context()))
|
|
||||||
else:
|
|
||||||
@@ -651,6 +651,6 @@
|
|
||||||
else:
|
|
||||||
- result = RPCExecute(
|
|
||||||
+ changed = RPCExecute(
|
|
||||||
'model', self.model_name, 'on_change_with',
|
|
||||||
values, list(later), context=self.get_context())
|
|
||||||
except RPCException:
|
|
||||||
return
|
|
||||||
@@ -653,8 +653,8 @@
|
|
||||||
'model', self.model_name, 'on_change_with',
|
|
||||||
values, list(later), context=self.get_context())
|
|
||||||
except RPCException:
|
|
||||||
return
|
|
||||||
- self.set_on_change(result)
|
|
||||||
+ self.set_on_change(changed)
|
|
||||||
|
|
||||||
def autocomplete_with(self, field_name):
|
|
||||||
for fieldname, fieldinfo in self.group.fields.items():
|
|
||||||
diff --git a/tryton/trytond/doc/ref/rpc.rst b/trytond/doc/ref/rpc.rst
|
|
||||||
index bfad1dc7382cb9fd2c17bef77da699ed36869d3e_dHJ5dG9uZC9kb2MvcmVmL3JwYy5yc3Q=..bf7072adc76db4e62ec3fbde7efde17e7bbd630d_dHJ5dG9uZC9kb2MvcmVmL3JwYy5yc3Q= 100644
|
|
||||||
--- a/tryton/trytond/doc/ref/rpc.rst
|
|
||||||
+++ b/tryton/trytond/doc/ref/rpc.rst
|
|
||||||
@@ -4,7 +4,7 @@
|
|
||||||
RPC
|
|
||||||
===
|
|
||||||
|
|
||||||
-.. class:: RPC([readonly[, instantiate[, result[, check_access[, unique[, fresh_session[, cache]]]]]]])
|
|
||||||
+.. class:: RPC([readonly[, instantiate[, [decorator, result[, check_access[, unique[, fresh_session[, cache]]]]]]]])
|
|
||||||
|
|
||||||
Define the behavior of Remote Procedure Call.
|
|
||||||
|
|
||||||
@@ -18,6 +18,10 @@
|
|
||||||
|
|
||||||
The position or the slice of the argument to be instanciated
|
|
||||||
|
|
||||||
+.. attribute:: RPC.decorator
|
|
||||||
+
|
|
||||||
+ The function to decorate the called procedure with
|
|
||||||
+
|
|
||||||
.. attribute:: RPC.result
|
|
||||||
|
|
||||||
The function to transform the result
|
|
||||||
diff --git a/tryton/trytond/trytond/model/fields/field.py b/trytond/trytond/model/fields/field.py
|
|
||||||
index bfad1dc7382cb9fd2c17bef77da699ed36869d3e_dHJ5dG9uZC90cnl0b25kL21vZGVsL2ZpZWxkcy9maWVsZC5weQ==..bf7072adc76db4e62ec3fbde7efde17e7bbd630d_dHJ5dG9uZC90cnl0b25kL21vZGVsL2ZpZWxkcy9maWVsZC5weQ== 100644
|
|
||||||
--- a/tryton/trytond/trytond/model/fields/field.py
|
|
||||||
+++ b/tryton/trytond/trytond/model/fields/field.py
|
|
||||||
@@ -1,7 +1,7 @@
|
|
||||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
||||||
# this repository contains the full copyright notices and license terms.
|
|
||||||
import warnings
|
|
||||||
-from functools import partial, wraps
|
|
||||||
+from functools import wraps
|
|
||||||
|
|
||||||
import sql
|
|
||||||
from sql import (
|
|
||||||
@@ -195,18 +195,15 @@
|
|
||||||
return record._changed_values
|
|
||||||
|
|
||||||
|
|
||||||
-def on_change_with_result(field, value):
|
|
||||||
- from ..modelstorage import ModelStorage
|
|
||||||
- if field._type in {'many2one', 'one2one', 'reference'}:
|
|
||||||
- if isinstance(value, ModelStorage):
|
|
||||||
- if field._type == 'reference':
|
|
||||||
- value = str(value)
|
|
||||||
- else:
|
|
||||||
- value = value.id
|
|
||||||
- elif field._type in {'one2many', 'many2many'}:
|
|
||||||
- if isinstance(value, (list, tuple)):
|
|
||||||
- value = [int(r) for r in value]
|
|
||||||
- return value
|
|
||||||
+def on_change_with_result(fieldname):
|
|
||||||
+ def decorator(func):
|
|
||||||
+ @wraps(func)
|
|
||||||
+ def wrapper(self, *args, **kwargs):
|
|
||||||
+ value = func(self, *args, **kwargs)
|
|
||||||
+ setattr(self, fieldname, value)
|
|
||||||
+ return self._changed_values
|
|
||||||
+ return wrapper
|
|
||||||
+ return decorator
|
|
||||||
|
|
||||||
|
|
||||||
def domain_method(func):
|
|
||||||
@@ -476,9 +473,9 @@
|
|
||||||
return [self.sql_column(table)]
|
|
||||||
|
|
||||||
def set_rpc(self, model):
|
|
||||||
- for attribute, result in (
|
|
||||||
- ('on_change', on_change_result),
|
|
||||||
- ('on_change_with', partial(on_change_with_result, self)),
|
|
||||||
+ for attribute, decorator, result in (
|
|
||||||
+ ('on_change', None, on_change_result),
|
|
||||||
+ ('on_change_with', on_change_with_result(self.name), None),
|
|
||||||
):
|
|
||||||
if not getattr(self, attribute):
|
|
||||||
continue
|
|
||||||
@@ -486,7 +483,8 @@
|
|
||||||
assert hasattr(model, func_name), \
|
|
||||||
'Missing %s on model %s' % (func_name, model.__name__)
|
|
||||||
model.__rpc__.setdefault(
|
|
||||||
- func_name, RPC(instantiate=0, result=result))
|
|
||||||
+ func_name,
|
|
||||||
+ RPC(instantiate=0, decorator=decorator, result=result))
|
|
||||||
|
|
||||||
def definition(self, model, language):
|
|
||||||
pool = Pool()
|
|
||||||
diff --git a/tryton/trytond/trytond/model/fields/function.py b/trytond/trytond/model/fields/function.py
|
|
||||||
index bfad1dc7382cb9fd2c17bef77da699ed36869d3e_dHJ5dG9uZC90cnl0b25kL21vZGVsL2ZpZWxkcy9mdW5jdGlvbi5weQ==..bf7072adc76db4e62ec3fbde7efde17e7bbd630d_dHJ5dG9uZC90cnl0b25kL21vZGVsL2ZpZWxkcy9mdW5jdGlvbi5weQ== 100644
|
|
||||||
--- a/tryton/trytond/trytond/model/fields/function.py
|
|
||||||
+++ b/tryton/trytond/trytond/model/fields/function.py
|
|
||||||
@@ -9,7 +9,7 @@
|
|
||||||
from trytond.tools import is_instance_method
|
|
||||||
from trytond.transaction import Transaction, without_check_access
|
|
||||||
|
|
||||||
-from .field import Field, domain_method, on_change_with_result
|
|
||||||
+from .field import Field, domain_method
|
|
||||||
|
|
||||||
|
|
||||||
def getter_context(func):
|
|
||||||
@@ -124,5 +124,16 @@
|
|
||||||
|
|
||||||
def call(name):
|
|
||||||
if not instance_method:
|
|
||||||
- return on_change_with_result(self, method(records, name))
|
|
||||||
+ values = method(records, name)
|
|
||||||
+ if isinstance(name, str):
|
|
||||||
+ return convert_dict(values)
|
|
||||||
+ else:
|
|
||||||
+ return {k: convert_dict(v, k) for k, v in values.items()}
|
|
||||||
+ else:
|
|
||||||
+ return {r.id: convert(method(r, name)) for r in records}
|
|
||||||
+
|
|
||||||
+ def convert(value, name=None):
|
|
||||||
+ from ..model import Model as BaseModel
|
|
||||||
+ if name:
|
|
||||||
+ field = Model._fields[name]._field
|
|
||||||
else:
|
|
||||||
@@ -128,7 +139,22 @@
|
|
||||||
else:
|
|
||||||
- return {
|
|
||||||
- r.id: on_change_with_result(self, method(r, name))
|
|
||||||
- for r in records}
|
|
||||||
+ field = self._field
|
|
||||||
+ if field._type in {'many2one', 'one2one', 'reference'}:
|
|
||||||
+ if isinstance(value, BaseModel):
|
|
||||||
+ if field._type == 'reference':
|
|
||||||
+ value = str(value)
|
|
||||||
+ else:
|
|
||||||
+ value = int(value)
|
|
||||||
+ elif field._type in {'one2many', 'many2many'}:
|
|
||||||
+ if value:
|
|
||||||
+ value = [int(r) for r in value]
|
|
||||||
+ return value
|
|
||||||
+
|
|
||||||
+ def convert_dict(values, name=None):
|
|
||||||
+ # Keep the same class
|
|
||||||
+ values = values.copy()
|
|
||||||
+ values.update((k, convert(v, name)) for k, v in values.items())
|
|
||||||
+ return values
|
|
||||||
+
|
|
||||||
if isinstance(name, list):
|
|
||||||
names = name
|
|
||||||
if multiple:
|
|
||||||
diff --git a/tryton/trytond/trytond/model/modelview.py b/trytond/trytond/model/modelview.py
|
|
||||||
index bfad1dc7382cb9fd2c17bef77da699ed36869d3e_dHJ5dG9uZC90cnl0b25kL21vZGVsL21vZGVsdmlldy5weQ==..bf7072adc76db4e62ec3fbde7efde17e7bbd630d_dHJ5dG9uZC90cnl0b25kL21vZGVsL21vZGVsdmlldy5weQ== 100644
|
|
||||||
--- a/tryton/trytond/trytond/model/modelview.py
|
|
||||||
+++ b/tryton/trytond/trytond/model/modelview.py
|
|
||||||
@@ -68,8 +68,9 @@
|
|
||||||
super(ModelView, cls).__setup__()
|
|
||||||
cls.__rpc__['fields_view_get'] = RPC(cache=dict(days=1))
|
|
||||||
cls.__rpc__['view_toolbar_get'] = RPC(cache=dict(days=1))
|
|
||||||
- cls.__rpc__['on_change'] = RPC(instantiate=0)
|
|
||||||
- cls.__rpc__['on_change_with'] = RPC(instantiate=0)
|
|
||||||
+ cls.__rpc__['on_change'] = RPC(instantiate=0, result=on_change_result)
|
|
||||||
+ cls.__rpc__['on_change_with'] = RPC(
|
|
||||||
+ instantiate=0, result=on_change_result)
|
|
||||||
cls.__rpc__['on_change_notify'] = RPC(instantiate=0)
|
|
||||||
cls._buttons = {}
|
|
||||||
|
|
||||||
@@ -758,8 +759,16 @@
|
|
||||||
return func
|
|
||||||
return decorator
|
|
||||||
|
|
||||||
+ @on_change
|
|
||||||
+ def on_change_with(self, fieldnames):
|
|
||||||
+ for fieldname in fieldnames:
|
|
||||||
+ method_name = 'on_change_with_%s' % fieldname
|
|
||||||
+ value = getattr(self, method_name)()
|
|
||||||
+ setattr(self, fieldname, value)
|
|
||||||
+
|
|
||||||
+ @on_change
|
|
||||||
def on_change(self, fieldnames):
|
|
||||||
for fieldname in sorted(fieldnames):
|
|
||||||
method = getattr(self, 'on_change_%s' % fieldname, None)
|
|
||||||
if method:
|
|
||||||
method()
|
|
||||||
@@ -761,34 +770,8 @@
|
|
||||||
def on_change(self, fieldnames):
|
|
||||||
for fieldname in sorted(fieldnames):
|
|
||||||
method = getattr(self, 'on_change_%s' % fieldname, None)
|
|
||||||
if method:
|
|
||||||
method()
|
|
||||||
- # XXX remove backward compatibility
|
|
||||||
- return [self._changed_values]
|
|
||||||
-
|
|
||||||
- def on_change_with(self, fieldnames):
|
|
||||||
- from .modelstorage import ModelStorage
|
|
||||||
- changes = {}
|
|
||||||
- for fieldname in fieldnames:
|
|
||||||
- field = self._fields[fieldname]
|
|
||||||
- method_name = 'on_change_with_%s' % fieldname
|
|
||||||
- value = getattr(self, method_name)()
|
|
||||||
- setattr(self, fieldname, value)
|
|
||||||
- if field._type in {'many2one', 'one2one', 'reference'}:
|
|
||||||
- if isinstance(value, ModelStorage):
|
|
||||||
- if value.id and value.id >= 0:
|
|
||||||
- changes[f'%{fieldname}.'] = {
|
|
||||||
- 'rec_name': value.rec_name,
|
|
||||||
- }
|
|
||||||
- if field._type == 'reference':
|
|
||||||
- value = str(value)
|
|
||||||
- else:
|
|
||||||
- value = value.id
|
|
||||||
- elif field._type in {'one2many', 'many2many'}:
|
|
||||||
- if isinstance(value, (list, tuple)):
|
|
||||||
- value = [int(r) for r in value]
|
|
||||||
- changes[fieldname] = value
|
|
||||||
- return changes
|
|
||||||
|
|
||||||
def on_change_notify(self):
|
|
||||||
"""Return a list of type and message couples.
|
|
||||||
@@ -802,8 +785,7 @@
|
|
||||||
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 Many2Many: the list of ids
|
|
||||||
- - for One2Many: a dictionary composed of three keys:
|
|
||||||
+ - 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`
|
|
||||||
@@ -822,7 +804,7 @@
|
|
||||||
# Always test key presence in case value is None
|
|
||||||
if (fname in init_values
|
|
||||||
and value == init_values[fname]
|
|
||||||
- and field._type != 'one2many'):
|
|
||||||
+ and field._type not in {'one2many', 'many2many'}):
|
|
||||||
continue
|
|
||||||
if field._type in ('many2one', 'one2one', 'reference'):
|
|
||||||
if value:
|
|
||||||
diff --git a/tryton/trytond/trytond/protocols/dispatcher.py b/trytond/trytond/protocols/dispatcher.py
|
|
||||||
index bfad1dc7382cb9fd2c17bef77da699ed36869d3e_dHJ5dG9uZC90cnl0b25kL3Byb3RvY29scy9kaXNwYXRjaGVyLnB5..bf7072adc76db4e62ec3fbde7efde17e7bbd630d_dHJ5dG9uZC90cnl0b25kL3Byb3RvY29scy9kaXNwYXRjaGVyLnB5 100644
|
|
||||||
--- a/tryton/trytond/trytond/protocols/dispatcher.py
|
|
||||||
+++ b/tryton/trytond/trytond/protocols/dispatcher.py
|
|
||||||
@@ -190,7 +190,7 @@
|
|
||||||
c_args, c_kwargs, transaction.context, transaction.timestamp \
|
|
||||||
= rpc.convert(obj, *args, **kwargs)
|
|
||||||
transaction.context['_request'] = request.context
|
|
||||||
- meth = getattr(obj, method)
|
|
||||||
+ meth = rpc.decorate(getattr(obj, method))
|
|
||||||
if (rpc.instantiate is None
|
|
||||||
or not is_instance_method(obj, method)):
|
|
||||||
result = rpc.result(meth(*c_args, **c_kwargs))
|
|
||||||
diff --git a/tryton/trytond/trytond/rpc.py b/trytond/trytond/rpc.py
|
|
||||||
index bfad1dc7382cb9fd2c17bef77da699ed36869d3e_dHJ5dG9uZC90cnl0b25kL3JwYy5weQ==..bf7072adc76db4e62ec3fbde7efde17e7bbd630d_dHJ5dG9uZC90cnl0b25kL3JwYy5weQ== 100644
|
|
||||||
--- a/tryton/trytond/trytond/rpc.py
|
|
||||||
+++ b/tryton/trytond/trytond/rpc.py
|
|
||||||
@@ -18,8 +18,9 @@
|
|
||||||
unique: Check instances are unique
|
|
||||||
'''
|
|
||||||
|
|
||||||
- __slots__ = ('readonly', 'instantiate', 'result', 'check_access',
|
|
||||||
- 'fresh_session', 'unique', 'cache')
|
|
||||||
+ __slots__ = (
|
|
||||||
+ 'readonly', 'instantiate', 'decorator', 'result',
|
|
||||||
+ 'check_access', 'fresh_session', 'unique', 'cache')
|
|
||||||
|
|
||||||
def __init__(self, readonly=True, instantiate=None, result=None,
|
|
||||||
check_access=True, fresh_session=False, unique=True, cache=None):
|
|
||||||
@@ -23,5 +25,6 @@
|
|
||||||
|
|
||||||
- def __init__(self, readonly=True, instantiate=None, result=None,
|
|
||||||
+ def __init__(
|
|
||||||
+ self, readonly=True, instantiate=None, decorator=None, result=None,
|
|
||||||
check_access=True, fresh_session=False, unique=True, cache=None):
|
|
||||||
self.readonly = readonly
|
|
||||||
self.instantiate = instantiate
|
|
||||||
@@ -25,6 +28,7 @@
|
|
||||||
check_access=True, fresh_session=False, unique=True, cache=None):
|
|
||||||
self.readonly = readonly
|
|
||||||
self.instantiate = instantiate
|
|
||||||
+ self.decorator = decorator
|
|
||||||
if result is None:
|
|
||||||
def result(r):
|
|
||||||
return r
|
|
||||||
@@ -83,6 +87,11 @@
|
|
||||||
context['_check_access'] = True
|
|
||||||
return args, kwargs, context, timestamp
|
|
||||||
|
|
||||||
+ def decorate(self, func):
|
|
||||||
+ if self.decorator:
|
|
||||||
+ func = self.decorator(func)
|
|
||||||
+ return func
|
|
||||||
+
|
|
||||||
|
|
||||||
class RPCCache:
|
|
||||||
__slots__ = ('duration',)
|
|
||||||
diff --git a/tryton/trytond/trytond/tests/test_field_function.py b/trytond/trytond/tests/test_field_function.py
|
|
||||||
index bfad1dc7382cb9fd2c17bef77da699ed36869d3e_dHJ5dG9uZC90cnl0b25kL3Rlc3RzL3Rlc3RfZmllbGRfZnVuY3Rpb24ucHk=..bf7072adc76db4e62ec3fbde7efde17e7bbd630d_dHJ5dG9uZC90cnl0b25kL3Rlc3RzL3Rlc3RfZmllbGRfZnVuY3Rpb24ucHk= 100644
|
|
||||||
--- a/tryton/trytond/trytond/tests/test_field_function.py
|
|
||||||
+++ b/tryton/trytond/trytond/tests/test_field_function.py
|
|
||||||
@@ -103,7 +103,7 @@
|
|
||||||
|
|
||||||
record = Model()
|
|
||||||
record.save()
|
|
||||||
- with patch.object(Model, 'get_function1') as getter:
|
|
||||||
+ with patch.object(Model, 'get_function1', autospec=True) as getter:
|
|
||||||
getter.return_value = 'test'
|
|
||||||
|
|
||||||
Model.read([record.id], ['function1', 'function2'])
|
|
2
series
2
series
|
@ -23,5 +23,3 @@ statement_of_account.diff # [account] Cumulate balance of previous fiscal years
|
||||||
issue11731.diff # [currency] currency test don't pass when Currency Rates Source Not Ready (forex)
|
issue11731.diff # [currency] currency test don't pass when Currency Rates Source Not Ready (forex)
|
||||||
|
|
||||||
counterpart_party_payment_clearing.diff # [account_payment_clearing] Add the possiblity to have a party in the counterpart move when reconcile on a payment.
|
counterpart_party_payment_clearing.diff # [account_payment_clearing] Add the possiblity to have a party in the counterpart move when reconcile on a payment.
|
||||||
|
|
||||||
issue12473.diff # [trytond] Support add/update/remove/delete on on_change_with for one2many
|
|
||||||
|
|
Loading…
Reference in New Issue