Guest User

Untitled

a guest
Dec 15th, 2016
69
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. diff -r c0f1fc771c86 address.py
  2. --- a/address.py    Mon Nov 28 16:19:22 2016 +0100
  3. +++ b/address.py    Thu Dec 15 16:39:17 2016 +0100
  4. @@ -1,6 +1,8 @@
  5.  # This file is part of Tryton.  The COPYRIGHT file at the top level of
  6.  # this repository contains the full copyright notices and license terms.
  7.  'Address'
  8. +import re
  9. +
  10.  from string import Template
  11.  
  12.  from sql import Null
  13. @@ -205,6 +207,23 @@
  14.          super(AddressFormat, cls).__setup__()
  15.          cls._order.insert(0, ('country', 'ASC'))
  16.          cls._order.insert(1, ('language', 'ASC'))
  17. +        cls._error_messages.update({
  18. +                'invalid_format': ('The following variables are not supported '
  19. +                    'as part of an address format: "%s".')})
  20. +
  21. +    @classmethod
  22. +    def allowed_variables(cls):
  23. +        return [
  24. +            "party_name",
  25. +            "name",
  26. +            "street",
  27. +            "zip",
  28. +            "city",
  29. +            "subdivision",
  30. +            "subdivision_code",
  31. +            "country",
  32. +            "country_code",
  33. +        ]
  34.  
  35.      @classmethod
  36.      def default_active(cls):
  37. @@ -275,3 +294,22 @@
  38.  
  39.          cls._get_format_cache.set(key, format_)
  40.          return format_
  41. +
  42. +    @classmethod
  43. +    def validate(cls, formats):
  44. +        super(AddressFormat, cls).validate(formats)
  45. +        for format_ in formats:
  46. +            format_.check_format()
  47. +
  48. +    def check_format(self, format_=None):
  49. +        '''
  50. +        Check address format variables
  51. +        '''
  52. +        if format_ is None:
  53. +           format_ = self
  54. +
  55. +        present = frozenset(re.findall(r"\${([^}]+)}", format_.format_))
  56. +        allowed = frozenset(AddressFormat.allowed_variables())
  57. +        diff = present - allowed
  58. +        if diff:
  59. +            self.raise_user_error('invalid_format', (', '.join(diff),))
  60. diff -r c0f1fc771c86 address.xml
  61. --- a/address.xml   Mon Nov 28 16:19:22 2016 +0100
  62. +++ b/address.xml   Thu Dec 15 16:39:17 2016 +0100
  63. @@ -268,7 +268,7 @@
  64.              <field name="format_">${party_name}
  65.  ${name}
  66.  ${street}
  67. -${district}
  68. +${subdivision}
  69.  ${COUNTRY}</field>
  70.          </record>
  71.  
  72. @@ -297,7 +297,7 @@
  73.  ${name}
  74.  ${street}
  75.  ${CITY} ${zip}
  76. -${district}
  77. +${subdivision}
  78.  ${COUNTRY}</field>
  79.          </record>
  80.  
  81. @@ -307,7 +307,7 @@
  82.  ${name}
  83.  ${street}
  84.  ${city} ${zip}
  85. -${district}
  86. +${subdivision}
  87.  ${COUNTRY}</field>
  88.          </record>
  89.  
  90. @@ -317,7 +317,7 @@
  91.  ${name}
  92.  ${city}
  93.  ${street}
  94. -${district}
  95. +${subdivision}
  96.  ${zip}
  97.  ${COUNTRY}</field>
  98.          </record>
  99. @@ -327,7 +327,7 @@
  100.              <field name="format_">${party_name}
  101.  ${name}
  102.  ${street}
  103. -${district}
  104. +${subdivision}
  105.  ${zip}
  106.  ${COUNTRY}</field>
  107.          </record>
  108. @@ -355,7 +355,7 @@
  109.              <field name="format_">${party_name}
  110.  ${name}
  111.  ${street}
  112. -${zip} ${city} ${DISTRICT_CODE}
  113. +${zip} ${city} ${SUBDIVISION_CODE}
  114.  ${COUNTRY}</field>
  115.          </record>
  116.  
  117. @@ -386,7 +386,7 @@
  118.  ${name}
  119.  ${street}
  120.  ${city}
  121. -${district}
  122. +${subdivision}
  123.  ${COUNTRY_CODE}-${ZIP}
  124.  ${COUNTRY}</field>
  125.          </record>
  126. @@ -472,7 +472,7 @@
  127.  ${street}
  128.  ${city}
  129.  ${zip}
  130. -${district}
  131. +${subdivision}
  132.  ${COUNTRY}</field>
  133.          </record>
  134.  
  135. @@ -482,7 +482,7 @@
  136.  ${name}
  137.  ${street}
  138.  ${city}
  139. -${district}
  140. +${subdivision}
  141.  ${COUNTRY}</field>
  142.          </record>
  143.  
  144. @@ -592,7 +592,7 @@
  145.              <field name="country" ref="country.kr"/>
  146.              <field name="language" ref="ir.lang_kp_KR"/>
  147.              <field name="format_">${COUNTRY}
  148. -${district}${city}${street}
  149. +${subdivision}${city}${street}
  150.  ${zip}</field>
  151.          </record>
  152.          -->
  153. @@ -657,7 +657,7 @@
  154.              <field name="country" ref="country.tw"/>
  155.              <field name="format_">${name} ${party_name}
  156.  ${street}
  157. -${city}, ${district} ${zip}
  158. +${city}, ${subdivision} ${zip}
  159.  ${COUNTRY}</field>
  160.          </record>
  161.  
  162. @@ -666,7 +666,7 @@
  163.              <field name="format_">${party_name}
  164.  ${street}
  165.  ${name}
  166. -${district}
  167. +${subdivision}
  168.  ${COUNTRY}
  169.  ${zip}</field>
  170.          </record>
  171. @@ -676,7 +676,7 @@
  172.              <field name="format_">${party_name}
  173.  ${name}
  174.  ${street}
  175. -${zip} ${city} ${district}
  176. +${zip} ${city} ${subdivision}
  177.  ${COUNTRY}</field>
  178.          </record>
  179.  
  180. @@ -686,7 +686,7 @@
  181.  ${name}
  182.  ${street}
  183.  ${city}
  184. -${district}
  185. +${subdivision}
  186.  ${zip}
  187.  ${COUNTRY}</field>
  188.          </record>
  189. @@ -715,7 +715,7 @@
  190.              <field name="format_">${party_name} (${name})
  191.  ${street}
  192.  ${city}
  193. -${district}
  194. +${subdivision}
  195.  ${COUNTRY}</field>
  196.          </record>
  197.  
  198. diff -r c0f1fc771c86 tests/test_party.py
  199. --- a/tests/test_party.py   Mon Nov 28 16:19:22 2016 +0100
  200. +++ b/tests/test_party.py   Thu Dec 15 16:39:17 2016 +0100
  201. @@ -8,6 +8,7 @@
  202.      phonenumbers = None
  203.  
  204.  import trytond.tests.test_tryton
  205. +from trytond.exceptions import UserError
  206.  from trytond.tests.test_tryton import ModuleTestCase, with_transaction
  207.  from trytond.tests.test_tryton import doctest_teardown
  208.  from trytond.tests.test_tryton import doctest_checker
  209. @@ -159,9 +160,40 @@
  210.          self.assertEqual(mechanism.value_compact, '+442083661179')
  211.  
  212.  
  213. +class PartyAddressFormatTestCase(ModuleTestCase):
  214. +    'Test Party Address Format class'
  215. +    module = 'party'
  216. +
  217. +    @with_transaction()
  218. +    def test_format(self):
  219. +        'Test address format'
  220. +        pool = Pool()
  221. +        AddressFormat = pool.get('party.address.format')
  222. +        Country = pool.get('country.country')
  223. +        Language = pool.get('ir.lang')
  224. +
  225. +        country1, = Country.create([{'code': 'CC', 'name': 'Country 1'}])
  226. +        lang1, = Language.search([], limit=1)
  227. +        address_format1, = AddressFormat.create([{
  228. +                    'country': country1.id,
  229. +                    'language': lang1.id,
  230. +                    'format_': '${country}',
  231. +                    }])
  232. +        self.assert_(address_format1.id)
  233. +        self.assertEqual(address_format1.format_, '${country}')
  234. +
  235. +        # Invalid variable
  236. +        self.assertRaises(UserError, AddressFormat.create, [{
  237. +                    'country': country1.id,
  238. +                    'language': lang1.id,
  239. +                    'format_': '${district}',
  240. +                    }])
  241. +
  242.  def suite():
  243.      suite = trytond.tests.test_tryton.suite()
  244.      suite.addTests(unittest.TestLoader().loadTestsFromTestCase(PartyTestCase))
  245. +    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
  246. +            PartyAddressFormatTestCase))
  247.      suite.addTests(doctest.DocFileSuite(
  248.              'scenario_party_replace.rst',
  249.              tearDown=doctest_teardown, encoding='utf-8',
RAW Paste Data