Allow filtering model names by subclasses

This commit is contained in:
Cédric Krier committed 2024-11-16 18:41:25 +01:00
1 parent 05abf8ef2b
commit d661f3d8da
1 file changed
+15 -7
+15 -7
View File
@@ -166,22 +166,30 @@ class Model(
and model._on_change_notify_depends}
@classmethod
def get_name_items(cls):
def get_name_items(cls, classes=None):
"Return a list of couple mapping models to names"
items = cls._get_names_cache.get('items')
pool = Pool()
key = 'items', str(classes)
items = cls._get_names_cache.get(key)
if items is None:
models = cls.search([])
items = [(m.name, m.string) for m in models]
cls._get_names_cache.set('items', items)
items = ((m.name, m.string) for m in models)
if classes:
items = (
(m, n) for m, n in items
if issubclass(pool.get(m), classes))
items = list(items)
cls._get_names_cache.set(key, items)
return items
@classmethod
def get_names(cls):
def get_names(cls, classes=None):
"Return a dictionary mapping models to names"
dict_ = cls._get_names_cache.get('dict')
key = 'dict', str(classes)
dict_ = cls._get_names_cache.get(key)
if dict_ is None:
dict_ = dict(cls.get_name_items())
cls._get_names_cache.set('dict', dict_)
cls._get_names_cache.set(key, dict_)
return dict_
@classmethod