Activity log for bug #1013566

Date Who What changed Old value New value Message
2012-06-15 08:51:27 Guewen Baconnier @ Camptocamp bug added bug
2012-06-15 08:53:08 Guewen Baconnier @ Camptocamp description Hello, It seems that there is a small issue when we use an AbstractModel. By the way, I'm not sure if it is really destined to be used as I'm not able to find any usage in addons. It's a pity because it allows to really modularize some things. As instance, I tried to create a model with the "sequence" responsibility : class Sequencable(AbstractModel): _name = 'abstract.sequencable' _order = 'sequence' _columns = { 'sequence': fields.integer('Sequence') } _defaults = { 'sequence': 1000 } Then, in the models where I want a sequence, I just have to inherit from 'abstract.sequencable'. class ModelA(Model): _name = 'model.a' _inherit = ['abstract.sequencable', 'other.inheritance'] _columns = {...} class ModelB(TransientModel): _name = 'model.b' _inherit = 'abstract.sequencable' _columns = {...} First, do you see any reason not to do that ? The once issue I've encountered is that _auto is set to False in TransientModel, and is not forced to True in Model and TransientModel In orm.py with some cuts : class AbstractModel(BaseModel): _auto = False # don't create any database backend for AbstractModels _register = False # not visible in ORM registry, meant to be python-inherited only class Model(BaseModel): _register = False # not visible in ORM registry, meant to be python-inherited only _transient = False # True in a TransientModel So as a result, I have to declare _auto = True in every materialized models. So with my model.a I had to to: class ModelA(Model): _name = 'model.a' _inherit = ['abstract.sequencable', 'other.inheritance'] _auto = True _columns = {...} As Model and TransiantModel are supposed to be concrete models, I think that they have to be _auto = True by default even if they are "_inherit"-ing an AbstractModel. So the base model classes would be (without docstrings): class Model(BaseModel): _register = False # not visible in ORM registry, meant to be python-inherited only _transient = False # True in a TransientModel _auto = True # create database backend for Models class TransientModel(BaseModel): _register = False # not visible in ORM registry, meant to be python-inherited only _transient = True _auto = True # create database backend for TransientModels class AbstractModel(BaseModel): _auto = False # don't create any database backend for AbstractModels _register = False # not visible in ORM registry, meant to be python-inherited only Do you agree with that ? Thanks Guewen Hello, It seems that there is a small issue when we use an AbstractModel. By the way, I'm not sure if it is really destined to be used as I'm not able to find any usage in addons. It's a pity because it allows to really modularize some things. As instance, I tried to create a model with the "sequence" responsibility : class Sequencable(AbstractModel):     _name = 'abstract.sequencable'     _order = 'sequence'     _columns = {         'sequence': fields.integer('Sequence')     }     _defaults = {         'sequence': 1000     } Then, in the models where I want a sequence, I just have to inherit from 'abstract.sequencable'. class ModelA(Model):     _name = 'model.a'     _inherit = ['abstract.sequencable', 'other.inheritance']     _columns = {...} class ModelB(TransientModel):     _name = 'model.b'     _inherit = 'abstract.sequencable'     _columns = {...} First, do you see any reason not to do that ? The once issue I've encountered is that _auto is set to False in TransientModel, and is not forced to True in Model and TransientModel In orm.py with some cuts : class AbstractModel(BaseModel):     _auto = False # don't create any database backend for AbstractModels     _register = False # not visible in ORM registry, meant to be python-inherited only class Model(BaseModel):     _register = False # not visible in ORM registry, meant to be python-inherited only     _transient = False # True in a TransientModel So as a result, I have to declare _auto = True in every materialized models; for my model.a it gives: class ModelA(Model):     _name = 'model.a'     _inherit = ['abstract.sequencable', 'other.inheritance'] +    _auto = True     _columns = {...} As Model and TransiantModel are supposed to be concrete models, I think that they have to be _auto = True by default even if they are "_inherit"-ing an AbstractModel. So the base model classes would be (without docstrings): class Model(BaseModel):     _register = False # not visible in ORM registry, meant to be python-inherited only     _transient = False # True in a TransientModel     _auto = True # create database backend for Models class TransientModel(BaseModel):     _register = False # not visible in ORM registry, meant to be python-inherited only     _transient = True     _auto = True # create database backend for TransientModels class AbstractModel(BaseModel):     _auto = False # don't create any database backend for AbstractModels     _register = False # not visible in ORM registry, meant to be python-inherited only Do you agree with that ? Thanks Guewen
2012-06-15 18:25:43 Guewen Baconnier @ Camptocamp description Hello, It seems that there is a small issue when we use an AbstractModel. By the way, I'm not sure if it is really destined to be used as I'm not able to find any usage in addons. It's a pity because it allows to really modularize some things. As instance, I tried to create a model with the "sequence" responsibility : class Sequencable(AbstractModel):     _name = 'abstract.sequencable'     _order = 'sequence'     _columns = {         'sequence': fields.integer('Sequence')     }     _defaults = {         'sequence': 1000     } Then, in the models where I want a sequence, I just have to inherit from 'abstract.sequencable'. class ModelA(Model):     _name = 'model.a'     _inherit = ['abstract.sequencable', 'other.inheritance']     _columns = {...} class ModelB(TransientModel):     _name = 'model.b'     _inherit = 'abstract.sequencable'     _columns = {...} First, do you see any reason not to do that ? The once issue I've encountered is that _auto is set to False in TransientModel, and is not forced to True in Model and TransientModel In orm.py with some cuts : class AbstractModel(BaseModel):     _auto = False # don't create any database backend for AbstractModels     _register = False # not visible in ORM registry, meant to be python-inherited only class Model(BaseModel):     _register = False # not visible in ORM registry, meant to be python-inherited only     _transient = False # True in a TransientModel So as a result, I have to declare _auto = True in every materialized models; for my model.a it gives: class ModelA(Model):     _name = 'model.a'     _inherit = ['abstract.sequencable', 'other.inheritance'] +    _auto = True     _columns = {...} As Model and TransiantModel are supposed to be concrete models, I think that they have to be _auto = True by default even if they are "_inherit"-ing an AbstractModel. So the base model classes would be (without docstrings): class Model(BaseModel):     _register = False # not visible in ORM registry, meant to be python-inherited only     _transient = False # True in a TransientModel     _auto = True # create database backend for Models class TransientModel(BaseModel):     _register = False # not visible in ORM registry, meant to be python-inherited only     _transient = True     _auto = True # create database backend for TransientModels class AbstractModel(BaseModel):     _auto = False # don't create any database backend for AbstractModels     _register = False # not visible in ORM registry, meant to be python-inherited only Do you agree with that ? Thanks Guewen Hello, It seems that there is a small issue when we use an AbstractModel. By the way, I'm not sure if it is really destined to be used as I'm not able to find any usage in addons. It's a pity because it allows to really modularize some things. As instance, I tried to create a model with the "sequence" responsibility : class Sequencable(AbstractModel):     _name = 'abstract.sequencable'     _order = 'sequence'     _columns = {         'sequence': fields.integer('Sequence')     }     _defaults = {         'sequence': 1000     } Then, in the models where I want a sequence, I just have to inherit from 'abstract.sequencable'. class ModelA(Model):     _name = 'model.a'     _inherit = ['abstract.sequencable', 'other.inheritance']     _columns = {...} class ModelB(TransientModel): # please ignore the non-sense of a sequence on a TransientModel, I put it just because the problem explained below happens on Model and TransientModel     _name = 'model.b'     _inherit = 'abstract.sequencable'     _columns = {...} First, do you see any reason not to do that ? The once issue I've encountered is that _auto is set to False in AbstractModel, and is not set to True in Model and TransientModel In orm.py with some cuts : class AbstractModel(BaseModel):     _auto = False # don't create any database backend for AbstractModels     _register = False # not visible in ORM registry, meant to be python-inherited only class Model(BaseModel):     _register = False # not visible in ORM registry, meant to be python-inherited only     _transient = False # True in a TransientModel So as a result, I have to declare _auto = True in every materialized models; for my model.a it gives: class ModelA(Model):     _name = 'model.a'     _inherit = ['abstract.sequencable', 'other.inheritance'] +    _auto = True     _columns = {...} As Model and TransiantModel are supposed to be concrete models, I think that they have to be _auto = True by default even if they are "_inherit"-ing an AbstractModel. So the base model classes would be (without docstrings): class Model(BaseModel):     _register = False # not visible in ORM registry, meant to be python-inherited only     _transient = False # True in a TransientModel     _auto = True # create database backend for Models class TransientModel(BaseModel):     _register = False # not visible in ORM registry, meant to be python-inherited only     _transient = True     _auto = True # create database backend for TransientModels class AbstractModel(BaseModel):     _auto = False # don't create any database backend for AbstractModels     _register = False # not visible in ORM registry, meant to be python-inherited only Do you agree with that ? Thanks Guewen
2012-06-20 08:20:05 Daniel Reis bug added subscriber Daniel Reis (SECURITAS SA)
2012-06-21 10:11:19 Launchpad Janitor branch linked lp:~openerp-dev/openobject-server/6.1-bug-1013566-odo
2012-06-21 11:08:57 Launchpad Janitor branch linked lp:openobject-server/6.1
2012-06-21 11:13:59 Olivier Dony (Odoo) openobject-server: importance Undecided Low
2012-06-21 11:13:59 Olivier Dony (Odoo) openobject-server: status New Fix Released
2012-06-21 11:13:59 Olivier Dony (Odoo) openobject-server: milestone 6.1
2012-06-21 11:13:59 Olivier Dony (Odoo) openobject-server: assignee OpenERP's Framework R&D (openerp-dev-framework)