diff --git a/bin/osv/osv.py b/bin/osv/osv.py index d1d7791e9ec..34ac4e469db 100644 --- a/bin/osv/osv.py +++ b/bin/osv/osv.py @@ -197,6 +197,14 @@ class osv_memory(osv_base, orm.orm_memory): def createInstance(cls, pool, module, cr): parent_names = getattr(cls, '_inherit', None) if parent_names: + if isinstance(parent_names, (str, unicode)): + name = cls._name or parent_name + parent_names = [parent_names] + else: + name = cls._name + if not name: + raise TypeError('_name is mandatory in case of multiple inheritance') + for parent_name in ((type(parent_names)==list) and parent_names or [parent_names]): parent_class = pool.get(parent_name).__class__ assert pool.get(parent_name), "parent class %s does not exist in module %s !" % (parent_name, module) @@ -208,7 +216,6 @@ class osv_memory(osv_base, orm.orm_memory): else: new.extend(cls.__dict__.get(s, [])) nattr[s] = new - name = cls._name or cls._inherit cls = type(name, (cls, parent_class), nattr) obj = object.__new__(cls) @@ -224,6 +231,14 @@ class osv(osv_base, orm.orm): def createInstance(cls, pool, module, cr): parent_names = getattr(cls, '_inherit', None) if parent_names: + if isinstance(parent_names, (str, unicode)): + name = cls._name or parent_name + parent_names = [parent_names] + else: + name = cls._name + if not name: + raise TypeError('_name is mandatory in case of multiple inheritance') + for parent_name in ((type(parent_names)==list) and parent_names or [parent_names]): parent_class = pool.get(parent_name).__class__ assert pool.get(parent_name), "parent class %s does not exist in module %s !" % (parent_name, module) @@ -246,7 +261,6 @@ class osv(osv_base, orm.orm): else: new.extend(cls.__dict__.get(s, [])) nattr[s] = new - name = cls._name or cls._inherit cls = type(name, (cls, parent_class), nattr) obj = object.__new__(cls) obj.__init__(pool, cr)