← Back to team overview

c2c-oerpscenario team mailing list archive

[Bug 603708] Re: fields.py : correction on get() of O2M

 

** Branch linked: lp:openobject-server/5.0

-- 
fields.py : correction on get() of O2M
https://bugs.launchpad.net/bugs/603708
You received this bug notification because you are a member of C2C
OERPScenario, which is subscribed to OpenERP OpenObject.

Status in OpenObject Server: Fix Released
Status in OpenObject Server 5.0 series: Fix Released
Status in OpenObject Server trunk series: Fix Released

Bug description:
Hello
Maybe it's a server bug.

After installing Fleet Maintenance on a fresh installation.
I can't open the partner view if the field sub fleet of the partner is empty. (on a fresh install all partner have this field empty)

[2010-07-09 19:39:43,617] ERROR:web-services:[01]: 
[2010-07-09 19:39:43,617] ERROR:web-services:[02]: Environment Information : 
[2010-07-09 19:39:43,618] ERROR:web-services:[03]: System : Linux-2.6.32-23-generic-x86_64-with-Ubuntu-10.04-lucid
[2010-07-09 19:39:43,618] ERROR:web-services:[04]: OS Name : posix
[2010-07-09 19:39:43,618] ERROR:web-services:[05]: Distributor ID:	Ubuntu
[2010-07-09 19:39:43,619] ERROR:web-services:[06]: Description:	Ubuntu 10.04 LTS
[2010-07-09 19:39:43,619] ERROR:web-services:[07]: Release:	10.04
[2010-07-09 19:39:43,619] ERROR:web-services:[08]: Codename:	lucid
[2010-07-09 19:39:43,620] ERROR:web-services:[09]: Operating System Release : 2.6.32-23-generic
[2010-07-09 19:39:43,620] ERROR:web-services:[10]: Operating System Version : #37-Ubuntu SMP Fri Jun 11 08:03:28 UTC 2010
[2010-07-09 19:39:43,620] ERROR:web-services:[11]: Operating System Architecture : 64bit
[2010-07-09 19:39:43,620] ERROR:web-services:[12]: Operating System Locale : fr_FR.UTF8
[2010-07-09 19:39:43,620] ERROR:web-services:[13]: Python Version : 2.6.5
[2010-07-09 19:39:43,621] ERROR:web-services:[14]: OpenERP-Server Version : 5.0.11
[2010-07-09 19:39:43,621] ERROR:web-services:[15]: Last revision No. & ID : 2083 jvo@xxxxxxxxxxx-20100707121350-kvx5mc3bboep82ai
[2010-07-09 19:39:43,621] ERROR:web-services:[16]: 
[2010-07-09 19:39:43,622] ERROR:web-services:[17]: Traceback (most recent call last):
[2010-07-09 19:39:43,622] ERROR:web-services:[18]:   File "/media/Mes_doc/DEV/openerp/ticket_anevia_fleet_250/server/bin/osv/osv.py", line 58, in wrapper
[2010-07-09 19:39:43,622] ERROR:web-services:[19]:     return f(self, dbname, *args, **kwargs)
[2010-07-09 19:39:43,622] ERROR:web-services:[20]:   File "/media/Mes_doc/DEV/openerp/ticket_anevia_fleet_250/server/bin/osv/osv.py", line 119, in execute
[2010-07-09 19:39:43,623] ERROR:web-services:[21]:     res = pool.execute_cr(cr, uid, obj, method, *args, **kw)
[2010-07-09 19:39:43,623] ERROR:web-services:[22]:   File "/media/Mes_doc/DEV/openerp/ticket_anevia_fleet_250/server/bin/osv/osv.py", line 111, in execute_cr
[2010-07-09 19:39:43,623] ERROR:web-services:[23]:     return getattr(object, method)(cr, uid, *args, **kw)
[2010-07-09 19:39:43,623] ERROR:web-services:[24]:   File "/media/Mes_doc/DEV/openerp/ticket_anevia_fleet_250/server/bin/osv/orm.py", line 2228, in read
[2010-07-09 19:39:43,624] ERROR:web-services:[25]:     result = self._read_flat(cr, user, select, fields, context, load)
[2010-07-09 19:39:43,624] ERROR:web-services:[26]:   File "/media/Mes_doc/DEV/openerp/ticket_anevia_fleet_250/server/bin/osv/orm.py", line 2360, in _read_flat
[2010-07-09 19:39:43,624] ERROR:web-services:[27]:     res2 = self._columns[f].get(cr, self, ids, f, user, context=context, values=res)
[2010-07-09 19:39:43,624] ERROR:web-services:[28]:   File "/media/Mes_doc/DEV/openerp/ticket_anevia_fleet_250/server/bin/osv/fields.py", line 428, in get
[2010-07-09 19:39:43,625] ERROR:web-services:[29]:     res[r[self._fields_id]].append(r['id'])
[2010-07-09 19:39:43,625] ERROR:web-services:[30]: KeyError: None


If you look in the server code function def get line 427
you can saw that we try to update the dictionary res but in my case the key "r[self._fields_id]" don't exist in res

==CODE==
    def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
        if not context:
            context = {}
        if self._context:
            context = context.copy()
        context.update(self._context)
        if not values:
            values = {}
        res = {}
        for id in ids:
            res[id] = []
        ids2 = obj.pool.get(self._obj).search(cr, user, [(self._fields_id, 'in', ids)], limit=self._limit, context=context)
        for r in obj.pool.get(self._obj)._read_flat(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'):
             res[r[self._fields_id]].append(r['id'])         <=== HERE ==========================
        return res
==CODE==

If you check the function def get_memory line 379 we check if this key exist before

==CODE==
    def get_memory(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
        if not context:
            context = {}
        if self._context:
            context = context.copy()
            context.update(self._context)
        if not values:
            values = {}
        res = {}
        for id in ids:
            res[id] = []
        ids2 = obj.pool.get(self._obj).search(cr, user, [(self._fields_id, 'in', ids)], limit=self._limit, context=context)
        for r in obj.pool.get(self._obj).read(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'):
            if r[self._fields_id] in res:
                res[r[self._fields_id]].append(r['id'])  <=== HERE ==========================
        return res
==CODE==

I think we have to check also in the function def get and I propose this patch.

Expert team in ORM what do you think about this?

Best regard