1# -*- coding: utf-8 -*- 2 3import re 4from numbers import Integral 5from collections import namedtuple 6 7__all__ = ["countries"] 8 9try: 10 basestring 11except NameError: 12 basestring = str 13 14Country = namedtuple('Country', 15 'name alpha2 alpha3 numeric apolitical_name') 16 17_records = [ 18 Country(u"Afghanistan", "AF", "AFG", "004", u"Afghanistan"), 19 Country(u"Åland Islands", "AX", "ALA", "248", u"Åland Islands"), 20 Country(u"Albania", "AL", "ALB", "008", u"Albania"), 21 Country(u"Algeria", "DZ", "DZA", "012", u"Algeria"), 22 Country(u"American Samoa", "AS", "ASM", "016", u"American Samoa"), 23 Country(u"Andorra", "AD", "AND", "020", u"Andorra"), 24 Country(u"Angola", "AO", "AGO", "024", u"Angola"), 25 Country(u"Anguilla", "AI", "AIA", "660", u"Anguilla"), 26 Country(u"Antarctica", "AQ", "ATA", "010", u"Antarctica"), 27 Country(u"Antigua and Barbuda", "AG", "ATG", "028", 28 u"Antigua and Barbuda"), 29 Country(u"Argentina", "AR", "ARG", "032", u"Argentina"), 30 Country(u"Armenia", "AM", "ARM", "051", u"Armenia"), 31 Country(u"Aruba", "AW", "ABW", "533", u"Aruba"), 32 Country(u"Australia", "AU", "AUS", "036", u"Australia"), 33 Country(u"Austria", "AT", "AUT", "040", u"Austria"), 34 Country(u"Azerbaijan", "AZ", "AZE", "031", u"Azerbaijan"), 35 Country(u"Bahamas", "BS", "BHS", "044", u"Bahamas"), 36 Country(u"Bahrain", "BH", "BHR", "048", u"Bahrain"), 37 Country(u"Bangladesh", "BD", "BGD", "050", u"Bangladesh"), 38 Country(u"Barbados", "BB", "BRB", "052", u"Barbados"), 39 Country(u"Belarus", "BY", "BLR", "112", u"Belarus"), 40 Country(u"Belgium", "BE", "BEL", "056", u"Belgium"), 41 Country(u"Belize", "BZ", "BLZ", "084", u"Belize"), 42 Country(u"Benin", "BJ", "BEN", "204", u"Benin"), 43 Country(u"Bermuda", "BM", "BMU", "060", u"Bermuda"), 44 Country(u"Bhutan", "BT", "BTN", "064", u"Bhutan"), 45 Country(u"Bolivia, Plurinational State of", "BO", "BOL", "068", 46 u"Bolivia, Plurinational State of"), 47 Country(u"Bonaire, Sint Eustatius and Saba", "BQ", "BES", "535", 48 u"Bonaire, Sint Eustatius and Saba"), 49 Country(u"Bosnia and Herzegovina", "BA", "BIH", "070", 50 u"Bosnia and Herzegovina"), 51 Country(u"Botswana", "BW", "BWA", "072", u"Botswana"), 52 Country(u"Bouvet Island", "BV", "BVT", "074", u"Bouvet Island"), 53 Country(u"Brazil", "BR", "BRA", "076", u"Brazil"), 54 Country(u"British Indian Ocean Territory", "IO", "IOT", "086", 55 u"British Indian Ocean Territory"), 56 Country(u"Brunei Darussalam", "BN", "BRN", "096", 57 u"Brunei Darussalam"), 58 Country(u"Bulgaria", "BG", "BGR", "100", u"Bulgaria"), 59 Country(u"Burkina Faso", "BF", "BFA", "854", u"Burkina Faso"), 60 Country(u"Burundi", "BI", "BDI", "108", u"Burundi"), 61 Country(u"Cambodia", "KH", "KHM", "116", u"Cambodia"), 62 Country(u"Cameroon", "CM", "CMR", "120", u"Cameroon"), 63 Country(u"Canada", "CA", "CAN", "124", u"Canada"), 64 Country(u"Cabo Verde", "CV", "CPV", "132", u"Cabo Verde"), 65 Country(u"Cayman Islands", "KY", "CYM", "136", u"Cayman Islands"), 66 Country(u"Central African Republic", "CF", "CAF", "140", 67 u"Central African Republic"), 68 Country(u"Chad", "TD", "TCD", "148", u"Chad"), 69 Country(u"Chile", "CL", "CHL", "152", u"Chile"), 70 Country(u"China", "CN", "CHN", "156", u"China"), 71 Country(u"Christmas Island", "CX", "CXR", "162", u"Christmas Island"), 72 Country(u"Cocos (Keeling) Islands", "CC", "CCK", "166", 73 u"Cocos (Keeling) Islands"), 74 Country(u"Colombia", "CO", "COL", "170", u"Colombia"), 75 Country(u"Comoros", "KM", "COM", "174", u"Comoros"), 76 Country(u"Congo", "CG", "COG", "178", u"Congo"), 77 Country(u"Congo, Democratic Republic of the", "CD", "COD", "180", 78 u"Congo, Democratic Republic of the"), 79 Country(u"Cook Islands", "CK", "COK", "184", u"Cook Islands"), 80 Country(u"Costa Rica", "CR", "CRI", "188", u"Costa Rica"), 81 Country(u"Côte d'Ivoire", "CI", "CIV", "384", u"Côte d'Ivoire"), 82 Country(u"Croatia", "HR", "HRV", "191", u"Croatia"), 83 Country(u"Cuba", "CU", "CUB", "192", u"Cuba"), 84 Country(u"Curaçao", "CW", "CUW", "531", u"Curaçao"), 85 Country(u"Cyprus", "CY", "CYP", "196", u"Cyprus"), 86 Country(u"Czechia", "CZ", "CZE", "203", u"Czechia"), 87 Country(u"Denmark", "DK", "DNK", "208", u"Denmark"), 88 Country(u"Djibouti", "DJ", "DJI", "262", u"Djibouti"), 89 Country(u"Dominica", "DM", "DMA", "212", u"Dominica"), 90 Country(u"Dominican Republic", "DO", "DOM", "214", u"Dominican Republic"), 91 Country(u"Ecuador", "EC", "ECU", "218", u"Ecuador"), 92 Country(u"Egypt", "EG", "EGY", "818", u"Egypt"), 93 Country(u"El Salvador", "SV", "SLV", "222", u"El Salvador"), 94 Country(u"Equatorial Guinea", "GQ", "GNQ", "226", u"Equatorial Guinea"), 95 Country(u"Eritrea", "ER", "ERI", "232", u"Eritrea"), 96 Country(u"Estonia", "EE", "EST", "233", u"Estonia"), 97 Country(u"Ethiopia", "ET", "ETH", "231", u"Ethiopia"), 98 Country(u"Falkland Islands (Malvinas)", "FK", "FLK", "238", 99 u"Falkland Islands (Malvinas)"), 100 Country(u"Faroe Islands", "FO", "FRO", "234", u"Faroe Islands"), 101 Country(u"Fiji", "FJ", "FJI", "242", u"Fiji"), 102 Country(u"Finland", "FI", "FIN", "246", u"Finland"), 103 Country(u"France", "FR", "FRA", "250", u"France"), 104 Country(u"French Guiana", "GF", "GUF", "254", u"French Guiana"), 105 Country(u"French Polynesia", "PF", "PYF", "258", u"French Polynesia"), 106 Country(u"French Southern Territories", "TF", "ATF", "260", 107 u"French Southern Territories"), 108 Country(u"Gabon", "GA", "GAB", "266", u"Gabon"), 109 Country(u"Gambia", "GM", "GMB", "270", u"Gambia"), 110 Country(u"Georgia", "GE", "GEO", "268", u"Georgia"), 111 Country(u"Germany", "DE", "DEU", "276", u"Germany"), 112 Country(u"Ghana", "GH", "GHA", "288", u"Ghana"), 113 Country(u"Gibraltar", "GI", "GIB", "292", u"Gibraltar"), 114 Country(u"Greece", "GR", "GRC", "300", u"Greece"), 115 Country(u"Greenland", "GL", "GRL", "304", u"Greenland"), 116 Country(u"Grenada", "GD", "GRD", "308", u"Grenada"), 117 Country(u"Guadeloupe", "GP", "GLP", "312", u"Guadeloupe"), 118 Country(u"Guam", "GU", "GUM", "316", u"Guam"), 119 Country(u"Guatemala", "GT", "GTM", "320", u"Guatemala"), 120 Country(u"Guernsey", "GG", "GGY", "831", u"Guernsey"), 121 Country(u"Guinea", "GN", "GIN", "324", u"Guinea"), 122 Country(u"Guinea-Bissau", "GW", "GNB", "624", u"Guinea-Bissau"), 123 Country(u"Guyana", "GY", "GUY", "328", u"Guyana"), 124 Country(u"Haiti", "HT", "HTI", "332", u"Haiti"), 125 Country(u"Heard Island and McDonald Islands", "HM", "HMD", "334", 126 u"Heard Island and McDonald Islands"), 127 Country(u"Holy See", "VA", "VAT", "336", u"Holy See"), 128 Country(u"Honduras", "HN", "HND", "340", u"Honduras"), 129 Country(u"Hong Kong", "HK", "HKG", "344", u"Hong Kong"), 130 Country(u"Hungary", "HU", "HUN", "348", u"Hungary"), 131 Country(u"Iceland", "IS", "ISL", "352", u"Iceland"), 132 Country(u"India", "IN", "IND", "356", u"India"), 133 Country(u"Indonesia", "ID", "IDN", "360", u"Indonesia"), 134 Country(u"Iran, Islamic Republic of", "IR", "IRN", "364", 135 u"Iran, Islamic Republic of"), 136 Country(u"Iraq", "IQ", "IRQ", "368", u"Iraq"), 137 Country(u"Ireland", "IE", "IRL", "372", u"Ireland"), 138 Country(u"Isle of Man", "IM", "IMN", "833", u"Isle of Man"), 139 Country(u"Israel", "IL", "ISR", "376", u"Israel"), 140 Country(u"Italy", "IT", "ITA", "380", u"Italy"), 141 Country(u"Jamaica", "JM", "JAM", "388", u"Jamaica"), 142 Country(u"Japan", "JP", "JPN", "392", u"Japan"), 143 Country(u"Jersey", "JE", "JEY", "832", u"Jersey"), 144 Country(u"Jordan", "JO", "JOR", "400", u"Jordan"), 145 Country(u"Kazakhstan", "KZ", "KAZ", "398", u"Kazakhstan"), 146 Country(u"Kenya", "KE", "KEN", "404", u"Kenya"), 147 Country(u"Kiribati", "KI", "KIR", "296", u"Kiribati"), 148 Country(u"Korea, Democratic People's Republic of", "KP", "PRK", "408", 149 u"Korea, Democratic People's Republic of"), 150 Country(u"Korea, Republic of", "KR", "KOR", "410", u"Korea, Republic of"), 151 Country(u"Kosovo", "XK", "XKX", "983", u"Kosovo"), 152 Country(u"Kuwait", "KW", "KWT", "414", u"Kuwait"), 153 Country(u"Kyrgyzstan", "KG", "KGZ", "417", u"Kyrgyzstan"), 154 Country(u"Lao People's Democratic Republic", "LA", "LAO", "418", 155 u"Lao People's Democratic Republic"), 156 Country(u"Latvia", "LV", "LVA", "428", u"Latvia"), 157 Country(u"Lebanon", "LB", "LBN", "422", u"Lebanon"), 158 Country(u"Lesotho", "LS", "LSO", "426", u"Lesotho"), 159 Country(u"Liberia", "LR", "LBR", "430", u"Liberia"), 160 Country(u"Libya", "LY", "LBY", "434", u"Libya"), 161 Country(u"Liechtenstein", "LI", "LIE", "438", u"Liechtenstein"), 162 Country(u"Lithuania", "LT", "LTU", "440", u"Lithuania"), 163 Country(u"Luxembourg", "LU", "LUX", "442", u"Luxembourg"), 164 Country(u"Macao", "MO", "MAC", "446", u"Macao"), 165 Country(u"North Macedonia", "MK", "MKD", "807", u"North Macedonia"), 166 Country(u"Madagascar", "MG", "MDG", "450", u"Madagascar"), 167 Country(u"Malawi", "MW", "MWI", "454", u"Malawi"), 168 Country(u"Malaysia", "MY", "MYS", "458", u"Malaysia"), 169 Country(u"Maldives", "MV", "MDV", "462", u"Maldives"), 170 Country(u"Mali", "ML", "MLI", "466", u"Mali"), 171 Country(u"Malta", "MT", "MLT", "470", u"Malta"), 172 Country(u"Marshall Islands", "MH", "MHL", "584", u"Marshall Islands"), 173 Country(u"Martinique", "MQ", "MTQ", "474", u"Martinique"), 174 Country(u"Mauritania", "MR", "MRT", "478", u"Mauritania"), 175 Country(u"Mauritius", "MU", "MUS", "480", u"Mauritius"), 176 Country(u"Mayotte", "YT", "MYT", "175", u"Mayotte"), 177 Country(u"Mexico", "MX", "MEX", "484", u"Mexico"), 178 Country(u"Micronesia, Federated States of", "FM", "FSM", "583", 179 u"Micronesia, Federated States of"), 180 Country(u"Moldova, Republic of", "MD", "MDA", "498", 181 u"Moldova, Republic of"), 182 Country(u"Monaco", "MC", "MCO", "492", u"Monaco"), 183 Country(u"Mongolia", "MN", "MNG", "496", u"Mongolia"), 184 Country(u"Montenegro", "ME", "MNE", "499", u"Montenegro"), 185 Country(u"Montserrat", "MS", "MSR", "500", u"Montserrat"), 186 Country(u"Morocco", "MA", "MAR", "504", u"Morocco"), 187 Country(u"Mozambique", "MZ", "MOZ", "508", u"Mozambique"), 188 Country(u"Myanmar", "MM", "MMR", "104", u"Myanmar"), 189 Country(u"Namibia", "NA", "NAM", "516", u"Namibia"), 190 Country(u"Nauru", "NR", "NRU", "520", u"Nauru"), 191 Country(u"Nepal", "NP", "NPL", "524", u"Nepal"), 192 Country(u"Netherlands", "NL", "NLD", "528", u"Netherlands"), 193 Country(u"New Caledonia", "NC", "NCL", "540", u"New Caledonia"), 194 Country(u"New Zealand", "NZ", "NZL", "554", u"New Zealand"), 195 Country(u"Nicaragua", "NI", "NIC", "558", u"Nicaragua"), 196 Country(u"Niger", "NE", "NER", "562", u"Niger"), 197 Country(u"Nigeria", "NG", "NGA", "566", u"Nigeria"), 198 Country(u"Niue", "NU", "NIU", "570", u"Niue"), 199 Country(u"Norfolk Island", "NF", "NFK", "574", u"Norfolk Island"), 200 Country(u"Northern Mariana Islands", "MP", "MNP", "580", 201 u"Northern Mariana Islands"), 202 Country(u"Norway", "NO", "NOR", "578", u"Norway"), 203 Country(u"Oman", "OM", "OMN", "512", u"Oman"), 204 Country(u"Pakistan", "PK", "PAK", "586", u"Pakistan"), 205 Country(u"Palau", "PW", "PLW", "585", u"Palau"), 206 Country(u"Palestine, State of", "PS", "PSE", "275", 207 u"Palestine"), 208 Country(u"Panama", "PA", "PAN", "591", u"Panama"), 209 Country(u"Papua New Guinea", "PG", "PNG", "598", 210 u"Papua New Guinea"), 211 Country(u"Paraguay", "PY", "PRY", "600", u"Paraguay"), 212 Country(u"Peru", "PE", "PER", "604", u"Peru"), 213 Country(u"Philippines", "PH", "PHL", "608", u"Philippines"), 214 Country(u"Pitcairn", "PN", "PCN", "612", u"Pitcairn"), 215 Country(u"Poland", "PL", "POL", "616", u"Poland"), 216 Country(u"Portugal", "PT", "PRT", "620", u"Portugal"), 217 Country(u"Puerto Rico", "PR", "PRI", "630", u"Puerto Rico"), 218 Country(u"Qatar", "QA", "QAT", "634", u"Qatar"), 219 Country(u"Réunion", "RE", "REU", "638", u"Réunion"), 220 Country(u"Romania", "RO", "ROU", "642", u"Romania"), 221 Country(u"Russian Federation", "RU", "RUS", "643", 222 u"Russian Federation"), 223 Country(u"Rwanda", "RW", "RWA", "646", u"Rwanda"), 224 Country(u"Saint Barthélemy", "BL", "BLM", "652", 225 u"Saint Barthélemy"), 226 Country(u"Saint Helena, Ascension and Tristan da Cunha", 227 "SH", "SHN", "654", 228 u"Saint Helena, Ascension and Tristan da Cunha"), 229 Country(u"Saint Kitts and Nevis", "KN", "KNA", "659", 230 u"Saint Kitts and Nevis"), 231 Country(u"Saint Lucia", "LC", "LCA", "662", u"Saint Lucia"), 232 Country(u"Saint Martin (French part)", "MF", "MAF", "663", 233 u"Saint Martin (French part)"), 234 Country(u"Saint Pierre and Miquelon", "PM", "SPM", "666", 235 u"Saint Pierre and Miquelon"), 236 Country(u"Saint Vincent and the Grenadines", "VC", "VCT", "670", 237 u"Saint Vincent and the Grenadines"), 238 Country(u"Samoa", "WS", "WSM", "882", u"Samoa"), 239 Country(u"San Marino", "SM", "SMR", "674", u"San Marino"), 240 Country(u"Sao Tome and Principe", "ST", "STP", "678", 241 u"Sao Tome and Principe"), 242 Country(u"Saudi Arabia", "SA", "SAU", "682", u"Saudi Arabia"), 243 Country(u"Senegal", "SN", "SEN", "686", u"Senegal"), 244 Country(u"Serbia", "RS", "SRB", "688", u"Serbia"), 245 Country(u"Seychelles", "SC", "SYC", "690", u"Seychelles"), 246 Country(u"Sierra Leone", "SL", "SLE", "694", u"Sierra Leone"), 247 Country(u"Singapore", "SG", "SGP", "702", u"Singapore"), 248 Country(u"Sint Maarten (Dutch part)", "SX", "SXM", "534", 249 u"Sint Maarten (Dutch part)"), 250 Country(u"Slovakia", "SK", "SVK", "703", u"Slovakia"), 251 Country(u"Slovenia", "SI", "SVN", "705", u"Slovenia"), 252 Country(u"Solomon Islands", "SB", "SLB", "090", u"Solomon Islands"), 253 Country(u"Somalia", "SO", "SOM", "706", u"Somalia"), 254 Country(u"South Africa", "ZA", "ZAF", "710", u"South Africa"), 255 Country(u"South Georgia and the South Sandwich Islands", 256 "GS", "SGS", "239", 257 u"South Georgia and the South Sandwich Islands",), 258 Country(u"South Sudan", "SS", "SSD", "728", u"South Sudan"), 259 Country(u"Spain", "ES", "ESP", "724", u"Spain"), 260 Country(u"Sri Lanka", "LK", "LKA", "144", u"Sri Lanka"), 261 Country(u"Sudan", "SD", "SDN", "729", u"Sudan"), 262 Country(u"Suriname", "SR", "SUR", "740", u"Suriname"), 263 Country(u"Svalbard and Jan Mayen", "SJ", "SJM", "744", 264 u"Svalbard and Jan Mayen"), 265 Country(u"Eswatini", "SZ", "SWZ", "748", u"Eswatini"), 266 Country(u"Sweden", "SE", "SWE", "752", u"Sweden"), 267 Country(u"Switzerland", "CH", "CHE", "756", u"Switzerland"), 268 Country(u"Syrian Arab Republic", "SY", "SYR", "760", 269 u"Syrian Arab Republic"), 270 Country(u"Taiwan, Province of China", "TW", "TWN", "158", 271 u"Taiwan"), 272 Country(u"Tajikistan", "TJ", "TJK", "762", u"Tajikistan"), 273 Country(u"Tanzania, United Republic of", "TZ", "TZA", "834", 274 u"Tanzania, United Republic of"), 275 Country(u"Thailand", "TH", "THA", "764", u"Thailand"), 276 Country(u"Timor-Leste", "TL", "TLS", "626", u"Timor-Leste"), 277 Country(u"Togo", "TG", "TGO", "768", u"Togo"), 278 Country(u"Tokelau", "TK", "TKL", "772", u"Tokelau"), 279 Country(u"Tonga", "TO", "TON", "776", u"Tonga"), 280 Country(u"Trinidad and Tobago", "TT", "TTO", "780", 281 u"Trinidad and Tobago"), 282 Country(u"Tunisia", "TN", "TUN", "788", u"Tunisia"), 283 Country(u"Turkey", "TR", "TUR", "792", u"Turkey"), 284 Country(u"Turkmenistan", "TM", "TKM", "795", u"Turkmenistan"), 285 Country(u"Turks and Caicos Islands", "TC", "TCA", "796", 286 u"Turks and Caicos Islands"), 287 Country(u"Tuvalu", "TV", "TUV", "798", u"Tuvalu"), 288 Country(u"Uganda", "UG", "UGA", "800", u"Uganda"), 289 Country(u"Ukraine", "UA", "UKR", "804", u"Ukraine"), 290 Country(u"United Arab Emirates", "AE", "ARE", "784", 291 u"United Arab Emirates"), 292 Country(u"United Kingdom of Great Britain and Northern Ireland", 293 "GB", "GBR", "826", 294 u"United Kingdom of Great Britain and Northern Ireland"), 295 Country(u"United States of America", "US", "USA", "840", 296 u"United States of America"), 297 Country(u"United States Minor Outlying Islands", "UM", "UMI", "581", 298 u"United States Minor Outlying Islands"), 299 Country(u"Uruguay", "UY", "URY", "858", u"Uruguay"), 300 Country(u"Uzbekistan", "UZ", "UZB", "860", u"Uzbekistan"), 301 Country(u"Vanuatu", "VU", "VUT", "548", u"Vanuatu"), 302 Country(u"Venezuela, Bolivarian Republic of", "VE", "VEN", "862", 303 u"Venezuela, Bolivarian Republic of"), 304 Country(u"Viet Nam", "VN", "VNM", "704", u"Viet Nam"), 305 Country(u"Virgin Islands, British", "VG", "VGB", "092", 306 u"Virgin Islands, British"), 307 Country(u"Virgin Islands, U.S.", "VI", "VIR", "850", 308 u"Virgin Islands, U.S."), 309 Country(u"Wallis and Futuna", "WF", "WLF", "876", u"Wallis and Futuna"), 310 Country(u"Western Sahara", "EH", "ESH", "732", u"Western Sahara"), 311 Country(u"Yemen", "YE", "YEM", "887", u"Yemen"), 312 Country(u"Zambia", "ZM", "ZMB", "894", u"Zambia"), 313 Country(u"Zimbabwe", "ZW", "ZWE", "716", u"Zimbabwe")] 314 315 316def _build_index(idx): 317 return dict((r[idx].upper(), r) for r in _records) 318 319 320# Internal country indexes 321_by_alpha2 = _build_index(1) 322_by_alpha3 = _build_index(2) 323_by_numeric = _build_index(3) 324_by_name = _build_index(0) 325_by_apolitical_name = _build_index(4) 326 327 328# Documented accessors for the country indexes 329countries_by_alpha2 = _by_alpha2 330countries_by_alpha3 = _by_alpha3 331countries_by_numeric = _by_numeric 332countries_by_name = _by_name 333countries_by_apolitical_name = _by_apolitical_name 334 335 336NOT_FOUND = object() 337 338 339class _CountryLookup(object): 340 341 def get(self, key, default=NOT_FOUND): 342 if isinstance(key, Integral): 343 r = _by_numeric.get("%03d" % key, default) 344 elif isinstance(key, basestring): 345 k = key.upper() 346 if len(k) == 2: 347 r = _by_alpha2.get(k, default) 348 elif len(k) == 3 and re.match(r"[0-9]{3}", k) and k != "000": 349 r = _by_numeric.get(k, default) 350 elif len(k) == 3: 351 r = _by_alpha3.get(k, default) 352 elif k in _by_name: 353 r = _by_name.get(k, default) 354 else: 355 r = _by_apolitical_name.get(k, default) 356 else: 357 r = default 358 359 if r == NOT_FOUND: 360 raise KeyError(key) 361 362 return r 363 364 __getitem__ = get 365 366 def __len__(self): 367 return len(_records) 368 369 def __iter__(self): 370 return iter(_records) 371 372 def __contains__(self, item): 373 try: 374 self.get(item) 375 return True 376 except KeyError: 377 return False 378 379 380countries = _CountryLookup() 381