Reviewers: ,
Please review this at http://codereview.tryton.org/395004/
Affected files:
M proteus/__init__.py
M proteus/config.py
M proteus/tests/test_model.py
Index: proteus/__init__.py
===================================================================
--- a/proteus/__init__.py
+++ b/proteus/__init__.py
@@ -260,7 +260,7 @@
for record in value_list:
if record.id > 0:
if record._changed:
- value.append(('write', record.id, record._get_values(
+ value.append(('write', [record.id], record._get_values(
fields=record._changed)))
value[0][1].append(record.id)
else:
@@ -607,7 +607,7 @@
return
values = self._get_values(fields=self._changed)
context['_timestamp'] = self._get_timestamp()
- self._proxy.write(self.id, values, context)
+ self._proxy.write([self.id], values, context)
self.reload()
def delete(self):
@@ -615,7 +615,7 @@
if self.id > 0:
context = self._config.context
context['_timestamp'] = self._get_timestamp()
- return self._proxy.delete(self.id, context)
+ return self._proxy.delete([self.id], context)
self.reload()
return True
@@ -654,8 +654,8 @@
if y['loading'] == 'eager']
if not self._fields:
fields.append('_timestamp')
- self._values.update(self._proxy.read(self.id, fields,
- self._config.context))
+ self._values.update(self._proxy.read([self.id], fields,
+ self._config.context)[0])
for field in fields:
if (field in self._fields
and self._fields[field]['type'] == 'float'
@@ -793,8 +793,8 @@
values.update(self._on_change_args(definition['on_change_with']))
if to_change:
context = self._config.context
- result =
getattr(self._proxy, 'on_change_with')(list(to_change),
- values, context)
+ result = getattr(self._proxy, 'on_change_with')(values,
+ list(to_change), context)
for field, value in result.items():
self._on_change_set(field, value)
for field in later:
Index: proteus/config.py
===================================================================
--- a/proteus/config.py
+++ b/proteus/config.py
@@ -101,28 +101,35 @@
def __call__(self, *args):
from trytond.cache import Cache
from trytond.transaction import Transaction
+ from trytond.rpc import RPC
- if self._name in self._object._rpc:
- readonly = not self._object._rpc[self._name]
+ if self._name in self._object.__rpc__:
+ rpc = self._object.__rpc__[self._name]
elif self._name in getattr(self._object, '_buttons', {}):
- readonly = False
+ rpc = RPC(readonly=False, instantiate=0)
else:
raise TypeError('%s is not callable' % self._name)
with Transaction().start(self._config.database_name,
- self._config.user, readonly=readonly) as transaction:
+ self._config.user, readonly=rpc.readonly) as transaction:
Cache.clean(self._config.database_name)
- args = list(args)
- context = args.pop()
- if '_timestamp' in context:
- transaction.timestamp = context['_timestamp']
- del context['_timestamp']
- transaction.context = context
- res = getattr(self._object, self._name)(*args)
- if not readonly:
+ args, kwargs, transaction.context, transaction.timestamp = \
+ rpc.convert(self._object, *args)
+ meth = getattr(self._object, self._name)
+ if not hasattr(meth, 'im_self') or meth.im_self:
+ result = rpc.result(meth(*args, **kwargs))
+ else:
+ assert rpc.instantiate == 0
+ inst = args.pop(0)
+ if hasattr(inst, self._name):
+ result = rpc.result(meth(inst, *args, **kwargs))
+ else:
+ result = [rpc.result(meth(i, *args, **kwargs))
+ for i in inst]
+ if not rpc.readonly:
transaction.cursor.commit()
Cache.resets(self._config.database_name)
- return res
+ return result
class TrytondProxy(object):
@@ -149,7 +156,6 @@
CONFIG.update_etc(config_file)
if database_type is not None:
CONFIG['db_type'] = database_type
- from trytond.modules import register_classes
from trytond.pool import Pool
from trytond.backend import Database
from trytond.protocols.dispatcher import create
@@ -165,7 +171,7 @@
self._user = user
self.config_file = config_file
- register_classes()
+ Pool.start()
database = Database().connect()
cursor = database.cursor()
@@ -187,7 +193,7 @@
transaction.context = self.context
self.user = user_obj.search([
('login', '=', user),
- ], limit=1)[0]
+ ], limit=1)[0].id
with transaction.set_user(self.user):
self._context = user_obj.get_preferences(context_only=True)
Cache.resets(database_name)
@@ -219,7 +225,7 @@
def get_proxy_methods(self, name, type='model'):
'Return list of methods'
proxy = self.get_proxy(name, type=type)
- methods = [x for x in proxy._object._rpc]
+ methods = [x for x in proxy._object.__rpc__]
if hasattr(proxy._object, '_buttons'):
methods += [x for x in proxy._object._buttons]
return methods
Index: proteus/tests/test_model.py
===================================================================
--- a/proteus/tests/test_model.py
+++ b/proteus/tests/test_model.py
@@ -276,7 +276,7 @@
test.name = 'Test delete'
test.login = 'test delete'
test.save()
- self.assert_(test.delete())
+ test.delete()
def test_on_change(self):
Trigger = Model.get('ir.trigger')
--
[email protected] mailing list