changeset 6794fd13cb64 in modules/party:default
details: https://hg.tryton.org/modules/party?cmd=changeset;node=6794fd13cb64
description:
        Load and update pycountry data from script

        issue8346
        review285501002
diffstat:

 CHANGELOG                    |    1 +
 address.py                   |   66 +++++++++++------
 address.xml                  |  154 ++++++++++++++++++++----------------------
 view/address_format_form.xml |    8 +-
 view/address_format_list.xml |    4 +-
 5 files changed, 124 insertions(+), 109 deletions(-)

diffs (781 lines):

diff -r f9adae254aac -r 6794fd13cb64 CHANGELOG
--- a/CHANGELOG Thu Jun 06 10:10:38 2019 +0200
+++ b/CHANGELOG Tue Jul 30 23:02:46 2019 +0200
@@ -1,3 +1,4 @@
+* Replace country and language in address format by codes
 * Add sequence field to contact mechanism form view
 
 Version 5.2.0 - 2019-05-06
diff -r f9adae254aac -r 6794fd13cb64 address.py
--- a/address.py        Thu Jun 06 10:10:38 2019 +0200
+++ b/address.py        Tue Jul 30 23:02:46 2019 +0200
@@ -3,8 +3,8 @@
 'Address'
 from string import Template
 
-from sql import Null
-from sql.conditionals import Case, Coalesce
+from sql.conditionals import Coalesce
+from sql.functions import Substring
 from sql.operators import Concat
 
 from trytond.i18n import gettext
@@ -225,8 +225,8 @@
 class AddressFormat(DeactivableMixin, MatchMixin, ModelSQL, ModelView):
     "Address Format"
     __name__ = 'party.address.format'
