Fix NPE in geocache.py, Add save on fail

This commit is contained in:
Aleksey Filippov 2023-06-06 00:31:55 +04:00
parent 5792bc12b8
commit 5089eb4b10

View File

@ -22,29 +22,35 @@ class Geocache:
if os.path.isfile(self.JSON_FILE):
with open(self.JSON_FILE, 'r') as rf:
self.__geo_cache.update(json.load(rf))
print(f'Geocache loaded from {self.JSON_FILE}')
def __save_geo_cache(self) -> None:
with open(self.JSON_FILE, 'w') as wf:
json.dump(self.__geo_cache, wf)
print('Geocache saved')
print(f'Geocache saved to {self.JSON_FILE}')
def update_geo_cache(self, cities: List[str]) -> None:
is_changed: bool = False
for city in cities:
if Utils.is_empty_str(city):
continue
result: () = self.__geo_cache.get(city)
if result is not None:
continue
print(f'{len(self.__geo_cache.keys())}/{len(cities)} - Try to load geocode for {city}')
location: Point = self.__geocode(city)
result: () = (location.latitude, location.longitude)
self.__geo_cache[city] = result
is_changed = True
if len(self.__geo_cache.keys()) % 50 == 0:
try:
for city in cities:
if Utils.is_empty_str(city):
continue
result: () = self.__geo_cache.get(city)
if result is not None:
continue
print(f'{len(self.__geo_cache.keys())} - Try to load geocode for {city}')
location: Point = self.__geocode(city)
if location is None:
self.__geo_cache[city] = ''
else:
result: [] = [location.latitude, location.longitude]
self.__geo_cache[city] = result
is_changed = True
if len(self.__geo_cache.keys()) % 50 == 0:
self.__save_geo_cache()
finally:
if is_changed:
self.__save_geo_cache()
if is_changed:
self.__save_geo_cache()
def get_location(self, city: str) -> ():
return self.__geo_cache.get(city)