c2c-oerpscenario team mailing list archive
-
c2c-oerpscenario team
-
Mailing list archive
-
Message #27275
[Bug 802352] Re: [6.0] Inheriting _constraints "list index out of range" if original len(_constraint ) is bigger than the new one
Hello Nhomar,
I have checked similar issue with latest stable and trunk code but did not face any traceback while updating the exiting db.
Would you please provide me more steps to reproduce the same traceback at my end.
Thanks.
** Changed in: openobject-server
Status: New => Incomplete
--
You received this bug notification because you are a member of C2C
OERPScenario, which is subscribed to the OpenERP Project Group.
https://bugs.launchpad.net/bugs/802352
Title:
[6.0] Inheriting _constraints "list index out of range" if original
len(_constraint ) is bigger than the new one
Status in OpenERP Server:
Incomplete
Bug description:
branch: 6.0
addons : 4677
server: 3452
My module example:
class stock_move_constraint(osv.osv):
_inherit = 'stock.move'
_columns = {}
def _check_import_info(self, cr, uid, ids, context=None):
print "I checked"
return True
_constraints = [
(_check_import_info,'You must assign a track lot with import information for this product',['tracking_id'])],
stock_move_constraint()
When I try to update my module ($python openerp-server.py -u mymodule
-d mydb) this traceback is received.
Traceback (most recent call last):
File "./openerp-server.py", line 121, in <module>
db,pool = pooler.get_db_and_pool(dbname, update_module=tools.config['init'] or tools.config['update'], pooljobs=False)
File "/home/nhomar/CD_curso/linux_and_sources/server/bin/pooler.py", line 39, in get_db_and_pool
addons.load_modules(db, force_demo, status, update_module)
File "/home/nhomar/CD_curso/linux_and_sources/server/bin/addons/__init__.py", line 883, in load_modules
processed_modules.extend(load_module_graph(cr, graph, status, report=report, skip_modules=processed_modules))
File "/home/nhomar/CD_curso/linux_and_sources/server/bin/addons/__init__.py", line 717, in load_module_graph
modules = pool.instanciate(package.name, cr)
File "/home/nhomar/CD_curso/linux_and_sources/server/bin/osv/osv.py", line 258, in instanciate
res.append(klass.createInstance(self, module, cr))
File "/home/nhomar/CD_curso/linux_and_sources/server/bin/osv/osv.py", line 354, in createInstance
if new[c2][2]==c[2] and (new[c2][0] == c[0] \
IndexError: list index out of range
I printed variables of this method (check patch it is corrected) and
some kind of bad logic is used, the server is trying to check as a
list an integer....
Original problem
~~~~LINE 348 on osv.py
if s=='_constraints':
for c in cls.__dict__.get(s, []):
exist = False
for c2 in range(len(new)):
####THIS IS MY PRINT it is an integer,,,,,
#on the range(len(new)) always will return an index in c2 of the original class never, and if the original
#_constraint list in class is bigger than the new one it will broke.
print c2
#For _constraints, we should check field and methods as well
if new[c2][2]==c[2] and (new[c2][0] == c[0] \
or getattr(new[c2][0],'__name__', True) == \
getattr(c[0],'__name__', False)):
# If new class defines a constraint with
# same function name, we let it override
# the old one.
new[c2] = c
exist = True
break
if not exist:
new.append(c)
To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-server/+bug/802352/+subscriptions
Follow ups
References