Use cache to fill Reference selections
issue9235 review335301003
This commit is contained in:
@@ -187,7 +187,7 @@ class ActionKeyword(ModelSQL, ModelView):
|
||||
def models_get():
|
||||
pool = Pool()
|
||||
Model = pool.get('ir.model')
|
||||
return [(None, '')] + [(m.model, m.name) for m in Model.search([])]
|
||||
return [(None, '')] + Model.get_name_items()
|
||||
|
||||
@classmethod
|
||||
def delete(cls, keywords):
|
||||
|
||||
+18
-13
@@ -58,7 +58,7 @@ class Model(ModelSQL, ModelView):
|
||||
global_search_p = fields.Boolean('Global Search')
|
||||
fields = fields.One2Many('ir.model.field', 'model', 'Fields',
|
||||
required=True)
|
||||
_get_name_cache = Cache('ir.model.get_name')
|
||||
_get_names_cache = Cache('ir.model.get_names')
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
@@ -105,6 +105,7 @@ class Model(ModelSQL, ModelView):
|
||||
[ir_model.name, ir_model.info],
|
||||
[model._get_name(), model.__doc__],
|
||||
where=ir_model.id == model_id))
|
||||
cls._get_names_cache.clear()
|
||||
return model_id
|
||||
|
||||
@classmethod
|
||||
@@ -143,11 +144,24 @@ class Model(ModelSQL, ModelView):
|
||||
return [name for name, model in Pool().iterobject()
|
||||
if getattr(model, '_history', False)]
|
||||
|
||||
@classmethod
|
||||
def get_name_items(cls):
|
||||
"Return a list of couple mapping models to names"
|
||||
items = cls._get_names_cache.get('items')
|
||||
if items is None:
|
||||
models = cls.search([])
|
||||
items = [(m.model, m.name) for m in models]
|
||||
cls._get_names_cache.set('items', items)
|
||||
return items
|
||||
|
||||
@classmethod
|
||||
def get_names(cls):
|
||||
"Return a dictionary mapping models to names"
|
||||
models = cls.search([])
|
||||
return {m.model: m.name for m in models}
|
||||
dict_ = cls._get_names_cache.get('dict')
|
||||
if dict_ is None:
|
||||
dict_ = dict(cls.get_name_items())
|
||||
cls._get_names_cache.set('dict', dict_)
|
||||
return dict_
|
||||
|
||||
@classmethod
|
||||
def global_search(cls, text, limit, menu='ir.ui.menu'):
|
||||
@@ -189,16 +203,7 @@ class Model(ModelSQL, ModelView):
|
||||
|
||||
@classmethod
|
||||
def get_name(cls, model):
|
||||
name = cls._get_name_cache.get(model)
|
||||
if name is None:
|
||||
models = cls.search([('model', '=', model)], limit=1)
|
||||
if models:
|
||||
model, = models
|
||||
name = model.name
|
||||
cls._get_name_cache.set(model, name)
|
||||
else:
|
||||
name = model
|
||||
return name
|
||||
return cls.get_names().get(model, model)
|
||||
|
||||
|
||||
class ModelField(ModelSQL, ModelView):
|
||||
|
||||
@@ -25,9 +25,9 @@ class ResourceAccessMixin(ModelStorage):
|
||||
pool = Pool()
|
||||
Model = pool.get('ir.model')
|
||||
ModelAccess = pool.get('ir.model.access')
|
||||
models = Model.search([])
|
||||
access = ModelAccess.get_access([m.model for m in models])
|
||||
return [(m.model, m.name) for m in models if access[m.model]['read']]
|
||||
models = Model.get_name_items()
|
||||
access = ModelAccess.get_access([m for m, _ in models])
|
||||
return [(m, n) for m, n in models if access[m]['read']]
|
||||
|
||||
@classmethod
|
||||
def check_access(cls, ids, mode='read'):
|
||||
@@ -113,11 +113,7 @@ class ResourceMixin(ResourceAccessMixin, ModelStorage, ModelView):
|
||||
resources = []
|
||||
if isinstance(self.resource, ResourceCopyMixin):
|
||||
models = self.resource.get_resources_to_copy(self.__name__)
|
||||
if models:
|
||||
models = Model.search([
|
||||
('model', 'in', models),
|
||||
])
|
||||
resources.extend((m.model, m.name) for m in models)
|
||||
resources.extend((m, Model.get_name(m)) for m in models)
|
||||
return resources
|
||||
|
||||
@fields.depends(methods=['get_copy_to_resources'])
|
||||
|
||||
@@ -604,7 +604,7 @@ class Translation(ModelSQL, ModelView):
|
||||
Model = pool.get('ir.model')
|
||||
ModelField = pool.get('ir.model.field')
|
||||
Message._message_cache.clear()
|
||||
Model._get_name_cache.clear()
|
||||
Model._get_names_cache.clear()
|
||||
ModelField._get_name_cache.clear()
|
||||
cls._translation_cache.clear()
|
||||
cls._translation_report_cache.clear()
|
||||
@@ -618,7 +618,7 @@ class Translation(ModelSQL, ModelView):
|
||||
Model = pool.get('ir.model')
|
||||
ModelField = pool.get('ir.model.field')
|
||||
Message._message_cache.clear()
|
||||
Model._get_name_cache.clear()
|
||||
Model._get_names_cache.clear()
|
||||
ModelField._get_name_cache.clear()
|
||||
cls._translation_cache.clear()
|
||||
cls._translation_report_cache.clear()
|
||||
@@ -638,7 +638,7 @@ class Translation(ModelSQL, ModelView):
|
||||
Model = pool.get('ir.model')
|
||||
ModelField = pool.get('ir.model.field')
|
||||
Message._message_cache.clear()
|
||||
Model._get_name_cache.clear()
|
||||
Model._get_names_cache.clear()
|
||||
ModelField._get_name_cache.clear()
|
||||
cls._translation_cache.clear()
|
||||
cls._translation_report_cache.clear()
|
||||
|
||||
@@ -1224,12 +1224,7 @@ class ModelSQL(ModelStorage):
|
||||
if wrong_ids:
|
||||
model = cls.__name__
|
||||
if Model:
|
||||
models = Model.search([
|
||||
('model', '=', cls.__name__),
|
||||
], limit=1)
|
||||
if models:
|
||||
model, = models
|
||||
model = model.name
|
||||
model = Model.get_name(cls.__name__)
|
||||
ids = ', '.join(map(str, ids[:5]))
|
||||
if len(wrong_ids) > 5:
|
||||
ids += '...'
|
||||
|
||||
Reference in New Issue
Block a user