-
Notifications
You must be signed in to change notification settings - Fork 10
/
getCounty.py
105 lines (87 loc) · 3.83 KB
/
getCounty.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import unicodedata
import requests
abreviate_counties = {
"ab": {"city": "Alba Iulia", "county": "Alba"},
"ar": {"city": "Arad", "county": "Arad"},
"ag": {"city": "Pitesti", "county": "Arges"},
"bc": {"city": "Bacau", "county": "Bacau"},
"bh": {"city": "Oradea", "county": "Bihor"},
"bn": {"city": "Bistrita", "county": "Bistrita-Nasaud"},
"bt": {"city": "Botosani", "county": "Botosani"},
"br": {"city": "Braila", "county": "Braila"},
"bv": {"city": "Brasov", "county": "Brasov"},
"b": {"city": "Bucuresti", "county": "Bucuresti"},
"bz": {"city": "Buzau", "county": "Buzau"},
"cl": {"city": "Calarasi", "county": "Calarasi"},
"cs": {"city": "Resita", "county": "Caras-Severin"},
"cj": {"city": "Cluj-Napoca", "county": "Cluj"},
"ct": {"city": "Constanta", "county": "Constanta"},
"cv": {"city": "Sfantu Gheorghe", "county": "Covasna"},
"db": {"city": "Targoviste", "county": "Dambovita"},
"dj": {"city": "Craiova", "county": "Dolj"},
"gl": {"city": "Galati", "county": "Galati"},
"gr": {"city": "Giurgiu", "county": "Giurgiu"},
"gj": {"city": "Targu Jiu", "county": "Gorj"},
"hg": {"city": "Miercurea Ciuc", "county": "Harghita"},
"hr": {"city": "Hunedoara", "county": "Hunedoara"},
"hd": {"city": "Deva", "county": "Hunedoara"},
"il": {"city": "Slobozia", "county": "Ialomita"},
"is": {"city": "Iasi", "county": "Iasi"},
"if": {"city": "Buftea", "county": "Ilfov"},
"mm": {"city": "Baia Mare", "county": "Maramures"},
"mh": {"city": "Drobeta-Turnu Severin", "county": "Mehedinti"},
"ms": {"city": "Targu-Mures", "county": "Mures"},
"nt": {"city": "Piatra-Neamt", "county": "Neamt"},
"ot": {"city": "Slatina", "county": "Olt"},
"ph": {"city": "Ploiesti", "county": "Prahova"},
"sj": {"city": "Zalau", "county": "Salaj"},
"sm": {"city": "Satu Mare", "county": "Satu Mare"},
"sb": {"city": "Sibiu", "county": "Sibiu"},
"sv": {"city": "Suceava", "county": "Suceava"},
"tr": {"city": "Alexandria", "county": "Teleorman"},
"tm": {"city": "Timisoara", "county": "Timis"},
"tl": {"city": "Tulcea", "county": "Tulcea"},
"vl": {"city": "Ramnicu Valcea", "county": "Valcea"},
"vs": {"city": "Vaslui", "county": "Vaslui"},
"vn": {"city": "Focsani", "county": "Vrancea"},
}
def has_diacritics(char):
return any(unicodedata.combining(c) for c in char)
def remove_diacritics(input_string):
normalized_string = unicodedata.normalize("NFD", input_string)
return "".join(char for char in normalized_string if not has_diacritics(char))
def get_county(city):
return []
class GetCounty:
_counties = []
def get_county(self, city):
for county in self.counties:
if county.get("city") == city:
return county.get("county")
api_endpoint = f"https://api.laurentiumarian.ro/orase/?search={remove_diacritics(city)}&page_size=50"
counties_found = []
response = requests.get(api_endpoint).json()
while response and response.get("next"):
counties_found.extend(response.get("results"))
response = requests.get(response.get("next")).json()
else:
if response:
counties_found.extend(response.get("results"))
self.counties.append(
{
"city": city,
"county": [
item.get("county")
for item in counties_found
if item.get("name").lower()
== remove_diacritics(city.lower())
],
}
)
return self.counties[-1].get("county") if self.counties[-1].get("county") else None
@property
def counties(self):
return self._counties
@counties.setter
def counties(self, value):
self._counties.extend(value)