From cb6d7c892b9eecc241c50ed98cb06405213ae445 Mon Sep 17 00:00:00 2001 From: L0RD-ZER0 <68327382+L0RD-ZER0@users.noreply.github.com> Date: Fri, 17 Jul 2026 12:50:48 +0530 Subject: [PATCH 1/2] feat: add multi-status ticket lookup and site meta removal - Add ResponseTicketsClient.get_multi_status() to fetch the status of multiple response tickets in a single request - Switch ticket summary/full endpoints from GET with path params to POST with form data, matching the API contract - Add SitesClient.remove_meta() to remove a single metadata key for a site --- atomic_sdk/api/response_tickets.py | 21 +++++++++++++++++---- atomic_sdk/api/sites.py | 17 +++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/atomic_sdk/api/response_tickets.py b/atomic_sdk/api/response_tickets.py index 5022d11..ff7b084 100644 --- a/atomic_sdk/api/response_tickets.py +++ b/atomic_sdk/api/response_tickets.py @@ -20,8 +20,8 @@ def get_summary(self, ticket_id: str) -> Dict[str, Any]: Returns: A dictionary containing the summary of the ticket. """ - endpoint = f"/response-ticket/get/summary/{ticket_id}" - return self._get(endpoint) + endpoint = f"/response-ticket/get/summary" + return self._post(endpoint, data={"response-ticket-id": ticket_id}) def get_full(self, ticket_id: str) -> Dict[str, Any]: """ @@ -34,5 +34,18 @@ def get_full(self, ticket_id: str) -> Dict[str, Any]: Returns: A dictionary containing the full details of the ticket. """ - endpoint = f"/response-ticket/get/full/{ticket_id}" - return self._get(endpoint) + endpoint = "/response-ticket/get/full" + return self._post(endpoint, data={"response-ticket-id": ticket_id}) + + def get_multi_status(self, ticket_ids: list[str]) -> Dict[str, Any]: + """ + Gets the status of multiple response tickets in a single request. + + Args: + ticket_ids: A list of response ticket IDs. + Returns: + A dictionary containing the status of multiple tickets. + """ + endpoint = f"/response-ticket/multi-status" + + return self._post(endpoint, data=[("response-tickets[]", _) for _ in ticket_ids]) \ No newline at end of file diff --git a/atomic_sdk/api/sites.py b/atomic_sdk/api/sites.py index 80fa5cc..c0aa9eb 100644 --- a/atomic_sdk/api/sites.py +++ b/atomic_sdk/api/sites.py @@ -376,6 +376,23 @@ def update_meta(self, key: str, value: Any, site_id: Optional[int] = None, domai endpoint = f"/site-meta/{identifier}/{key}/update" return self._post(endpoint, data={"value": value}) + def remove_meta(self, key: str, site_id: Optional[int] = None, domain: Optional[str] = None) -> dict: + """ + Removes a single metadata key for a site. + + Args: + key: The metadata key to remove (e.g., 'php_version', 'suspended'). + site_id: The Atomic site ID. + domain: The domain name of the site. + + Returns: + The API response data. + """ + + _, identifier = self._get_service_and_identifier(site_id, domain) + endpoint = f"/site-meta/{identifier}/{key}/remove" + return self._post(endpoint) + def get_phpmyadmin_url(self, site_id: Optional[int] = None, domain: Optional[str] = None) -> str: """ Gets a time-limited URL for accessing a site's database via phpMyAdmin. From caa781ffc2ab02fb7f21cd07f11a58d6b2a83204 Mon Sep 17 00:00:00 2001 From: L0RD-ZER0 <68327382+L0RD-ZER0@users.noreply.github.com> Date: Fri, 17 Jul 2026 15:00:21 +0530 Subject: [PATCH 2/2] fix: address PR review feedback - Use GET for site remove_meta to match other remove endpoints - Fix get_multi_status docstring formatting - Use dict payload and drop needless f-strings in response tickets --- atomic_sdk/api/response_tickets.py | 10 +++++----- atomic_sdk/api/sites.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/atomic_sdk/api/response_tickets.py b/atomic_sdk/api/response_tickets.py index ff7b084..29021c1 100644 --- a/atomic_sdk/api/response_tickets.py +++ b/atomic_sdk/api/response_tickets.py @@ -20,7 +20,7 @@ def get_summary(self, ticket_id: str) -> Dict[str, Any]: Returns: A dictionary containing the summary of the ticket. """ - endpoint = f"/response-ticket/get/summary" + endpoint = "/response-ticket/get/summary" return self._post(endpoint, data={"response-ticket-id": ticket_id}) def get_full(self, ticket_id: str) -> Dict[str, Any]: @@ -43,9 +43,9 @@ def get_multi_status(self, ticket_ids: list[str]) -> Dict[str, Any]: Args: ticket_ids: A list of response ticket IDs. + Returns: - A dictionary containing the status of multiple tickets. + A dictionary containing the status of multiple tickets. """ - endpoint = f"/response-ticket/multi-status" - - return self._post(endpoint, data=[("response-tickets[]", _) for _ in ticket_ids]) \ No newline at end of file + endpoint = "/response-ticket/multi-status" + return self._post(endpoint, data={"response-tickets[]": ticket_ids}) \ No newline at end of file diff --git a/atomic_sdk/api/sites.py b/atomic_sdk/api/sites.py index c0aa9eb..6e3e457 100644 --- a/atomic_sdk/api/sites.py +++ b/atomic_sdk/api/sites.py @@ -391,7 +391,7 @@ def remove_meta(self, key: str, site_id: Optional[int] = None, domain: Optional[ _, identifier = self._get_service_and_identifier(site_id, domain) endpoint = f"/site-meta/{identifier}/{key}/remove" - return self._post(endpoint) + return self._get(endpoint) def get_phpmyadmin_url(self, site_id: Optional[int] = None, domain: Optional[str] = None) -> str: """