From 709daa4e43ef0fa1657356484382042767f9ce8c Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Wed, 23 Jul 2014 19:54:06 +0200 Subject: [PATCH 01/11] [ADD] partner_firstname for v8 because it's working as is --- {__unported__/partner_firstname => partner_firstname}/__init__.py | 0 .../partner_firstname => partner_firstname}/__openerp__.py | 0 {__unported__/partner_firstname => partner_firstname}/i18n/de.po | 0 {__unported__/partner_firstname => partner_firstname}/i18n/en.po | 0 {__unported__/partner_firstname => partner_firstname}/i18n/fr.po | 0 {__unported__/partner_firstname => partner_firstname}/i18n/nl.po | 0 .../i18n/partner_firstname.pot | 0 {__unported__/partner_firstname => partner_firstname}/partner.py | 0 .../partner_firstname => partner_firstname}/partner_view.xml | 0 {__unported__/partner_firstname => partner_firstname}/res_user.py | 0 .../partner_firstname => partner_firstname}/res_user_view.xml | 0 .../partner_firstname => partner_firstname}/tests/__init__.py | 0 .../tests/test_partner_firstname.py | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename {__unported__/partner_firstname => partner_firstname}/__init__.py (100%) rename {__unported__/partner_firstname => partner_firstname}/__openerp__.py (100%) rename {__unported__/partner_firstname => partner_firstname}/i18n/de.po (100%) rename {__unported__/partner_firstname => partner_firstname}/i18n/en.po (100%) rename {__unported__/partner_firstname => partner_firstname}/i18n/fr.po (100%) rename {__unported__/partner_firstname => partner_firstname}/i18n/nl.po (100%) rename {__unported__/partner_firstname => partner_firstname}/i18n/partner_firstname.pot (100%) rename {__unported__/partner_firstname => partner_firstname}/partner.py (100%) rename {__unported__/partner_firstname => partner_firstname}/partner_view.xml (100%) rename {__unported__/partner_firstname => partner_firstname}/res_user.py (100%) rename {__unported__/partner_firstname => partner_firstname}/res_user_view.xml (100%) rename {__unported__/partner_firstname => partner_firstname}/tests/__init__.py (100%) rename {__unported__/partner_firstname => partner_firstname}/tests/test_partner_firstname.py (100%) diff --git a/__unported__/partner_firstname/__init__.py b/partner_firstname/__init__.py similarity index 100% rename from __unported__/partner_firstname/__init__.py rename to partner_firstname/__init__.py diff --git a/__unported__/partner_firstname/__openerp__.py b/partner_firstname/__openerp__.py similarity index 100% rename from __unported__/partner_firstname/__openerp__.py rename to partner_firstname/__openerp__.py diff --git a/__unported__/partner_firstname/i18n/de.po b/partner_firstname/i18n/de.po similarity index 100% rename from __unported__/partner_firstname/i18n/de.po rename to partner_firstname/i18n/de.po diff --git a/__unported__/partner_firstname/i18n/en.po b/partner_firstname/i18n/en.po similarity index 100% rename from __unported__/partner_firstname/i18n/en.po rename to partner_firstname/i18n/en.po diff --git a/__unported__/partner_firstname/i18n/fr.po b/partner_firstname/i18n/fr.po similarity index 100% rename from __unported__/partner_firstname/i18n/fr.po rename to partner_firstname/i18n/fr.po diff --git a/__unported__/partner_firstname/i18n/nl.po b/partner_firstname/i18n/nl.po similarity index 100% rename from __unported__/partner_firstname/i18n/nl.po rename to partner_firstname/i18n/nl.po diff --git a/__unported__/partner_firstname/i18n/partner_firstname.pot b/partner_firstname/i18n/partner_firstname.pot similarity index 100% rename from __unported__/partner_firstname/i18n/partner_firstname.pot rename to partner_firstname/i18n/partner_firstname.pot diff --git a/__unported__/partner_firstname/partner.py b/partner_firstname/partner.py similarity index 100% rename from __unported__/partner_firstname/partner.py rename to partner_firstname/partner.py diff --git a/__unported__/partner_firstname/partner_view.xml b/partner_firstname/partner_view.xml similarity index 100% rename from __unported__/partner_firstname/partner_view.xml rename to partner_firstname/partner_view.xml diff --git a/__unported__/partner_firstname/res_user.py b/partner_firstname/res_user.py similarity index 100% rename from __unported__/partner_firstname/res_user.py rename to partner_firstname/res_user.py diff --git a/__unported__/partner_firstname/res_user_view.xml b/partner_firstname/res_user_view.xml similarity index 100% rename from __unported__/partner_firstname/res_user_view.xml rename to partner_firstname/res_user_view.xml diff --git a/__unported__/partner_firstname/tests/__init__.py b/partner_firstname/tests/__init__.py similarity index 100% rename from __unported__/partner_firstname/tests/__init__.py rename to partner_firstname/tests/__init__.py diff --git a/__unported__/partner_firstname/tests/test_partner_firstname.py b/partner_firstname/tests/test_partner_firstname.py similarity index 100% rename from __unported__/partner_firstname/tests/test_partner_firstname.py rename to partner_firstname/tests/test_partner_firstname.py From 94979df572910ac41dc6c876b0da85f2f5f3d431 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Thu, 24 Jul 2014 00:05:48 +0200 Subject: [PATCH 02/11] [FIX] IntegrityError: column "lastname" contains null values when creating or copying users --- partner_firstname/partner.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/partner_firstname/partner.py b/partner_firstname/partner.py index 67553296b..1151b8fbd 100644 --- a/partner_firstname/partner.py +++ b/partner_firstname/partner.py @@ -99,7 +99,8 @@ class ResPartner(orm.Model): to_use = vals if 'name' in vals: corr_vals = vals.copy() - corr_vals['lastname'] = corr_vals['name'] + if vals.get('name'): + corr_vals['lastname'] = corr_vals['name'] del(corr_vals['name']) to_use = corr_vals return super(ResPartner, self).create(cursor, uid, to_use, context=context) From 032c07cc9d3777dacdcc2a20cb16f0067ef8f4c5 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Sat, 26 Jul 2014 01:46:33 +0200 Subject: [PATCH 03/11] [IMP] partner_firstname - logging --- partner_firstname/partner.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/partner_firstname/partner.py b/partner_firstname/partner.py index 1151b8fbd..70df3f6cc 100644 --- a/partner_firstname/partner.py +++ b/partner_firstname/partner.py @@ -19,7 +19,9 @@ ############################################################################## from openerp.osv import orm, fields from openerp.tools.translate import _ +import logging +_logger = logging.getLogger(__name__) class ResPartner(orm.Model): """Adds lastname and firstname, name become a stored function field""" @@ -33,7 +35,10 @@ class ResPartner(orm.Model): # Create Sql constraint if table is not empty cursor.execute('SELECT id FROM res_partner Limit 1') if cursor.fetchone(): - cursor.execute('ALTER TABLE res_partner ALTER COLUMN lastname SET NOT NULL') + cursor.execute('ALTER TABLE res_partner ALTER COLUMN lastname ' + 'SET NOT NULL') + _logger.info("NOT NULL constraint for res_partner.lastname " + "correctly set") def _prepare_name_custom(self, cursor, uid, partner, context=None): """ From 74426b41ec2c57810f7395030db69c8519afac1f Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Sat, 26 Jul 2014 02:06:11 +0200 Subject: [PATCH 04/11] [FIX] PEP8 --- partner_firstname/partner.py | 46 ++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/partner_firstname/partner.py b/partner_firstname/partner.py index 70df3f6cc..23772b5dd 100644 --- a/partner_firstname/partner.py +++ b/partner_firstname/partner.py @@ -23,15 +23,18 @@ import logging _logger = logging.getLogger(__name__) + class ResPartner(orm.Model): """Adds lastname and firstname, name become a stored function field""" _inherit = 'res.partner' def init(self, cursor): - cursor.execute('SELECT id FROM res_partner WHERE lastname IS NOT NULL Limit 1') + cursor.execute('SELECT id FROM res_partner WHERE lastname IS NOT NULL ' + 'Limit 1') if not cursor.fetchone(): - cursor.execute('UPDATE res_partner set lastname = name WHERE name IS NOT NULL') + cursor.execute('UPDATE res_partner set lastname = name WHERE name ' + 'IS NOT NULL') # Create Sql constraint if table is not empty cursor.execute('SELECT id FROM res_partner Limit 1') if cursor.fetchone(): @@ -55,18 +58,26 @@ class ResPartner(orm.Model): cursor, uid, partner, context=context) return res - def _write_name(self, cursor, uid, partner_id, field_name, field_value, arg, context=None): + def _write_name( + self, cursor, uid, partner_id, field_name, field_value, arg, + context=None + ): """ Try to reverse the effect of _compute_name_custom: - * if the partner is not a company and the firstname does not change in the new name - then firstname remains untouched and lastname is updated accordingly + * if the partner is not a company and the firstname does not change in + the new name then firstname remains untouched and lastname is updated + accordingly * otherwise lastname=new name and firstname=False - In addition an heuristic avoids to keep a firstname without a non-blank lastname + In addition an heuristic avoids to keep a firstname without a non-blank + lastname """ - field_value = field_value and not field_value.isspace() and field_value or False + field_value = ( + field_value and not field_value.isspace() and field_value or False) vals = {'lastname': field_value, 'firstname': False} if field_value: - flds = self.read(cursor, uid, [partner_id], ['firstname', 'is_company'], context=context)[0] + flds = self.read( + cursor, uid, [partner_id], ['firstname', 'is_company'], + context=context)[0] if not flds['is_company']: to_check = ' %s' % flds['firstname'] if field_value.endswith(to_check): @@ -83,23 +94,27 @@ class ResPartner(orm.Model): def copy_data(self, cr, uid, _id, default=None, context=None): """ - Avoid to replicate the firstname into the name when duplicating a partner + Avoid to replicate the firstname into the name when duplicating a + partner """ default = default or {} if not default.get('lastname'): default = default.copy() default['lastname'] = ( - _('%s (copy)') % self.read(cr, uid, [_id], ['lastname'], context=context)[0]['lastname'] + _('%s (copy)') % self.read( + cr, uid, [_id], ['lastname'], context=context + )[0]['lastname'] ) if default.get('name'): del(default['name']) - return super(ResPartner, self).copy_data(cr, uid, _id, default, context=context) + return super(ResPartner, self).copy_data( + cr, uid, _id, default, context=context) def create(self, cursor, uid, vals, context=None): """ - To support data backward compatibility we have to keep this overwrite even if we - use fnct_inv: otherwise we can't create entry because lastname is mandatory and module - will not install if there is demo data + To support data backward compatibility we have to keep this overwrite + even if we use fnct_inv: otherwise we can't create entry because + lastname is mandatory and module will not install if there is demo data """ to_use = vals if 'name' in vals: @@ -108,7 +123,8 @@ class ResPartner(orm.Model): corr_vals['lastname'] = corr_vals['name'] del(corr_vals['name']) to_use = corr_vals - return super(ResPartner, self).create(cursor, uid, to_use, context=context) + return super(ResPartner, self).create( + cursor, uid, to_use, context=context) _columns = {'name': fields.function(_compute_name_custom, string="Name", type="char", store=True, From ae4c47d9edda38b46d827c28dd8cd6e2f9976ffe Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Tue, 29 Jul 2014 15:21:15 +0200 Subject: [PATCH 05/11] [FIX] IntegrityError: column "lastname" contains null values --- partner_firstname/partner.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/partner_firstname/partner.py b/partner_firstname/partner.py index 23772b5dd..b4be005a5 100644 --- a/partner_firstname/partner.py +++ b/partner_firstname/partner.py @@ -29,19 +29,23 @@ class ResPartner(orm.Model): _inherit = 'res.partner' - def init(self, cursor): - cursor.execute('SELECT id FROM res_partner WHERE lastname IS NOT NULL ' + def _set_default_value_on_column(self, cr, column_name, context=None): + res = super(ResPartner, self)._set_default_value_on_column( + cr, column_name, context=context) + if column_name == 'lastname': + cr.execute('SELECT id FROM res_partner WHERE lastname IS NOT NULL ' 'Limit 1') - if not cursor.fetchone(): - cursor.execute('UPDATE res_partner set lastname = name WHERE name ' + if not cr.fetchone(): + cr.execute('UPDATE res_partner set lastname = name WHERE name ' 'IS NOT NULL') - # Create Sql constraint if table is not empty - cursor.execute('SELECT id FROM res_partner Limit 1') - if cursor.fetchone(): - cursor.execute('ALTER TABLE res_partner ALTER COLUMN lastname ' + # Create Sql constraint if table is not empty + cr.execute('SELECT id FROM res_partner Limit 1') + if cr.fetchone(): + cr.execute('ALTER TABLE res_partner ALTER COLUMN lastname ' 'SET NOT NULL') - _logger.info("NOT NULL constraint for res_partner.lastname " - "correctly set") + _logger.info("NOT NULL constraint for " + "res_partner.lastname correctly set") + return res def _prepare_name_custom(self, cursor, uid, partner, context=None): """ From 8dc056bd2a9088f53975d8bd8a69d2d2d4b05942 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Tue, 29 Jul 2014 15:31:06 +0200 Subject: [PATCH 06/11] [FIX] partner_firstname - some PEP8 --- partner_firstname/__openerp__.py | 6 ++- partner_firstname/res_user.py | 7 +++- .../tests/test_partner_firstname.py | 37 ++++++++++++++----- 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/partner_firstname/__openerp__.py b/partner_firstname/__openerp__.py index 34e1443e7..751dd2735 100644 --- a/partner_firstname/__openerp__.py +++ b/partner_firstname/__openerp__.py @@ -24,8 +24,10 @@ This module splits first name and last name for non company partners ==================================================================== -The field 'name' becomes a stored function field concatenating lastname and firstname -Note: in version 7.0, installing this module invalidates a yaml test in the 'edi' module +The field 'name' becomes a stored function field concatenating lastname and +firstname +Note: in version 7.0, installing this module invalidates a yaml test in the +'edi' module Contributors ============ diff --git a/partner_firstname/res_user.py b/partner_firstname/res_user.py index 4a5c5fad1..a84f5b18c 100644 --- a/partner_firstname/res_user.py +++ b/partner_firstname/res_user.py @@ -33,8 +33,11 @@ class ResUsers(orm.Model): if not default.get('lastname'): default = default.copy() default['lastname'] = ( - _('%s (copy)') % self.read(cr, uid, [_id], ['lastname'], context=context)[0]['lastname'] + _('%s (copy)') % self.read( + cr, uid, [_id], ['lastname'], context=context + )[0]['lastname'] ) if default.get('name'): del(default['name']) - return super(ResUsers, self).copy_data(cr, uid, _id, default, context=context) + return super(ResUsers, self).copy_data( + cr, uid, _id, default, context=context) diff --git a/partner_firstname/tests/test_partner_firstname.py b/partner_firstname/tests/test_partner_firstname.py index 5fc214aac..0e7c81afe 100644 --- a/partner_firstname/tests/test_partner_firstname.py +++ b/partner_firstname/tests/test_partner_firstname.py @@ -95,19 +95,36 @@ class test_partner_firstname(common.TransactionCase): vals = self.user_model.read(cr, uid, [res_id], ['name', 'lastname', 'firstname'], context=context)[0] self.assertEqual(vals['name'], 'change firstname', 'Update of the user lastname failed with wrong name') - self.assertEqual(vals['lastname'], 'change', 'Update of the user lastname failed with wrong lastname') - self.assertEqual(vals['firstname'], 'firstname', 'Update of the user lastname failed with wrong firstname') + self.assertEqual( + vals['lastname'], 'change', + 'Update of the user lastname failed with wrong lastname') + self.assertEqual( + vals['firstname'], 'firstname', + 'Update of the user lastname failed with wrong firstname') def test_update_user_firstname(self): cr, uid, context = self.cr, self.uid, self.context # create a user - res_id = self.user_model.create(cr, uid, self.fields_user, context=context) + res_id = self.user_model.create( + cr, uid, self.fields_user, context=context) # get the related partner id and add it a firstname - flds = self.user_model.read(cr, uid, [res_id], ['partner_id'], context=context)[0] - self.partner_model.write(cr, uid, flds['partner_id'][0], {'firstname': 'firstname'}, context=context) - self.user_model.write(cr, uid, res_id, {'name': 'lastname other'}, context=context) - vals = self.user_model.read(cr, uid, [res_id], ['name', 'lastname', 'firstname'], context=context)[0] + flds = self.user_model.read( + cr, uid, [res_id], ['partner_id'], context=context)[0] + self.partner_model.write( + cr, uid, flds['partner_id'][0], {'firstname': 'firstname'}, + context=context) + self.user_model.write( + cr, uid, res_id, {'name': 'lastname other'}, context=context) + vals = self.user_model.read( + cr, uid, [res_id], ['name', 'lastname', 'firstname'], + context=context)[0] - self.assertEqual(vals['name'], 'lastname other', 'Update of the user firstname failed with wrong name') - self.assertEqual(vals['lastname'], 'lastname other', 'Update of the user firstname failed with wrong lastname') - self.assertFalse(vals['firstname'], 'Update of the user firstname failed with wrong firstname') + self.assertEqual( + vals['name'], 'lastname other', + 'Update of the user firstname failed with wrong name') + self.assertEqual( + vals['lastname'], 'lastname other', + 'Update of the user firstname failed with wrong lastname') + self.assertFalse( + vals['firstname'], + 'Update of the user firstname failed with wrong firstname') From 83539dfd7a315be17a9a6feae767af0fbf3faa26 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Tue, 29 Jul 2014 15:36:56 +0200 Subject: [PATCH 07/11] [FIX] partner_firstname - PEP8 --- partner_firstname/partner.py | 1 + .../tests/test_partner_firstname.py | 65 +++++++++++++------ 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/partner_firstname/partner.py b/partner_firstname/partner.py index b4be005a5..85dd9b53c 100644 --- a/partner_firstname/partner.py +++ b/partner_firstname/partner.py @@ -2,6 +2,7 @@ ############################################################################## # # Author: Nicolas Bessi. Copyright Camptocamp SA +# Copyright (C) 2014 Agile Business Group () # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/partner_firstname/tests/test_partner_firstname.py b/partner_firstname/tests/test_partner_firstname.py index 0e7c81afe..a4bac1ee0 100644 --- a/partner_firstname/tests/test_partner_firstname.py +++ b/partner_firstname/tests/test_partner_firstname.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## +# # # Authors: Nemry Jonathan # Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu) @@ -26,7 +26,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # -############################################################################## +# import openerp.tests.common as common from openerp.tools.translate import _ @@ -42,16 +42,21 @@ class test_partner_firstname(common.TransactionCase): self.user_model = self.registry("res.users") self.partner_model = self.registry("res.partner") - self.fields_partner = {'lastname': 'lastname', 'firstname': 'firstname'} - self.fields_user = {'name': 'lastname', 'login': 'v5Ue4Tql0Pm67KX05g25A'} + self.fields_partner = { + 'lastname': 'lastname', 'firstname': 'firstname'} + self.fields_user = { + 'name': 'lastname', 'login': 'v5Ue4Tql0Pm67KX05g25A'} self.context = self.user_model.context_get(self.cr, self.uid) def test_copy_partner(self): cr, uid, context = self.cr, self.uid, self.context - res_id = self.partner_model.create(cr, uid, self.fields_partner, context=context) - res_id = self.partner_model.copy(cr, uid, res_id, default={}, context=context) - vals = self.partner_model.read(cr, uid, [res_id], ['name', 'lastname', 'firstname'], context=context)[0] + res_id = self.partner_model.create( + cr, uid, self.fields_partner, context=context) + res_id = self.partner_model.copy( + cr, uid, res_id, default={}, context=context) + vals = self.partner_model.read(cr, uid, [res_id], [ + 'name', 'lastname', 'firstname'], context=context)[0] self.assertEqual( vals['name'], @@ -63,38 +68,56 @@ class test_partner_firstname(common.TransactionCase): _('%s (copy)') % 'lastname', 'Copy of the partner failed with wrong lastname' ) - self.assertEqual(vals['firstname'], 'firstname', 'Copy of the partner failed with wrong firstname') + self.assertEqual(vals['firstname'], 'firstname', + 'Copy of the partner failed with wrong firstname') def test_copy_user(self): cr, uid, context = self.cr, self.uid, self.context # create a user - res_id = self.user_model.create(cr, uid, self.fields_user, context=context) + res_id = self.user_model.create( + cr, uid, self.fields_user, context=context) # get the related partner id and add it a firstname - flds = self.user_model.read(cr, uid, [res_id], ['partner_id'], context=context)[0] - self.partner_model.write(cr, uid, flds['partner_id'][0], {'firstname': 'firstname'}, context=context) + flds = self.user_model.read( + cr, uid, [res_id], ['partner_id'], context=context)[0] + self.partner_model.write(cr, uid, flds['partner_id'][ + 0], {'firstname': 'firstname'}, context=context) # copy the user and compare result - res_id = self.user_model.copy(cr, uid, res_id, default={}, context=context) - vals = self.user_model.read(cr, uid, [res_id], ['name', 'lastname', 'firstname'], context=context)[0] + res_id = self.user_model.copy( + cr, uid, res_id, default={}, context=context) + vals = self.user_model.read( + cr, uid, [res_id], ['name', 'lastname', 'firstname'], + context=context)[0] self.assertEqual( vals['name'], _('%s (copy)') % 'lastname' + ' firstname', 'Copy of the user failed with wrong name' ) - self.assertEqual(vals['lastname'], _('%s (copy)') % 'lastname', 'Copy of the user failed with wrong lastname') - self.assertEqual(vals['firstname'], 'firstname', 'Copy of the user failed with wrong firstname') + self.assertEqual( + vals['lastname'], _('%s (copy)') % + 'lastname', 'Copy of the user failed with wrong lastname') + self.assertEqual(vals['firstname'], 'firstname', + 'Copy of the user failed with wrong firstname') def test_update_user_lastname(self): cr, uid, context = self.cr, self.uid, self.context # create a user - res_id = self.user_model.create(cr, uid, self.fields_user, context=context) + res_id = self.user_model.create( + cr, uid, self.fields_user, context=context) # get the related partner id and add it a firstname - flds = self.user_model.read(cr, uid, [res_id], ['partner_id'], context=context)[0] - self.partner_model.write(cr, uid, flds['partner_id'][0], {'firstname': 'firstname'}, context=context) - self.user_model.write(cr, uid, res_id, {'name': 'change firstname'}, context=context) - vals = self.user_model.read(cr, uid, [res_id], ['name', 'lastname', 'firstname'], context=context)[0] + flds = self.user_model.read( + cr, uid, [res_id], ['partner_id'], context=context)[0] + self.partner_model.write( + cr, uid, flds['partner_id'][0], {'firstname': 'firstname'}, + context=context) + self.user_model.write( + cr, uid, res_id, {'name': 'change firstname'}, context=context) + vals = self.user_model.read( + cr, uid, [res_id], ['name', 'lastname', 'firstname'], + context=context)[0] - self.assertEqual(vals['name'], 'change firstname', 'Update of the user lastname failed with wrong name') + self.assertEqual(vals['name'], 'change firstname', + 'Update of the user lastname failed with wrong name') self.assertEqual( vals['lastname'], 'change', 'Update of the user lastname failed with wrong lastname') From 65603ccbc19451bdd23709201eae3ea22603df69 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Tue, 29 Jul 2014 15:40:50 +0200 Subject: [PATCH 08/11] [FIX] base_location PEP8 --- base_location/better_zip.py | 19 +++++++++++++------ base_location/company.py | 26 ++++++++++++++------------ base_location/partner.py | 20 +++++++++++--------- base_location/state.py | 7 ++++--- 4 files changed, 42 insertions(+), 30 deletions(-) diff --git a/base_location/better_zip.py b/base_location/better_zip.py index 3ab561245..c51644a12 100644 --- a/base_location/better_zip.py +++ b/base_location/better_zip.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## +# # # Author: Nicolas Bessi. Copyright Camptocamp SA # Contributor: Pedro Manuel Baeza @@ -18,11 +18,12 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -############################################################################## +# from openerp.osv import orm, fields class BetterZip(orm.Model): + " City/locations completion object" _name = "res.better.zip" @@ -57,19 +58,25 @@ class BetterZip(orm.Model): def onchange_state_id(self, cr, uid, ids, state_id=False, context=None): result = {} if state_id: - state = self.pool['res.country.state'].browse(cr, uid, state_id, context=context) + state = self.pool['res.country.state'].browse( + cr, uid, state_id, context=context) if state: result['value'] = {'country_id': state.country_id.id} return result - def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100): + def name_search( + self, cr, uid, name, args=None, operator='ilike', context=None, + limit=100 + ): if args is None: args = [] if context is None: context = {} ids = [] if name: - ids = self.search(cr, uid, [('name', 'ilike', name)] + args, limit=limit) + ids = self.search( + cr, uid, [('name', 'ilike', name)] + args, limit=limit) if not ids: - ids = self.search(cr, uid, [('city', operator, name)] + args, limit=limit) + ids = self.search( + cr, uid, [('city', operator, name)] + args, limit=limit) return self.name_get(cr, uid, ids, context=context) diff --git a/base_location/company.py b/base_location/company.py index e90cd0422..35ef3d856 100644 --- a/base_location/company.py +++ b/base_location/company.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## +# # # Author: Nicolas Bessi. Copyright Camptocamp SA # Contributor: Pedro Manuel Baeza @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -############################################################################## +# from openerp.osv import orm, fields @@ -31,17 +31,19 @@ class ResCompany(orm.Model): if context is None: context = {} if zip_id: - bzip = self.pool['res.better.zip'].browse(cr, uid, zip_id, context=context) - result = {'value': {'zip': bzip.name, - 'country_id': bzip.country_id.id if bzip.country_id else False, - 'city': bzip.city, - 'state_id': bzip.state_id.id if bzip.state_id else False - } - } + bzip = self.pool['res.better.zip'].browse( + cr, uid, zip_id, context=context) + result = {'value': { + 'zip': bzip.name, + 'country_id': bzip.country_id.id if bzip.country_id else False, + 'city': bzip.city, + 'state_id': bzip.state_id.id if bzip.state_id else False + } + } return result _columns = { - 'better_zip_id': fields.many2one('res.better.zip', 'Location', select=1, - help=('Use the city name or the zip code' - ' to search the location')), + 'better_zip_id': fields.many2one( + 'res.better.zip', 'Location', select=1, + help=('Use the city name or the zip code to search the location')), } diff --git a/base_location/partner.py b/base_location/partner.py index b6db7bc8b..76218ecd5 100644 --- a/base_location/partner.py +++ b/base_location/partner.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## +# # # Author: Nicolas Bessi. Copyright Camptocamp SA # Contributor: Pedro Manuel Baeza @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -############################################################################## +# from openerp.osv import orm, fields @@ -31,10 +31,12 @@ class ResPartner(orm.Model): return {} if isinstance(zip_id, list): zip_id = zip_id[0] - bzip = self.pool['res.better.zip'].browse(cursor, uid, zip_id, context=context) - return {'value': {'zip': bzip.name, - 'city': bzip.city, - 'country_id': bzip.country_id.id if bzip.country_id else False, - 'state_id': bzip.state_id.id if bzip.state_id else False, - } - } + bzip = self.pool['res.better.zip'].browse( + cursor, uid, zip_id, context=context) + return {'value': { + 'zip': bzip.name, + 'city': bzip.city, + 'country_id': bzip.country_id.id if bzip.country_id else False, + 'state_id': bzip.state_id.id if bzip.state_id else False, + } + } diff --git a/base_location/state.py b/base_location/state.py index 4312384af..24cc81e20 100644 --- a/base_location/state.py +++ b/base_location/state.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## +# # # Author: Nicolas Bessi. Copyright Camptocamp SA # Contributor: Pedro Manuel Baeza @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -############################################################################## +# from openerp.osv import orm, fields @@ -26,4 +26,5 @@ class ResCountryState(orm.Model): _inherit = 'res.country.state' - _columns = {'better_zip_ids': fields.one2many('res.better.zip', 'state_id', 'Cities')} + _columns = {'better_zip_ids': fields.one2many( + 'res.better.zip', 'state_id', 'Cities')} From c600209b816702ed24d568adbcb30a1db00e3e55 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Tue, 29 Jul 2014 15:41:45 +0200 Subject: [PATCH 09/11] [FIX] passport PEP8 --- passport/tests/test_passport.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/passport/tests/test_passport.py b/passport/tests/test_passport.py index 76c0b9b4c..127205ff2 100644 --- a/passport/tests/test_passport.py +++ b/passport/tests/test_passport.py @@ -1,5 +1,5 @@ # -*- encoding: utf-8 -*- -############################################################################## +# # # OpenERP, Open Source Management Solution # This module copyright (C) 2013 Savoir-faire Linux @@ -18,7 +18,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -############################################################################## +# from openerp.tests.common import TransactionCase from openerp.models import BaseModel @@ -26,6 +26,7 @@ from datetime import date class Base_Test_passport(TransactionCase): + """ Simple test creating a passport This is a base class for passport test cases. @@ -49,14 +50,16 @@ class Base_Test_passport(TransactionCase): self.vals = dict(self.vals.items() + vals.items()) # Create the passport object; we will be testing this, so store in self res_passport = self.registry('res.passport') - self.passport_id = res_passport.create(self.cr, self.uid, self.vals, context=None) + self.passport_id = res_passport.create( + self.cr, self.uid, self.vals, context=None) def test_passport(self): """ Checking the passport creation. """ res_passport = self.registry('res.passport') - passport_obj = res_passport.browse(self.cr, self.uid, self.passport_id, context=None) + passport_obj = res_passport.browse( + self.cr, self.uid, self.passport_id, context=None) for field in self.vals: val = passport_obj[field] if isinstance(val, BaseModel): @@ -70,9 +73,11 @@ class Base_Test_passport(TransactionCase): class Test_passport_bad(Base_Test_passport): + """ Simple test creating a passport, test against bad values """ + def setUp(self): """ Setting up passport, then changing the values to test against. @@ -93,7 +98,8 @@ class Test_passport_bad(Base_Test_passport): Checking the passport creation, assertions should all be false. """ res_passport = self.registry('res.passport') - passport_obj = res_passport.browse(self.cr, self.uid, self.passport_id, context=None) + passport_obj = res_passport.browse( + self.cr, self.uid, self.passport_id, context=None) for field in self.vals: val = passport_obj[field] if isinstance(val, BaseModel): @@ -107,9 +113,11 @@ class Test_passport_bad(Base_Test_passport): class Test_passport_name_get(TransactionCase): + """ Test name_get """ + def setUp(self): """ Setting up passport with name, country, either and none. @@ -139,10 +147,14 @@ class Test_passport_name_get(TransactionCase): Checking the passport creation, assertions should all be false. """ res_passport = self.registry('res.passport') - both_obj = res_passport.browse(self.cr, self.uid, self.both, context=None) - name_only = res_passport.browse(self.cr, self.uid, self.name_only, context=None) - country_only = res_passport.browse(self.cr, self.uid, self.country_only, context=None) - neither = res_passport.browse(self.cr, self.uid, self.neither, context=None) + both_obj = res_passport.browse( + self.cr, self.uid, self.both, context=None) + name_only = res_passport.browse( + self.cr, self.uid, self.name_only, context=None) + country_only = res_passport.browse( + self.cr, self.uid, self.country_only, context=None) + neither = res_passport.browse( + self.cr, self.uid, self.neither, context=None) self.assertEquals( both_obj.name_get()[0][1], ' | '.join((self.country_name, self.name_on_passport)), From ecd45fa2ec956c2e90d54006673e68f5a6778980 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Tue, 29 Jul 2014 15:45:35 +0200 Subject: [PATCH 10/11] [FIX] base_partner_merge PEP8 --- base_partner_merge/__openerp__.py | 4 +- base_partner_merge/validate_email.py | 65 ++++++++++++++++++---------- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/base_partner_merge/__openerp__.py b/base_partner_merge/__openerp__.py index d310b8976..5c2a145d7 100644 --- a/base_partner_merge/__openerp__.py +++ b/base_partner_merge/__openerp__.py @@ -3,7 +3,9 @@ 'author': 'OpenERP S.A.', 'category': 'Generic Modules/Base', 'version': '0.1', - 'description': """backport module, to be removed when we switch to saas2 on the private servers""", + 'description': """ +backport module, to be removed when we switch to saas2 on the private servers +""", 'depends': [ 'base', ], diff --git a/base_partner_merge/validate_email.py b/base_partner_merge/validate_email.py index 691b054e6..c84ecb962 100644 --- a/base_partner_merge/validate_email.py +++ b/base_partner_merge/validate_email.py @@ -42,36 +42,51 @@ except: # even when it's not strictly necessary. This way we don't forget # when it is necessary.) # -WSP = r'[ \t]' # see 2.2.2. Structured Header Field Bodies -CRLF = r'(?:\r\n)' # see 2.2.3. Long Header Fields -NO_WS_CTL = r'\x01-\x08\x0b\x0c\x0f-\x1f\x7f' # see 3.2.1. Primitive Tokens -QUOTED_PAIR = r'(?:\\.)' # see 3.2.2. Quoted characters -FWS = r'(?:(?:{0}*{1})?{0}+)'.format(WSP, CRLF) # see 3.2.3. Folding white space and comments -CTEXT = r'[{0}\x21-\x27\x2a-\x5b\x5d-\x7e]'.format(NO_WS_CTL) # see 3.2.3 -# see 3.2.3 (NB: The RFC includes COMMENT here as well, but that would be circular.) +WSP = r'[ \t]' # see 2.2.2. Structured Header Field Bodies +CRLF = r'(?:\r\n)' # see 2.2.3. Long Header Fields +NO_WS_CTL = r'\x01-\x08\x0b\x0c\x0f-\x1f\x7f' # see 3.2.1. Primitive Tokens +QUOTED_PAIR = r'(?:\\.)' # see 3.2.2. Quoted characters +FWS = r'(?:(?:{0}*{1})?{0}+)'.format(WSP, CRLF) +# see 3.2.3. Folding white space and comments +CTEXT = r'[{0}\x21-\x27\x2a-\x5b\x5d-\x7e]'.format( + NO_WS_CTL) # see 3.2.3 +# see 3.2.3 (NB: The RFC includes COMMENT here as well, but that would be +# circular.) CCONTENT = r'(?:{0}|{1})'.format(CTEXT, QUOTED_PAIR) -COMMENT = r'\((?:{0}?{1})*{0}?\)'.format(FWS, CCONTENT) # see 3.2.3 -CFWS = r'(?:{0}?{1})*(?:{0}?{1}|{0})'.format(FWS, COMMENT) # see 3.2.3 -ATEXT = r'[\w!#$%&\'\*\+\-/=\?\^`\{\|\}~]' # see 3.2.4. Atom -ATOM = r'{0}?{1}+{0}?'.format(CFWS, ATEXT) # see 3.2.4 -DOT_ATOM_TEXT = r'{0}+(?:\.{0}+)*'.format(ATEXT) # see 3.2.4 -DOT_ATOM = r'{0}?{1}{0}?'.format(CFWS, DOT_ATOM_TEXT) # see 3.2.4 -QTEXT = r'[{0}\x21\x23-\x5b\x5d-\x7e]'.format(NO_WS_CTL) # see 3.2.5. Quoted strings -QCONTENT = r'(?:{0}|{1})'.format(QTEXT, QUOTED_PAIR) # see 3.2.5 +COMMENT = r'\((?:{0}?{1})*{0}?\)'.format( + FWS, CCONTENT) # see 3.2.3 +CFWS = r'(?:{0}?{1})*(?:{0}?{1}|{0})'.format( + FWS, COMMENT) # see 3.2.3 +ATEXT = r'[\w!#$%&\'\*\+\-/=\?\^`\{\|\}~]' # see 3.2.4. Atom +ATOM = r'{0}?{1}+{0}?'.format(CFWS, ATEXT) +# see 3.2.4 +DOT_ATOM_TEXT = r'{0}+(?:\.{0}+)*'.format( + ATEXT) # see 3.2.4 +DOT_ATOM = r'{0}?{1}{0}?'.format( + CFWS, DOT_ATOM_TEXT) # see 3.2.4 +QTEXT = r'[{0}\x21\x23-\x5b\x5d-\x7e]'.format( + NO_WS_CTL) # see 3.2.5. Quoted strings +QCONTENT = r'(?:{0}|{1})'.format(QTEXT, QUOTED_PAIR) +# see 3.2.5 QUOTED_STRING = r'{0}?"(?:{1}?{2})*{1}?"{0}?'.format(CFWS, FWS, QCONTENT) -LOCAL_PART = r'(?:{0}|{1})'.format(DOT_ATOM, QUOTED_STRING) # see 3.4.1. Addr-spec specification -DTEXT = r'[{0}\x21-\x5a\x5e-\x7e]'.format(NO_WS_CTL) # see 3.4.1 -DCONTENT = r'(?:{0}|{1})'.format(DTEXT, QUOTED_PAIR) # see 3.4.1 -DOMAIN_LITERAL = r'{0}?\[(?:{1}?{2})*{1}?\]{0}?'.format(CFWS, FWS, DCONTENT) # see 3.4.1 -DOMAIN = r'(?:{0}|{1})'.format(DOT_ATOM, DOMAIN_LITERAL) # see 3.4.1 -ADDR_SPEC = r'{0}@{1}'.format(LOCAL_PART, DOMAIN) # see 3.4.1 +LOCAL_PART = r'(?:{0}|{1})'.format(DOT_ATOM, QUOTED_STRING) +# see 3.4.1. Addr-spec specification +DTEXT = r'[{0}\x21-\x5a\x5e-\x7e]'.format( + NO_WS_CTL) # see 3.4.1 +DCONTENT = r'(?:{0}|{1})'.format(DTEXT, QUOTED_PAIR) +# see 3.4.1 +DOMAIN_LITERAL = r'{0}?\[(?:{1}?{2})*{1}?\]{0}?'.format( + CFWS, FWS, DCONTENT) # see 3.4.1 +DOMAIN = r'(?:{0}|{1})'.format(DOT_ATOM, DOMAIN_LITERAL) +# see 3.4.1 +ADDR_SPEC = r'{0}@{1}'.format( + LOCAL_PART, DOMAIN) # see 3.4.1 # A valid address will match exactly the 3.4.1 addr-spec. VALID_ADDRESS_REGEXP = '^' + ADDR_SPEC + '$' def validate_email(email, check_mx=False, verify=False): - """Indicate whether the given string is a valid email address according to the 'addr-spec' portion of RFC 2822 (see section 3.4.1). Parts of the spec that are marked obsolete are *not* @@ -104,7 +119,8 @@ def validate_email(email, check_mx=False, verify=False): if status != 250: return False break - except smtplib.SMTPServerDisconnected: # Server not permits verify user + except smtplib.SMTPServerDisconnected: + # Server not permits verify user break except smtplib.SMTPConnectError: continue @@ -114,5 +130,6 @@ def validate_email(email, check_mx=False, verify=False): # import sys -# sys.modules[__name__], sys.modules['validate_email_module'] = validate_email, sys.modules[__name__] +# sys.modules[__name__], sys.modules['validate_email_module'] = validate_email, +# sys.modules[__name__] # from validate_email_module import * From c792e1bcbb10991c43ff5cb802dd6e8e4aaa39f2 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Tue, 29 Jul 2014 21:07:13 +0200 Subject: [PATCH 11/11] [IMP] _set_default_value_on_column avoiding useless queries --- partner_firstname/partner.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/partner_firstname/partner.py b/partner_firstname/partner.py index 85dd9b53c..4be5cca8d 100644 --- a/partner_firstname/partner.py +++ b/partner_firstname/partner.py @@ -34,18 +34,12 @@ class ResPartner(orm.Model): res = super(ResPartner, self)._set_default_value_on_column( cr, column_name, context=context) if column_name == 'lastname': - cr.execute('SELECT id FROM res_partner WHERE lastname IS NOT NULL ' - 'Limit 1') - if not cr.fetchone(): - cr.execute('UPDATE res_partner set lastname = name WHERE name ' - 'IS NOT NULL') - # Create Sql constraint if table is not empty - cr.execute('SELECT id FROM res_partner Limit 1') - if cr.fetchone(): - cr.execute('ALTER TABLE res_partner ALTER COLUMN lastname ' - 'SET NOT NULL') - _logger.info("NOT NULL constraint for " - "res_partner.lastname correctly set") + cr.execute('UPDATE res_partner SET lastname = name WHERE name ' + 'IS NOT NULL AND lastname IS NULL') + cr.execute('ALTER TABLE res_partner ALTER COLUMN lastname ' + 'SET NOT NULL') + _logger.info("NOT NULL constraint for " + "res_partner.lastname correctly set") return res def _prepare_name_custom(self, cursor, uid, partner, context=None):