import sqlalchemy as sa from dmp.adapters.db import ReportingRepository from dmp.locations.models import City from dmp.locations.types import Point class CityRepository(ReportingRepository[City]): def get_closest_by_country_code2_and_name( self, country_code2: str, name: str, position: Point ) -> City | None: query = self.db.query_from_template( "city/get-closest-by-country.sql", context={ "country_code2": country_code2, "name": name, "longitude": position.longitude, "latitude": position.latitude, }, ) return ( self.db.session.execute(sa.select(City).from_statement(query)) .scalars() .first() )