import locationtagger from geopy.geocoders import Nominatim from geopy.exc import GeocoderTimedOut, GeocoderUnavailable from models.location_models import LocationData, Coordinates, ErrorResponse class LocationService: @staticmethod def get_coordinates(data:dict) -> Coordinates | ErrorResponse: print("Inside get coordinates") print(data) try: location = data.get('location') except: return Coordinates(latitude=None , longitude=None) location_string=None city=None state=None country=None if location: place_entity = locationtagger.find_locations(text=location) extracted_cities = list(place_entity.cities) extracted_regions = list(place_entity.regions) extracted_countries = list(place_entity.countries) if extracted_cities: city = extracted_cities[0] if extracted_regions: state = extracted_regions[0] if extracted_countries: country = extracted_countries[0] # location_string = ' '.join(filter(None, [city, state, country])) if not location_string: location_string = location else: return ErrorResponse(error="No location information provided") geolocator = Nominatim(user_agent="Geolocation") print("Printing location string") print(location_string) if city or state or country : location_string = city elif country is None: location_string = city elif city is None: location_string = state elif state is None: location_string = city try: getLoc = geolocator.geocode(location_string) print(getLoc.latitude) print(getLoc.longitude) return Coordinates( latitude=getLoc.latitude, longitude=getLoc.longitude ) except Exception as e: print(f"Error {e}") return Coordinates(latitude=None , longitude=None)