Skip to content

Commit ca25fa2

Browse files
committed
Merge branch 'dev' into python3
Conflicts: do3 python/buildmetadatafromxml.py python/phonenumbers/data/region_AR.py python/phonenumbers/data/region_CR.py python/phonenumbers/data/region_GA.py python/phonenumbers/data/region_JO.py python/phonenumbers/data/region_JP.py python/phonenumbers/data/region_LB.py python/phonenumbers/data/region_LT.py python/phonenumbers/data/region_MV.py python/phonenumbers/data/region_MW.py python/phonenumbers/data/region_MZ.py python/phonenumbers/data/region_NA.py python/phonenumbers/data/region_NL.py python/phonenumbers/data/region_NZ.py python/phonenumbers/data/region_SV.py python/phonenumbers/data/region_TM.py python/phonenumbers/data/region_UG.py python/phonenumbers/geodata/__init__.py python/phonenumbers/phonenumberutil.py python/tests/geocodertest.py python/tests/phonenumbermatchertest.py python/tests/phonenumberutiltest.py python/tests/testdata/region_JP.py
2 parents 502c82d + 913ed06 commit ca25fa2

54 files changed

Lines changed: 1493 additions & 377 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

python/HISTORY

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11

2+
=====================
3+
What's new in 4.5b1
4+
=====================
5+
6+
Merge up to upstream Subversion revision 419.
7+
8+
29
=====================
310
What's new in 4.4b1
411
=====================

python/buildmetadatafromxml.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747

4848
# Convention: variables beginning with 'x' are XML objects
4949

50+
REGION_CODE_FOR_NON_GEO_ENTITY = "001"
51+
5052
# Top-level XML element containing data
5153
TOP_XPATH = "territories"
5254
# XML element name for the territory element
@@ -262,8 +264,8 @@ def __init__(self, xterritory):
262264
id = xterritory.attrib['id']
263265
self.o = PhoneMetadata(id, register=False)
264266
self.o.country_code = int(xterritory.attrib['countryCode'])
265-
self.o.international_prefix = xterritory.attrib['internationalPrefix']
266267
# Retrieve the IMPLIED attributes
268+
self.o.international_prefix = xterritory.get('internationalPrefix', None)
267269
self.o.leading_digits = xterritory.get('leadingDigits', None)
268270
self.o.preferred_international_prefix = xterritory.get('preferredInternationalPrefix', None)
269271
self.o.national_prefix = xterritory.get('nationalPrefix', None)
@@ -347,6 +349,15 @@ def __init__(self, xterritory):
347349
# national formats.
348350
self.o.intl_number_format = []
349351

352+
def identifier(self):
353+
if self.o.id == REGION_CODE_FOR_NON_GEO_ENTITY:
354+
# For non-geographical country calling codes (e.g. +800), use the
355+
# country calling codes instead of the region code to form the
356+
# file name.
357+
return str(self.o.country_code)
358+
else:
359+
return self.o.id
360+
350361
def __unicode__(self):
351362
return u(self.o)
352363

@@ -365,9 +376,10 @@ def __init__(self, filename):
365376
for xterritory in xterritories:
366377
if xterritory.tag == TERRITORY_TAG:
367378
terrobj = XTerritory(xterritory)
368-
if terrobj.o.id in self.territory:
369-
raise Exception("Duplicate entry for %s" % terrobj.o.id)
370-
self.territory[terrobj.o.id] = terrobj
379+
id = terrobj.identifier() # like "US" for countries, "800" for non-geo
380+
if id in self.territory:
381+
raise Exception("Duplicate entry for %s" % id)
382+
self.territory[id] = terrobj
371383
else:
372384
raise Exception("Unexpected element %s found" % xterritory.tag)
373385

@@ -378,8 +390,8 @@ def emit_metadata_for_region_py(self, region, region_filename, module_prefix):
378390
"""Emit Python code generating the metadata for the given region"""
379391
terrobj = self.territory[region]
380392
with open(region_filename, "w") as outfile:
381-
prnt(_REGION_METADATA_PROLOG % {'region': terrobj.o.id, 'module': module_prefix}, file=outfile)
382-
prnt("PHONE_METADATA_%s = %s" % (terrobj.o.id, terrobj), file=outfile)
393+
prnt(_REGION_METADATA_PROLOG % {'region': terrobj.identifier(), 'module': module_prefix}, file=outfile)
394+
prnt("PHONE_METADATA_%s = %s" % (terrobj.identifier(), terrobj), file=outfile)
383395

