python-event-sourcery 0.4.0a5__tar.gz → 0.4.0a7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/PKG-INFO +1 -1
  2. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/event/serde.py +9 -1
  3. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/event_store.py +2 -13
  4. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/subscription.py +1 -1
  5. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_esdb/outbox.py +3 -3
  6. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_esdb/subscription.py +9 -2
  7. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/pyproject.toml +1 -1
  8. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/LICENSE +0 -0
  9. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/__init__.py +0 -0
  10. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/aggregate/__init__.py +0 -0
  11. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/aggregate/aggregate.py +0 -0
  12. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/aggregate/repository.py +0 -0
  13. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/__init__.py +0 -0
  14. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/dispatcher.py +0 -0
  15. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/event/__init__.py +0 -0
  16. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/event/dto.py +0 -0
  17. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/event/registry.py +0 -0
  18. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/exceptions.py +0 -0
  19. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/factory.py +0 -0
  20. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/in_memory.py +0 -0
  21. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/interfaces.py +0 -0
  22. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/outbox.py +0 -0
  23. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/stream_id.py +0 -0
  24. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/event_store/versioning.py +0 -0
  25. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/py.typed +0 -0
  26. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/read_model/__init__.py +0 -0
  27. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/read_model/cursors_dao.py +0 -0
  28. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery/read_model/projector.py +0 -0
  29. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_esdb/__init__.py +0 -0
  30. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_esdb/dto.py +0 -0
  31. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_esdb/event_store.py +0 -0
  32. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_esdb/py.typed +0 -0
  33. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_esdb/stream.py +0 -0
  34. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/__init__.py +0 -0
  35. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/cursors_dao.py +0 -0
  36. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/dto.py +0 -0
  37. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/event_store.py +0 -0
  38. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/guid.py +0 -0
  39. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/jsonb.py +0 -0
  40. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/models.py +0 -0
  41. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/outbox.py +0 -0
  42. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/py.typed +0 -0
  43. {python_event_sourcery-0.4.0a5 → python_event_sourcery-0.4.0a7}/event_sourcery_sqlalchemy/subscription.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-event-sourcery
3
- Version: 0.4.0a5
3
+ Version: 0.4.0a7
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: Your Name
@@ -1,4 +1,4 @@
1
- from collections.abc import Mapping
1
+ from collections.abc import Mapping, Sequence
2
2
  from dataclasses import dataclass
3
3
  from typing import cast
4
4
 
@@ -28,6 +28,9 @@ class Serde:
28
28
  event=event_type(**data),
29
29
  )
30
30
 
31
+ def deserialize_many(self, events: Sequence[RawEvent]) -> list[WrappedEvent]:
32
+ return [self.deserialize(event) for event in events]
33
+
31
34
  def deserialize_record(self, record: RecordedRaw) -> Recorded:
32
35
  return Recorded(
33
36
  wrapped_event=self.deserialize(record.entry),
@@ -50,3 +53,8 @@ class Serde:
50
53
  data=model.model_dump(mode="json"),
51
54
  context=event.context.model_dump(mode="json"),
52
55
  )
56
+
57
+ def serialize_many(
58
+ self, events: Sequence[WrappedEvent], stream_id: StreamId
59
+ ) -> list[RawEvent]:
60
+ return [self.serialize(event, stream_id) for event in events]
@@ -5,7 +5,6 @@ from typing import cast
5
5
  from event_sourcery.event_store.event import (
6
6
  Event,
7
7
  Position,
8
- RawEvent,
9
8
  Serde,
10
9
  WrappedEvent,
11
10
  )
@@ -50,7 +49,7 @@ class EventStore:
50
49
  A sequence of events or empty list if the stream doesn't exist.
