From 32001bc6d66b9dcf76d6beb9f09b3c0b0fbbd521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 4 Feb 2015 13:37:02 +0100 Subject: [PATCH] search_global yields record instead of id It is better for customization to yield record instead of id to prevent to instantiate a second times the record. issue4519 review6871002 --- CHANGELOG | 1 + doc/ref/models/models.rst | 2 +- trytond/ir/model.py | 12 ++++++------ trytond/ir/ui/menu.py | 2 +- trytond/model/modelstorage.py | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7962646a83..6ffa3e82d7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* search_global yields record instead of id * Add ModelTestCase * Add test for missing default model access * Report API refactorization diff --git a/doc/ref/models/models.rst b/doc/ref/models/models.rst index 773463e9bc..a64eb5ccae 100644 --- a/doc/ref/models/models.rst +++ b/doc/ref/models/models.rst @@ -289,7 +289,7 @@ Class methods: .. classmethod:: ModelStorage.search_global(cls, text) - Yield tuples (id, rec_name, icon) for records matching text. + Yield tuples (record, name, icon) for records matching text. It is used for the global search. .. classmethod:: ModelStorage.browse(ids) diff --git a/trytond/ir/model.py b/trytond/ir/model.py index cdba895a20..6301321322 100644 --- a/trytond/ir/model.py +++ b/trytond/ir/model.py @@ -170,7 +170,7 @@ class Model(ModelSQL, ModelView): def global_search(cls, text, limit, menu='ir.ui.menu'): """ Search on models for text including menu - Returns a list of tuple (ratio, model, model_name, id, rec_name, icon) + Returns a list of tuple (ratio, model, model_name, id, name, icon) The size of the list is limited to limit """ pool = Pool() @@ -196,12 +196,12 @@ class Model(ModelSQL, ModelView): Model = pool.get(model.model) if not hasattr(Model, 'search_global'): continue - for id_, rec_name, icon in Model.search_global(text): - if isinstance(rec_name, str): - rec_name = rec_name.decode('utf-8') - s.set_seq1(rec_name) + for record, name, icon in Model.search_global(text): + if isinstance(name, str): + name = name.decode('utf-8') + s.set_seq1(name) yield (s.ratio(), model.model, model.rec_name, - id_, rec_name, icon) + record.id, name, icon) return heapq.nlargest(int(limit), generate()) diff --git a/trytond/ir/ui/menu.py b/trytond/ir/ui/menu.py index 108a17654e..d3d83c9d50 100644 --- a/trytond/ir/ui/menu.py +++ b/trytond/ir/ui/menu.py @@ -171,7 +171,7 @@ class UIMenu(ModelSQL, ModelView): ('rec_name', 'ilike', '%%%s%%' % text), ]): if record.action: - yield record.id, record.rec_name, record.icon + yield record, record.rec_name, record.icon @classmethod def search(cls, domain, offset=0, limit=None, order=None, count=False, diff --git a/trytond/model/modelstorage.py b/trytond/model/modelstorage.py index 7cd2365f5d..6e23b63bb9 100644 --- a/trytond/model/modelstorage.py +++ b/trytond/model/modelstorage.py @@ -426,13 +426,13 @@ class ModelStorage(Model): @classmethod def search_global(cls, text): ''' - Yield tuples (id, rec_name, icon) for text + Yield tuples (record, name, icon) for text ''' # TODO improve search clause for record in cls.search([ ('rec_name', 'ilike', '%%%s%%' % text), ]): - yield record.id, record.rec_name, None + yield record, record.rec_name, None @classmethod def browse(cls, ids):