384396
def emit_metadata_py(self, datadir, module_prefix):
385397
"""Emit Python code for the phone number metadata to the given file, and
@@ -411,9 +423,9 @@ def emit_metadata_py(self, datadir, module_prefix):
411423
if country_code not in country_code_to_region_code:
412424
country_code_to_region_code[country_code] = []
413425
if terrobj.o.main_country_for_code:
414-
country_code_to_region_code[country_code].insert(0, country_id)
426+
country_code_to_region_code[country_code].insert(0, terrobj.o.id)
415427
else:
416-
country_code_to_region_code[country_code].append(country_id)
428+
country_code_to_region_code[country_code].append(terrobj.o.id)
417429

418430
for country_code in sorted(country_code_to_region_code.keys()):
419431
country_ids = country_code_to_region_code[country_code]

python/phonenumbers/__init__.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@
7575

7676
# Version number is taken from the upstream libphonenumber version
7777
# together with an indication of the version of the Python-specific code.
78-
__version__ = "4.4b1"
78+
__version__ = "4.5b1"
7979

8080
# Data class definitions
8181
from .phonenumber import PhoneNumber, CountryCodeSource, FrozenPhoneNumber
82-
from .phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
82+
from .phonemetadata import REGION_CODE_FOR_NON_GEO_ENTITY, NumberFormat, PhoneNumberDesc, PhoneMetadata
8383
# Functionality
8484
from .asyoutypeformatter import AsYouTypeFormatter
8585
from .phonenumberutil import *
@@ -89,7 +89,7 @@
8989
description_for_number, description_for_valid_number)
9090

9191
__all__ = ['PhoneNumber', 'CountryCodeSource', 'FrozenPhoneNumber',
92-
'NumberFormat', 'PhoneNumberDesc', 'PhoneMetadata',
92+
'REGION_CODE_FOR_NON_GEO_ENTITY', 'NumberFormat', 'PhoneNumberDesc', 'PhoneMetadata',
9393
'AsYouTypeFormatter',
9494
# items from phonenumberutil.py
9595
'COUNTRY_CODE_TO_REGION_CODE', 'SUPPORTED_REGIONS', 'UNKNOWN_REGION',
@@ -99,6 +99,7 @@
9999
'country_code_for_region',
100100
'example_number',
101101
'example_number_for_type',
102+
'example_number_for_non_geo_entity',
102103
'format_by_pattern',
103104
'format_in_original_format',
104105
'format_national_number_with_carrier_code',

python/phonenumbers/asyoutypeformatter.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from .unicode_util import digit as unicode_digit
3131
from .re_util import fullmatch
3232
from .phonemetadata import PhoneMetadata
33-
from .phonenumberutil import _VALID_PUNCTUATION
33+
from .phonenumberutil import _VALID_PUNCTUATION, REGION_CODE_FOR_NON_GEO_ENTITY
3434
from .phonenumberutil import _PLUS_SIGN, _PLUS_CHARS_PATTERN
3535
from .phonenumberutil import _extract_country_code, region_code_for_country_code
3636
from .phonenumberutil import country_code_for_region
@@ -476,7 +476,9 @@ def _attempt_to_extract_ccc(self):
476476

477477
self._national_number = number_without_ccc
478478
new_region_code = region_code_for_country_code(country_code)
479-
if new_region_code != self._default_country:
479+
if new_region_code == REGION_CODE_FOR_NON_GEO_ENTITY:
480+
self._current_metadata = PhoneMetadata.country_code_metadata[country_code]
481+
elif new_region_code != self._default_country:
480482
self._current_metadata = _get_metadata_for_region(new_region_code)
481483

482484
self._prefix_before_national_number += str(country_code)

python/phonenumbers/data/__init__.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Auto-generated file, do not edit by hand."""
2-
# Copyright (C) 2010-2011 The Libphonenumber Authors
2+
# Copyright (C) 2010-2012 The Libphonenumber Authors
33
#
44
# Licensed under the Apache License, Version 2.0 (the "License");
55
# you may not use this file except in compliance with the License.
@@ -13,6 +13,11 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16+
from .region_800 import PHONE_METADATA_800
17+
from .region_808 import PHONE_METADATA_808
18+
from .region_883 import PHONE_METADATA_883
19+
from .region_888 import PHONE_METADATA_888
20+
from .region_979 import PHONE_METADATA_979
1621
from .region_AC import PHONE_METADATA_AC
1722
from .region_AD import PHONE_METADATA_AD
1823
from .region_AE import PHONE_METADATA_AE
@@ -435,13 +440,17 @@
435440
690: ("TK",),
436441
691: ("FM",),
437442
692: ("MH",),
443+
800: ("001",),
444+
808: ("001",),
438445
850: ("KP",),
439446
852: ("HK",),
440447
853: ("MO",),
441448
855: ("KH",),
442449
856: ("LA",),
443450
880: ("BD",),
451+
883: ("001",),
444452
886: ("TW",),
453+
888: ("001",),
445454
960: ("MV",),
446455
961: ("LB",),
447456
962: ("JO",),
@@ -459,6 +468,7 @@
459468
975: ("BT",),
460469
976: ("MN",),
461470
977: ("NP",),
471+
979: ("001",),
462472
992: ("TJ",),
463473
993: ("TM",),
464474
994: ("AZ",),
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
"""Auto-generated file, do not edit by hand. 800 metadata"""
2+
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
3+
4+
PHONE_METADATA_800 = PhoneMetadata(id='001', country_code=800, international_prefix=None,
5+
general_desc=PhoneNumberDesc(national_number_pattern='\\d{8}', possible_number_pattern='\\d{8}', example_number='12345678'),
6+
fixed_line=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='12345678'),
7+
mobile=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='12345678'),
8+
toll_free=PhoneNumberDesc(national_number_pattern='\\d{8}', possible_number_pattern='\\d{8}', example_number='12345678'),
9+
premium_rate=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
10+
shared_cost=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
11+
personal_number=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
12+
voip=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
13+
pager=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
14+
uan=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
15+
emergency=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
16+
voicemail=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
17+
no_international_dialling=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
18+
number_format=[NumberFormat(pattern='(\\d{4})(\\d{4})', format='\\1 \\2')])
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
"""Auto-generated file, do not edit by hand. 808 metadata"""
2+
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
3+
4+
PHONE_METADATA_808 = PhoneMetadata(id='001', country_code=808, international_prefix=None,
5+
general_desc=PhoneNumberDesc(national_number_pattern='\\d{8}', possible_number_pattern='\\d{8}', example_number='12345678'),
6+
fixed_line=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='12345678'),
7+
mobile=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='12345678'),
8+
toll_free=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
9+
premium_rate=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
10+
shared_cost=PhoneNumberDesc(national_number_pattern='\\d{8}', possible_number_pattern='\\d{8}', example_number='12345678'),
11+
personal_number=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
12+
voip=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
13+
pager=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
14+
uan=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
15+
emergency=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
16+
voicemail=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
17+
no_international_dialling=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
18+
number_format=[NumberFormat(pattern='(\\d{4})(\\d{4})', format='\\1 \\2')])
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
"""Auto-generated file, do not edit by hand. 883 metadata"""
2+
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
3+
4+
PHONE_METADATA_883 = PhoneMetadata(id='001', country_code=883, international_prefix=None,
5+
general_desc=PhoneNumberDesc(national_number_pattern='51\\d{7}(?:\\d{3})?', possible_number_pattern='\\d{9}(?:\\d{3})?', example_number='510012345'),
6+
fixed_line=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='510012345'),
7+
mobile=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='510012345'),
8+
toll_free=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
9+
premium_rate=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
10+
shared_cost=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
11+
personal_number=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
12+
voip=PhoneNumberDesc(national_number_pattern='51(?:00\\d{5}(?:\\d{3})?|10\\d{8})', possible_number_pattern='\\d{9}(?:\\d{3})?', example_number='510012345'),
13+
pager=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
14+
uan=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
15+
emergency=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
16+
voicemail=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
17+
no_international_dialling=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
18+
number_format=[NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{3})', format='\\1 \\2 \\3'),
19+
NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{3})(\\d{3})', format='\\1 \\2 \\3 \\4')])
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
"""Auto-generated file, do not edit by hand. 888 metadata"""
2+
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
3+
4+
PHONE_METADATA_888 = PhoneMetadata(id='001', country_code=888, international_prefix=None,
5+
general_desc=PhoneNumberDesc(national_number_pattern='\\d{11}', possible_number_pattern='\\d{11}', example_number='12345678901'),
6+
fixed_line=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='12345678901'),
7+
mobile=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='12345678901'),
8+
toll_free=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
9+
premium_rate=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
10+
shared_cost=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
11+
personal_number=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
12+
voip=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
13+
pager=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
14+
uan=PhoneNumberDesc(national_number_pattern='\\d{11}', possible_number_pattern='\\d{11}', example_number='12345678901'),
15+
emergency=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
16+
voicemail=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
17+
no_international_dialling=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
18+
number_format=[NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{5})', format='\\1 \\2 \\3')])
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
"""Auto-generated file, do not edit by hand. 979 metadata"""
2+
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
3+
4+
PHONE_METADATA_979 = PhoneMetadata(id='001', country_code=979, international_prefix=None,
5+
general_desc=PhoneNumberDesc(national_number_pattern='\\d{9}', possible_number_pattern='\\d{9}', example_number='123456789'),
6+
fixed_line=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='123456789'),
7+
mobile=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA', example_number='123456789'),
8+
toll_free=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
9+
premium_rate=PhoneNumberDesc(national_number_pattern='\\d{9}', possible_number_pattern='\\d{9}', example_number='123456789'),
10+
shared_cost=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
11+
personal_number=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
12+
voip=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
13+
pager=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
14+
uan=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
15+
emergency=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
16+
voicemail=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
17+
no_international_dialling=PhoneNumberDesc(national_number_pattern='NA', possible_number_pattern='NA'),
18+
number_format=[NumberFormat(pattern='(\\d)(\\d{4})(\\d{4})', format='\\1 \\2 \\3')])

0 commit comments

Comments
 (0)