Merge lp:~openerp-dev/openobject-server/6.0-opw-4364-jvo into lp:openobject-server/6.0

Proposed by Jay Vora (Serpent Consulting Services)
Status: Merged
Merged at revision: 3357
Proposed branch: lp:~openerp-dev/openobject-server/6.0-opw-4364-jvo
Merge into: lp:openobject-server/6.0
Diff against target: 12 lines (+1/-1)
1 file modified
bin/osv/orm.py (+1/-1)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/6.0-opw-4364-jvo
Reviewer Review Type Date Requested Status
Olivier Dony (Odoo) Approve
Review via email: mp+52076@code.launchpad.net

Description of the change

Steps to Reproduce:
(Over Web client)
1. Open Any undone packing.
2. Click on Process now/validate.
3. You will see a window with the relevant moves on the window by default inside O2M. Remove them, click on validate. (Another problem here is that the o2m window doesn't get closed)
4. Click on process again.

And the error appears:
Traceback (most recent call last):
  File "/home/odoo/openerp/server/bin/netsvc.py", line 490, in dispatch
    result = ExportService.getService(service_name).dispatch(method, auth, params)
  File "/home/odoo/openerp/server/bin/addons/use_control/services.py", line 41, in dispatch
    return super(recording_objects_proxy, self).dispatch(func, auth, params)
  File "/home/odoo/openerp/server/bin/service/web_services.py", line 599, in dispatch
    res = fn(db, uid, *params)
  File "/home/odoo/openerp/server/bin/addons/audittrail/audittrail.py", line 511, in execute
    res = my_fct(db, uid, model, method, *args)
  File "/home/odoo/openerp/server/bin/addons/audittrail/audittrail.py", line 489, in my_fct
    return fct_src(db, uid, model, method, *args)
  File "/home/odoo/openerp/server/bin/osv/osv.py", line 122, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/home/odoo/openerp/server/bin/osv/osv.py", line 176, in execute
    res = self.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/odoo/openerp/server/bin/osv/osv.py", line 167, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/odoo/openerp/server/bin/addons/stock/stock.py", line 664, in action_process
    cr, uid, {}, context=dict(context, active_ids=ids))
  File "/home/odoo/openerp/server/bin/osv/orm.py", line 1994, in create
    vals = self._add_missing_default_values(cr, user, vals, context)
  File "/home/odoo/openerp/server/bin/osv/orm.py", line 1884, in _add_missing_default_values
    and isinstance(defaults[dv], (list, tuple)) and isinstance(defaults[dv][0], dict):
IndexError: list index out of range

Thannks.

Refer to : http://bazaar.launchpad.net/~openerp/openobject-server/6.0/revision/3325
http://bazaar.launchpad.net/~openerp/openobject-server/6.0/revision/2906.1.1

(Thanks to Olivier Dony)

To post a comment you must log in.
Revision history for this message
Olivier Dony (Odoo) (odo-openerp) wrote :

I would expect the defaults for empty o2m to be False rather than an empty list or tuple, but I guess it's better to take care of this case too.
The set() method of fields.one2many will handle False or [] properly, so we're safe there too.
Ship it :-)

review: Approve
Revision history for this message
Jay Vora (Serpent Consulting Services) (jayvora) wrote :

Thanks Olivier,

I have shipped the branch to the right shore.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/osv/orm.py'
2--- bin/osv/orm.py 2011-02-16 14:21:28 +0000
3+++ bin/osv/orm.py 2011-03-03 14:38:12 +0000
4@@ -1881,7 +1881,7 @@
5 defaults[dv] = [(6, 0, defaults[dv])]
6 if (dv in self._columns and self._columns[dv]._type == 'one2many' \
7 or (dv in self._inherit_fields and self._inherit_fields[dv][2]._type == 'one2many')) \
8- and isinstance(defaults[dv], (list, tuple)) and isinstance(defaults[dv][0], dict):
9+ and isinstance(defaults[dv], (list, tuple)) and defaults[dv] and isinstance(defaults[dv][0], dict):
10 defaults[dv] = [(0, 0, x) for x in defaults[dv]]
11 defaults.update(values)
12 values = defaults