summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVo Minh Thu <vmt@openerp.com>2012-12-14 11:58:20 +0100
committerVo Minh Thu <vmt@openerp.com>2012-12-14 11:58:20 +0100
commit3667e3c6190d8a22e358bfd2eac48e0cdca9a8a3 (patch)
treecfb04829684675d486dc9fca5b8bbf94211986cc
parentf668a123d94e3e27ea7c1e7343ab8fafd5ceb69f (diff)
[IMP] module loading: removed unnecessary indentation, added comments.
bzr revid: vmt@openerp.com-20121214105820-9nlgzu9pm7cvh1pz
-rw-r--r--openerp/modules/loading.py7
-rw-r--r--openerp/osv/orm.py83
2 files changed, 48 insertions, 42 deletions
diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py
index 48f816035ff..b4ad08af7a1 100644
--- a/openerp/modules/loading.py
+++ b/openerp/modules/loading.py
@@ -146,7 +146,10 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
cr.execute("select (now() at time zone 'UTC')::timestamp")
dt_before_load = cr.fetchone()[0]
- pool.fields_by_model = {'whatever': {}}
+ # Query manual fields for all models at once and save them on the registry
+ # so the initialization code for each model does not have to do it
+ # one model at a time.
+ pool.fields_by_model = {'so_this_dict_is_not_empty': {}}
cr.execute('SELECT * FROM ir_model_fields WHERE state=%s', ('manual',))
for field in cr.dictfetchall():
pool.fields_by_model.setdefault(field['model'], []).append(field)
@@ -227,6 +230,8 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
cr.commit()
+ # The query won't be valid for models created later (i.e. custom model
+ # created after the registry has been loaded), so empty its result.
pool.fields_by_model = {}
cr.commit()
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 4ba3d24b4c4..7d89139b2d5 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -1018,49 +1018,50 @@ class BaseModel(object):
# Load manual fields
- #cr.execute("SELECT id FROM ir_model_fields WHERE name=%s AND model=%s", ('state', 'ir.model.fields'))
- if True: #cr.fetchone():
- if self.pool.fields_by_model:
- fields__ = self.pool.fields_by_model.get(self._name, [])
+ # Check the query is already done for all modules of if we need to
+ # do it ourselves.
+ if self.pool.fields_by_model:
+ manual_fields = self.pool.fields_by_model.get(self._name, [])
+ else:
+ cr.execute('SELECT * FROM ir_model_fields WHERE model=%s AND state=%s', (self._name, 'manual'))
+ manual_fields = cr.dictfetchall()
+ for field in manual_fields:
+ if field['name'] in self._columns:
+ continue
+ attrs = {
+ 'string': field['field_description'],
+ 'required': bool(field['required']),
+ 'readonly': bool(field['readonly']),
+ 'domain': eval(field['domain']) if field['domain'] else None,
+ 'size': field['size'],
+ 'ondelete': field['on_delete'],
+ 'translate': (field['translate']),
+ 'manual': True,
+ #'select': int(field['select_level'])
+ }
+
+ if field['serialization_field_id']:
+ cr.execute('SELECT name FROM ir_model_fields WHERE id=%s', (field['serialization_field_id'],))
+ attrs.update({'serialization_field': cr.fetchone()[0], 'type': field['ttype']})
+ if field['ttype'] in ['many2one', 'one2many', 'many2many']:
+ attrs.update({'relation': field['relation']})
+ self._columns[field['name']] = fields.sparse(**attrs)
+ elif field['ttype'] == 'selection':
+ self._columns[field['name']] = fields.selection(eval(field['selection']), **attrs)
+ elif field['ttype'] == 'reference':
+ self._columns[field['name']] = fields.reference(selection=eval(field['selection']), **attrs)
+ elif field['ttype'] == 'many2one':
+ self._columns[field['name']] = fields.many2one(field['relation'], **attrs)
+ elif field['ttype'] == 'one2many':
+ self._columns[field['name']] = fields.one2many(field['relation'], field['relation_field'], **attrs)
+ elif field['ttype'] == 'many2many':
+ _rel1 = field['relation'].replace('.', '_')
+ _rel2 = field['model'].replace('.', '_')
+ _rel_name = 'x_%s_%s_%s_rel' % (_rel1, _rel2, field['name'])
+ self._columns[field['name']] = fields.many2many(field['relation'], _rel_name, 'id1', 'id2', **attrs)
else:
- cr.execute('SELECT * FROM ir_model_fields WHERE model=%s AND state=%s', (self._name, 'manual'))
- fields__ = cr.dictfetchall()
- for field in fields__:
- if field['name'] in self._columns:
- continue
- attrs = {
- 'string': field['field_description'],
- 'required': bool(field['required']),
- 'readonly': bool(field['readonly']),
- 'domain': eval(field['domain']) if field['domain'] else None,
- 'size': field['size'],
- 'ondelete': field['on_delete'],
- 'translate': (field['translate']),
- 'manual': True,
- #'select': int(field['select_level'])
- }
+ self._columns[field['name']] = getattr(fields, field['ttype'])(**attrs)
- if field['serialization_field_id']:
- cr.execute('SELECT name FROM ir_model_fields WHERE id=%s', (field['serialization_field_id'],))
- attrs.update({'serialization_field': cr.fetchone()[0], 'type': field['ttype']})
- if field['ttype'] in ['many2one', 'one2many', 'many2many']:
- attrs.update({'relation': field['relation']})
- self._columns[field['name']] = fields.sparse(**attrs)
- elif field['ttype'] == 'selection':
- self._columns[field['name']] = fields.selection(eval(field['selection']), **attrs)
- elif field['ttype'] == 'reference':
- self._columns[field['name']] = fields.reference(selection=eval(field['selection']), **attrs)
- elif field['ttype'] == 'many2one':
- self._columns[field['name']] = fields.many2one(field['relation'], **attrs)
- elif field['ttype'] == 'one2many':
- self._columns[field['name']] = fields.one2many(field['relation'], field['relation_field'], **attrs)
- elif field['ttype'] == 'many2many':
- _rel1 = field['relation'].replace('.', '_')
- _rel2 = field['model'].replace('.', '_')
- _rel_name = 'x_%s_%s_%s_rel' % (_rel1, _rel2, field['name'])
- self._columns[field['name']] = fields.many2many(field['relation'], _rel_name, 'id1', 'id2', **attrs)
- else:
- self._columns[field['name']] = getattr(fields, field['ttype'])(**attrs)
self._inherits_check()
self._inherits_reload()
if not self._sequence: