From cdbb6b532546d3df12bfe2ffee9a54a3e7eea0e2 Mon Sep 17 00:00:00 2001 From: pablo Date: Thu, 26 Mar 2020 11:30:09 +0100 Subject: [PATCH] Added logging to geocoder.py --- geocoder/geocoder.py | 149 ++++++++++++++++++++++++++----------------- 1 file changed, 91 insertions(+), 58 deletions(-) diff --git a/geocoder/geocoder.py b/geocoder/geocoder.py index fb155a2..b20aa58 100644 --- a/geocoder/geocoder.py +++ b/geocoder/geocoder.py @@ -1,18 +1,22 @@ import sys -sys.path.append('..') + +sys.path.append("..") import requests from time import sleep from db_layer.capturas_interface import capturas_interface from core.config import google_api_key, geocoder_delay +from core import my_logger +import logging class Geocoder: - def __init__(self): self.cache = GeocodingCache() def start(self): + logging.info("Starting geocoder.") + while True: sleep(geocoder_delay) @@ -22,56 +26,71 @@ class Geocoder: continue try: - address = ad_data['calle'] + ', ' + ad_data['ciudad'] + address = ad_data["calle"] + ", " + ad_data["ciudad"] except TypeError: - geo_data = {'latitude': None, - 'longitude': None, - 'precision': 'SIN RESULTADOS'} - capturas_interface.update_geo_data(ad_data['referencia'], - ad_data['fecha_captura'], - geo_data['latitude'], - geo_data['longitude'], - geo_data['precision']) + geo_data = { + "latitude": None, + "longitude": None, + "precision": "SIN RESULTADOS", + } + capturas_interface.update_geo_data( + ad_data["referencia"], + ad_data["fecha_captura"], + geo_data["latitude"], + geo_data["longitude"], + geo_data["precision"], + ) continue if self.cache.address_in_cache(address): geo_data = self.cache.get_coordinates(address) - capturas_interface.update_geo_data(ad_data['referencia'], - ad_data['fecha_captura'], - geo_data['latitude'], - geo_data['longitude'], - geo_data['precision']) + capturas_interface.update_geo_data( + ad_data["referencia"], + ad_data["fecha_captura"], + geo_data["latitude"], + geo_data["longitude"], + geo_data["precision"], + ) continue task = GeocodingTask(address) task.geocode() while not task.is_successfull(): + logging.warning("Unsuccessful request.") task.geocode() - if task.tries > 3 or task.success_surrender_retry == 'Surrender': - geo_data = {'latitude': None, - 'longitude': None, - 'precision': 'SIN RESULTADOS'} - capturas_interface.update_geo_data(ad_data['referencia'], - ad_data['fecha_captura'], - geo_data['latitude'], - geo_data['longitude'], - geo_data['precision']) + if task.tries > 3 or task.success_surrender_retry == "Surrender": + geo_data = { + "latitude": None, + "longitude": None, + "precision": "SIN RESULTADOS", + } + capturas_interface.update_geo_data( + ad_data["referencia"], + ad_data["fecha_captura"], + geo_data["latitude"], + geo_data["longitude"], + geo_data["precision"], + ) break - if not (task.tries > 3 or task.success_surrender_retry == 'Surrender'): + if not (task.tries > 3 or task.success_surrender_retry == "Surrender"): geo_data = task.get_results() - self.cache.add_address(address, - geo_data['latitude'], - geo_data['longitude'], - geo_data['precision']) + self.cache.add_address( + address, + geo_data["latitude"], + geo_data["longitude"], + geo_data["precision"], + ) - capturas_interface.update_geo_data(ad_data['referencia'], - ad_data['fecha_captura'], - geo_data['latitude'], - geo_data['longitude'], - geo_data['precision']) + capturas_interface.update_geo_data( + ad_data["referencia"], + ad_data["fecha_captura"], + geo_data["latitude"], + geo_data["longitude"], + geo_data["precision"], + ) class GeocodingCache: @@ -86,7 +105,7 @@ class GeocodingCache: Comprueba si la direccion ya esta en la cache """ for geocoded_address in self.geocoded_addresses: - if geocoded_address['address'] == address: + if geocoded_address["address"] == address: return True return False @@ -95,7 +114,7 @@ class GeocodingCache: Recupera los datos asociados a la direccion """ for geocoded_address in self.geocoded_addresses: - if geocoded_address['address'] == address: + if geocoded_address["address"] == address: return geocoded_address return None @@ -105,28 +124,38 @@ class GeocodingCache: """ if len(self.geocoded_addresses) >= GeocodingCache.cache_max_size: self.geocoded_addresses.pop() + logging.info("Geocoder cache has reached max size. Making some room...") - self.geocoded_addresses.insert(0, {'address': address, - 'latitude': latitude, - 'longitude': longitude, - 'precision': precision}) + self.geocoded_addresses.insert( + 0, + { + "address": address, + "latitude": latitude, + "longitude": longitude, + "precision": precision, + }, + ) class GeocodingTask: - url = 'https://maps.googleapis.com/maps/api/geocode/json' + url = "https://maps.googleapis.com/maps/api/geocode/json" - geocoding_status_success = ['OK'] - geocoding_status_surrender = ['ZERO_RESULTS'] - geocoding_status_retry = ['OVER_QUERY_LIMIT', - 'REQUEST_DENIED', - 'INVALID_REQUEST', - 'UNKNOWN_ERROR'] + geocoding_status_success = ["OK"] + geocoding_status_surrender = ["ZERO_RESULTS"] + geocoding_status_retry = [ + "OVER_QUERY_LIMIT", + "REQUEST_DENIED", + "INVALID_REQUEST", + "UNKNOWN_ERROR", + ] def __init__(self, address): - self.request_parameters = {'address': address, - 'region': 'es', - 'key': google_api_key} + self.request_parameters = { + "address": address, + "region": "es", + "key": google_api_key, + } self.tries = 0 def geocode(self): @@ -141,7 +170,7 @@ class GeocodingTask: """ Comprueba que la request esta bien tanto por parte HTTP como de estados de Google. """ - if self.response.ok and self.success_surrender_retry() == 'Success': + if self.response.ok and self.success_surrender_retry() == "Success": return True else: return False @@ -156,9 +185,9 @@ class GeocodingTask: """ Devuelve el estado del resultado desde el punto de vista de Google """ - if self.response_json['status'] in GeocodingTask.geocoding_status_success: + if self.response_json["status"] in GeocodingTask.geocoding_status_success: return "Success" - elif self.response_json['status'] in GeocodingTask.geocoding_status_surrender: + elif self.response_json["status"] in GeocodingTask.geocoding_status_surrender: return "Surrender" else: return "Retry" @@ -167,13 +196,17 @@ class GeocodingTask: """ Extrae los resultados del JSON de respuesta y los devuelve """ - results = {'latitude': self.response_json['results'][0]['geometry']['location']['lat'], - 'longitude': self.response_json['results'][0]['geometry']['location']['lng'], - 'precision': self.response_json['results'][0]['geometry']['location_type']} + results = { + "latitude": self.response_json["results"][0]["geometry"]["location"]["lat"], + "longitude": self.response_json["results"][0]["geometry"]["location"][ + "lng" + ], + "precision": self.response_json["results"][0]["geometry"]["location_type"], + } return results -if __name__ == '__main__': +if __name__ == "__main__": geocoder = Geocoder() geocoder.start()