Odoo is the world's easiest all-in-one management software. It includes hundreds of business apps:
CRM | e-Commerce | Accounting | Inventory | PoS | Project management | MRP | etc.
opcode STORE_FAST not allowed ('lambda') error when Incoming Server's Server Action is set with Python code that is writing to a browse object
We are getting opcode STORE_FAST not allowed ('lambda') error when Incoming Server's Server Action is set with Python code that is writing to a browse object.
We are using python version 2.7.3. OpenERP 7.0 server revno 5281.
From what we have tested, if the Server Action does not call any ORM's write method, the action will be executed OK. But once it call the write method, although if an empty dictionary is passed to the method, the above error message is raised from line 140 of server/openerp/tools/safe_eval.py (where server is the OpenERP's server directory).
Appreciate if anybody can provide insight to this.
Hi Med Said, thank you for your response. The following is the Python Code we put into the Server Action:
for line in description.split('\n'):
for field in fields:
if field in line:
We are not sure which part is causing the STORE_FAST opcode. We have tested to compile the same string under normal python and the dis of the compile code does not list STORE_FAST either.
After further testing, we found out that if the code in Python code contains a named method, it raises the said error. Further reading into the openerp/tools/safe_eval.py file in OpenERP server lines 143 and 144 seems to support the suspicion. Any way, refactoring the method from the Python Code (making it into normal calls without methods) seems to resolve the issue.
Also it seems that STORE_FAST, along with LOAD_FAST and DELETE_FAST has been listed as allowable opcode since revno 5290 in launchpad or revision 4836354 in github (28 Apr 2014).
Your code is considered as unsafe, probably you've provided a name with two underscore (__name__).
Can you post an example of your code ?
(added after response from John Doe)
The only thing i see in your code that can be related to "dunder" is: _dict=parse_description (maybe putting a space before and after = can resolve this ...).
Another important thing is at line 10: Why are you splitting a second time ? This is done 2 lines above, try to replace with: _dict[field]=split.line