Source code for ab.api.endpoints.lookup

"""Lookup API endpoints (16 routes)."""

from __future__ import annotations

from typing import TYPE_CHECKING, Optional

if TYPE_CHECKING:
    from ab.api.models.lookup import (
        AccessKey,
        AccessKeySetup,
        CommonInsuranceSlab,
        ContactTypeEntity,
        CountryCodeDto,
        DensityClassEntry,
        DocumentTypeBySource,
        JobStatus,
        LookupItem,
        LookupValue,
        ParcelPackageType,
        PPCCampaign,
    )

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

_CONTACT_TYPES = Route("GET", "/lookup/contactTypes", response_model="List[ContactTypeEntity]")
_COUNTRIES = Route("GET", "/lookup/countries", response_model="List[CountryCodeDto]")
_JOB_STATUSES = Route("GET", "/lookup/jobStatuses", response_model="List[JobStatus]")
_ITEMS = Route("GET", "/lookup/items", params_model="LookupItemsParams", response_model="List[LookupItem]")

# Extended lookup routes (008)
_GET_BY_KEY = Route("GET", "/lookup/{masterConstantKey}", response_model="List[LookupValue]")
_GET_BY_KEY_AND_ID = Route("GET", "/lookup/{masterConstantKey}/{valueId}", response_model="LookupValue")
_ACCESS_KEYS = Route("GET", "/lookup/accessKeys", response_model="List[AccessKey]")
_ACCESS_KEY = Route("GET", "/lookup/accessKey/{accessKey}", response_model="AccessKeySetup")
_PPC_CAMPAIGNS = Route("GET", "/lookup/PPCCampaigns", response_model="List[PPCCampaign]")
_PARCEL_PACKAGE_TYPES = Route("GET", "/lookup/parcelPackageTypes", response_model="List[ParcelPackageType]")
_DOCUMENT_TYPES = Route(
    "GET", "/lookup/documentTypes",
    params_model="LookupDocumentTypesParams", response_model="List[DocumentTypeBySource]",
)
_COMMON_INSURANCE = Route("GET", "/lookup/comonInsurance", response_model="List[CommonInsuranceSlab]")
_DENSITY_CLASS_MAP = Route(
    "GET", "/lookup/densityClassMap",
    params_model="LookupDensityClassMapParams",
    response_model="List[DensityClassEntry]",
)
_REFER_CATEGORIES = Route("GET", "/lookup/referCategory", response_model="List[LookupValue]")
_REFER_CATEGORY_HIERARCHY = Route("GET", "/lookup/referCategoryHeirachy", response_model="List[LookupValue]")
_RESET_CACHE = Route("GET", "/lookup/resetMasterConstantCache")


[docs] class LookupEndpoint(BaseEndpoint): """Reference/lookup data (ACPortal API)."""
[docs] def get_contact_types(self) -> list[ContactTypeEntity]: """GET /lookup/contactTypes Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_contact_types.html Response model: List[ContactTypeEntity] """ return self._request(_CONTACT_TYPES)
[docs] def get_countries(self) -> list[CountryCodeDto]: """GET /lookup/countries Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_countries.html Response model: List[CountryCodeDto] """ return self._request(_COUNTRIES)
[docs] def get_job_statuses(self) -> list[JobStatus]: """GET /lookup/jobStatuses Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_job_statuses.html Response model: List[JobStatus] """ return self._request(_JOB_STATUSES)
[docs] def get_items( self, *, job_display_id: Optional[int] = None, job_item_id: Optional[str] = None, ) -> list[LookupItem]: """GET /lookup/items Args: job_display_id: Optional job display ID filter. job_item_id: Optional job item ID filter. Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_items.html Query params: LookupItemsParams Response model: List[LookupItem] """ return self._request( _ITEMS, params=dict(job_display_id=job_display_id, job_item_id=job_item_id), )
# ---- Generic lookup (008) ---------------------------------------------
[docs] def get_by_key(self, key: str) -> list[LookupValue]: """GET /lookup/{masterConstantKey} Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_by_key.html Response model: List[LookupValue] """ return self._request(_GET_BY_KEY.bind(masterConstantKey=key))
[docs] def get_by_key_and_id(self, key: str, value_id: str) -> LookupValue: """GET /lookup/{masterConstantKey}/{valueId} Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_by_key_and_id.html Response model: LookupValue """ return self._request(_GET_BY_KEY_AND_ID.bind(masterConstantKey=key, valueId=value_id))
# ---- Named convenience methods (008) ----------------------------------
[docs] def get_access_keys(self) -> list[AccessKey]: """GET /lookup/accessKeys Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_access_keys.html Response model: List[AccessKey] """ return self._request(_ACCESS_KEYS)
[docs] def get_access_key(self, access_key: str) -> AccessKeySetup: """GET /lookup/accessKey/{accessKey} Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_access_key.html Response model: AccessKeySetup """ return self._request(_ACCESS_KEY.bind(accessKey=access_key))
[docs] def get_ppc_campaigns(self) -> list[PPCCampaign]: """GET /lookup/PPCCampaigns Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_ppc_campaigns.html Response model: List[PPCCampaign] """ return self._request(_PPC_CAMPAIGNS)
[docs] def get_parcel_package_types(self) -> list[ParcelPackageType]: """GET /lookup/parcelPackageTypes Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_parcel_package_types.html Response model: List[ParcelPackageType] """ return self._request(_PARCEL_PACKAGE_TYPES)
[docs] def get_document_types(self, *, document_source: Optional[str] = None) -> list[DocumentTypeBySource]: """GET /lookup/documentTypes Args: document_source: Optional document source filter. Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_document_types.html Query params: LookupDocumentTypesParams Response model: List[DocumentTypeBySource] """ return self._request( _DOCUMENT_TYPES, params=dict(document_source=document_source), )
[docs] def get_common_insurance(self) -> list[CommonInsuranceSlab]: """GET /lookup/comonInsurance Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_common_insurance.html Response model: List[CommonInsuranceSlab] """ return self._request(_COMMON_INSURANCE)
[docs] def get_density_class_map(self, *, carrier_api: Optional[str] = None) -> list[DensityClassEntry]: """GET /lookup/densityClassMap Args: carrier_api: Optional carrier API filter. Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_density_class_map.html Query params: LookupDensityClassMapParams Response model: List[DensityClassEntry] """ return self._request( _DENSITY_CLASS_MAP, params=dict(carrier_api=carrier_api), )
[docs] def get_refer_categories(self) -> list[LookupValue]: """GET /lookup/referCategory Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_refer_categories.html Response model: List[LookupValue] """ return self._request(_REFER_CATEGORIES)
[docs] def get_refer_category_hierarchy(self) -> list[LookupValue]: """GET /lookup/referCategoryHeirachy Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/get_refer_category_hierarchy.html Response model: List[LookupValue] """ return self._request(_REFER_CATEGORY_HIERARCHY)
[docs] def reset_cache(self) -> None: """GET /lookup/resetMasterConstantCache Docs: https://ab-sdk.readthedocs.io/en/latest/api/lookup/reset_cache.html """ return self._request(_RESET_CACHE)