Skip to content

Commit 87565e1

Browse files
committed
Merge branch 'lowmem' into lowmem3
Conflicts: python/tests/asyoutypetest.py tools/python/buildmetadatafromxml.py
2 parents 594d187 + 5aab5fb commit 87565e1

13 files changed

Lines changed: 186 additions & 328 deletions

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,25 @@ Finally, you might want to get some information about the location that correspo
113113
For more information about the other functionality available from the library, look in the unit tests or in the original
114114
[libphonenumber project](http://code.google.com/p/libphonenumber/).
115115

116+
Memory Usage
117+
------------
118+
119+
The library includes a lot of metadata, giving a significant memory overhead. This metadata is loaded on-demand so that
120+
the memory footprint of applications that only use a subset of the library functionality is not adversely affected.
121+
122+
In particular:
123+
124+
* The geocoding metadata (which makes up around 75% of the total memory footprint) is only loaded on the first use of
125+
one of the geocoding functions (`description_for_number`, `description_for_valid_number`,
126+
`area_description_for_number` and `country_name_for_number`).
127+
* The normal metadata for each region is only loaded on the first time that metadata for that region is needed.
128+
129+
If you need to ensure that the metadata memory use is accounted for at start of day (i.e. that a subsequent on-demand
130+
load of metadata will not cause memory exhaustion):
131+
132+
* Force-load the geocoding metadata by invoking `import phonenumbers.geocoder`.
133+
* Force-load the normal metadata by calling `phonenumbers.PhoneMetadata.load_all()`.
134+
116135
Project Layout
117136
--------------
118137
* The `python/` directory holds the Python code.

python/phonenumbers/asyoutypeformatter.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def _get_metadata_for_region(region_code):
8686
# Set to a default instance of the metadata. This allows us to
8787
# function with an incorrect region code, even if formatting only
8888
# works for numbers specified with "+".
89-
return PhoneMetadata.region_metadata.get(main_country, _EMPTY_METADATA)
89+
return PhoneMetadata.metadata_for_region(main_country, _EMPTY_METADATA)
9090

9191

9292
class AsYouTypeFormatter(object):
@@ -536,7 +536,7 @@ def _attempt_to_extract_ccc(self):
536536
self._national_number = number_without_ccc
537537
new_region_code = region_code_for_country_code(country_code)
538538
if new_region_code == REGION_CODE_FOR_NON_GEO_ENTITY:
539-
self._current_metadata = PhoneMetadata.country_code_metadata[country_code]
539+
self._current_metadata = PhoneMetadata.metadata_for_nongeo_region(country_code)
540540
elif new_region_code != self._default_country:
541541
self._current_metadata = _get_metadata_for_region(new_region_code)
542542

python/phonenumbers/data/__init__.py

Lines changed: 15 additions & 252 deletions
Original file line numberDiff line numberDiff line change
@@ -13,258 +13,21 @@
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_870 import PHONE_METADATA_870
19-
from .region_878 import PHONE_METADATA_878
20-
from .region_881 import PHONE_METADATA_881
21-
from .region_882 import PHONE_METADATA_882
22-
from .region_883 import PHONE_METADATA_883
23-
from .region_888 import PHONE_METADATA_888
24-
from .region_979 import PHONE_METADATA_979
25-
from .region_AC import PHONE_METADATA_AC
26-
from .region_AD import PHONE_METADATA_AD
27-
from .region_AE import PHONE_METADATA_AE
28-
from .region_AF import PHONE_METADATA_AF
29-
from .region_AG import PHONE_METADATA_AG
30-
from .region_AI import PHONE_METADATA_AI
31-
from .region_AL import PHONE_METADATA_AL
32-
from .region_AM import PHONE_METADATA_AM
33-
from .region_AO import PHONE_METADATA_AO
34-
from .region_AR import PHONE_METADATA_AR
35-
from .region_AS import PHONE_METADATA_AS
36-
from .region_AT import PHONE_METADATA_AT
37-
from .region_AU import PHONE_METADATA_AU
38-
from .region_AW import PHONE_METADATA_AW
39-
from .region_AX import PHONE_METADATA_AX
40-
from .region_AZ import PHONE_METADATA_AZ
41-
from .region_BA import PHONE_METADATA_BA
42-
from .region_BB import PHONE_METADATA_BB
43-
from .region_BD import PHONE_METADATA_BD
44-
from .region_BE import PHONE_METADATA_BE
45-
from .region_BF import PHONE_METADATA_BF
46-
from .region_BG import PHONE_METADATA_BG
47-
from .region_BH import PHONE_METADATA_BH
48-
from .region_BI import PHONE_METADATA_BI
49-
from .region_BJ import PHONE_METADATA_BJ
50-
from .region_BL import PHONE_METADATA_BL
51-
from .region_BM import PHONE_METADATA_BM
52-
from .region_BN import PHONE_METADATA_BN
53-
from .region_BO import PHONE_METADATA_BO
54-
from .region_BQ import PHONE_METADATA_BQ
55-
from .region_BR import PHONE_METADATA_BR
56-
from .region_BS import PHONE_METADATA_BS
57-
from .region_BT import PHONE_METADATA_BT
58-
from .region_BW import PHONE_METADATA_BW
59-
from .region_BY import PHONE_METADATA_BY
60-
from .region_BZ import PHONE_METADATA_BZ
61-
from .region_CA import PHONE_METADATA_CA
62-
from .region_CC import PHONE_METADATA_CC
63-
from .region_CD import PHONE_METADATA_CD
64-
from .region_CF import PHONE_METADATA_CF
65-
from .region_CG import PHONE_METADATA_CG
66-
from .region_CH import PHONE_METADATA_CH
67-
from .region_CI import PHONE_METADATA_CI
68-
from .region_CK import PHONE_METADATA_CK
69-
from .region_CL import PHONE_METADATA_CL
70-
from .region_CM import PHONE_METADATA_CM
71-
from .region_CN import PHONE_METADATA_CN
72-
from .region_CO import PHONE_METADATA_CO
73-
from .region_CR import PHONE_METADATA_CR
74-
from .region_CU import PHONE_METADATA_CU
75-
from .region_CV import PHONE_METADATA_CV
76-
from .region_CW import PHONE_METADATA_CW
77-
from .region_CX import PHONE_METADATA_CX
78-
from .region_CY import PHONE_METADATA_CY
79-
from .region_CZ import PHONE_METADATA_CZ
80-
from .region_DE import PHONE_METADATA_DE
81-
from .region_DJ import PHONE_METADATA_DJ
82-
from .region_DK import PHONE_METADATA_DK
83-
from .region_DM import PHONE_METADATA_DM
84-
from .region_DO import PHONE_METADATA_DO
85-
from .region_DZ import PHONE_METADATA_DZ
86-
from .region_EC import PHONE_METADATA_EC
87-
from .region_EE import PHONE_METADATA_EE
88-
from .region_EG import PHONE_METADATA_EG
89-
from .region_EH import PHONE_METADATA_EH
90-
from .region_ER import PHONE_METADATA_ER
91-
from .region_ES import PHONE_METADATA_ES
92-
from .region_ET import PHONE_METADATA_ET
93-
from .region_FI import PHONE_METADATA_FI
94-
from .region_FJ import PHONE_METADATA_FJ
95-
from .region_FK import PHONE_METADATA_FK
96-
from .region_FM import PHONE_METADATA_FM
97-
from .region_FO import PHONE_METADATA_FO
98-
from .region_FR import PHONE_METADATA_FR
99-
from .region_GA import PHONE_METADATA_GA
100-
from .region_GB import PHONE_METADATA_GB
101-
from .region_GD import PHONE_METADATA_GD
102-
from .region_GE import PHONE_METADATA_GE
103-
from .region_GF import PHONE_METADATA_GF
104-
from .region_GG import PHONE_METADATA_GG
105-
from .region_GH import PHONE_METADATA_GH
106-
from .region_GI import PHONE_METADATA_GI
107-
from .region_GL import PHONE_METADATA_GL
108-
from .region_GM import PHONE_METADATA_GM
109-
from .region_GN import PHONE_METADATA_GN
110-
from .region_GP import PHONE_METADATA_GP
111-
from .region_GQ import PHONE_METADATA_GQ
112-
from .region_GR import PHONE_METADATA_GR
113-
from .region_GT import PHONE_METADATA_GT
114-
from .region_GU import PHONE_METADATA_GU
115-
from .region_GW import PHONE_METADATA_GW
116-
from .region_GY import PHONE_METADATA_GY
117-
from .region_HK import PHONE_METADATA_HK
118-
from .region_HN import PHONE_METADATA_HN
119-
from .region_HR import PHONE_METADATA_HR
120-
from .region_HT import PHONE_METADATA_HT
121-
from .region_HU import PHONE_METADATA_HU
122-
from .region_ID import PHONE_METADATA_ID
123-
from .region_IE import PHONE_METADATA_IE
124-
from .region_IL import PHONE_METADATA_IL
125-
from .region_IM import PHONE_METADATA_IM
126-
from .region_IN import PHONE_METADATA_IN
127-
from .region_IO import PHONE_METADATA_IO
128-
from .region_IQ import PHONE_METADATA_IQ
129-
from .region_IR import PHONE_METADATA_IR
130-
from .region_IS import PHONE_METADATA_IS
131-
from .region_IT import PHONE_METADATA_IT
132-
from .region_JE import PHONE_METADATA_JE
133-
from .region_JM import PHONE_METADATA_JM
134-
from .region_JO import PHONE_METADATA_JO
135-
from .region_JP import PHONE_METADATA_JP
136-
from .region_KE import PHONE_METADATA_KE
137-
from .region_KG import PHONE_METADATA_KG
138-
from .region_KH import PHONE_METADATA_KH
139-
from .region_KI import PHONE_METADATA_KI
140-
from .region_KM import PHONE_METADATA_KM
141-
from .region_KN import PHONE_METADATA_KN
142-
from .region_KP import PHONE_METADATA_KP
143-
from .region_KR import PHONE_METADATA_KR
144-
from .region_KW import PHONE_METADATA_KW
145-
from .region_KY import PHONE_METADATA_KY
146-
from .region_KZ import PHONE_METADATA_KZ
147-
from .region_LA import PHONE_METADATA_LA
148-
from .region_LB import PHONE_METADATA_LB
149-
from .region_LC import PHONE_METADATA_LC
150-
from .region_LI import PHONE_METADATA_LI
151-
from .region_LK import PHONE_METADATA_LK
152-
from .region_LR import PHONE_METADATA_LR
153-
from .region_LS import PHONE_METADATA_LS
154-
from .region_LT import PHONE_METADATA_LT
155-
from .region_LU import PHONE_METADATA_LU
156-
from .region_LV import PHONE_METADATA_LV
157-
from .region_LY import PHONE_METADATA_LY
158-
from .region_MA import PHONE_METADATA_MA
159-
from .region_MC import PHONE_METADATA_MC
160-
from .region_MD import PHONE_METADATA_MD
161-
from .region_ME import PHONE_METADATA_ME
162-
from .region_MF import PHONE_METADATA_MF
163-
from .region_MG import PHONE_METADATA_MG
164-
from .region_MH import PHONE_METADATA_MH
165-
from .region_MK import PHONE_METADATA_MK
166-
from .region_ML import PHONE_METADATA_ML
167-
from .region_MM import PHONE_METADATA_MM
168-
from .region_MN import PHONE_METADATA_MN
169-
from .region_MO import PHONE_METADATA_MO
170-
from .region_MP import PHONE_METADATA_MP
171-
from .region_MQ import PHONE_METADATA_MQ
172-
from .region_MR import PHONE_METADATA_MR
173-
from .region_MS import PHONE_METADATA_MS
174-
from .region_MT import PHONE_METADATA_MT
175-
from .region_MU import PHONE_METADATA_MU
176-
from .region_MV import PHONE_METADATA_MV
177-
from .region_MW import PHONE_METADATA_MW
178-
from .region_MX import PHONE_METADATA_MX
179-
from .region_MY import PHONE_METADATA_MY
180-
from .region_MZ import PHONE_METADATA_MZ
181-
from .region_NA import PHONE_METADATA_NA
182-
from .region_NC import PHONE_METADATA_NC
183-
from .region_NE import PHONE_METADATA_NE
184-
from .region_NF import PHONE_METADATA_NF
185-
from .region_NG import PHONE_METADATA_NG
186-
from .region_NI import PHONE_METADATA_NI
187-
from .region_NL import PHONE_METADATA_NL
188-
from .region_NO import PHONE_METADATA_NO
189-
from .region_NP import PHONE_METADATA_NP
190-
from .region_NR import PHONE_METADATA_NR
191-
from .region_NU import PHONE_METADATA_NU
192-
from .region_NZ import PHONE_METADATA_NZ
193-
from .region_OM import PHONE_METADATA_OM
194-
from .region_PA import PHONE_METADATA_PA
195-
from .region_PE import PHONE_METADATA_PE
196-
from .region_PF import PHONE_METADATA_PF
197-
from .region_PG import PHONE_METADATA_PG
198-
from .region_PH import PHONE_METADATA_PH
199-
from .region_PK import PHONE_METADATA_PK
200-
from .region_PL import PHONE_METADATA_PL
201-
from .region_PM import PHONE_METADATA_PM
202-
from .region_PR import PHONE_METADATA_PR
203-
from .region_PS import PHONE_METADATA_PS
204-
from .region_PT import PHONE_METADATA_PT
205-
from .region_PW import PHONE_METADATA_PW
206-
from .region_PY import PHONE_METADATA_PY
207-
from .region_QA import PHONE_METADATA_QA
208-
from .region_RE import PHONE_METADATA_RE
209-
from .region_RO import PHONE_METADATA_RO
210-
from .region_RS import PHONE_METADATA_RS
211-
from .region_RU import PHONE_METADATA_RU
212-
from .region_RW import PHONE_METADATA_RW
213-
from .region_SA import PHONE_METADATA_SA
214-
from .region_SB import PHONE_METADATA_SB
215-
from .region_SC import PHONE_METADATA_SC
216-
from .region_SD import PHONE_METADATA_SD
217-
from .region_SE import PHONE_METADATA_SE
218-
from .region_SG import PHONE_METADATA_SG
219-
from .region_SH import PHONE_METADATA_SH
220-
from .region_SI import PHONE_METADATA_SI
221-
from .region_SJ import PHONE_METADATA_SJ
222-
from .region_SK import PHONE_METADATA_SK
223-
from .region_SL import PHONE_METADATA_SL
224-
from .region_SM import PHONE_METADATA_SM
225-
from .region_SN import PHONE_METADATA_SN
226-
from .region_SO import PHONE_METADATA_SO
227-
from .region_SR import PHONE_METADATA_SR
228-
from .region_SS import PHONE_METADATA_SS
229-
from .region_ST import PHONE_METADATA_ST
230-
from .region_SV import PHONE_METADATA_SV
231-
from .region_SX import PHONE_METADATA_SX
232-
from .region_SY import PHONE_METADATA_SY
233-
from .region_SZ import PHONE_METADATA_SZ
234-
from .region_TC import PHONE_METADATA_TC
235-
from .region_TD import PHONE_METADATA_TD
236-
from .region_TG import PHONE_METADATA_TG
237-
from .region_TH import PHONE_METADATA_TH
238-
from .region_TJ import PHONE_METADATA_TJ
239-
from .region_TK import PHONE_METADATA_TK
240-
from .region_TL import PHONE_METADATA_TL
241-
from .region_TM import PHONE_METADATA_TM
242-
from .region_TN import PHONE_METADATA_TN
243-
from .region_TO import PHONE_METADATA_TO
244-
from .region_TR import PHONE_METADATA_TR
245-
from .region_TT import PHONE_METADATA_TT
246-
from .region_TV import PHONE_METADATA_TV
247-
from .region_TW import PHONE_METADATA_TW
248-
from .region_TZ import PHONE_METADATA_TZ
249-
from .region_UA import PHONE_METADATA_UA
250-
from .region_UG import PHONE_METADATA_UG
251-
from .region_US import PHONE_METADATA_US
252-
from .region_UY import PHONE_METADATA_UY
253-
from .region_UZ import PHONE_METADATA_UZ
254-
from .region_VA import PHONE_METADATA_VA
255-
from .region_VC import PHONE_METADATA_VC
256-
from .region_VE import PHONE_METADATA_VE
257-
from .region_VG import PHONE_METADATA_VG
258-
from .region_VI import PHONE_METADATA_VI
259-
from .region_VN import PHONE_METADATA_VN
260-
from .region_VU import PHONE_METADATA_VU
261-
from .region_WF import PHONE_METADATA_WF
262-
from .region_WS import PHONE_METADATA_WS
263-
from .region_YE import PHONE_METADATA_YE
264-
from .region_YT import PHONE_METADATA_YT
265-
from .region_ZA import PHONE_METADATA_ZA
266-
from .region_ZM import PHONE_METADATA_ZM
267-
from .region_ZW import PHONE_METADATA_ZW
16+
from ..phonemetadata import PhoneMetadata
17+
18+
_AVAILABLE_NONGEO_COUNTRY_CODES = [800, 808, 870, 878, 881, 882, 883, 888, 979]
19+
_AVAILABLE_REGION_CODES = ['AC','AD','AE','AF','AG','AI','AL','AM','AO','AR','AS','AT','AU','AW','AX','AZ','BA','BB','BD','BE','BF','BG','BH','BI','BJ','BL','BM','BN','BO','BQ','BR','BS','BT','BW','BY','BZ','CA','CC','CD','CF','CG','CH','CI','CK','CL','CM','CN','CO','CR','CU','CV','CW','CX','CY','CZ','DE','DJ','DK','DM','DO','DZ','EC','EE','EG','EH','ER','ES','ET','FI','FJ','FK','FM','FO','FR','GA','GB','GD','GE','GF','GG','GH','GI','GL','GM','GN','GP','GQ','GR','GT','GU','GW','GY','HK','HN','HR','HT','HU','ID','IE','IL','IM','IN','IO','IQ','IR','IS','IT','JE','JM','JO','JP','KE','KG','KH','KI','KM','KN','KP','KR','KW','KY','KZ','LA','LB','LC','LI','LK','LR','LS','LT','LU','LV','LY','MA','MC','MD','ME','MF','MG','MH','MK','ML','MM','MN','MO','MP','MQ','MR','MS','MT','MU','MV','MW','MX','MY','MZ','NA','NC','NE','NF','NG','NI','NL','NO','NP','NR','NU','NZ','OM','PA','PE','PF','PG','PH','PK','PL','PM','PR','PS','PT','PW','PY','QA','RE','RO','RS','RU','RW','SA','SB','SC','SD','SE','SG','SH','SI','SJ','SK','SL','SM','SN','SO','SR','SS','ST','SV','SX','SY','SZ','TC','TD','TG','TH','TJ','TK','TL','TM','TN','TO','TR','TT','TV','TW','TZ','UA','UG','US','UY','UZ','VA','VC','VE','VG','VI','VN','VU','WF','WS','YE','YT','ZA','ZM','ZW']
20+
21+
def _load_region(code):
22+
__import__("region_%s" % code, globals(), locals(),
23+
fromlist=["PHONE_METADATA_%s" % code], level=1)
24+
25+
for country_code in _AVAILABLE_NONGEO_COUNTRY_CODES:
26+
PhoneMetadata.register_nongeo_region_loader(country_code, _load_region)
27+
28+
for region_code in _AVAILABLE_REGION_CODES:
29+
PhoneMetadata.register_region_loader(region_code, _load_region)
30+
26831
from .alt_format_43 import PHONE_ALT_FORMAT_43
26932
from .alt_format_44 import PHONE_ALT_FORMAT_44
27033
from .alt_format_49 import PHONE_ALT_FORMAT_49

0 commit comments

Comments
 (0)