from httpx import HTTPStatusError, Response from starlette.status import HTTP_404_NOT_FOUND from delivery_metadata.api.app import app from delivery_metadata.models import Model class InstantGrats(Model): tuid: int store_id: int date: str active: str async def get_instant_grats(release_id: int) -> dict[int, set[InstantGrats]]: response: Response = await app.state.ows_connector.get( service_name="ows-track", path=f"/product/{release_id}/tracks/grats", ) try: response.raise_for_status() instant_grat_response = response.json() if "items" not in instant_grat_response: return {} instant_grats_data: dict[int, set[InstantGrats]] = {} for instant_grat in instant_grat_response["items"]: for grats in instant_grat["grats"]: instant_grats_data.setdefault(grats["store_id"], set()).add( InstantGrats( tuid=instant_grat["tuid"], store_id=grats["store_id"], date=grats["date"], active=grats["active"], ) ) return instant_grats_data except HTTPStatusError as err: if err.response.status_code == HTTP_404_NOT_FOUND: return {} raise err