mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
Closes out the cohort-broadening work with its decision record and consolidates the retry plumbing. ADR-0034 documents broadening the EPC-Prediction cohort to the real unit postcodes nearest the target (via postcodes.io) when its own postcode holds no same-type comparable — extending ADR-0031 decision 5. Records why postcodes.io was chosen over council[] (whole-LA, no property_type in rows), a bulk Code-Point Open / ONSPD dataset, and the OS Places radius API, and the lazy / nearest-first early-stop / soft-fail policy. Broadening-specific docstrings now cite 0034. Retry consolidation: extract the EPC client's call_with_retry into a shared infrastructure/http_retry.py keyed off a generic TransientHttpError marker, so the mechanism (exponential backoff, Retry-After) is shared while each client keeps its own transient policy. EpcRateLimitError now subclasses TransientHttpError (still an EpcApiError); PostcodesIoClient routes through the same helper, raising TransientHttpError on 429/5xx and soft-failing to the seed once exhausted (the EPC client propagates instead). Direct tests for the shared helper; EPC + postcodes.io suites repointed at the shared sleep. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
15 lines
500 B
Python
15 lines
500 B
Python
from infrastructure.http_retry import TransientHttpError
|
|
|
|
|
|
class EpcApiError(Exception):
|
|
"""Base for all EPC client errors."""
|
|
|
|
|
|
class EpcNotFoundError(EpcApiError):
|
|
"""Raised when the API returns 404."""
|
|
|
|
|
|
class EpcRateLimitError(EpcApiError, TransientHttpError):
|
|
"""Raised when the API returns 429. A ``TransientHttpError`` so the shared
|
|
``call_with_retry`` retries it (honouring ``Retry-After``), while remaining an
|
|
``EpcApiError`` for callers that catch the EPC hierarchy."""
|