Source code for parseur.mailbox

from enum import Enum
from typing import Any, Dict, Iterable, List, Optional

from parseur.client import Client
from parseur.schemas.mailbox import MailboxSchema
from parseur.utils import resolve_absolute_urls


[docs]class MailboxOrderKey(str, Enum): """ Enumeration of supported mailbox sorting keys. Used with the `order_by` parameter to specify sorting in Mailbox.list() and Mailbox.iter(). """
[docs] NAME = "name"
[docs] DOCUMENT_COUNT = "document_count"
[docs] TEMPLATE_COUNT = "template_count"
[docs] PARSEDOK_COUNT = "PARSEDOK_count"
[docs] PARSEDKO_COUNT = "PARSEDKO_count"
[docs] QUOTAEXC_COUNT = "QUOTAEXC_count"
[docs] EXPORTKO_COUNT = "EXPORTKO_count"
[docs]class Mailbox: @classmethod
[docs] def from_response(cls, data: Dict) -> Dict: """ Deserialize a single mailbox API response. :param data: Raw API response dictionary. :return: Validated and transformed mailbox dictionary. """ return resolve_absolute_urls(MailboxSchema().load(data))
@classmethod
[docs] def iter( cls, *, search: Optional[str] = None, order_by: Optional[MailboxOrderKey] = None, ascending: bool = True, ) -> Iterable[Dict]: """ Yield all mailboxes with pagination and optional filtering or sorting. """ params = {} if search: params["search"] = search if order_by: prefix = "" if ascending else "-" params["ordering"] = f"{prefix}{order_by.value}" for raw in Client.paginate("/parser", params=params): yield cls.from_response(raw)
@classmethod
[docs] def list( cls, *, search: Optional[str] = None, order_by: Optional[MailboxOrderKey] = None, ascending: bool = True, ) -> List[Dict[str, Any]]: """Retrieve all mailboxes as a list.""" return list(cls.iter(search=search, order_by=order_by, ascending=ascending))
@classmethod
[docs] def retrieve(cls, mailbox_id: int) -> Dict[str, Any]: """Retrieve a single mailbox by ID.""" raw = Client.request("GET", f"/parser/{mailbox_id}") return cls.from_response(raw)
@classmethod
[docs] def schema(cls, mailbox_id: int) -> Dict[str, Any]: """Get the schema for a mailbox.""" return Client.request("GET", f"/parser/{mailbox_id}/schema")