mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
Abri relay requests share one envelope, transport and rejection path across request types 🟪
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
c23c74be6b
commit
32b56050b0
1 changed files with 23 additions and 1 deletions
|
|
@ -1,4 +1,5 @@
|
|||
import xml.etree.ElementTree as ET
|
||||
from typing import List, Tuple, Union
|
||||
|
||||
import requests
|
||||
|
||||
|
|
@ -23,7 +24,7 @@ class AbriClient:
|
|||
self._session = requests.Session()
|
||||
|
||||
def log_job(self, request: LogJobRequest) -> LogJobResult:
|
||||
body = serialise_relay_request(
|
||||
outcome = self._exchange(
|
||||
request_type="logjob",
|
||||
parameters=[
|
||||
("place_ref", request.place_ref),
|
||||
|
|
@ -37,6 +38,23 @@ class AbriClient:
|
|||
("resource", self._config.default_resource),
|
||||
("resource_group", RESOURCE_GROUP),
|
||||
],
|
||||
)
|
||||
if isinstance(outcome, AbriRequestRejected):
|
||||
return outcome
|
||||
return self._parse_job_logged(outcome)
|
||||
|
||||
def _exchange(
|
||||
self, request_type: str, parameters: List[Tuple[str, str]]
|
||||
) -> Union[ET.Element, AbriRequestRejected]:
|
||||
"""Send one relay request; return the success root or the typed rejection.
|
||||
|
||||
Shared by all four relay request types: transport failures raise
|
||||
AbriTransportError, ambiguous bodies raise AbriResponseParseError, and
|
||||
only a well-formed <success>false</success> body becomes a rejection.
|
||||
"""
|
||||
body = serialise_relay_request(
|
||||
request_type=request_type,
|
||||
parameters=parameters,
|
||||
username=self._config.username,
|
||||
password=self._config.password,
|
||||
)
|
||||
|
|
@ -51,6 +69,10 @@ class AbriClient:
|
|||
raise AbriResponseParseError(str(error)) from error
|
||||
if root.tag == "response":
|
||||
return self._parse_rejection(root)
|
||||
return root
|
||||
|
||||
@staticmethod
|
||||
def _parse_job_logged(root: ET.Element) -> JobLogged:
|
||||
job_logged = root.find("Jobs/Job_logged")
|
||||
if job_logged is None:
|
||||
raise AbriResponseParseError(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue