"""In-memory ``PropertyOverridesReader`` over a pre-fetched snapshot. The modelling_e2e handler reads each Property's overrides inside its write loop. Reading them live keeps a second DB Session open alongside the per-Property write Unit of Work; pre-fetching every Property's overrides up front (one read pass, then the read Session is closed) lets the loop run on a single DB connection. This serves those pre-fetched snapshots behind the same ``PropertyOverridesReader`` port — a Property with no pre-fetched entry resolves to no overrides, exactly as the Postgres reader returns an empty snapshot for a Property with no rows. """ from __future__ import annotations from collections.abc import Mapping from repositories.property.property_overrides_reader import ( PropertyOverridesReader, ResolvedPropertyOverrides, ) _NO_OVERRIDES = ResolvedPropertyOverrides(rows=()) class InMemoryPropertyOverridesReader(PropertyOverridesReader): def __init__( self, by_property_id: Mapping[int, ResolvedPropertyOverrides] ) -> None: self._by_property_id = dict(by_property_id) def overrides_for(self, property_id: int) -> ResolvedPropertyOverrides: return self._by_property_id.get(property_id, _NO_OVERRIDES)