# some lines below are commented out due to overlaps
prefixes = (
('1', {'cc': 'us', 'tags': ['loc.us']}),
# ['1284',{'cc':'vg','tags':['loc.vg']}],
# ['1441',{'cc':'bm','tags':['loc.bm']}],
# ['1246',{'cc':'bb','tags':['loc.bb']}],
# ['1242',{'cc':'bs','tags':['loc.bs']}],
# ['1268',{'cc':'ag','tags':['loc.ag']}],
# ['1264',{'cc':'ai','tags':['loc.ai']}],
# ['1684',{'cc':'as','tags':['loc.as']}],
# ['1345',{'cc':'ky','tags':['loc.ky']}],
# ['1767',{'cc':'dm','tags':['loc.dm']}],
# ['1809',{'cc':'do','tags':['loc.do']}],
# ['1829',{'cc':'do','tags':['loc.do']}],
# ['1849',{'cc':'do','tags':['loc.do']}],
# ['1473',{'cc':'gd','tags':['loc.gd']}],
# ['1671',{'cc':'gu','tags':['loc.gu']}],
# ['1876',{'cc':'jm','tags':['loc.jm']}],
# ['1664',{'cc':'ms','tags':['loc.ms']}],
# ['1670',{'cc':'mp','tags':['loc.mp']}],
# ['1787',{'cc':'pr','tags':['loc.pr']}],
# ['1939',{'cc':'pr','tags':['loc.pr']}],
# ['1869',{'cc':'kn','tags':['loc.kn']}],
# ['1758',{'cc':'lc','tags':['loc.lc']}],
# ['1784',{'cc':'vc','tags':['loc.vc']}],
# ['1868',{'cc':'tt','tags':['loc.tt']}],
# ['1340',{'cc':'vi','tags':['loc.vi']}],
('1204', {'cc': 'ca', 'tags': ['loc.ca.mb']}),
('1226', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1236', {'cc': 'ca', 'tags': ['loc.ca.bc']}),
('1249', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1250', {'cc': 'ca', 'tags': ['loc.ca.bc']}),
('1289', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1306', {'cc': 'ca', 'tags': ['loc.ca.sk']}),
('1343', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1365', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1403', {'cc': 'ca', 'tags': ['loc.ca.ab']}),
('1416', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1418', {'cc': 'ca', 'tags': ['loc.ca.qc']}),
('1431', {'cc': 'ca', 'tags': ['loc.ca.mb']}),
('1437', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1438', {'cc': 'ca', 'tags': ['loc.ca.qc']}),
('1450', {'cc': 'ca', 'tags': ['loc.ca.qc']}),
('1506', {'cc': 'ca', 'tags': ['loc.ca.nb']}),
('1514', {'cc': 'ca', 'tags': ['loc.ca.qc']}),
('1519', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1579', {'cc': 'ca', 'tags': ['loc.ca.qc']}),
('1581', {'cc': 'ca', 'tags': ['loc.ca.qc']}),
('1587', {'cc': 'ca', 'tags': ['loc.ca.ab']}),
('1604', {'cc': 'ca', 'tags': ['loc.ca.bc']}),
('1613', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1639', {'cc': 'ca', 'tags': ['loc.ca.sk']}),
('1647', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1705', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1709', {'cc': 'ca', 'tags': ['loc.ca.nl']}),
('1778', {'cc': 'ca', 'tags': ['loc.ca.bc']}),
('1780', {'cc': 'ca', 'tags': ['loc.ca.ab']}),
('1807', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('1819', {'cc': 'ca', 'tags': ['loc.ca.qc']}),
('1867', {'cc': 'ca', 'tags': ['loc.ca.nt']}),
('1873', {'cc': 'ca', 'tags': ['loc.ca.qc']}),
('1902', {'cc': 'ca', 'tags': ['loc.ca.ns']}),
('1905', {'cc': 'ca', 'tags': ['loc.ca.on']}),
('93', {'cc': 'af', 'tags': ['loc.af']}),
('355', {'cc': 'al', 'tags': ['loc.al']}),
('213', {'cc': 'dz', 'tags': ['loc.dz']}),
('1684', {'cc': 'as', 'tags': ['loc.as']}),
('376', {'cc': 'ad', 'tags': ['loc.ad']}),
('244', {'cc': 'ao', 'tags': ['loc.ao']}),
('1264', {'cc': 'ai', 'tags': ['loc.ai']}),
('672', {'cc': 'aq', 'tags': ['loc.aq']}),
('1268', {'cc': 'ag', 'tags': ['loc.ag']}),
('54', {'cc': 'ar', 'tags': ['loc.ar']}),
('374', {'cc': 'am', 'tags': ['loc.am']}),
('297', {'cc': 'aw', 'tags': ['loc.aw']}),
('61', {'cc': 'au', 'tags': ['loc.au']}),
('43', {'cc': 'at', 'tags': ['loc.at']}),
('994', {'cc': 'az', 'tags': ['loc.az']}),
('1242', {'cc': 'bs', 'tags': ['loc.bs']}),
('973', {'cc': 'bh', 'tags': ['loc.bh']}),
('880', {'cc': 'bd', 'tags': ['loc.bd']}),
('1246', {'cc': 'bb', 'tags': ['loc.bb']}),
('375', {'cc': 'by', 'tags': ['loc.by']}),
('32', {'cc': 'be', 'tags': ['loc.be']}),
('501', {'cc': 'bz', 'tags': ['loc.bz']}),
('229', {'cc': 'bj', 'tags': ['loc.bj']}),
('1441', {'cc': 'bm', 'tags': ['loc.bm']}),
('975', {'cc': 'bt', 'tags': ['loc.bt']}),
('591', {'cc': 'bo', 'tags': ['loc.bo']}),
('387', {'cc': 'ba', 'tags': ['loc.ba']}),
('267', {'cc': 'bw', 'tags': ['loc.bw']}),
('55', {'cc': 'br', 'tags': ['loc.br']}),
('246', {'cc': 'io', 'tags': ['loc.io']}),
('1284', {'cc': 'vg', 'tags': ['loc.vg']}),
('673', {'cc': 'bn', 'tags': ['loc.bn']}),
('359', {'cc': 'bg', 'tags': ['loc.bg']}),
('226', {'cc': 'bf', 'tags': ['loc.bf']}),
('257', {'cc': 'bi', 'tags': ['loc.bi']}),
('855', {'cc': 'kh', 'tags': ['loc.kh']}),
('237', {'cc': 'cm', 'tags': ['loc.cm']}),
# ('1',{'cc':'ca','tags':['loc.ca']}),
('238', {'cc': 'cv', 'tags': ['loc.cv']}),
('1345', {'cc': 'ky', 'tags': ['loc.ky']}),
('236', {'cc': 'cf', 'tags': ['loc.cf']}),
('235', {'cc': 'td', 'tags': ['loc.td']}),
('56', {'cc': 'cl', 'tags': ['loc.cl']}),
('86', {'cc': 'cn', 'tags': ['loc.cn']}),
# ('61',{'cc':'cx','tags':['loc.cx']}),
# ('61',{'cc':'cc','tags':['loc.cc']}),
('57', {'cc': 'co', 'tags': ['loc.co']}),
('269', {'cc': 'km', 'tags': ['loc.km']}),
('682', {'cc': 'ck', 'tags': ['loc.ck']}),
('506', {'cc': 'cr', 'tags': ['loc.cr']}),
('385', {'cc': 'hr', 'tags': ['loc.hr']}),
('53', {'cc': 'cu', 'tags': ['loc.cu']}),
('599', {'cc': 'cw', 'tags': ['loc.cw']}),
('357', {'cc': 'cy', 'tags': ['loc.cy']}),
('420', {'cc': 'cz', 'tags': ['loc.cz']}),
('243', {'cc': 'cd', 'tags': ['loc.cd']}),
('45', {'cc': 'dk', 'tags': ['loc.dk']}),
('253', {'cc': 'dj', 'tags': ['loc.dj']}),
('1767', {'cc': 'dm', 'tags': ['loc.dm']}),
('1809', {'cc': 'do', 'tags': ['loc.do']}),
('1829', {'cc': 'do', 'tags': ['loc.do']}),
('1849', {'cc': 'do', 'tags': ['loc.do']}),
('670', {'cc': 'tl', 'tags': ['loc.tl']}),
('593', {'cc': 'ec', 'tags': ['loc.ec']}),
('20', {'cc': 'eg', 'tags': ['loc.eg']}),
('503', {'cc': 'sv', 'tags': ['loc.sv']}),
('240', {'cc': 'gq', 'tags': ['loc.gq']}),
('291', {'cc': 'er', 'tags': ['loc.er']}),
('372', {'cc': 'ee', 'tags': ['loc.ee']}),
('251', {'cc': 'et', 'tags': ['loc.et']}),
('500', {'cc': 'fk', 'tags': ['loc.fk']}),
('298', {'cc': 'fo', 'tags': ['loc.fo']}),
('679', {'cc': 'fj', 'tags': ['loc.fj']}),
('358', {'cc': 'fi', 'tags': ['loc.fi']}),
('33', {'cc': 'fr', 'tags': ['loc.fr']}),
('689', {'cc': 'pf', 'tags': ['loc.pf']}),
('241', {'cc': 'ga', 'tags': ['loc.ga']}),
('220', {'cc': 'gm', 'tags': ['loc.gm']}),
('995', {'cc': 'ge', 'tags': ['loc.ge']}),
('49', {'cc': 'de', 'tags': ['loc.de']}),
('233', {'cc': 'gh', 'tags': ['loc.gh']}),
('350', {'cc': 'gi', 'tags': ['loc.gi']}),
('30', {'cc': 'gr', 'tags': ['loc.gr']}),
('299', {'cc': 'gl', 'tags': ['loc.gl']}),
('1473', {'cc': 'gd', 'tags': ['loc.gd']}),
('1671', {'cc': 'gu', 'tags': ['loc.gu']}),
('502', {'cc': 'gt', 'tags': ['loc.gt']}),
('441481', {'cc': 'gg', 'tags': ['loc.gg']}),
('224', {'cc': 'gn', 'tags': ['loc.gn']}),
('245', {'cc': 'gw', 'tags': ['loc.gw']}),
('592', {'cc': 'gy', 'tags': ['loc.gy']}),
('509', {'cc': 'ht', 'tags': ['loc.ht']}),
('504', {'cc': 'hn', 'tags': ['loc.hn']}),
('852', {'cc': 'hk', 'tags': ['loc.hk']}),
('36', {'cc': 'hu', 'tags': ['loc.hu']}),
('354', {'cc': 'is', 'tags': ['loc.is']}),
('91', {'cc': 'in', 'tags': ['loc.in']}),
('62', {'cc': 'id', 'tags': ['loc.id']}),
('98', {'cc': 'ir', 'tags': ['loc.ir']}),
('964', {'cc': 'iq', 'tags': ['loc.iq']}),
('353', {'cc': 'ie', 'tags': ['loc.ie']}),
('441624', {'cc': 'im', 'tags': ['loc.im']}),
('972', {'cc': 'il', 'tags': ['loc.il']}),
('39', {'cc': 'it', 'tags': ['loc.it']}),
('225', {'cc': 'ci', 'tags': ['loc.ci']}),
('1876', {'cc': 'jm', 'tags': ['loc.jm']}),
('81', {'cc': 'jp', 'tags': ['loc.jp']}),
('441534', {'cc': 'je', 'tags': ['loc.je']}),
('962', {'cc': 'jo', 'tags': ['loc.jo']}),
# ('7',{'cc':'kz','tags':['loc.kz']}),
('7317', {'cc': 'kz', 'tags': ['loc.kz']}),
('7329', {'cc': 'kz', 'tags': ['loc.kz']}),
('7313', {'cc': 'kz', 'tags': ['loc.kz']}),
('7327', {'cc': 'kz', 'tags': ['loc.kz']}),
('7330', {'cc': 'kz', 'tags': ['loc.kz']}),
('7717', {'cc': 'kz', 'tags': ['loc.kz']}),
('7312', {'cc': 'kz', 'tags': ['loc.kz']}),
('7321', {'cc': 'kz', 'tags': ['loc.kz']}),
('7314', {'cc': 'kz', 'tags': ['loc.kz']}),
('7324', {'cc': 'kz', 'tags': ['loc.kz']}),
('7336', {'cc': 'kz', 'tags': ['loc.kz']}),
('7318', {'cc': 'kz', 'tags': ['loc.kz']}),
('7315', {'cc': 'kz', 'tags': ['loc.kz']}),
('7322', {'cc': 'kz', 'tags': ['loc.kz']}),
('7325', {'cc': 'kz', 'tags': ['loc.kz']}),
('7328', {'cc': 'kz', 'tags': ['loc.kz']}),
('7311', {'cc': 'kz', 'tags': ['loc.kz']}),
('7323', {'cc': 'kz', 'tags': ['loc.kz']}),
('7326', {'cc': 'kz', 'tags': ['loc.kz']}),
('7310', {'cc': 'kz', 'tags': ['loc.kz']}),
('254', {'cc': 'ke', 'tags': ['loc.ke']}),
('686', {'cc': 'ki', 'tags': ['loc.ki']}),
('383', {'cc': 'xk', 'tags': ['loc.xk']}),
('965', {'cc': 'kw', 'tags': ['loc.kw']}),
('996', {'cc': 'kg', 'tags': ['loc.kg']}),
('856', {'cc': 'la', 'tags': ['loc.la']}),
('371', {'cc': 'lv', 'tags': ['loc.lv']}),
('961', {'cc': 'lb', 'tags': ['loc.lb']}),
('266', {'cc': 'ls', 'tags': ['loc.ls']}),
('231', {'cc': 'lr', 'tags': ['loc.lr']}),
('218', {'cc': 'ly', 'tags': ['loc.ly']}),
('423', {'cc': 'li', 'tags': ['loc.li']}),
('370', {'cc': 'lt', 'tags': ['loc.lt']}),
('352', {'cc': 'lu', 'tags': ['loc.lu']}),
('853', {'cc': 'mo', 'tags': ['loc.mo']}),
('389', {'cc': 'mk', 'tags': ['loc.mk']}),
('261', {'cc': 'mg', 'tags': ['loc.mg']}),
('265', {'cc': 'mw', 'tags': ['loc.mw']}),
('60', {'cc': 'my', 'tags': ['loc.my']}),
('960', {'cc': 'mv', 'tags': ['loc.mv']}),
('223', {'cc': 'ml', 'tags': ['loc.ml']}),
('356', {'cc': 'mt', 'tags': ['loc.mt']}),
('692', {'cc': 'mh', 'tags': ['loc.mh']}),
('222', {'cc': 'mr', 'tags': ['loc.mr']}),
('230', {'cc': 'mu', 'tags': ['loc.mu']}),
# ('262',{'cc':'yt','tags':['loc.yt']}),
('52', {'cc': 'mx', 'tags': ['loc.mx']}),
('691', {'cc': 'fm', 'tags': ['loc.fm']}),
('373', {'cc': 'md', 'tags': ['loc.md']}),
('377', {'cc': 'mc', 'tags': ['loc.mc']}),
('976', {'cc': 'mn', 'tags': ['loc.mn']}),
('382', {'cc': 'me', 'tags': ['loc.me']}),
('1664', {'cc': 'ms', 'tags': ['loc.ms']}),
('212', {'cc': 'ma', 'tags': ['loc.ma']}),
('258', {'cc': 'mz', 'tags': ['loc.mz']}),
('95', {'cc': 'mm', 'tags': ['loc.mm']}),
('264', {'cc': 'na', 'tags': ['loc.na']}),
('674', {'cc': 'nr', 'tags': ['loc.nr']}),
('977', {'cc': 'np', 'tags': ['loc.np']}),
('31', {'cc': 'nl', 'tags': ['loc.nl']}),
# ('599',{'cc':'an','tags':['loc.an']}),
('687', {'cc': 'nc', 'tags': ['loc.nc']}),
('64', {'cc': 'nz', 'tags': ['loc.nz']}),
('505', {'cc': 'ni', 'tags': ['loc.ni']}),
('227', {'cc': 'ne', 'tags': ['loc.ne']}),
('234', {'cc': 'ng', 'tags': ['loc.ng']}),
('683', {'cc': 'nu', 'tags': ['loc.nu']}),
('850', {'cc': 'kp', 'tags': ['loc.kp']}),
('1670', {'cc': 'mp', 'tags': ['loc.mp']}),
('47', {'cc': 'no', 'tags': ['loc.no']}),
('968', {'cc': 'om', 'tags': ['loc.om']}),
('92', {'cc': 'pk', 'tags': ['loc.pk']}),
('680', {'cc': 'pw', 'tags': ['loc.pw']}),
('970', {'cc': 'ps', 'tags': ['loc.ps']}),
('507', {'cc': 'pa', 'tags': ['loc.pa']}),
('675', {'cc': 'pg', 'tags': ['loc.pg']}),
('595', {'cc': 'py', 'tags': ['loc.py']}),
('51', {'cc': 'pe', 'tags': ['loc.pe']}),
('63', {'cc': 'ph', 'tags': ['loc.ph']}),
# ('64',{'cc':'pn','tags':['loc.pn']}),
('48', {'cc': 'pl', 'tags': ['loc.pl']}),
('351', {'cc': 'pt', 'tags': ['loc.pt']}),
('1787', {'cc': 'pr', 'tags': ['loc.pr']}),
('1939', {'cc': 'pr', 'tags': ['loc.pr']}),
('974', {'cc': 'qa', 'tags': ['loc.qa']}),
('242', {'cc': 'cg', 'tags': ['loc.cg']}),
('262', {'cc': 're', 'tags': ['loc.re']}),
('40', {'cc': 'ro', 'tags': ['loc.ro']}),
('7', {'cc': 'ru', 'tags': ['loc.ru']}),
('250', {'cc': 'rw', 'tags': ['loc.rw']}),
('590', {'cc': 'bl', 'tags': ['loc.bl']}),
('290', {'cc': 'sh', 'tags': ['loc.sh']}),
('1869', {'cc': 'kn', 'tags': ['loc.kn']}),
('1758', {'cc': 'lc', 'tags': ['loc.lc']}),
# ('590',{'cc':'mf','tags':['loc.mf']}),
('508', {'cc': 'pm', 'tags': ['loc.pm']}),
('1784', {'cc': 'vc', 'tags': ['loc.vc']}),
('685', {'cc': 'ws', 'tags': ['loc.ws']}),
('378', {'cc': 'sm', 'tags': ['loc.sm']}),
('239', {'cc': 'st', 'tags': ['loc.st']}),
('966', {'cc': 'sa', 'tags': ['loc.sa']}),
('221', {'cc': 'sn', 'tags': ['loc.sn']}),
('381', {'cc': 'rs', 'tags': ['loc.rs']}),
('248', {'cc': 'sc', 'tags': ['loc.sc']}),
('232', {'cc': 'sl', 'tags': ['loc.sl']}),
('65', {'cc': 'sg', 'tags': ['loc.sg']}),
('1721', {'cc': 'sx', 'tags': ['loc.sx']}),
('421', {'cc': 'sk', 'tags': ['loc.sk']}),
('386', {'cc': 'si', 'tags': ['loc.si']}),
('677', {'cc': 'sb', 'tags': ['loc.sb']}),
('252', {'cc': 'so', 'tags': ['loc.so']}),
('27', {'cc': 'za', 'tags': ['loc.za']}),
('82', {'cc': 'kr', 'tags': ['loc.kr']}),
('211', {'cc': 'ss', 'tags': ['loc.ss']}),
('34', {'cc': 'es', 'tags': ['loc.es']}),
('94', {'cc': 'lk', 'tags': ['loc.lk']}),
('249', {'cc': 'sd', 'tags': ['loc.sd']}),
('597', {'cc': 'sr', 'tags': ['loc.sr']}),
# ('47',{'cc':'sj','tags':['loc.sj']}),
('268', {'cc': 'sz', 'tags': ['loc.sz']}),
('46', {'cc': 'se', 'tags': ['loc.se']}),
('41', {'cc': 'ch', 'tags': ['loc.ch']}),
('963', {'cc': 'sy', 'tags': ['loc.sy']}),
('886', {'cc': 'tw', 'tags': ['loc.tw']}),
('992', {'cc': 'tj', 'tags': ['loc.tj']}),
('255', {'cc': 'tz', 'tags': ['loc.tz']}),
('66', {'cc': 'th', 'tags': ['loc.th']}),
('228', {'cc': 'tg', 'tags': ['loc.tg']}),
('690', {'cc': 'tk', 'tags': ['loc.tk']}),
('676', {'cc': 'to', 'tags': ['loc.to']}),
('1868', {'cc': 'tt', 'tags': ['loc.tt']}),
('216', {'cc': 'tn', 'tags': ['loc.tn']}),
('90', {'cc': 'tr', 'tags': ['loc.tr']}),
('993', {'cc': 'tm', 'tags': ['loc.tm']}),
('1649', {'cc': 'tc', 'tags': ['loc.tc']}),
('688', {'cc': 'tv', 'tags': ['loc.tv']}),
('1340', {'cc': 'vi', 'tags': ['loc.vi']}),
('256', {'cc': 'ug', 'tags': ['loc.ug']}),
('380', {'cc': 'ua', 'tags': ['loc.ua']}),
('971', {'cc': 'ae', 'tags': ['loc.ae']}),
('44', {'cc': 'gb', 'tags': ['loc.gb']}),
# ( '1',{'cc':'us','tags':['loc.us']}),
('598', {'cc': 'uy', 'tags': ['loc.uy']}),
('998', {'cc': 'uz', 'tags': ['loc.uz']}),
('678', {'cc': 'vu', 'tags': ['loc.vu']}),
('379', {'cc': 'va', 'tags': ['loc.va']}),
('58', {'cc': 've', 'tags': ['loc.ve']}),
('84', {'cc': 'vn', 'tags': ['loc.vn']}),
('681', {'cc': 'wf', 'tags': ['loc.wf']}),
# ('212',{'cc':'eh','tags':['loc.eh']}),
('967', {'cc': 'ye', 'tags': ['loc.ye']}),
('260', {'cc': 'zm', 'tags': ['loc.zm']}),
('263', {'cc': 'zw', 'tags': ['loc.zw']}),
)
[docs]
def phnode(valu):
# (valu,info,kids)
return (valu, {}, {})
phonetree = (None, {}, {})
[docs]
def initPhoneTree():
for pref, info in prefixes:
node = phonetree
for c in pref:
node = formPhoneNode(node, c)
if node[1]:
print('PREF OVERLAP: %r %r %r' % (pref, node[1], info))
node[1].update(info)
[docs]
def getPhoneInfo(numb):
'''
Walk the phone info tree to find the best-match info for the given number.
Example:
info = getPhoneInfo(17035551212)
country = info.get('cc')
'''
text = str(numb)
info = {}
node = phonetree
# make decisions down the tree (but only keep info for
# nodes where it's populated) and return the last info
for c in text:
chld = node[2].get(c)
if chld is None:
break
if chld[1]:
info = chld[1]
node = chld
return info
initPhoneTree()