Skip to content

Commit b89c64a

Browse files
committed
Retire PhoneNumberDesc.possible_number_pattern
As discussed on the mailing list [1], the possible_length fields now supercede the possible_number_pattern info. (The info is still present in the XML but will disappear imminently.) [1] https://groups.google.com/forum/#!topic/libphonenumber-discuss/75TOpTFVi08
1 parent a89455c commit b89c64a

5 files changed

Lines changed: 15 additions & 40 deletions

File tree

python/phonenumbers/phonemetadata.py

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ class PhoneNumberDesc(UnicodeMixin, ImmutableMixin):
151151
@mutating_method
152152
def __init__(self,
153153
national_number_pattern=None,
154-
possible_number_pattern=None,
155154
example_number=None,
156155
possible_length=None,
157156
possible_length_local_only=None):
@@ -160,14 +159,8 @@ def __init__(self,
160159
# its total length and leading digits.
161160
self.national_number_pattern = force_unicode(national_number_pattern) # None or Unicode string holding regexp
162161

163-
# The possible_number_pattern represents what a potentially valid
164-
# phone number for this region may be written as. This is a superset
165-
# of the national_number_pattern above and includes numbers that have
166-
# the area code omitted. Typically the only restrictions here are in
167-
# the number of digits. This could be used to highlight tokens in a
168-
# text that may be a phone number, or to quickly prune numbers that
169-
# could not possibly be a phone number for this locale.
170-
self.possible_number_pattern = force_unicode(possible_number_pattern) # None or Unicode string holding regexp
162+
# The possible_number_pattern is now retired.
163+
self.possible_number_pattern = None
171164

172165
# An example national significant number for the specific type. It
173166
# should not contain any formatting information.
@@ -204,8 +197,6 @@ def merge_from(self, other):
204197
"""Merge information from another PhoneNumberDesc object into this one."""
205198
if other.national_number_pattern is not None:
206199
self.national_number_pattern = other.national_number_pattern
207-
if other.possible_number_pattern is not None:
208-
self.possible_number_pattern = other.possible_number_pattern
209200
if other.example_number is not None:
210201
self.example_number = other.example_number
211202

@@ -227,9 +218,6 @@ def __unicode__(self):
227218
if self.national_number_pattern is not None:
228219
result += unicod("%snational_number_pattern=%s") % (sep, rpr(self.national_number_pattern))
229220
sep = unicod(", ")
230-
if self.possible_number_pattern is not None:
231-
result += unicod("%spossible_number_pattern=%s") % (sep, rpr(self.possible_number_pattern))
232-
sep = unicod(", ")
233221
if self.example_number is not None:
234222
result += unicod("%sexample_number=%s") % (sep, rpr(self.example_number))
235223
sep = unicod(", ")
@@ -375,8 +363,7 @@ def __init__(self,
375363
# are missing altogether, they will inherit all fields from the
376364
# general_desc. For all other types, if the whole type is missing and
377365
# it is relevant for the metadata, it will be given a
378-
# national_number_pattern of "NA" and a possible_number_pattern of
379-
# "NA".
366+
# national_number_pattern of "NA".
380367
self.general_desc = general_desc # None or PhoneNumberDesc
381368
self.fixed_line = fixed_line # None or PhoneNumberDesc
382369
self.mobile = mobile # None or PhoneNumberDesc

python/tests/asyoutypetest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,9 +1168,9 @@ def testAYTFShortNumberFormatting_AR(self):
11681168
def testEdgeCases(self):
11691169
# Python version extra tests for coverage
11701170
metadataXX = PhoneMetadata(id='XX', country_code=384, international_prefix='011',
1171-
general_desc=PhoneNumberDesc(national_number_pattern='\\d{10}', possible_number_pattern='\\d{6,10}'),
1172-
fixed_line=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1173-
mobile=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
1171+
general_desc=PhoneNumberDesc(national_number_pattern='\\d{10}'),
1172+
fixed_line=PhoneNumberDesc(national_number_pattern='NA'),
1173+
mobile=PhoneNumberDesc(national_number_pattern='NA'),
11741174
national_prefix=u("0"),
11751175
national_prefix_for_parsing=u("0"),
11761176
number_format=[NumberFormat(pattern='([135][246]|[246][123])(\\d{4})(\\d{4})',

python/tests/examplenumberstest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ def testCarrierSpecificShortNumbers(self):
227227
if desc is not None and desc.example_number is not None:
228228
exampleNumber = desc.example_number
229229
carrierSpecificNumber = phonenumberutil.parse(exampleNumber, regionCode)
230-
if (not fullmatch(re.compile(desc.possible_number_pattern), exampleNumber) or
230+
if (not shortnumberinfo.is_possible_short_number_for_region(carrierSpecificNumber, regionCode) or
231231
not shortnumberinfo.is_carrier_specific_for_region(carrierSpecificNumber, regionCode)):
232232
wrongTagCounter += 1
233233
prnt("Carrier-specific test failed for %s" % regionCode, file=sys.stderr)

python/tests/phonenumberutiltest.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2842,7 +2842,6 @@ def testMetadataEquality(self):
28422842
desc2 = PhoneNumberDesc(national_number_pattern="\\d{4,8}")
28432843
desc2._mutable = True
28442844
desc3 = PhoneNumberDesc(national_number_pattern="\\d{4,7}",
2845-
possible_number_pattern="\\d{7}",
28462845
example_number="1234567")
28472846
desc3._mutable = True
28482847
self.assertNotEqual(desc1, None)
@@ -2853,7 +2852,7 @@ def testMetadataEquality(self):
28532852
desc1.merge_from(desc3)
28542853
self.assertEqual(desc1, desc3)
28552854
self.assertEqual(r"PhoneNumberDesc(national_number_pattern='\\d{4,7}', " +
2856-
r"possible_number_pattern='\\d{7}', example_number='1234567')",
2855+
r"example_number='1234567')",
28572856
str(desc3))
28582857
nf1 = NumberFormat(pattern=r'\d{3}', format=r'\1', leading_digits_pattern=['1'])
28592858
nf1._mutable = True
@@ -2950,7 +2949,7 @@ def testMetadataAsString(self):
29502949
str(metadata.number_format[0]))
29512950
self.assertEqual(repr(metadata.number_format[0]),
29522951
str(metadata.number_format[0]))
2953-
self.assertEqual(r"""PhoneNumberDesc(national_number_pattern='[1-578]\\d{4,14}', possible_number_pattern='\\d{5,15}', possible_length=(9, 10))""",
2952+
self.assertEqual(r"""PhoneNumberDesc(national_number_pattern='[1-578]\\d{4,14}', possible_length=(9, 10))""",
29542953
str(metadata.general_desc))
29552954
self.assertEqual(repr(metadata.general_desc), str(metadata.general_desc))
29562955

@@ -2959,7 +2958,7 @@ def testMetadataAsString(self):
29592958
international_prefix='9123',
29602959
general_desc=PhoneNumberDesc(example_number='12'),
29612960
personal_number=PhoneNumberDesc(example_number='12'),
2962-
short_code=PhoneNumberDesc(national_number_pattern='[123]', possible_number_pattern='[123]'),
2961+
short_code=PhoneNumberDesc(national_number_pattern='[123]'),
29632962
preferred_international_prefix='9123',
29642963
national_prefix='1',
29652964
preferred_extn_prefix='2',
@@ -2974,7 +2973,7 @@ def testMetadataAsString(self):
29742973
self.assertEqual("""PhoneMetadata(id='XX', country_code=None, international_prefix='9123',
29752974
general_desc=PhoneNumberDesc(example_number='12'),
29762975
personal_number=PhoneNumberDesc(example_number='12'),
2977-
short_code=PhoneNumberDesc(national_number_pattern='[123]', possible_number_pattern='[123]'),
2976+
short_code=PhoneNumberDesc(national_number_pattern='[123]'),
29782977
preferred_international_prefix='9123',
29792978
national_prefix='1',
29802979
preferred_extn_prefix='2',
@@ -3008,10 +3007,8 @@ def testMetadataEval(self):
30083007

30093008
PhoneMetadata("XY",
30103009
general_desc=PhoneNumberDesc(national_number_pattern='\\d{7,10}',
3011-
possible_number_pattern='\\d{4,10}',
30123010
example_number='123'),
30133011
personal_number=PhoneNumberDesc(national_number_pattern='\\d{7,10}',
3014-
possible_number_pattern='\\d{4,10}',
30153012
example_number='123'),
30163013
preferred_international_prefix=u('9123'),
30173014
register=True)
@@ -3037,8 +3034,7 @@ def testCoverage(self):
30373034
self.assertFalse(phonenumberutil._check_region_for_parsing("", "cs"))
30383035

30393036
metadataXY = PhoneMetadata("XY",
3040-
general_desc=PhoneNumberDesc(national_number_pattern='\\d{7,10}',
3041-
possible_number_pattern='\\d{4,10}'),
3037+
general_desc=PhoneNumberDesc(national_number_pattern='\\d{7,10}'),
30423038
national_prefix_for_parsing=u('0(1|2|3)(4|5|6)'),
30433039
national_prefix_transform_rule=u('\\2'),
30443040
register=False)

tools/python/buildmetadatafromxml.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ def __init__(self, xterritory, tag, template=None, general_desc=False):
325325
self.o = PhoneNumberDesc()
326326
self.o._mutable = True
327327
self.o.national_number_pattern = None
328-
self.o.possible_number_pattern = None
328+
self.o.possible_number_pattern = None # retired
329329
# Set possible length info to None for now, to mark that it wasn't specified
330330
# for this numberDesc.
331331
self.o.possible_length = None
@@ -341,14 +341,6 @@ def __init__(self, xterritory, tag, template=None, general_desc=False):
341341
else:
342342
raise Exception("Missing required nationalNumberPattern element in %s.%s" % (id, tag))
343343

344-
# A possibleNumberPattern element is optional, except for the general_desc
345-
self.o.possible_number_pattern = _dews_re(_get_unique_child_value(xtag, 'possibleNumberPattern'))
346-
if self.o.possible_number_pattern is None:
347-
if general_desc and not lax:
348-
raise Exception("Missing required possibleNumberPattern element for generalDesc in %s.%s" % (id, tag))
349-
if template is not None:
350-
self.o.possible_number_pattern = template.possible_number_pattern
351-
352344
# An exampleNumber element is present iff this is not the generalDesc
353345
example_number = _get_unique_child_value(xtag, 'exampleNumber')
354346
if (not lax) and (not general_desc) and (example_number is None):
@@ -440,9 +432,9 @@ def __init__(self, xterritory, short_data):
440432
self.o.mobile_number_portable_region = get_true_attrib(xterritory, 'mobileNumberPortableRegion')
441433

442434
# Retrieve the various PhoneNumberDesc elements, which mostly have the form:
443-
# (nationalNumberPattern, possibleNumberPattern?, possibleLengths, exampleNumber)
435+
# (nationalNumberPattern, possibleLengths, exampleNumber)
444436
# However the general_desc is first and special; it has form:
445-
# (nationalNumberPattern, possibleNumberPattern)
437+
# (nationalNumberPattern)
446438
# and it will be used to fill out missing fields in many of the other PhoneNumberDesc elements.
447439
self.o.general_desc = XPhoneNumberDesc(xterritory, 'generalDesc', general_desc=True).o
448440

0 commit comments

Comments
 (0)