← back to Exo
refactor: Add safe state mutation method .apply()
0b6aadf57694a2e96ec77af4e32d1e66aac2d988 · 2025-07-03 12:33:29 +0100 · Arbion Halili
Files touched
M shared/types/events/common.py
Diff
commit 0b6aadf57694a2e96ec77af4e32d1e66aac2d988
Author: Arbion Halili <99731180+ToxicPine@users.noreply.github.com>
Date: Thu Jul 3 12:33:29 2025 +0100
refactor: Add safe state mutation method .apply()
---
shared/types/events/common.py | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/shared/types/events/common.py b/shared/types/events/common.py
index 82fa3bc8..fd2e0842 100644
--- a/shared/types/events/common.py
+++ b/shared/types/events/common.py
@@ -108,8 +108,8 @@ class PersistedEvent(BaseModel, Generic[TEventType]):
sequence_number: int = Field(gt=0)
-class State(BaseModel, Generic[EventTypeT]):
- event_types: tuple[EventTypeT, ...] = get_args(EventTypeT)
+class State(BaseModel, Generic[TEventType]):
+ event_types: tuple[TEventType, ...] = get_args(TEventType)
sequence_number: int = Field(default=0, ge=0)
@@ -128,11 +128,21 @@ EffectHandler = Callable[[StateAndEvent[EventTypeT], State[EventTypeT]], None]
EventPublisher = Callable[[Event[EventTypeT]], None]
+class MutableState(Protocol, Generic[EventTypeT]):
+ def apply(
+ self,
+ event: Event[TEventType],
+ applicator: Applicator[EventTypeT, TEventType],
+ effect_handlers: Sequence[EffectHandler[TEventType]],
+ ) -> None: ...
+
+
class EventOutbox(Protocol):
def send(self, events: Sequence[Event[EventTypeT]]) -> None: ...
class EventProcessor(Protocol):
+ # TODO: is .update() an anti-pattern?
def update(
self,
state: State[EventTypeT],
@@ -140,6 +150,10 @@ class EventProcessor(Protocol):
effect_handlers: Sequence[EffectHandler[EventTypeT]],
) -> State[EventTypeT]: ...
+ def get_events_to_apply(
+ self, state: State[TEventType]
+ ) -> Sequence[Event[TEventType]]: ...
+
def get_saga_effect_handler(
sagas: Saga[EventTypeT], event_publisher: EventPublisher[EventTypeT]
← f8039e20 feature: Add pretty_name to ModelMetadata
·
back to Exo
·
refactor: Remove timestamp from Wrapped Events c4569343 →