| from __future__ import annotations | |
| from threading import RLock | |
| from time_machine.domain.errors import EncounterNotFoundError | |
| from time_machine.domain.models import EncounterSession | |
| class InMemorySessionRepository: | |
| def __init__(self) -> None: | |
| self._encounters: dict[str, EncounterSession] = {} | |
| self._lock = RLock() | |
| def save(self, encounter: EncounterSession) -> None: | |
| with self._lock: | |
| self._encounters[encounter.encounter_id] = encounter | |
| def get(self, encounter_id: str) -> EncounterSession: | |
| with self._lock: | |
| encounter = self._encounters.get(encounter_id) | |
| if encounter is None: | |
| raise EncounterNotFoundError(encounter_id) | |
| return encounter | |