changeset c6f80e10b331 in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset;node=c6f80e10b331
description:
Use cache to fill Reference selections
issue9235
review335301003
diffstat:
trytond/ir/action.py | 2 +-
trytond/ir/model.py | 31 ++++++++++++++++++-------------
trytond/ir/resource.py | 12 ++++--------
trytond/ir/translation.py | 6 +++---
trytond/model/modelsql.py | 7 +------
5 files changed, 27 insertions(+), 31 deletions(-)
diffs (152 lines):
diff -r 7c595aefe04e -r c6f80e10b331 trytond/ir/action.py
--- a/trytond/ir/action.py Sat Dec 26 21:49:29 2020 +0100
+++ b/trytond/ir/action.py Sun Dec 27 00:19:30 2020 +0100
@@ -187,7 +187,7 @@
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):
diff -r 7c595aefe04e -r c6f80e10b331 trytond/ir/model.py
--- a/trytond/ir/model.py Sat Dec 26 21:49:29 2020 +0100
+++ b/trytond/ir/model.py Sun Dec 27 00:19:30 2020 +0100
@@ -58,7 +58,7 @@
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 @@
[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
@@ -144,10 +145,23 @@
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 @@
@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):
diff -r 7c595aefe04e -r c6f80e10b331 trytond/ir/resource.py
--- a/trytond/ir/resource.py Sat Dec 26 21:49:29 2020 +0100
+++ b/trytond/ir/resource.py Sun Dec 27 00:19:30 2020 +0100
@@ -25,9 +25,9 @@
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 @@
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'])
diff -r 7c595aefe04e -r c6f80e10b331 trytond/ir/translation.py
--- a/trytond/ir/translation.py Sat Dec 26 21:49:29 2020 +0100
+++ b/trytond/ir/translation.py Sun Dec 27 00:19:30 2020 +0100
@@ -604,7 +604,7 @@
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 @@
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 @@
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()
diff -r 7c595aefe04e -r c6f80e10b331 trytond/model/modelsql.py
--- a/trytond/model/modelsql.py Sat Dec 26 21:49:29 2020 +0100
+++ b/trytond/model/modelsql.py Sun Dec 27 00:19:30 2020 +0100
@@ -1224,12 +1224,7 @@
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 += '...'