51
50
  """
52
51
  events = self._storage_strategy.fetch_events(stream_id, start=start, stop=stop)
53
- return self._deserialize_events(events)
52
+ return self._serde.deserialize_many(events)
54
53
 
55
54
  @singledispatchmethod
56
55
  def append(
@@ -136,7 +135,7 @@ class EventStore:
136
135
  self._storage_strategy.insert_events(
137
136
  stream_id=stream_id,
138
137
  versioning=versioning,
139
- events=self._serialize_events(events, stream_id),
138
+ events=self._serde.serialize_many(events, stream_id),
140
139
  )
141
140
 
142
141
  def delete_stream(self, stream_id: StreamId) -> None:
@@ -178,16 +177,6 @@ class EventStore:
178
177
  serialized = self._serde.serialize(event=snapshot, stream_id=stream_id)
179
178
  self._storage_strategy.save_snapshot(serialized)
180
179
 
181
- def _deserialize_events(self, events: list[RawEvent]) -> list[WrappedEvent]:
182
- return [self._serde.deserialize(e) for e in events]
183
-
184
- def _serialize_events(
185
- self,
186
- events: Sequence[WrappedEvent],
187
- stream_id: StreamId,
188
- ) -> list[RawEvent]:
189
- return [self._serde.serialize(event=e, stream_id=stream_id) for e in events]
190
-
191
180
  @property
192
181
  def position(self) -> Position | None:
193
182
  """Returns the current position of the event store.
@@ -110,6 +110,6 @@ class SubscriptionBuilder(PositionPhase, FilterPhase, BuildPhase):
110
110
  ) -> Iterator[list[Recorded]]:
111
111
  seconds = self._to_timedelta(timelimit)
112
112
  subscription = self._build(batch_size=size, timelimit=seconds)
113
- return (
113
+ return ( # pragma: no cover # apparently, bug in coverage.py
114
114
  [self._serde.deserialize_record(e) for e in batch] for batch in subscription
115
115
  )
@@ -6,7 +6,7 @@ from itertools import islice
6
6
 
7
7
  from esdbclient import EventStoreDBClient, RecordedEvent
8
8
  from esdbclient.exceptions import DeadlineExceeded, NotFound
9
- from esdbclient.persistent import PersistentSubscription
9
+ from esdbclient.persistent import AbstractPersistentSubscription
10
10
 
11
11
  from event_sourcery.event_store import RecordedRaw
12
12
  from event_sourcery.event_store.interfaces import (
@@ -25,7 +25,7 @@ class ESDBOutboxStorageStrategy(OutboxStorageStrategy):
25
25
  _outbox_name: str
26
26
  _max_publish_attempts: int
27
27
  _timeout: float | None
28
- _active_subscription: PersistentSubscription = field(init=False)
28
+ _active_subscription: AbstractPersistentSubscription = field(init=False)
29
29
 
30
30
  def create_subscription(self) -> None:
31
31
  try:
@@ -51,7 +51,7 @@ class ESDBOutboxStorageStrategy(OutboxStorageStrategy):
51
51
  delattr(self, "_active_subscription")
52
52
 
53
53
  @property
54
- def active_subscription(self) -> PersistentSubscription:
54
+ def active_subscription(self) -> AbstractPersistentSubscription:
55
55
  return self._active_subscription
56
56
 
57
57
  def outbox_entries(
@@ -1,7 +1,8 @@
1
- from collections.abc import Callable, Iterator
1
+ from collections.abc import Iterator
2
2
  from dataclasses import dataclass
3
3
  from datetime import timedelta
4
4
  from functools import partial
5
+ from typing import Protocol
5
6
 
6
7
  import esdbclient.exceptions
7
8
  from esdbclient import EventStoreDBClient, RecordedEvent
@@ -11,13 +12,19 @@ from event_sourcery.event_store.interfaces import SubscriptionStrategy
11
12
  from event_sourcery_esdb import dto
12
13
 
13
14
 
15
+ class BuilderCallable(Protocol):
16
+ def __call__(
17
+ self, commit_position: Position | None = None
18
+ ) -> Iterator[RecordedEvent]: ...
19
+
20
+
14
21
  @dataclass(repr=False)
15
22
  class ESDBSubscriptionStrategy(SubscriptionStrategy):
16
23
  _client: EventStoreDBClient
17
24
 
18
25
  @staticmethod
19
26
  def _iterator(
20
- builder: Callable[[], Iterator[RecordedEvent]],
27
+ builder: BuilderCallable,
21
28
  size: int,
22
29
  ) -> Iterator[list[RecordedRaw]]:
23
30
  subscription = builder()
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "python-event-sourcery"
3
- version = "0.4.0a5"
3
+ version = "0.4.0a7"
4
4
  description = ""
5
5
  authors = ["Your Name <you@example.com>"]
6
6
  license = "MIT"