Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -r c0f1fc771c86 address.py
- --- a/address.py Mon Nov 28 16:19:22 2016 +0100
- +++ b/address.py Thu Dec 15 16:39:17 2016 +0100
- @@ -1,6 +1,8 @@
- # This file is part of Tryton. The COPYRIGHT file at the top level of
- # this repository contains the full copyright notices and license terms.
- 'Address'
- +import re
- +
- from string import Template
- from sql import Null
- @@ -205,6 +207,23 @@
- super(AddressFormat, cls).__setup__()
- cls._order.insert(0, ('country', 'ASC'))
- cls._order.insert(1, ('language', 'ASC'))
- + cls._error_messages.update({
- + 'invalid_format': ('The following variables are not supported '
- + 'as part of an address format: "%s".')})
- +
- + @classmethod
- + def allowed_variables(cls):
- + return [
- + "party_name",
- + "name",
- + "street",
- + "zip",
- + "city",
- + "subdivision",
- + "subdivision_code",
- + "country",
- + "country_code",
- + ]
- @classmethod
- def default_active(cls):
- @@ -275,3 +294,22 @@
- cls._get_format_cache.set(key, format_)
- return format_
- +
- + @classmethod
- + def validate(cls, formats):
- + super(AddressFormat, cls).validate(formats)
- + for format_ in formats:
- + format_.check_format()
- +
- + def check_format(self, format_=None):
- + '''
- + Check address format variables
- + '''
- + if format_ is None:
- + format_ = self
- +
- + present = frozenset(re.findall(r"\${([^}]+)}", format_.format_))
- + allowed = frozenset(AddressFormat.allowed_variables())
- + diff = present - allowed
- + if diff:
- + self.raise_user_error('invalid_format', (', '.join(diff),))
- diff -r c0f1fc771c86 address.xml
- --- a/address.xml Mon Nov 28 16:19:22 2016 +0100
- +++ b/address.xml Thu Dec 15 16:39:17 2016 +0100
- @@ -268,7 +268,7 @@
- <field name="format_">${party_name}
- ${name}
- ${street}
- -${district}
- +${subdivision}
- ${COUNTRY}</field>
- </record>
- @@ -297,7 +297,7 @@
- ${name}
- ${street}
- ${CITY} ${zip}
- -${district}
- +${subdivision}
- ${COUNTRY}</field>
- </record>
- @@ -307,7 +307,7 @@
- ${name}
- ${street}
- ${city} ${zip}
- -${district}
- +${subdivision}
- ${COUNTRY}</field>
- </record>
- @@ -317,7 +317,7 @@
- ${name}
- ${city}
- ${street}
- -${district}
- +${subdivision}
- ${zip}
- ${COUNTRY}</field>
- </record>
- @@ -327,7 +327,7 @@
- <field name="format_">${party_name}
- ${name}
- ${street}
- -${district}
- +${subdivision}
- ${zip}
- ${COUNTRY}</field>
- </record>
- @@ -355,7 +355,7 @@
- <field name="format_">${party_name}
- ${name}
- ${street}
- -${zip} ${city} ${DISTRICT_CODE}
- +${zip} ${city} ${SUBDIVISION_CODE}
- ${COUNTRY}</field>
- </record>
- @@ -386,7 +386,7 @@
- ${name}
- ${street}
- ${city}
- -${district}
- +${subdivision}
- ${COUNTRY_CODE}-${ZIP}
- ${COUNTRY}</field>
- </record>
- @@ -472,7 +472,7 @@
- ${street}
- ${city}
- ${zip}
- -${district}
- +${subdivision}
- ${COUNTRY}</field>
- </record>
- @@ -482,7 +482,7 @@
- ${name}
- ${street}
- ${city}
- -${district}
- +${subdivision}
- ${COUNTRY}</field>
- </record>
- @@ -592,7 +592,7 @@
- <field name="country" ref="country.kr"/>
- <field name="language" ref="ir.lang_kp_KR"/>
- <field name="format_">${COUNTRY}
- -${district}${city}${street}
- +${subdivision}${city}${street}
- ${zip}</field>
- </record>
- -->
- @@ -657,7 +657,7 @@
- <field name="country" ref="country.tw"/>
- <field name="format_">${name} ${party_name}
- ${street}
- -${city}, ${district} ${zip}
- +${city}, ${subdivision} ${zip}
- ${COUNTRY}</field>
- </record>
- @@ -666,7 +666,7 @@
- <field name="format_">${party_name}
- ${street}
- ${name}
- -${district}
- +${subdivision}
- ${COUNTRY}
- ${zip}</field>
- </record>
- @@ -676,7 +676,7 @@
- <field name="format_">${party_name}
- ${name}
- ${street}
- -${zip} ${city} ${district}
- +${zip} ${city} ${subdivision}
- ${COUNTRY}</field>
- </record>
- @@ -686,7 +686,7 @@
- ${name}
- ${street}
- ${city}
- -${district}
- +${subdivision}
- ${zip}
- ${COUNTRY}</field>
- </record>
- @@ -715,7 +715,7 @@
- <field name="format_">${party_name} (${name})
- ${street}
- ${city}
- -${district}
- +${subdivision}
- ${COUNTRY}</field>
- </record>
- diff -r c0f1fc771c86 tests/test_party.py
- --- a/tests/test_party.py Mon Nov 28 16:19:22 2016 +0100
- +++ b/tests/test_party.py Thu Dec 15 16:39:17 2016 +0100
- @@ -8,6 +8,7 @@
- phonenumbers = None
- import trytond.tests.test_tryton
- +from trytond.exceptions import UserError
- from trytond.tests.test_tryton import ModuleTestCase, with_transaction
- from trytond.tests.test_tryton import doctest_teardown
- from trytond.tests.test_tryton import doctest_checker
- @@ -159,9 +160,40 @@
- self.assertEqual(mechanism.value_compact, '+442083661179')
- +class PartyAddressFormatTestCase(ModuleTestCase):
- + 'Test Party Address Format class'
- + module = 'party'
- +
- + @with_transaction()
- + def test_format(self):
- + 'Test address format'
- + pool = Pool()
- + AddressFormat = pool.get('party.address.format')
- + Country = pool.get('country.country')
- + Language = pool.get('ir.lang')
- +
- + country1, = Country.create([{'code': 'CC', 'name': 'Country 1'}])
- + lang1, = Language.search([], limit=1)
- + address_format1, = AddressFormat.create([{
- + 'country': country1.id,
- + 'language': lang1.id,
- + 'format_': '${country}',
- + }])
- + self.assert_(address_format1.id)
- + self.assertEqual(address_format1.format_, '${country}')
- +
- + # Invalid variable
- + self.assertRaises(UserError, AddressFormat.create, [{
- + 'country': country1.id,
- + 'language': lang1.id,
- + 'format_': '${district}',
- + }])
- +
- def suite():
- suite = trytond.tests.test_tryton.suite()
- suite.addTests(unittest.TestLoader().loadTestsFromTestCase(PartyTestCase))
- + suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
- + PartyAddressFormatTestCase))
- suite.addTests(doctest.DocFileSuite(
- 'scenario_party_replace.rst',
- tearDown=doctest_teardown, encoding='utf-8',
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement