From 09fe39c0b61e0ffa5f2a98f913e9770770bbc4db Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Tue, 31 Jul 2012 13:08:45 +0200 Subject: [PATCH 1/7] [IMP] rec_name assertion and fallback bzr revid: al@openerp.com-20120731110845-nt11isvr96tuc207 --- openerp/osv/orm.py | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index a62561fc95d..a18c4195dc2 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -657,7 +657,7 @@ class BaseModel(object): _columns = {} _constraints = [] _defaults = {} - _rec_name = 'name' + _rec_name = False _parent_name = 'parent_id' _parent_store = False _parent_order = False @@ -1054,6 +1054,13 @@ class BaseModel(object): assert self._log_access, "TransientModels must have log_access turned on, "\ "in order to implement their access rights policy" + # Validate rec_name + if self._rec_name: + assert self.rec_name in self._columns + else: + self._rec_name = 'name' + + def __export_row(self, cr, uid, row, fields, context=None): if context is None: context = {} @@ -1567,6 +1574,12 @@ class BaseModel(object): res.extend(self.pool.get(parent).fields_get_keys(cr, user, context)) return res + def _rec_name_fallback(self, cr, uid, context=None): + rec_name = self._rec_name + if rec_name not in self._columns: + rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id" + return rec_name + # # Overload this method if you need a window title which depends on the context # @@ -1859,8 +1872,7 @@ class BaseModel(object): return view def _get_default_search_view(self, cr, user, context=None): - """ Generates a single-field tree view, using _rec_name if - it's one of the columns or the first column it finds otherwise + """ Generates a single-field search view, based on _rec_name. :param cr: database cursor :param int user: user id @@ -1868,17 +1880,12 @@ class BaseModel(object): :returns: a tree view as an lxml document :rtype: etree._Element """ - _rec_name = self._rec_name - if _rec_name not in self._columns: - _rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id" - view = etree.Element('search', string=self._description) - etree.SubElement(view, 'field', name=_rec_name) + etree.SubElement(view, 'field', name=self._rec_name_fallback(cr,uid,context)) return view def _get_default_tree_view(self, cr, user, context=None): - """ Generates a single-field tree view, using _rec_name if - it's one of the columns or the first column it finds otherwise + """ Generates a single-field tree view, based on _rec_name. :param cr: database cursor :param int user: user id @@ -1886,12 +1893,8 @@ class BaseModel(object): :returns: a tree view as an lxml document :rtype: etree._Element """ - _rec_name = self._rec_name - if _rec_name not in self._columns: - _rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id" - view = etree.Element('tree', string=self._description) - etree.SubElement(view, 'field', name=_rec_name) + etree.SubElement(view, 'field', name=self._rec_name_fallback(cr,uid,context)) return view def _get_default_calendar_view(self, cr, user, context=None): @@ -1918,7 +1921,7 @@ class BaseModel(object): return False view = etree.Element('calendar', string=self._description) - etree.SubElement(view, 'field', name=self._rec_name) + etree.SubElement(view, 'field', self._rec_name_get(cr,uid,context)) if (self._date_name not in self._columns): date_found = False @@ -2276,8 +2279,13 @@ class BaseModel(object): return [] if isinstance(ids, (int, long)): ids = [ids] - return [(r['id'], tools.ustr(r[self._rec_name])) for r in self.read(cr, user, ids, - [self._rec_name], context, load='_classic_write')] + + rec_name = self._rec_name + if rec_name not in self._columns: + res = [(r['id'], "%s,%s"%(self._name,r['id'])) for r in self.read(cr, user, ids, ['id'], context, load='_classic_write')] + else: + res = [(r['id'], tools.ustr(r[rec_name])) for r in self.read(cr, user, ids, [rec_name], context, load='_classic_write')] + return res def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100): """Search for records that have a display name matching the given ``name`` pattern if compared From d375ee272e55d071920cec9f5092143d67b2ea4d Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Tue, 31 Jul 2012 14:06:21 +0200 Subject: [PATCH 2/7] [FIX] rec_name assertion and fallback bzr revid: al@openerp.com-20120731120621-11j7k7965d9sclp2 --- openerp/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index a18c4195dc2..7570cb3d690 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1056,7 +1056,7 @@ class BaseModel(object): # Validate rec_name if self._rec_name: - assert self.rec_name in self._columns + assert self._rec_name in self._columns else: self._rec_name = 'name' From 8540dcf017fd21efca71dbc175127779cdcb78be Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Tue, 31 Jul 2012 14:25:57 +0200 Subject: [PATCH 3/7] [FIX] assertion message bzr revid: al@openerp.com-20120731122557-9ka14pw09x2fhmos --- openerp/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 7570cb3d690..c5490a6a99c 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1056,7 +1056,7 @@ class BaseModel(object): # Validate rec_name if self._rec_name: - assert self._rec_name in self._columns + assert self._rec_name in self._columns.keys() + ['id'], "Invalid rec_name %s for model %s" % (self.rec_name, self._name) else: self._rec_name = 'name' From 4811011c7617101d840bcdcc2c965b45972b0ce1 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Tue, 31 Jul 2012 17:17:18 +0200 Subject: [PATCH 4/7] [FIX] typo bzr revid: al@openerp.com-20120731151718-g0fk33ycoapob13j --- openerp/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index c5490a6a99c..5d2399309e0 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1056,7 +1056,7 @@ class BaseModel(object): # Validate rec_name if self._rec_name: - assert self._rec_name in self._columns.keys() + ['id'], "Invalid rec_name %s for model %s" % (self.rec_name, self._name) + assert self._rec_name in self._columns.keys() + ['id'], "Invalid rec_name %s for model %s" % (self._rec_name, self._name) else: self._rec_name = 'name' From 42859212faae2624cfe8eeb592d4836f50aa5ed2 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Tue, 31 Jul 2012 17:26:49 +0200 Subject: [PATCH 5/7] [FIX] typos and vmt review bzr revid: al@openerp.com-20120731152649-4mxph7d0cnlaqtef --- openerp/osv/orm.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 5d2399309e0..2c73e811eeb 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -657,7 +657,7 @@ class BaseModel(object): _columns = {} _constraints = [] _defaults = {} - _rec_name = False + _rec_name = None _parent_name = 'parent_id' _parent_store = False _parent_order = False @@ -1055,7 +1055,7 @@ class BaseModel(object): "in order to implement their access rights policy" # Validate rec_name - if self._rec_name: + if self._rec_name is None: assert self._rec_name in self._columns.keys() + ['id'], "Invalid rec_name %s for model %s" % (self._rec_name, self._name) else: self._rec_name = 'name' @@ -1921,7 +1921,7 @@ class BaseModel(object): return False view = etree.Element('calendar', string=self._description) - etree.SubElement(view, 'field', self._rec_name_get(cr,uid,context)) + etree.SubElement(view, 'field', self._rec_name_fallback(cr,uid,context)) if (self._date_name not in self._columns): date_found = False From 171500f171eb78524cb2d4977b6b9f98682f266d Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Wed, 1 Aug 2012 09:50:24 +0200 Subject: [PATCH 6/7] [MAOW] lolcat ninja fix in the branch, yaoh! bzr revid: vmt@openerp.com-20120801075024-mpc4seluumaa33ph --- openerp/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 2c73e811eeb..4233fc2de2d 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1055,7 +1055,7 @@ class BaseModel(object): "in order to implement their access rights policy" # Validate rec_name - if self._rec_name is None: + if self._rec_name is not None: assert self._rec_name in self._columns.keys() + ['id'], "Invalid rec_name %s for model %s" % (self._rec_name, self._name) else: self._rec_name = 'name' From 6aef95b5c28647c4b165ba8dcd0e31908a671a0a Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Wed, 1 Aug 2012 10:01:55 +0200 Subject: [PATCH 7/7] [MEOW] lolcat crazy ninja fix in the branch, take two! bzr revid: vmt@openerp.com-20120801080155-8qhg3aqkay2rrmbt --- openerp/osv/orm.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 4233fc2de2d..a1a267bd552 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1881,7 +1881,7 @@ class BaseModel(object): :rtype: etree._Element """ view = etree.Element('search', string=self._description) - etree.SubElement(view, 'field', name=self._rec_name_fallback(cr,uid,context)) + etree.SubElement(view, 'field', name=self._rec_name_fallback(cr, user, context)) return view def _get_default_tree_view(self, cr, user, context=None): @@ -1894,7 +1894,7 @@ class BaseModel(object): :rtype: etree._Element """ view = etree.Element('tree', string=self._description) - etree.SubElement(view, 'field', name=self._rec_name_fallback(cr,uid,context)) + etree.SubElement(view, 'field', name=self._rec_name_fallback(cr, user, context)) return view def _get_default_calendar_view(self, cr, user, context=None): @@ -1921,7 +1921,7 @@ class BaseModel(object): return False view = etree.Element('calendar', string=self._description) - etree.SubElement(view, 'field', self._rec_name_fallback(cr,uid,context)) + etree.SubElement(view, 'field', self._rec_name_fallback(cr, user, context)) if (self._date_name not in self._columns): date_found = False