Skip to content

Commit 7b36923

Browse files
committed
Update protocol buffer conversion utilities for extra field
Back in commit 8800c97 the PhoneNumber class got an extra field number_of_leading_zeros, but the utilities for converting to/from protobuf versions of the object were never updated. Update now, and add a unit test that does various back-and-forth conversions.
1 parent f7347e6 commit 7b36923

4 files changed

Lines changed: 89 additions & 7 deletions

File tree

python/phonenumbers/pb2/__init__.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,14 @@
3838

3939
def PBToPy(numpb):
4040
"""Convert phonenumber_pb2.PhoneNumber to phonenumber.PhoneNumber"""
41-
return PhoneNumber(numpb.country_code if numpb.HasField("country_code") else None,
42-
numpb.national_number if numpb.HasField("national_number") else None,
43-
numpb.extension if numpb.HasField("extension") else None,
44-
numpb.italian_leading_zero if numpb.HasField("italian_leading_zero") else None,
45-
numpb.raw_input if numpb.HasField("raw_input") else None,
46-
numpb.country_code_source if numpb.HasField("country_code_source") else None,
47-
numpb.preferred_domestic_carrier_code if numpb.HasField("preferred_domestic_carrier_code") else None)
41+
return PhoneNumber(country_code=numpb.country_code if numpb.HasField("country_code") else None,
42+
national_number=numpb.national_number if numpb.HasField("national_number") else None,
43+
extension=numpb.extension if numpb.HasField("extension") else None,
44+
italian_leading_zero=numpb.italian_leading_zero if numpb.HasField("italian_leading_zero") else None,
45+
number_of_leading_zeros=numpb.number_of_leading_zeros if numpb.HasField("number_of_leading_zeros") else None,
46+
raw_input=numpb.raw_input if numpb.HasField("raw_input") else None,
47+
country_code_source=numpb.country_code_source if numpb.HasField("country_code_source") else None,
48+
preferred_domestic_carrier_code=numpb.preferred_domestic_carrier_code if numpb.HasField("preferred_domestic_carrier_code") else None)
4849

4950
def PyToPB(numobj):
5051
"""Convert phonenumber.PhoneNumber to phonenumber_pb2.PhoneNumber"""
@@ -57,6 +58,8 @@ def PyToPB(numobj):
5758
numpb.extension = numobj.extension
5859
if numobj.italian_leading_zero is not None:
5960
numpb.italian_leading_zero = numobj.italian_leading_zero
61+
if numobj.number_of_leading_zeros is not None:
62+
numpb.number_of_leading_zeros = numobj.number_of_leading_zeros
6063
if numobj.raw_input is not None:
6164
numpb.raw_input = numobj.raw_input
6265
if numobj.country_code_source is not None:

python/testpb2.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#!/usr/bin/env python
22
import doctest
3+
import unittest
34
import phonenumbers.pb2
5+
from tests.pb2 import *
46

57
if __name__ == '__main__':
68
doctest.testmod(phonenumbers.pb2)
9+
unittest.main()

python/tests/pb2/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/usr/bin/env python
2+
import unittest
3+
4+
from .converttest import PB2ConvertTest
5+
6+
if __name__ == '__main__':
7+
unittest.main()

python/tests/pb2/converttest.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/usr/bin/env python
2+
"""Unit tests for phonenumbers.pb2"""
3+
import unittest
4+
5+
from phonenumbers import PhoneNumber, CountryCodeSource
6+
from phonenumbers import PhoneNumberType, phonenumberutil
7+
from phonenumbers.pb2 import PBToPy, PyToPB
8+
9+
10+
class PB2ConvertTest(unittest.TestCase):
11+
def _checkAllExamples(self, num_type):
12+
for region_code in phonenumberutil.SUPPORTED_REGIONS:
13+
numobj_py = phonenumberutil.example_number_for_type(region_code, num_type)
14+
if numobj_py is not None:
15+
numobj_pb = PyToPB(numobj_py)
16+
alt_py = PBToPy(numobj_pb)
17+
self.assertEqual(numobj_py, alt_py)
18+
19+
def testFixedLine(self):
20+
self._checkAllExamples(PhoneNumberType.FIXED_LINE)
21+
22+
def testMobile(self):
23+
self._checkAllExamples(PhoneNumberType.MOBILE)
24+
25+
def testTollFree(self):
26+
self._checkAllExamples(PhoneNumberType.TOLL_FREE)
27+
28+
def testPremiumRate(self):
29+
self._checkAllExamples(PhoneNumberType.PREMIUM_RATE)
30+
31+
def testVoip(self):
32+
self._checkAllExamples(PhoneNumberType.VOIP)
33+
34+
def testPager(self):
35+
self._checkAllExamples(PhoneNumberType.PAGER)
36+
37+
def testUan(self):
38+
self._checkAllExamples(PhoneNumberType.UAN)
39+
40+
def testVoicemail(self):
41+
self._checkAllExamples(PhoneNumberType.VOICEMAIL)
42+
43+
def testSharedCost(self):
44+
self._checkAllExamples(PhoneNumberType.SHARED_COST)
45+
46+
def testMissingFields(self):
47+
fullobj = PhoneNumber(country_code=1,
48+
national_number=12345678,
49+
extension=123,
50+
italian_leading_zero=True,
51+
number_of_leading_zeros=1,
52+
raw_input="+11235678",
53+
country_code_source=CountryCodeSource.FROM_NUMBER_WITH_PLUS_SIGN,
54+
preferred_domestic_carrier_code="123")
55+
fieldnames = ('country_code', 'national_number', 'extension',
56+
'italian_leading_zero', 'number_of_leading_zeros',
57+
'raw_input', 'country_code_source',
58+
'preferred_domestic_carrier_code')
59+
for field in fieldnames:
60+
numobj = PhoneNumber()
61+
numobj.merge_from(fullobj)
62+
numobj.__dict__[field] = None
63+
pbobj = PyToPB(numobj)
64+
for ii in fieldnames:
65+
nf = numobj.__dict__[ii]
66+
if nf is None:
67+
self.assertFalse(pbobj.HasField(ii))
68+
else:
69+
self.assertTrue(pbobj.HasField(ii))

0 commit comments

Comments
 (0)