On Monday, July 13, 2015 at 11:55:08 AM UTC+2, raimonesteve wrote:
>
> Since 8c3da23d1fb4 changed safe_eval o eval (1)
>
> I try eval a trigger (same eval that I use in 3.4) and I get error
> current version. How to eval with new API? What am I missing?
>
> Example to eval:
>
> self.name == 'Test'
>
> Traceback (most recent call last):
> File "/trytond/protocols/jsonrpc.py", line 162, in _marshaled_dispatch
> response['result'] = dispatch_method(method, params)
> File "/trytond/protocols/jsonrpc.py", line 191, in _dispatch
> res = dispatch(*args)
> File "/trytond/protocols/dispatcher.py", line 158, in dispatch
> result = rpc.result(meth(*c_args, **c_kwargs))
> File "/trytond/model/modelsql.py", line 764, in write
> trigger_eligibles = cls.trigger_write_get_eligibles(records)
> File "/trytond/model/modelstorage.py", line 192, in
> trigger_write_get_eligibles
> if not Trigger.eval(trigger, record):
> File "/trytond/ir/trigger.py", line 177, in eval
> return bool(PYSONDecoder(env).decode(trigger.condition))
> File "/dist-packages/simplejson/decoder.py", line 370, in decode
> obj, end = self.raw_decode(s)
> File "/dist-packages/simplejson/decoder.py", line 389, in raw_decode
> return self.scan_once(s, idx=_w(s, idx).end())
> JSONDecodeError: Expecting value: line 1 column 1 (char 0)
>
> Note:
>
> EvalEnvironment when process this values:
>
> party.party,2 <class 'trytond.pool.party.party'>
>
> return a empty dict:
>
> {}
>
> Here there is env PYSONDecorde:
>
> {'current_date': datetime.datetime(2015, 7, 13, 9, 37, 7, 23151),
> 'self': {}, 'context': {'date_format': '%d/%m/%Y', 'language':
> 'ca_ES', 'locale': {'date': '%d/%m/%Y', 'thousands_sep': ' ',
> 'decimal_point': ',', 'grouping': [3, 3, 0]}, 'language_direction':
> 'ltr', '_check_access': True, 'company.rec_name': 'zz', 'groups': [1,
> 5, 2, 3, 7, 6, 4, 8], 'employee': None, 'company': 1}, 'time': <module
> 'time' (built-in)>}
>
> (1) http://hg.tryton.org/trytond/rev/8c3da23d1fb4
> (2)
> http://hg.tryton.org/trytond/file/1ee266149d72/trytond/ir/trigger.py#l174
What I did was to make the PYSON-statement and then used the PYSON-encoder
to encode it into some JSON and add that in the condition field.
See
http://hg.tryton.org/trytond/file/1ee266149d72/trytond/tests/test_trigger.py#l286