Use cache to fill Reference selections

issue9235
review335301003
This commit is contained in:
Cédric Krier
2020-12-27 00:19:30 +01:00
parent f40d16a89e
commit d766a67fbb
5 changed files with 27 additions and 31 deletions
+1 -1
View File
@@ -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
View File
@@ -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):
+4 -8
View File
@@ -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'])
+3 -3
View File
@@ -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()
+1 -6
View File
@@ -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 += '...'