mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
Slice 3/6 of the postcode_splitter refactor (Hestia-Homes/Model#1101). Introduces a thin typed infrastructure layer wrapping boto3 for the AWS side of the splitter. S3Client/SqsClient are bucket-/queue-bound byte adapters; CsvS3Client subclasses S3Client to round-trip CSV row dicts via the existing parse_s3_uri helper in utils/s3.py; Address2UprnQueueClient subclasses SqsClient to publish the typed {task_id, sub_task_id, s3_uri} fan-out body the downstream consumer expects. moto[s3,sqs] is pulled into test.requirements.txt and the new tests/infrastructure/ suite exercises each client against the moto backend (S3 round-trip, CSV round-trip, SQS send + body inspection, typed publish + body inspection). pyright --strict is clean on the new modules. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
17 lines
605 B
Python
17 lines
605 B
Python
from typing import Any
|
|
|
|
import boto3
|
|
|
|
REGION = "us-east-1"
|
|
|
|
|
|
def make_boto_client(service_name: str) -> Any:
|
|
"""Construct a boto3 client typed as ``Any``.
|
|
|
|
boto3's overloaded ``client`` signature uses ``Literal[...]`` per service
|
|
in the installed stubs, which forces every call site to satisfy
|
|
``reportArgumentType`` and ``reportUnknownMemberType`` under strict
|
|
pyright. Centralising the cast keeps each test file clean.
|
|
"""
|
|
factory: Any = boto3.client # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
|
|
return factory(service_name, region_name=REGION)
|