-    country = fields.Many2One('country.country', "Country")
-    language = fields.Many2One('ir.lang', "Language")
+    country_code = fields.Char("Country Code", size=2)
+    language_code = fields.Char("Language Code", size=2)
     format_ = fields.Text("Format", required=True,
         help="Available variables (also in upper case):\n"
         "- ${party_name}\n"
@@ -245,8 +245,42 @@
     @classmethod
     def __setup__(cls):
         super(AddressFormat, cls).__setup__()
-        cls._order.insert(0, ('country', 'ASC'))
-        cls._order.insert(1, ('language', 'ASC'))
+        cls._order.insert(0, ('country_code', 'ASC NULLS LAST'))
+        cls._order.insert(1, ('language_code', 'ASC NULLS LAST'))
+
+    @classmethod
+    def __register__(cls, module_name):
+        pool = Pool()
+        Country = pool.get('country.country')
+        Language = pool.get('ir.lang')
+        country = Country.__table__()
+        language = Language.__table__()
+        table = cls.__table__()
+        cursor = Transaction().connection.cursor()
+
+        super().__register__(module_name)
+
+        table_h = cls.__table_handler__()
+
+        # Migration from 5.2: replace country by country_code
+        if table_h.column_exist('country'):
+            query = table.update(
+                [table.country_code],
+                country.select(
+                    country.code,
+                    where=country.id == table.country))
+            cursor.execute(*query)
+            table_h.drop_column('country')
+
+        # Migration from 5.2: replace language by language_code
+        if table_h.column_exist('language'):
+            query = table.update(
+                [table.language_code],
+                language.select(
+                    Substring(language.code, 0, 2),
+                    where=language.id == table.language))
+            cursor.execute(*query)
+            table_h.drop_column('language')
 
     @classmethod
     def default_format_(cls):
@@ -257,11 +291,6 @@
 ${subdivision}
 ${COUNTRY}"""
 
-    @staticmethod
-    def order_language(tables):
-        table, _ = tables[None]
-        return [Case((table.language == Null, 1), else_=0), table.language]
-
     @classmethod
     def create(cls, *args, **kwargs):
         records = super(AddressFormat, cls).create(*args, **kwargs)
@@ -298,24 +327,13 @@
 
     @classmethod
     def get_format(cls, address, pattern=None):
-        pool = Pool()
-        Language = pool.get('ir.lang')
-
         if pattern is None:
             pattern = {}
         else:
             pattern = pattern.copy()
         pattern.setdefault(
-            'country', address.country.id if address.country else None)
-
-        languages = Language.search([
-                ('code', '=', Transaction().language),
-                ], limit=1)
-        if languages:
-            language, = languages
-        else:
-            language = None
-        pattern.setdefault('language', language.id if language else None)
+            'country_code', address.country.code if address.country else None)
+        pattern.setdefault('language', Transaction().language[:2])
 
         key = tuple(sorted(pattern.items()))
         format_ = cls._get_format_cache.get(key)
diff -r f9adae254aac -r 6794fd13cb64 address.xml
--- a/address.xml       Thu Jun 06 10:10:38 2019 +0200
+++ b/address.xml       Tue Jul 30 23:02:46 2019 +0200
@@ -86,10 +86,10 @@
         </record>
 
     </data>
-    <data noupdate="1" grouped="1" skiptest="1">
+    <data noupdate="1" grouped="1">
         <!-- From https://en.wikipedia.org/wiki/Address_(geography) -->
         <record model="party.address.format" id="address_format_ar">
-            <field name="country" ref="country.ar"/>
+            <field name="country_code">AR</field>
             <field name="format_">${party_name}
 ${name}
 ${street}
@@ -99,7 +99,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_au">
-            <field name="country" ref="country.au"/>
+            <field name="country_code">AU</field>
             <field name="format_">${party_name}
 ${attn}
 ${name}
@@ -110,7 +110,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_at">
-            <field name="country" ref="country.at"/>
+            <field name="country_code">AT</field>
             <field name="format_">${party_name}
 ${attn}
 ${name}
@@ -120,7 +120,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_bd">
-            <field name="country" ref="country.bd"/>
+            <field name="country_code">BD</field>
             <field name="format_">${party_name}
 ${attn}
 ${name}
@@ -130,7 +130,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_by">
-            <field name="country" ref="country.by"/>
+            <field name="country_code">BY</field>
             <field name="format_">${party_name}
 ${name}
 ${street}
@@ -140,7 +140,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_be">
-            <field name="country" ref="country.be"/>
+            <field name="country_code">BE</field>
             <field name="format_">${attn}
 ${party_name}
 ${name}
@@ -150,7 +150,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_br">
-            <field name="country" ref="country.br"/>
+            <field name="country_code">BR</field>
             <field name="format_">${party_name}
 ${street}
 ${name}
@@ -160,8 +160,8 @@
         </record>
 
         <record model="party.address.format" id="address_format_ca_fr">
-            <field name="country" ref="country.ca"/>
-            <field name="language" ref="ir.lang_fr"/>
+            <field name="country_code">CA</field>
+            <field name="language_code">fr</field>
             <field name="format_">${attn}
 ${party_name}
 ${name}
@@ -171,7 +171,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_ca">
-            <field name="country" ref="country.ca"/>
+            <field name="country_code">CA</field>
             <field name="format_">${ATTN}
 ${PARTY_NAME}
 ${NAME}
@@ -181,7 +181,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_cl">
-            <field name="country" ref="country.cl"/>
+            <field name="country_code">CL</field>
             <field name="format_">${party_name}
 ${street}
 ${name}
@@ -191,22 +191,22 @@
         </record>
 
         <record model="party.address.format" id="address_format_cn_zh_CN">
-            <field name="country" ref="country.cn"/>
-            <field name="language" ref="ir.lang_zh_CN"/>
+            <field name="country_code">CN</field>
+            <field name="language_code">zh</field>
             <field name="format_">${COUNTRY} ${ZIP}
 ${subdivision}${city}${street}${name}
 ${party_name}</field>
         </record>
 
         <record model="party.address.format" id="address_format_cn">
-            <field name="country" ref="country.cn"/>
+            <field name="country_code">CN</field>
             <field name="format_">${COUNTRY} ${ZIP}
 ${subdivision}, ${city}, ${street}, ${name}
 ${party_name}</field>
         </record>
 
         <record model="party.address.format" id="address_format_hr">
-            <field name="country" ref="country.hr"/>
+            <field name="country_code">HR</field>
             <field name="format_">${party_name}
 ${street}
 ${COUNTRY_CODE}-${ZIP} ${city}
@@ -214,7 +214,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_cz">
-            <field name="country" ref="country.cz"/>
+            <field name="country_code">CZ</field>
             <field name="format_">${party_name}
 ${attn}
 ${street}
@@ -223,7 +223,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_dk">
-            <field name="country" ref="country.dk"/>
+            <field name="country_code">DK</field>
             <field name="format_">${party_name}
 ${street}
 ${zip} ${city}
@@ -231,7 +231,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_ee">
-            <field name="country" ref="country.ee"/>
+            <field name="country_code">EE</field>
             <field name="format_">${party_name}
 ${street}
 ${zip} ${city}
@@ -239,7 +239,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_fi">
-            <field name="country" ref="country.fi"/>
+            <field name="country_code">FI</field>
             <field name="format_">${attn}
 ${party_name}
 ${street}
@@ -248,7 +248,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_fr">
-            <field name="country" ref="country.fr"/>
+            <field name="country_code">FR</field>
             <field name="format_">${party_name}
 ${attn}
 ${name}
@@ -258,7 +258,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_de">
-            <field name="country" ref="country.de"/>
+            <field name="country_code">DE</field>
             <field name="format_">${party_name}
 ${attn}
 ${name}
@@ -268,7 +268,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_gr">
-            <field name="country" ref="country.gr"/>
+            <field name="country_code">GR</field>
             <field name="format_">${party_name}
 ${street}
 ${COUNTRY_CODE}-${ZIP} ${CITY}
@@ -276,7 +276,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_hk">
-            <field name="country" ref="country.hk"/>
+            <field name="country_code">HK</field>
             <field name="format_">${party_name}
 ${name}
 ${street}
@@ -285,7 +285,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_hu">
-            <field name="country" ref="country.hu"/>
+            <field name="country_code">HU</field>
             <field name="format_">${party_name}
 ${city}
 ${street}
@@ -294,7 +294,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_is">
-            <field name="country" ref="country.is"/>
+            <field name="country_code">IS</field>
             <field name="format_">${party_name}
 ${street}
 ${name}
@@ -303,7 +303,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_in">
-            <field name="country" ref="country.in"/>
+            <field name="country_code">IN</field>
             <field name="format_">${party_name}
 ${name}
 ${street}
@@ -313,7 +313,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_id">
-            <field name="country" ref="country.id"/>
+            <field name="country_code">ID</field>
             <field name="format_">${party_name}
 ${name}
 ${street}
@@ -323,7 +323,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_ir">
-            <field name="country" ref="country.ir"/>
+            <field name="country_code">IR</field>
             <field name="format_">${party_name}
 ${name}
 ${city}
@@ -334,7 +334,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_iq">
-            <field name="country" ref="country.iq"/>
+            <field name="country_code">IQ</field>
             <field name="format_">${party_name}
 ${street}
 ${name}
@@ -344,7 +344,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_ie">
-            <field name="country" ref="country.ie"/>
+            <field name="country_code">IE</field>
             <field name="format_">${party_name}
 ${street}
 ${city} ${zip}
@@ -352,7 +352,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_il">
-            <field name="country" ref="country.il"/>
+            <field name="country_code">IL</field>
             <field name="format_">${party_name}
 ${street}
 ${city} ${zip}
@@ -360,7 +360,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_it">
-            <field name="country" ref="country.it"/>
+            <field name="country_code">IT</field>
             <field name="format_">${party_name}
 ${attn}
 ${name}
@@ -369,38 +369,34 @@
 ${COUNTRY}</field>
         </record>
 
-        <!-- for Japan language
         <record model="party.address.format" id="address_format_jp_jp">
-            <field name="country" ref="country.jp"/>
-            <field name="language" ref="ir.lang_jp"/>
+            <field name="country_code">JP</field>
+            <field name="language_code">jp</field>
             <field name="format_">${COUNTRY}
 ${zip}
 ${subdivision}${city}${street}
 ${party_name}</field>
         </record>
-        -->
 
         <record model="party.address.format" id="address_format_jp">
-            <field name="country" ref="country.jp"/>
+            <field name="country_code">JP</field>
             <field name="format_">${party_name}
 ${street}
 ${city}, ${SUBDIVISION} ${zip}
 ${COUNTRY}</field>
         </record>
 
-        <!-- for Korean language
         <record model="party.address.format" id="address_format_kr_ko">
-            <field name="country" ref="country.kr"/>
-            <field name="language" ref="ir.lang_ko"/>
+            <field name="country_code">KR</field>
+            <field name="language_code">ko</field>
             <field name="format_">${COUNTRY}
 ${street}
 ${party_name}
 ${zip}</field>
         </record>
-        -->
 
         <record model="party.address.format" id="address_format_kr">
-            <field name="country" ref="country.kr"/>
+            <field name="country_code">KR</field>
             <field name="format_">${party_name}
 ${street}
 ${city}, ${subdivision} ${zip}
@@ -408,7 +404,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_lv">
-            <field name="country" ref="country.lv"/>
+            <field name="country_code">LV</field>
             <field name="format_">${party_name}
 ${street}
 ${city}
@@ -418,8 +414,8 @@
         </record>
 
         <record model="party.address.format" id="address_format_mo_zh_CN">
-            <field name="country" ref="country.mo"/>
-            <field name="language" ref="ir.lang_zh_CN"/>
+            <field name="country_code">MO</field>
+            <field name="language_code">zh</field>
             <field name="format_">${COUNTRY}
 ${city}
 ${street}
@@ -427,7 +423,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_mo">
-            <field name="country" ref="country.mo"/>
+            <field name="country_code">MO</field>
             <field name="format_">${party_name}
 ${street}
 ${city}
@@ -435,7 +431,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_my">
-            <field name="country" ref="country.my"/>
+            <field name="country_code">MY</field>
             <field name="format_">${attn}
 ${party_name}
 ${name}
@@ -446,7 +442,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_mx">
-            <field name="country" ref="country.mx"/>
+            <field name="country_code">MX</field>
             <field name="format_">${attn}
 ${party_name}
 ${street}
@@ -456,7 +452,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_nl">
-            <field name="country" ref="country.nl"/>
+            <field name="country_code">NL</field>
             <field name="format_">${party_name}
 ${attn}
 ${name}
@@ -466,7 +462,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_nz">
-            <field name="country" ref="country.nz"/>
+            <field name="country_code">NZ</field>
             <field name="format_">${party_name}
 ${street}
 ${city} ${zip}
@@ -474,7 +470,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_no">
-            <field name="country" ref="country.no"/>
+            <field name="country_code">NO</field>
             <field name="format_">${party_name}
 ${street}
 ${zip} ${CITY}
@@ -482,7 +478,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_om">
-            <field name="country" ref="country.om"/>
+            <field name="country_code">OM</field>
             <field name="format_">${party_name}
 ${street}
 ${city}
@@ -490,7 +486,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_pk">
-            <field name="country" ref="country.pk"/>
+            <field name="country_code">PK</field>
             <field name="format_">${party_name}
 ${street}
 ${city}
@@ -500,7 +496,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_pe">
-            <field name="country" ref="country.pe"/>
+            <field name="country_code">PE</field>
             <field name="format_">${party_name}
 ${street}
 ${name}
@@ -510,7 +506,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_ph">
-            <field name="country" ref="country.ph"/>
+            <field name="country_code">PH</field>
             <field name="format_">${party_name}
 ${street}
 ${zip} ${CITY}
@@ -518,7 +514,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_pl">
-            <field name="country" ref="country.pl"/>
+            <field name="country_code">PL</field>
             <field name="format_">${attn} ${party_name}
 ${street}
 ${zip} ${city}
@@ -526,7 +522,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_pt">
-            <field name="country" ref="country.pt"/>
+            <field name="country_code">PT</field>
             <field name="format_">${party_name}
 ${street}
 ${zip} ${city}
@@ -534,7 +530,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_qa">
-            <field name="country" ref="country.qa"/>
+            <field name="country_code">QA</field>
             <field name="format_">${party_name}
 ${street}
 ${city}
@@ -542,7 +538,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_ro">
-            <field name="country" ref="country.ro"/>
+            <field name="country_code">RO</field>
             <field name="format_">${attn} ${party_name}
 ${street}
 ${city}
@@ -551,7 +547,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_ru">
-            <field name="country" ref="country.ru"/>
+            <field name="country_code">RU</field>
             <field name="format_">${party_name}
 ${street}
 ${city}
@@ -561,7 +557,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_sa">
-            <field name="country" ref="country.sa"/>
+            <field name="country_code">SA</field>
             <field name="format_">${party_name}
 ${street}
 ${city} ${zip}
@@ -569,7 +565,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_rs">
-            <field name="country" ref="country.rs"/>
+            <field name="country_code">RS</field>
             <field name="format_">${party_name}
 ${street}
 ${zip} ${city}
@@ -577,7 +573,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_sg">
-            <field name="country" ref="country.sg"/>
+            <field name="country_code">SG</field>
             <field name="format_">${party_name}
 ${street}
 ${name}
@@ -586,7 +582,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_sk">
-            <field name="country" ref="country.sk"/>
+            <field name="country_code">SK</field>
             <field name="format_">${attn}
 ${party_name}
 ${street}
@@ -595,7 +591,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_sl">
-            <field name="country" ref="country.sl"/>
+            <field name="country_code">SL</field>
             <field name="format_">${party_name}
 ${attn}
 ${street}
@@ -604,7 +600,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_es">
-            <field name="country" ref="country.es"/>
+            <field name="country_code">ES</field>
             <field name="format_">${party_name}
 ${street}
 ${zip} ${city}
@@ -613,7 +609,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_lk">
-            <field name="country" ref="country.lk"/>
+            <field name="country_code">LK</field>
             <field name="format_">${party_name}
 ${street}
 ${CITY}
@@ -622,7 +618,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_se">
-            <field name="country" ref="country.se"/>
+            <field name="country_code">SE</field>
             <field name="format_">${party_name}
 ${street}
 ${zip} ${city}
@@ -630,7 +626,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_ch">
-            <field name="country" ref="country.ch"/>
+            <field name="country_code">CH</field>
             <field name="format_">${party_name}
 ${street}
 ${zip} ${city}
@@ -638,8 +634,8 @@
         </record>
 
         <record model="party.address.format" id="address_format_tw_zh_CN">
-            <field name="country" ref="country.tw"/>
-            <field name="language" ref="ir.lang_zh_CN"/>
+            <field name="country_code">TW</field>
+            <field name="language_code">zh</field>
             <field name="format_">${COUNTRY}
 ${zip}
 ${street}
@@ -647,7 +643,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_tw">
-            <field name="country" ref="country.tw"/>
+            <field name="country_code">TW</field>
             <field name="format_">${party_name}
 ${street}
 ${city}, ${subdivision} ${zip}
@@ -655,7 +651,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_th">
-            <field name="country" ref="country.th"/>
+            <field name="country_code">TH</field>
             <field name="format_">${party_name}
 ${street}
 ${name}
@@ -665,7 +661,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_tr">
-            <field name="country" ref="country.tr"/>
+            <field name="country_code">TR</field>
             <field name="format_">${party_name}
 ${attn}
 ${street}
@@ -675,7 +671,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_ua">
-            <field name="country" ref="country.ua"/>
+            <field name="country_code">UA</field>
             <field name="format_">${party_name}
 ${street}
 ${city}
@@ -685,7 +681,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_gb">
-            <field name="country" ref="country.gb"/>
+            <field name="country_code">GB</field>
             <field name="format_">${party_name}
 ${street}
 ${CITY}
@@ -694,7 +690,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_us">
-            <field name="country" ref="country.us"/>
+            <field name="country_code">US</field>
             <field name="format_">${attn}
 ${party_name}
 ${street}
@@ -703,7 +699,7 @@
         </record>
 
         <record model="party.address.format" id="address_format_vn">
-            <field name="country" ref="country.vn"/>
+            <field name="country_code">VN</field>
             <field name="format_">${party_name}
 ${street}
 ${city}
diff -r f9adae254aac -r 6794fd13cb64 view/address_format_form.xml
--- a/view/address_format_form.xml      Thu Jun 06 10:10:38 2019 +0200
+++ b/view/address_format_form.xml      Tue Jul 30 23:02:46 2019 +0200
@@ -1,11 +1,11 @@
 <?xml version="1.0"?>
 <form>
-    <label name="country"/>
-    <field name="country"/>
+    <label name="country_code"/>
+    <field name="country_code"/>
     <label name="active"/>
     <field name="active"/>
-    <label name="language"/>
-    <field name="language"/>
+    <label name="language_code"/>
+    <field name="language_code"/>
     <separator name="format_" colspan="4"/>
     <field name="format_" colspan="4"/>
 </form>
diff -r f9adae254aac -r 6794fd13cb64 view/address_format_list.xml
--- a/view/address_format_list.xml      Thu Jun 06 10:10:38 2019 +0200
+++ b/view/address_format_list.xml      Tue Jul 30 23:02:46 2019 +0200
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
 <tree>
-    <field name="country"/>
-    <field name="language"/>
+    <field name="country_code"/>
+    <field name="language_code"/>
 </tree>

Reply via email to