openerp-india team mailing list archive
-
openerp-india team
-
Mailing list archive
-
Message #07851
[Bug 899794] Re: [6.1] Setting an image or binary field may sometimes fail with "TypeError: can't escape non-string object"
After further investigation the reason why this bug was hard to reproduce consistently is because it depends on how the 'simplejson' Python module was installed, and in particular whether its "speedups" C extension is available (but *not* on the version).
This also means it has nothing to do with the version of Python or psycopg2, even though trying to upgrade those may indirectly solve the issue if you happen to reinstall a different version of simplejson in the process.
The speedup-enabled version of simplejson will deserialize pure ASCII
strings as plain str objects, whereas the pure Python implementation
will always produce unicode objects regardless of the string contents.
The OpenERP framework was not ready to receive unicode strings for
serialized binary/image fields, so it fails on any system where
simplejson does not have the C extension installed.
You can check easily whether it is the case:
>>> # System has the speedup extension!
>>> import simplejson
>>> simplejson.decoder.c_scanstring is None and "Bug will occur" or "Can't reproduce"
"Can't reproduce"
>>> isinstance(simplejson.loads('"foo"'), unicode) and "Bug will occur" or "Can't reproduce"
"Can't reproduce"
>>>
>>> # System does not have speedup extension!
>>> import simplejson
>>> simplejson.decoder.c_scanstring is None and "Bug will occur" or "Can't reproduce"
'Bug will occur'
>>> isinstance(simplejson.loads('"foo"'), unicode) and "Bug will occur" or "Can't reproduce"
'Bug will occur'
>>>
The fix will ensure that OpenERP allows passing binary/image data in
serialized form using unicode objects.
** Summary changed:
- [6.1] Setting an image or binary field may sometimes fail with "TypeError: can't escape non-string object"
+ [6.1] Saving an image fails with "TypeError: can't escape non-string object" when simplejson does not have C speedup extension installed
--
You received this bug notification because you are a member of OpenERP
Indian Team, which is subscribed to OpenERP Server.
https://bugs.launchpad.net/bugs/899794
Title:
[6.1] Saving an image fails with "TypeError: can't escape non-string
object" when simplejson does not have C speedup extension installed
Status in OpenERP Server:
Confirmed
Bug description:
from a virtual ubuntu 10.04 server installing OpenERP from trunk:
OpenERP-server rev: 3848
OpenERP-addons rev: 5861
OpenERP-web rev: 1596
using pip for installing essentially all software except python-ldap, postgresql.
0) Go to http://<virtualserver>:8069
Create a new database without demo data
This should automatically log you in as Admin with a screen to install modules
1) Click "SETTINGS"
2) Click "Set Company Header and Footer"
3) Click folder icon to add new logo
4) Click "Save"
Result is:
OpenERP Server Error
Client Traceback (most recent call last):
File "/opt/openerp/openerp-web/addons/web/common/http.py", line 154, in dispatch
response["result"] = method(controller, self, **self.params)
File "/opt/openerp/openerp-web/addons/web/controllers/main.py", line 772, in save
r = m.write([id], data, req.session.eval_context(req.context))
File "/opt/openerp/openerp-web/addons/web/common/openerplib/main.py", line 429, in proxy
*args)
File "/opt/openerp/openerp-web/addons/web/common/openerplib/main.py", line 306, in proxy
result = self.connector.send(self.service_name, method, *args)
File "/opt/openerp/openerp-web/addons/web/common/openerplib/main.py", line 276, in send
raise fault
Server Traceback (most recent call last):
File "/opt/openerp/openerp-web/addons/web/common/openerplib/main.py", line 257, in send
result = openerp.netsvc.dispatch_rpc(service_name, method, args)
File "/opt/openerp/openerp-server/openerp/netsvc.py", line 325, in dispatch_rpc
result = ExportService.getService(service_name).dispatch(method, params)
File "/opt/openerp/openerp-server/openerp/service/web_services.py", line 580, in dispatch
res = fn(db, uid, *params)
File "/opt/openerp/openerp-server/openerp/osv/osv.py", line 120, in wrapper
return f(self, dbname, *args, **kwargs)
File "/opt/openerp/openerp-server/openerp/osv/osv.py", line 172, in execute
res = self.execute_cr(cr, uid, obj, method, *args, **kw)
File "/opt/openerp/openerp-server/openerp/osv/osv.py", line 163, in execute_cr
return getattr(object, method)(cr, uid, *args, **kw)
File "/opt/openerp/openerp-server/openerp/addons/base/res/res_company.py", line 240, in write
return super(res_company, self).write(cr, *args, **argv)
File "/opt/openerp/openerp-server/openerp/osv/orm.py", line 3854, in write
'where id IN %s', upd1 + [sub_ids])
File "/opt/openerp/openerp-server/openerp/sql_db.py", line 153, in wrapper
return f(self, *args, **kwargs)
File "/opt/openerp/openerp-server/openerp/sql_db.py", line 215, in execute
res = self._obj.execute(query, params)
TypeError: can't escape non-string object
To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-server/+bug/899794/+subscriptions