Source code for ab.api.endpoints.commodity_maps

"""Commodity Maps API endpoints (5 routes)."""

from __future__ import annotations

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from ab.api.models.commodities import (
        CommodityMap,
        CommodityMapCreateRequest,
        CommodityMapSearchRequest,
        CommodityMapUpdateRequest,
    )
    from ab.api.models.shared import ServiceBaseResponse

from ab.api.base import BaseEndpoint
from ab.api.route import Route

_GET = Route("GET", "/commodity-map/{id}", response_model="CommodityMap")
_UPDATE = Route("PUT", "/commodity-map/{id}", request_model="CommodityMapUpdateRequest", response_model="CommodityMap")
_DELETE = Route("DELETE", "/commodity-map/{id}", response_model="ServiceBaseResponse")
_CREATE = Route("POST", "/commodity-map", request_model="CommodityMapCreateRequest", response_model="CommodityMap")
_SEARCH = Route(
    "POST", "/commodity-map/search",
    request_model="CommodityMapSearchRequest", response_model="List[CommodityMap]",
)


[docs] class CommodityMapsEndpoint(BaseEndpoint): """Commodity map operations (ACPortal API)."""
[docs] def get(self, map_id: str) -> CommodityMap: """GET /commodity-map/{id} Docs: https://ab-sdk.readthedocs.io/en/latest/api/commodity_maps/get.html Response model: CommodityMap """ return self._request(_GET.bind(id=map_id))
[docs] def update(self, map_id: str, *, data: CommodityMapUpdateRequest | dict) -> CommodityMap: """PUT /commodity-map/{id}. Args: map_id: Commodity map identifier. data: Commodity map update payload with custom_name, commodity_id. Accepts a :class:`CommodityMapUpdateRequest` instance or a dict. Request model: :class:`CommodityMapUpdateRequest` Docs: https://ab-sdk.readthedocs.io/en/latest/api/commodity_maps/update.html Request model: CommodityMapUpdateRequest Response model: CommodityMap """ return self._request(_UPDATE.bind(id=map_id), json=data)
[docs] def delete(self, map_id: str) -> ServiceBaseResponse: """DELETE /commodity-map/{id} Docs: https://ab-sdk.readthedocs.io/en/latest/api/commodity_maps/delete.html Response model: ServiceBaseResponse """ return self._request(_DELETE.bind(id=map_id))
[docs] def create(self, *, data: CommodityMapCreateRequest | dict) -> CommodityMap: """POST /commodity-map. Args: data: Commodity map creation payload with custom_name, commodity_id. Accepts a :class:`CommodityMapCreateRequest` instance or a dict. Request model: :class:`CommodityMapCreateRequest` Docs: https://ab-sdk.readthedocs.io/en/latest/api/commodity_maps/create.html Request model: CommodityMapCreateRequest Response model: CommodityMap """ return self._request(_CREATE, json=data)
[docs] def search(self, *, data: CommodityMapSearchRequest | dict) -> list[CommodityMap]: """POST /commodity-map/search. Args: data: Search payload with search_text, page, page_size. Accepts a :class:`CommodityMapSearchRequest` instance or a dict. Request model: :class:`CommodityMapSearchRequest` Docs: https://ab-sdk.readthedocs.io/en/latest/api/commodity_maps/search.html Request model: CommodityMapSearchRequest Response model: List[CommodityMap] """ return self._request(_SEARCH, json=data)