from anydi import singleton from dmp.adapters.aws.location import Location, LocationClient from dmp.locations.exceptions import CityNotFoundError from dmp.locations.models import City from dmp.locations.repositories import CityRepository from dmp.locations.types import Point @singleton class LocationService: def __init__( self, city_repository: CityRepository, location_client: LocationClient ) -> None: self.city_repository = city_repository self.location_client = location_client def get_closest_city( self, *, country_code2: str, name: str, position: Point ) -> City: """Get the closest city by country code and name.""" city = self.city_repository.get_closest_by_country_code2_and_name( country_code2=country_code2, name=name, position=position ) if city is None: raise CityNotFoundError return city def get_location(self, place_id: str) -> Location: """Get location by place_id.""" return self.location_client.get_location(place_id)