from typing import Annotated from fansifter_common.httpclient.base import HTTPClient from pydantic import BaseModel, Field class Country(BaseModel): code2: Annotated[str, Field(alias="Code2")] name: Annotated[str, Field(alias="Name")] class Address(BaseModel): country: Annotated[Country, Field(alias="Country")] locality: Annotated[str, Field(alias="Locality")] postal_code: Annotated[str | None, Field(alias="PostalCode")] = None class Location(BaseModel): place_id: Annotated[str, Field(alias="PlaceId")] title: Annotated[str, Field(alias="Title")] address: Annotated[Address | None, Field(alias="Address")] = None position: Annotated[tuple[float, float], Field(alias="Position")] map_view: Annotated[tuple[float, float, float, float], Field(alias="MapView")] class LocationClient(HTTPClient): def __init__(self, region_name: str, api_key: str) -> None: super().__init__( client_options={ "base_url": f"https://places.geo.{region_name}.amazonaws.com/v2/", "params": { "key": api_key, }, } ) def get_location(self, place_id: str) -> Location: return self.request( "GET", f"/place/{place_id}", type=Location, params={"language": "en"}, )