ctfy.sdk.admin_resources.contact_messages

client.admin.contact_messages — what visitors wrote on the Contact page (#3414).

 1"""``client.admin.contact_messages`` — what visitors wrote on the Contact
 2page (#3414)."""
 3
 4from __future__ import annotations
 5
 6from ctfy.core.site import ContactStatus
 7from ctfy.core.state.models import ContactMessageState
 8from ctfy.sdk._helpers import PagedList, _extract_items, _raise_for_status
 9from ctfy.sdk.base import BaseHttpClient
10
11
12class AdminContactMessagesResource:
13    """Read, mark handled and delete Contact-page messages.
14
15    Readable whether or not the site pages are switched on: turning them
16    off does not hide what visitors already wrote.
17    """
18
19    def __init__(self, http: BaseHttpClient) -> None:
20        self._http = http
21
22    def list(
23        self,
24        *,
25        status: ContactStatus | None = None,
26        offset: int = 0,
27        limit: int = 50,
28    ) -> PagedList[ContactMessageState]:
29        """Messages, newest first, optionally only those in ``status``."""
30        params: dict[str, str | int] = {"offset": offset, "limit": limit}
31        if status is not None:
32            params["status"] = status
33        resp = self._http.request("GET", "/admin/contact-messages", params=params)
34        _raise_for_status(resp)
35        return _extract_items(resp.json(), ContactMessageState)
36
37    def set_status(self, message_id: str, status: ContactStatus) -> ContactMessageState:
38        """Mark one message ``new`` or ``handled``."""
39        resp = self._http.request(
40            "PATCH", f"/admin/contact-messages/{message_id}", json={"status": status}
41        )
42        _raise_for_status(resp)
43        return ContactMessageState.model_validate(resp.json())
44
45    def delete(self, message_id: str) -> None:
46        """Remove one message for good."""
47        resp = self._http.request("DELETE", f"/admin/contact-messages/{message_id}")
48        _raise_for_status(resp)
class AdminContactMessagesResource:
13class AdminContactMessagesResource:
14    """Read, mark handled and delete Contact-page messages.
15
16    Readable whether or not the site pages are switched on: turning them
17    off does not hide what visitors already wrote.
18    """
19
20    def __init__(self, http: BaseHttpClient) -> None:
21        self._http = http
22
23    def list(
24        self,
25        *,
26        status: ContactStatus | None = None,
27        offset: int = 0,
28        limit: int = 50,
29    ) -> PagedList[ContactMessageState]:
30        """Messages, newest first, optionally only those in ``status``."""
31        params: dict[str, str | int] = {"offset": offset, "limit": limit}
32        if status is not None:
33            params["status"] = status
34        resp = self._http.request("GET", "/admin/contact-messages", params=params)
35        _raise_for_status(resp)
36        return _extract_items(resp.json(), ContactMessageState)
37
38    def set_status(self, message_id: str, status: ContactStatus) -> ContactMessageState:
39        """Mark one message ``new`` or ``handled``."""
40        resp = self._http.request(
41            "PATCH", f"/admin/contact-messages/{message_id}", json={"status": status}
42        )
43        _raise_for_status(resp)
44        return ContactMessageState.model_validate(resp.json())
45
46    def delete(self, message_id: str) -> None:
47        """Remove one message for good."""
48        resp = self._http.request("DELETE", f"/admin/contact-messages/{message_id}")
49        _raise_for_status(resp)

Read, mark handled and delete Contact-page messages.

Readable whether or not the site pages are switched on: turning them off does not hide what visitors already wrote.

AdminContactMessagesResource(http: ctfy.sdk.base.BaseHttpClient)
20    def __init__(self, http: BaseHttpClient) -> None:
21        self._http = http
def list( self, *, status: Optional[Literal['new', 'handled']] = None, offset: int = 0, limit: int = 50) -> ctfy.sdk._helpers.PagedList[ctfy.core.state.models.ContactMessageState]:
23    def list(
24        self,
25        *,
26        status: ContactStatus | None = None,
27        offset: int = 0,
28        limit: int = 50,
29    ) -> PagedList[ContactMessageState]:
30        """Messages, newest first, optionally only those in ``status``."""
31        params: dict[str, str | int] = {"offset": offset, "limit": limit}
32        if status is not None:
33            params["status"] = status
34        resp = self._http.request("GET", "/admin/contact-messages", params=params)
35        _raise_for_status(resp)
36        return _extract_items(resp.json(), ContactMessageState)

Messages, newest first, optionally only those in status.

def set_status( self, message_id: str, status: Literal['new', 'handled']) -> ctfy.core.state.models.ContactMessageState:
38    def set_status(self, message_id: str, status: ContactStatus) -> ContactMessageState:
39        """Mark one message ``new`` or ``handled``."""
40        resp = self._http.request(
41            "PATCH", f"/admin/contact-messages/{message_id}", json={"status": status}
42        )
43        _raise_for_status(resp)
44        return ContactMessageState.model_validate(resp.json())

Mark one message new or handled.

def delete(self, message_id: str) -> None:
46    def delete(self, message_id: str) -> None:
47        """Remove one message for good."""
48        resp = self._http.request("DELETE", f"/admin/contact-messages/{message_id}")
49        _raise_for_status(resp)

Remove one message for good.