KERNEL: remove old inheritor and add _constraints and _sql_constraints to the fields inherited

bzr revid: ced-8b70c7c1adcf4991f2e1a449fc00e5066e414cbe
This commit is contained in:
ced 2007-04-12 10:49:31 +00:00
parent 88baca3679
commit fca8e731d1
1 changed files with 26 additions and 22 deletions

View File

@ -169,22 +169,23 @@ class osv_pool(netsvc.Service):
# #
# See if we can use the pool var instead of the class_pool one # See if we can use the pool var instead of the class_pool one
# #
class inheritor(type): # XXX no more used
def __new__(cls, name, bases, d): #class inheritor(type):
parent_name = d.get('_inherit', None) # def __new__(cls, name, bases, d):
if parent_name: # parent_name = d.get('_inherit', None)
parent_class = class_pool.get(parent_name) # if parent_name:
assert parent_class, "parent class %s does not exist !" % parent_name # parent_class = class_pool.get(parent_name)
for s in ('_columns', '_defaults', '_inherits'): # assert parent_class, "parent class %s does not exist !" % parent_name
new_dict = copy.copy(getattr(parent_class, s)) # for s in ('_columns', '_defaults', '_inherits'):
new_dict.update(d.get(s, {})) # new_dict = copy.copy(getattr(parent_class, s))
d[s] = new_dict # new_dict.update(d.get(s, {}))
bases = (parent_class,) # d[s] = new_dict
res = type.__new__(cls, name, bases, d) # bases = (parent_class,)
# # res = type.__new__(cls, name, bases, d)
# update _inherits of others objects # #
# # # update _inherits of others objects
return res # #
# return res
@ -213,17 +214,20 @@ class osv(orm.orm):
if parent_name: if parent_name:
parent_class = pool.get(parent_name).__class__ parent_class = pool.get(parent_name).__class__
assert parent_class, "parent class %s does not exist !" % parent_name assert parent_class, "parent class %s does not exist !" % parent_name
ndict = {} nattr = {}
for s in ('_columns', '_defaults', '_inherits'): for s in ('_columns', '_defaults', '_inherits', '_constraints', '_sql_constraints'):
new_dict = copy.copy(getattr(pool.get(parent_name), s)) new = copy.copy(getattr(pool.get(parent_name), s))
new_dict.update(cls.__dict__.get(s, {})) if hasattr(new, 'update'):
ndict[s] = new_dict new.update(cls.__dict__.get(s, {}))
else:
new.extend(cls.__dict__.get(s, []))
nattr[s] = new
#bases = (parent_class,) #bases = (parent_class,)
#obj.__class__ += (parent_class,) #obj.__class__ += (parent_class,)
#res = type.__new__(cls, name, bases, d) #res = type.__new__(cls, name, bases, d)
name = hasattr(cls,'_name') and cls._name or cls._inherit name = hasattr(cls,'_name') and cls._name or cls._inherit
#name = str(cls) #name = str(cls)
cls = type(name, (cls, parent_class), ndict) cls = type(name, (cls, parent_class), nattr)
obj = object.__new__(cls) obj = object.__new__(cls)
obj.__init__(pool) obj.__init__(pool)