ctfy.sdk.admin_resources.suites

client.admin.suites -- a benchmark suite through its own door (#2896, phase B).

A suite's own fields only. The request models are the server's (~ctfy.server.models.admin_suite.SuiteCreate / ~ctfy.server.models.admin_suite.SuiteUpdate), so an event setting cannot be passed here at all. The answer is ~ctfy.core.suite.SuiteState, which has no event field either.

 1"""``client.admin.suites`` -- a benchmark suite through its own door (#2896, phase B).
 2
 3A suite's own fields only. The request models are the server's
 4(:class:`~ctfy.server.models.admin_suite.SuiteCreate` /
 5:class:`~ctfy.server.models.admin_suite.SuiteUpdate`), so an event setting
 6cannot be passed here at all. The answer is
 7:class:`~ctfy.core.suite.SuiteState`, which has no event field either.
 8"""
 9
10from __future__ import annotations
11
12from ctfy.core.suite import SuiteState
13from ctfy.sdk._helpers import _raise_for_status
14from ctfy.sdk.base import BaseHttpClient
15from ctfy.server.models.admin_suite import SuiteCreate, SuiteUpdate
16
17
18class AdminSuitesResource:
19    """Make, read and change suites."""
20
21    def __init__(self, http: BaseHttpClient) -> None:
22        self._http = http
23
24    def create(self, body: SuiteCreate) -> SuiteState:
25        """Make a suite. Only the fields set on *body* are sent, so the
26        server's defaults apply to the rest."""
27        resp = self._http.request(
28            "POST", "/admin/suites", json=body.model_dump(mode="json", exclude_unset=True)
29        )
30        _raise_for_status(resp)
31        return SuiteState.model_validate(resp.json())
32
33    def get(self, suite_id: str) -> SuiteState:
34        """One suite. An event's id is ``404 suite_not_found``."""
35        resp = self._http.request("GET", f"/admin/suites/{suite_id}")
36        _raise_for_status(resp)
37        return SuiteState.model_validate(resp.json())
38
39    def update(self, suite_id: str, patch: SuiteUpdate) -> SuiteState:
40        """Change a suite. Only the fields set on *patch* are sent; the
41        rest are left alone."""
42        resp = self._http.request(
43            "PATCH",
44            f"/admin/suites/{suite_id}",
45            json=patch.model_dump(mode="json", exclude_unset=True),
46        )
47        _raise_for_status(resp)
48        return SuiteState.model_validate(resp.json())
class AdminSuitesResource:
19class AdminSuitesResource:
20    """Make, read and change suites."""
21
22    def __init__(self, http: BaseHttpClient) -> None:
23        self._http = http
24
25    def create(self, body: SuiteCreate) -> SuiteState:
26        """Make a suite. Only the fields set on *body* are sent, so the
27        server's defaults apply to the rest."""
28        resp = self._http.request(
29            "POST", "/admin/suites", json=body.model_dump(mode="json", exclude_unset=True)
30        )
31        _raise_for_status(resp)
32        return SuiteState.model_validate(resp.json())
33
34    def get(self, suite_id: str) -> SuiteState:
35        """One suite. An event's id is ``404 suite_not_found``."""
36        resp = self._http.request("GET", f"/admin/suites/{suite_id}")
37        _raise_for_status(resp)
38        return SuiteState.model_validate(resp.json())
39
40    def update(self, suite_id: str, patch: SuiteUpdate) -> SuiteState:
41        """Change a suite. Only the fields set on *patch* are sent; the
42        rest are left alone."""
43        resp = self._http.request(
44            "PATCH",
45            f"/admin/suites/{suite_id}",
46            json=patch.model_dump(mode="json", exclude_unset=True),
47        )
48        _raise_for_status(resp)
49        return SuiteState.model_validate(resp.json())

Make, read and change suites.

AdminSuitesResource(http: ctfy.sdk.base.BaseHttpClient)
22    def __init__(self, http: BaseHttpClient) -> None:
23        self._http = http
def create( self, body: ctfy.server.models.admin_suite.SuiteCreate) -> ctfy.core.suite.SuiteState:
25    def create(self, body: SuiteCreate) -> SuiteState:
26        """Make a suite. Only the fields set on *body* are sent, so the
27        server's defaults apply to the rest."""
28        resp = self._http.request(
29            "POST", "/admin/suites", json=body.model_dump(mode="json", exclude_unset=True)
30        )
31        _raise_for_status(resp)
32        return SuiteState.model_validate(resp.json())

Make a suite. Only the fields set on body are sent, so the server's defaults apply to the rest.

def get(self, suite_id: str) -> ctfy.core.suite.SuiteState:
34    def get(self, suite_id: str) -> SuiteState:
35        """One suite. An event's id is ``404 suite_not_found``."""
36        resp = self._http.request("GET", f"/admin/suites/{suite_id}")
37        _raise_for_status(resp)
38        return SuiteState.model_validate(resp.json())

One suite. An event's id is 404 suite_not_found.

def update( self, suite_id: str, patch: ctfy.server.models.admin_suite.SuiteUpdate) -> ctfy.core.suite.SuiteState:
40    def update(self, suite_id: str, patch: SuiteUpdate) -> SuiteState:
41        """Change a suite. Only the fields set on *patch* are sent; the
42        rest are left alone."""
43        resp = self._http.request(
44            "PATCH",
45            f"/admin/suites/{suite_id}",
46            json=patch.model_dump(mode="json", exclude_unset=True),
47        )
48        _raise_for_status(resp)
49        return SuiteState.model_validate(resp.json())

Change a suite. Only the fields set on patch are sent; the rest are left alone.