From e0830169ad0210db57b3007c9f2b9e1166296993 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Fri, 3 Jul 2026 14:26:23 +0000 Subject: [PATCH] =?UTF-8?q?Abri=20log=5Fjob=20surfaces=20an=20OpenHousing?= =?UTF-8?q?=20rejection=20as=20a=20typed=20result=20with=20verbatim=20code?= =?UTF-8?q?=20and=20message=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- infrastructure/abri/abri_client.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/infrastructure/abri/abri_client.py b/infrastructure/abri/abri_client.py index 712ab49de..bd63f056a 100644 --- a/infrastructure/abri/abri_client.py +++ b/infrastructure/abri/abri_client.py @@ -2,7 +2,12 @@ import xml.etree.ElementTree as ET import requests -from domain.abri.models import JobLogged, LogJobRequest, LogJobResult +from domain.abri.models import ( + AbriRequestRejected, + JobLogged, + LogJobRequest, + LogJobResult, +) from infrastructure.abri.config import AbriConfig from infrastructure.abri.envelope import serialise_relay_request @@ -36,6 +41,8 @@ class AbriClient: ) response = self._session.post(self._config.endpoint_url, data=body) root = ET.fromstring(response.content) + if root.tag == "response": + return self._parse_rejection(root) job_logged = root.find("Jobs/Job_logged") if job_logged is None: raise ValueError("Job_logged element missing from relay response") @@ -43,3 +50,12 @@ class AbriClient: job_no=job_logged.attrib["job_no"], logged_info=job_logged.attrib["logged_info"], ) + + @staticmethod + def _parse_rejection(root: ET.Element) -> AbriRequestRejected: + success = root.findtext("success") + code = root.findtext("code") + message = root.findtext("message") + if success != "false" or code is None or message is None: + raise ValueError("malformed relay failure response") + return AbriRequestRejected(code=code, message=message)