Source code for zapi.infrastructure.api_clients.ticket_field_api_client
from __future__ import annotations
from typing import Iterable
from ..http.client import HttpClient
from ..http.pagination import yield_items
from ..mappers.ticket_field_mapper import to_domain, to_payload
from ...domain.models.ticket_field import TicketField
[docs]
class TicketFieldApiClient:
"""HTTP adapter for Zendesk Ticket Fields with shared cursor pagination."""
def __init__(self, http: HttpClient) -> None:
self._http = http
[docs]
def list(self) -> Iterable[TicketField]:
for obj in yield_items(
get_json=self._http.get,
first_path="/api/v2/ticket_fields.json",
base_url=self._http.base_url,
items_key="ticket_fields",
):
yield to_domain(obj)
[docs]
def get(self, field_id: int) -> TicketField:
data = self._http.get(f"/api/v2/ticket_fields/{field_id}.json")
return to_domain(data["ticket_field"])
[docs]
def create(self, entity: TicketField) -> TicketField:
payload = to_payload(entity)
data = self._http.post("/api/v2/ticket_fields.json", payload)
return to_domain(data["ticket_field"])
[docs]
def update(self, field_id: int, entity: TicketField) -> TicketField:
payload = to_payload(entity)
data = self._http.put(f"/api/v2/ticket_fields/{field_id}.json", payload)
return to_domain(data["ticket_field"])
[docs]
def delete(self, field_id: int) -> None:
self._http.delete(f"/api/v2/ticket_fields/{field_id}.json")