eventsourcing 9.2.21__py3-none-any.whl → 9.3.0__py3-none-any.whl

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.

Potentially problematic release.


This version of eventsourcing might be problematic. Click here for more details.

Files changed (145) hide show
  1. eventsourcing/__init__.py +1 -1
  2. eventsourcing/application.py +137 -132
  3. eventsourcing/cipher.py +17 -12
  4. eventsourcing/compressor.py +2 -0
  5. eventsourcing/dispatch.py +30 -56
  6. eventsourcing/domain.py +221 -227
  7. eventsourcing/examples/__init__.py +0 -0
  8. eventsourcing/examples/aggregate1/__init__.py +0 -0
  9. eventsourcing/examples/aggregate1/application.py +27 -0
  10. eventsourcing/examples/aggregate1/domainmodel.py +16 -0
  11. eventsourcing/examples/aggregate1/test_application.py +37 -0
  12. eventsourcing/examples/aggregate2/__init__.py +0 -0
  13. eventsourcing/examples/aggregate2/application.py +27 -0
  14. eventsourcing/examples/aggregate2/domainmodel.py +22 -0
  15. eventsourcing/examples/aggregate2/test_application.py +37 -0
  16. eventsourcing/examples/aggregate3/__init__.py +0 -0
  17. eventsourcing/examples/aggregate3/application.py +27 -0
  18. eventsourcing/examples/aggregate3/domainmodel.py +38 -0
  19. eventsourcing/examples/aggregate3/test_application.py +37 -0
  20. eventsourcing/examples/aggregate4/__init__.py +0 -0
  21. eventsourcing/examples/aggregate4/application.py +27 -0
  22. eventsourcing/examples/aggregate4/domainmodel.py +114 -0
  23. eventsourcing/examples/aggregate4/test_application.py +38 -0
  24. eventsourcing/examples/aggregate5/__init__.py +0 -0
  25. eventsourcing/examples/aggregate5/application.py +27 -0
  26. eventsourcing/examples/aggregate5/domainmodel.py +131 -0
  27. eventsourcing/examples/aggregate5/test_application.py +38 -0
  28. eventsourcing/examples/aggregate6/__init__.py +0 -0
  29. eventsourcing/examples/aggregate6/application.py +30 -0
  30. eventsourcing/examples/aggregate6/domainmodel.py +123 -0
  31. eventsourcing/examples/aggregate6/test_application.py +38 -0
  32. eventsourcing/examples/aggregate6a/__init__.py +0 -0
  33. eventsourcing/examples/aggregate6a/application.py +40 -0
  34. eventsourcing/examples/aggregate6a/domainmodel.py +149 -0
  35. eventsourcing/examples/aggregate6a/test_application.py +45 -0
  36. eventsourcing/examples/aggregate7/__init__.py +0 -0
  37. eventsourcing/examples/aggregate7/application.py +48 -0
  38. eventsourcing/examples/aggregate7/domainmodel.py +144 -0
  39. eventsourcing/examples/aggregate7/persistence.py +57 -0
  40. eventsourcing/examples/aggregate7/test_application.py +38 -0
  41. eventsourcing/examples/aggregate7/test_compression_and_encryption.py +45 -0
  42. eventsourcing/examples/aggregate7/test_snapshotting_intervals.py +67 -0
  43. eventsourcing/examples/aggregate7a/__init__.py +0 -0
  44. eventsourcing/examples/aggregate7a/application.py +56 -0
  45. eventsourcing/examples/aggregate7a/domainmodel.py +170 -0
  46. eventsourcing/examples/aggregate7a/test_application.py +46 -0
  47. eventsourcing/examples/aggregate7a/test_compression_and_encryption.py +45 -0
  48. eventsourcing/examples/aggregate8/__init__.py +0 -0
  49. eventsourcing/examples/aggregate8/application.py +47 -0
  50. eventsourcing/examples/aggregate8/domainmodel.py +65 -0
  51. eventsourcing/examples/aggregate8/persistence.py +57 -0
  52. eventsourcing/examples/aggregate8/test_application.py +37 -0
  53. eventsourcing/examples/aggregate8/test_compression_and_encryption.py +44 -0
  54. eventsourcing/examples/aggregate8/test_snapshotting_intervals.py +38 -0
  55. eventsourcing/examples/bankaccounts/__init__.py +0 -0
  56. eventsourcing/examples/bankaccounts/application.py +70 -0
  57. eventsourcing/examples/bankaccounts/domainmodel.py +56 -0
  58. eventsourcing/examples/bankaccounts/test.py +173 -0
  59. eventsourcing/examples/cargoshipping/__init__.py +0 -0
  60. eventsourcing/examples/cargoshipping/application.py +126 -0
  61. eventsourcing/examples/cargoshipping/domainmodel.py +330 -0
  62. eventsourcing/examples/cargoshipping/interface.py +143 -0
  63. eventsourcing/examples/cargoshipping/test.py +231 -0
  64. eventsourcing/examples/contentmanagement/__init__.py +0 -0
  65. eventsourcing/examples/contentmanagement/application.py +118 -0
  66. eventsourcing/examples/contentmanagement/domainmodel.py +69 -0
  67. eventsourcing/examples/contentmanagement/test.py +180 -0
  68. eventsourcing/examples/contentmanagement/utils.py +26 -0
  69. eventsourcing/examples/contentmanagementsystem/__init__.py +0 -0
  70. eventsourcing/examples/contentmanagementsystem/application.py +54 -0
  71. eventsourcing/examples/contentmanagementsystem/postgres.py +17 -0
  72. eventsourcing/examples/contentmanagementsystem/sqlite.py +17 -0
  73. eventsourcing/examples/contentmanagementsystem/system.py +14 -0
  74. eventsourcing/examples/contentmanagementsystem/test_system.py +180 -0
  75. eventsourcing/examples/searchablecontent/__init__.py +0 -0
  76. eventsourcing/examples/searchablecontent/application.py +45 -0
  77. eventsourcing/examples/searchablecontent/persistence.py +23 -0
  78. eventsourcing/examples/searchablecontent/postgres.py +118 -0
  79. eventsourcing/examples/searchablecontent/sqlite.py +136 -0
  80. eventsourcing/examples/searchablecontent/test_application.py +110 -0
  81. eventsourcing/examples/searchablecontent/test_recorder.py +68 -0
  82. eventsourcing/examples/searchabletimestamps/__init__.py +0 -0
  83. eventsourcing/examples/searchabletimestamps/application.py +32 -0
  84. eventsourcing/examples/searchabletimestamps/persistence.py +20 -0
  85. eventsourcing/examples/searchabletimestamps/postgres.py +110 -0
  86. eventsourcing/examples/searchabletimestamps/sqlite.py +99 -0
  87. eventsourcing/examples/searchabletimestamps/test_searchabletimestamps.py +94 -0
  88. eventsourcing/examples/test_invoice.py +176 -0
  89. eventsourcing/examples/test_parking_lot.py +206 -0
  90. eventsourcing/interface.py +4 -2
  91. eventsourcing/persistence.py +88 -82
  92. eventsourcing/popo.py +32 -31
  93. eventsourcing/postgres.py +388 -593
  94. eventsourcing/sqlite.py +100 -102
  95. eventsourcing/system.py +66 -71
  96. eventsourcing/tests/application.py +20 -32
  97. eventsourcing/tests/application_tests/__init__.py +0 -0
  98. eventsourcing/tests/application_tests/test_application_with_automatic_snapshotting.py +55 -0
  99. eventsourcing/tests/application_tests/test_application_with_popo.py +22 -0
  100. eventsourcing/tests/application_tests/test_application_with_postgres.py +75 -0
  101. eventsourcing/tests/application_tests/test_application_with_sqlite.py +72 -0
  102. eventsourcing/tests/application_tests/test_cache.py +134 -0
  103. eventsourcing/tests/application_tests/test_event_sourced_log.py +162 -0
  104. eventsourcing/tests/application_tests/test_notificationlog.py +232 -0
  105. eventsourcing/tests/application_tests/test_notificationlogreader.py +126 -0
  106. eventsourcing/tests/application_tests/test_processapplication.py +110 -0
  107. eventsourcing/tests/application_tests/test_processingpolicy.py +109 -0
  108. eventsourcing/tests/application_tests/test_repository.py +504 -0
  109. eventsourcing/tests/application_tests/test_snapshotting.py +68 -0
  110. eventsourcing/tests/application_tests/test_upcasting.py +459 -0
  111. eventsourcing/tests/docs_tests/__init__.py +0 -0
  112. eventsourcing/tests/docs_tests/test_docs.py +293 -0
  113. eventsourcing/tests/domain.py +1 -1
  114. eventsourcing/tests/domain_tests/__init__.py +0 -0
  115. eventsourcing/tests/domain_tests/test_aggregate.py +1180 -0
  116. eventsourcing/tests/domain_tests/test_aggregate_decorators.py +1604 -0
  117. eventsourcing/tests/domain_tests/test_domainevent.py +80 -0
  118. eventsourcing/tests/interface_tests/__init__.py +0 -0
  119. eventsourcing/tests/interface_tests/test_remotenotificationlog.py +258 -0
  120. eventsourcing/tests/persistence.py +52 -50
  121. eventsourcing/tests/persistence_tests/__init__.py +0 -0
  122. eventsourcing/tests/persistence_tests/test_aes.py +93 -0
  123. eventsourcing/tests/persistence_tests/test_connection_pool.py +722 -0
  124. eventsourcing/tests/persistence_tests/test_eventstore.py +72 -0
  125. eventsourcing/tests/persistence_tests/test_infrastructure_factory.py +21 -0
  126. eventsourcing/tests/persistence_tests/test_mapper.py +113 -0
  127. eventsourcing/tests/persistence_tests/test_noninterleaving_notification_ids.py +69 -0
  128. eventsourcing/tests/persistence_tests/test_popo.py +124 -0
  129. eventsourcing/tests/persistence_tests/test_postgres.py +1119 -0
  130. eventsourcing/tests/persistence_tests/test_sqlite.py +348 -0
  131. eventsourcing/tests/persistence_tests/test_transcoder.py +44 -0
  132. eventsourcing/tests/postgres_utils.py +7 -7
  133. eventsourcing/tests/system_tests/__init__.py +0 -0
  134. eventsourcing/tests/system_tests/test_runner.py +935 -0
  135. eventsourcing/tests/system_tests/test_system.py +284 -0
  136. eventsourcing/tests/utils_tests/__init__.py +0 -0
  137. eventsourcing/tests/utils_tests/test_utils.py +226 -0
  138. eventsourcing/utils.py +49 -50
  139. {eventsourcing-9.2.21.dist-info → eventsourcing-9.3.0.dist-info}/METADATA +30 -33
  140. eventsourcing-9.3.0.dist-info/RECORD +145 -0
  141. {eventsourcing-9.2.21.dist-info → eventsourcing-9.3.0.dist-info}/WHEEL +1 -2
  142. eventsourcing-9.2.21.dist-info/RECORD +0 -25
  143. eventsourcing-9.2.21.dist-info/top_level.txt +0 -1
  144. {eventsourcing-9.2.21.dist-info → eventsourcing-9.3.0.dist-info}/AUTHORS +0 -0
  145. {eventsourcing-9.2.21.dist-info → eventsourcing-9.3.0.dist-info}/LICENSE +0 -0
eventsourcing/utils.py CHANGED
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import importlib
2
4
  import sys
3
5
  from functools import wraps
@@ -5,23 +7,24 @@ from inspect import isfunction
5
7
  from random import random
6
8
  from threading import Lock
7
9
  from time import sleep
8
- from types import FunctionType, WrapperDescriptorType
9
10
  from typing import (
11
+ TYPE_CHECKING,
10
12
  Any,
11
13
  Callable,
12
14
  Dict,
13
15
  Iterator,
14
16
  List,
15
17
  Mapping,
16
- Optional,
17
18
  Sequence,
18
19
  Type,
19
20
  TypeVar,
20
- Union,
21
21
  no_type_check,
22
22
  overload,
23
23
  )
24
24
 
25
+ if TYPE_CHECKING: # pragma: nocover
26
+ from types import FunctionType, WrapperDescriptorType
27
+
25
28
 
26
29
  class TopicError(Exception):
27
30
  """
@@ -96,12 +99,12 @@ def resolve_topic(topic: str) -> Any:
96
99
  msg = f"Failed to resolve topic '{topic}': {e}"
97
100
  raise TopicError(msg) from e
98
101
  if attr_name:
99
- for attr_name_part in attr_name.split("."):
100
- try:
102
+ try:
103
+ for attr_name_part in attr_name.split("."):
101
104
  obj = getattr(obj, attr_name_part)
102
- except AttributeError as e:
103
- msg = f"Failed to resolve topic '{topic}': {e}"
104
- raise TopicError(msg) from e
105
+ except AttributeError as e:
106
+ msg = f"Failed to resolve topic '{topic}': {e}"
107
+ raise TopicError(msg) from e
105
108
  register_topic(topic, obj)
106
109
  return obj
107
110
 
@@ -123,10 +126,11 @@ def register_topic(topic: str, obj: Any) -> None:
123
126
  _topic_cache[topic] = obj
124
127
  else:
125
128
  if cached_obj != obj:
126
- raise TopicError(
129
+ msg = (
127
130
  f"Object {cached_obj} is already registered "
128
131
  f"for topic '{topic}', so refusing to cache obj {obj}"
129
132
  )
133
+ raise TopicError(msg)
130
134
 
131
135
 
132
136
  def clear_topic_cache() -> None:
@@ -134,7 +138,7 @@ def clear_topic_cache() -> None:
134
138
 
135
139
 
136
140
  def retry(
137
- exc: Union[Type[Exception], Sequence[Type[Exception]]] = Exception,
141
+ exc: Type[Exception] | Sequence[Type[Exception]] = Exception,
138
142
  max_attempts: int = 1,
139
143
  wait: float = 0,
140
144
  stall: float = 0,
@@ -146,7 +150,6 @@ def retry(
146
150
  :param max_attempts: Maximum number of attempts to try.
147
151
  :param wait: Amount of time to wait before retrying after an exception.
148
152
  :param stall: Amount of time to wait before the first attempt.
149
- :param verbose: If True, prints a message to STDOUT when retries occur.
150
153
  :return: Returns the value returned by decorated function.
151
154
  """
152
155
 
@@ -160,13 +163,13 @@ def retry(
160
163
  while True:
161
164
  try:
162
165
  return func(*args, **kwargs)
163
- except exc as e:
166
+ except exc: # noqa: PERF203
164
167
  attempts += 1
165
168
  if max_attempts is None or attempts < max_attempts:
166
- sleep(wait * (1 + 0.1 * (random() - 0.5)))
169
+ sleep(wait * (1 + 0.1 * (random() - 0.5))) # noqa: S311
167
170
  else:
168
171
  # Max retries exceeded.
169
- raise e
172
+ raise
170
173
 
171
174
  return retry_decorator
172
175
 
@@ -179,23 +182,26 @@ def retry(
179
182
  exc = Exception
180
183
  # Wrap and return.
181
184
  return _retry(func=_func)
182
- else:
183
- # Check decorator args, and return _retry,
184
- # to be called with the decorated function.
185
- if isinstance(exc, (list, tuple)):
186
- for _exc in exc:
187
- if not (isinstance(_exc, type) and issubclass(_exc, Exception)):
188
- raise TypeError("not an exception class: {}".format(_exc))
189
- else:
190
- if not (isinstance(exc, type) and issubclass(exc, Exception)):
191
- raise TypeError("not an exception class: {}".format(exc))
192
- if not isinstance(max_attempts, int):
193
- raise TypeError("'max_attempts' must be an int: {}".format(max_attempts))
194
- if not isinstance(wait, (float, int)):
195
- raise TypeError("'wait' must be a float: {}".format(max_attempts))
196
- if not isinstance(stall, (float, int)):
197
- raise TypeError("'stall' must be a float: {}".format(max_attempts))
198
- return _retry
185
+ # Check decorator args, and return _retry,
186
+ # to be called with the decorated function.
187
+ if isinstance(exc, (list, tuple)):
188
+ for _exc in exc:
189
+ if not (isinstance(_exc, type) and issubclass(_exc, Exception)):
190
+ msg = f"not an exception class: {_exc}"
191
+ raise TypeError(msg)
192
+ elif not (isinstance(exc, type) and issubclass(exc, Exception)):
193
+ msg = f"not an exception class: {exc}"
194
+ raise TypeError(msg)
195
+ if not isinstance(max_attempts, int):
196
+ msg = f"'max_attempts' must be an int: {max_attempts}"
197
+ raise TypeError(msg)
198
+ if not isinstance(wait, (float, int)):
199
+ msg = f"'wait' must be a float: {max_attempts}"
200
+ raise TypeError(msg)
201
+ if not isinstance(stall, (float, int)):
202
+ msg = f"'stall' must be a float: {max_attempts}"
203
+ raise TypeError(msg)
204
+ return _retry
199
205
 
200
206
 
201
207
  def strtobool(val: str) -> bool:
@@ -206,28 +212,25 @@ def strtobool(val: str) -> bool:
206
212
  'val' is anything else.
207
213
  """
208
214
  if not isinstance(val, str):
209
- raise TypeError(f"{val} is not a str")
215
+ msg = f"{val} is not a str"
216
+ raise TypeError(msg)
210
217
  val = val.lower()
211
218
  if val in ("y", "yes", "t", "true", "on", "1"):
212
219
  return True
213
- elif val in ("n", "no", "f", "false", "off", "0"):
220
+ if val in ("n", "no", "f", "false", "off", "0"):
214
221
  return False
215
- else:
216
- raise ValueError("invalid truth value %r" % (val,))
222
+ msg = f"invalid truth value {val!r}"
223
+ raise ValueError(msg)
217
224
 
218
225
 
219
226
  def reversed_keys(d: Dict[Any, Any]) -> Iterator[Any]:
220
- if sys.version_info >= (3, 8): # pragma: no cover
221
- return reversed(d.keys())
222
- else: # pragma: no cover
223
- return reversed(list(d.keys()))
227
+ return reversed(d.keys())
224
228
 
225
229
 
226
- def get_method_name(method: Union[FunctionType, WrapperDescriptorType]) -> str:
230
+ def get_method_name(method: FunctionType | WrapperDescriptorType) -> str:
227
231
  if sys.version_info >= (3, 10): # pragma: no cover
228
232
  return method.__qualname__
229
- else: # pragma: no cover
230
- return method.__name__
233
+ return method.__name__ # pragma: no cover
231
234
 
232
235
 
233
236
  EnvType = Mapping[str, str]
@@ -235,21 +238,17 @@ T = TypeVar("T")
235
238
 
236
239
 
237
240
  class Environment(Dict[str, str]):
238
- def __init__(self, name: str = "", env: Optional[EnvType] = None):
241
+ def __init__(self, name: str = "", env: EnvType | None = None):
239
242
  super().__init__(env or {})
240
243
  self.name = name
241
244
 
242
245
  @overload
243
- def get(self, key: str) -> Optional[str]:
244
- ... # pragma: no cover
246
+ def get(self, key: str) -> str | None: ... # pragma: no cover
245
247
 
246
248
  @overload
247
- def get(self, key: str, default: Union[str, T]) -> Union[str, T]:
248
- ... # pragma: no cover
249
+ def get(self, key: str, default: str | T) -> str | T: ... # pragma: no cover
249
250
 
250
- def get(
251
- self, key: str, default: Optional[Union[str, T]] = None
252
- ) -> Optional[Union[str, T]]:
251
+ def get(self, key: str, default: str | T | None = None) -> str | T | None:
253
252
  for _key in self.create_keys(key):
254
253
  value = super().get(_key, None)
255
254
  if value is not None:
@@ -1,57 +1,53 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: eventsourcing
3
- Version: 9.2.21
3
+ Version: 9.3.0
4
4
  Summary: Event sourcing in Python
5
5
  Home-page: https://github.com/pyeventsourcing/eventsourcing
6
+ License: BSD 3-Clause
7
+ Keywords: event sourcing,event store,domain driven design,domain-driven design,ddd,cqrs,cqs
6
8
  Author: John Bywater
7
9
  Author-email: john.bywater@appropriatesoftware.net
8
- License: BSD-3-Clause
9
- Keywords: event sourcing,event store,domain driven design,domain-driven design,ddd,cqrs,cqs
10
+ Requires-Python: >=3.8,<4.0
10
11
  Classifier: Development Status :: 5 - Production/Stable
11
12
  Classifier: Intended Audience :: Developers
12
13
  Classifier: Intended Audience :: Education
13
14
  Classifier: Intended Audience :: Science/Research
14
15
  Classifier: License :: OSI Approved :: BSD License
16
+ Classifier: License :: Other/Proprietary License
15
17
  Classifier: Operating System :: OS Independent
16
18
  Classifier: Programming Language :: Python
17
- Classifier: Programming Language :: Python :: 3.7
19
+ Classifier: Programming Language :: Python :: 3
18
20
  Classifier: Programming Language :: Python :: 3.8
19
21
  Classifier: Programming Language :: Python :: 3.9
20
22
  Classifier: Programming Language :: Python :: 3.10
21
23
  Classifier: Programming Language :: Python :: 3.11
22
- Classifier: Programming Language :: Python :: Implementation :: CPython
24
+ Classifier: Programming Language :: Python :: 3.12
23
25
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
- Requires-Python: >=3.7
25
- Description-Content-Type: text/markdown
26
- License-File: LICENSE
27
- License-File: AUTHORS
28
- Requires-Dist: typing-extensions ; python_version < "3.8"
29
26
  Provides-Extra: crypto
30
- Requires-Dist: pycryptodome (<=3.16.99999) ; extra == 'crypto'
31
- Provides-Extra: dev
32
- Requires-Dist: psycopg2-binary (<=2.9.99999) ; extra == 'dev'
33
- Requires-Dist: pycryptodome (<=3.16.99999) ; extra == 'dev'
34
- Requires-Dist: Sphinx (==4.2.0) ; extra == 'dev'
35
- Requires-Dist: sphinx-rtd-theme (==1.0.0) ; extra == 'dev'
36
- Requires-Dist: orjson ; extra == 'dev'
37
- Requires-Dist: pydantic ; extra == 'dev'
38
- Requires-Dist: python-coveralls ; extra == 'dev'
39
- Requires-Dist: coverage ; extra == 'dev'
40
- Requires-Dist: black ; extra == 'dev'
41
- Requires-Dist: mypy ; extra == 'dev'
42
- Requires-Dist: flake8 ; extra == 'dev'
43
- Requires-Dist: flake8-bugbear ; extra == 'dev'
44
- Requires-Dist: isort ; extra == 'dev'
45
- Requires-Dist: backports.zoneinfo ; (python_version < "3.9") and extra == 'dev'
46
27
  Provides-Extra: docs
47
- Requires-Dist: psycopg2-binary (<=2.9.99999) ; extra == 'docs'
48
- Requires-Dist: pycryptodome (<=3.16.99999) ; extra == 'docs'
49
- Requires-Dist: Sphinx (==4.2.0) ; extra == 'docs'
50
- Requires-Dist: sphinx-rtd-theme (==1.0.0) ; extra == 'docs'
51
28
  Provides-Extra: postgres
52
- Requires-Dist: psycopg2 (<=2.9.99999) ; extra == 'postgres'
53
- Provides-Extra: postgres_dev
54
- Requires-Dist: psycopg2-binary (<=2.9.99999) ; extra == 'postgres_dev'
29
+ Requires-Dist: Sphinx ; extra == "docs"
30
+ Requires-Dist: backports.zoneinfo ; python_version < "3.9"
31
+ Requires-Dist: orjson ; extra == "docs"
32
+ Requires-Dist: psycopg (<=3.2.1) ; (python_full_version <= "3.12.999999") and (extra == "postgres")
33
+ Requires-Dist: psycopg-c (<=3.2.1) ; (python_full_version <= "3.12.999999") and (extra == "postgres")
34
+ Requires-Dist: psycopg-pool (<=3.2.2) ; (python_full_version <= "3.12.999999") and (extra == "postgres")
35
+ Requires-Dist: pycryptodome (<=3.20.99999) ; extra == "crypto"
36
+ Requires-Dist: pydantic ; extra == "docs"
37
+ Requires-Dist: sphinx_rtd_theme ; extra == "docs"
38
+ Requires-Dist: typing_extensions
39
+ Project-URL: Repository, https://github.com/pyeventsourcing/eventsourcing
40
+ Description-Content-Type: text/markdown
41
+
42
+ [![Build Status](https://github.com/pyeventsourcing/eventsourcing/actions/workflows/runtests.yaml/badge.svg?branch=main)](https://github.com/pyeventsourcing/eventsourcing/tree/main)
43
+ [![Coverage Status](https://coveralls.io/repos/github/pyeventsourcing/eventsourcing/badge.svg?branch=main)](https://coveralls.io/github/pyeventsourcing/eventsourcing?branch=main)
44
+ [![Documentation Status](https://readthedocs.org/projects/eventsourcing/badge/?version=stable)](https://eventsourcing.readthedocs.io/en/stable/)
45
+ [![Latest Release](https://badge.fury.io/py/eventsourcing.svg)](https://pypi.org/project/eventsourcing/)
46
+ [![Downloads](https://static.pepy.tech/personalized-badge/eventsourcing?period=total&units=international_system&left_color=grey&right_color=brightgreen&left_text=downloads)](https://pypistats.org/packages/eventsourcing)
47
+ [![Code Style: Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
48
+
49
+
50
+ # Event Sourcing in Python
55
51
 
56
52
  A library for event sourcing in Python.
57
53
 
@@ -247,3 +243,4 @@ for this project, which you are [welcome to join](https://join.slack.com/t/event
247
243
 
248
244
  Please refer to the [documentation](https://eventsourcing.readthedocs.io/) for installation and usage guides.
249
245
 
246
+
@@ -0,0 +1,145 @@
1
+ eventsourcing/__init__.py,sha256=st2H3shrhTk5rqoUeZHUW8XD9iOX9tGGtQFWr2HGYmo,26
2
+ eventsourcing/application.py,sha256=iXoFwffQAGkyNcpl8kMafIq59InIwd5nBGm8-qjbm24,36440
3
+ eventsourcing/cipher.py,sha256=NJcVfZdSlCER6xryM4zVoY3cmKstF-iSSniB4jmpaKg,3200
4
+ eventsourcing/compressor.py,sha256=IdvrJUB9B2td871oifInv4lGXmHwYL9d69MbHHCr7uI,421
5
+ eventsourcing/dispatch.py,sha256=yYSpT-jqc6l_wTdqEnfPJJfvsZN2Ta8g2anrVPWIcqQ,1412
6
+ eventsourcing/domain.py,sha256=rvm4Sv2MmLcha8_5wqJ13AjmqyWvuzkquYsexUaePIg,57264
7
+ eventsourcing/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ eventsourcing/examples/aggregate1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ eventsourcing/examples/aggregate1/application.py,sha256=LPle9YoAu85EQFrp-lUk0I8DKuSdQOSUyJ__38JHSvE,766
10
+ eventsourcing/examples/aggregate1/domainmodel.py,sha256=Li9vLdoNu2MZnrcKR4xiOSWIG9l2ET0IteAVaG9l7OM,369
11
+ eventsourcing/examples/aggregate1/test_application.py,sha256=hGL4J3lsU1QgaQ0V2AQ6qe8TfK1p_cNx-xVRtkywf1A,1214
12
+ eventsourcing/examples/aggregate2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ eventsourcing/examples/aggregate2/application.py,sha256=Q4Eyq2APXmAU8mKOEOpDOrj6IZfSthvkkrFPKSvnHb8,766
14
+ eventsourcing/examples/aggregate2/domainmodel.py,sha256=u98TIOwYVzG4clywsrUhGqTJeLE3v2S8t-DUUzHl-Fg,484
15
+ eventsourcing/examples/aggregate2/test_application.py,sha256=HwTbNVpMqFlKXBluS6fqa6dpY779SfFtTQ5VoJ7sijw,1214
16
+ eventsourcing/examples/aggregate3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ eventsourcing/examples/aggregate3/application.py,sha256=J-ISiAvZg0uOxklA3NtemtggvKaGEvDhZgbtWVnrrPU,780
18
+ eventsourcing/examples/aggregate3/domainmodel.py,sha256=NmSQVcsTlbRGvJy1NSUSmAwzxwUlW9gl0e9eFizi8vk,1013
19
+ eventsourcing/examples/aggregate3/test_application.py,sha256=QYG1L4mHvkpPV9enPvYsFdEbk4UMzZv5grH_5ejybt0,1214
20
+ eventsourcing/examples/aggregate4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ eventsourcing/examples/aggregate4/application.py,sha256=Jq1DB6mSRsnd1XrxkAPHx7l9AfMbjG_cqx_KXILSDeY,825
22
+ eventsourcing/examples/aggregate4/domainmodel.py,sha256=M4d8JQ6imRR1YM3EZU1QLmz3jt9NWZyOOtdvOXBhdrk,3137
23
+ eventsourcing/examples/aggregate4/test_application.py,sha256=W9OtwKumB76DpYvVRmWQ4Fq-IXUqGYggNGJPHFLUYB4,1306
24
+ eventsourcing/examples/aggregate5/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ eventsourcing/examples/aggregate5/application.py,sha256=2xfv9awolKYYoBhzwRfnQ3MB749LP1gcl05PBfhvZ1c,842
26
+ eventsourcing/examples/aggregate5/domainmodel.py,sha256=gpEGR1VZprOCSxRtdzOc5SKgc-rVd0YqrVFtsO95Chs,3637
27
+ eventsourcing/examples/aggregate5/test_application.py,sha256=vTeUbBAruW510wnjc24F78gQdyE5G7yoTcAWZvDYyuA,1306
28
+ eventsourcing/examples/aggregate6/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ eventsourcing/examples/aggregate6/application.py,sha256=g-fun86hqoyJW5sDf6kwzjA45AQWaxF_MPphW5WVO-s,870
30
+ eventsourcing/examples/aggregate6/domainmodel.py,sha256=vMs17TCzJrFHrqJ_09YTOTru03oI-J7YGL4PR3a5EAw,2876
31
+ eventsourcing/examples/aggregate6/test_application.py,sha256=LdrMWj5ZV12gH3A3d8dYPHgtq9fllDJBPHZAwz3QqHs,1312
32
+ eventsourcing/examples/aggregate6a/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ eventsourcing/examples/aggregate6a/application.py,sha256=KK8PjIhlMuxKmV4Gjr6tLSWk5oVZGjbiazs1BvW2Ckg,1247
34
+ eventsourcing/examples/aggregate6a/domainmodel.py,sha256=LaktSGm8sa4xIDyXQAyRkjH8m_HhVt3GHbQw8vfZkUQ,3627
35
+ eventsourcing/examples/aggregate6a/test_application.py,sha256=s8tyZqGWwLQXpD9FSEe1h5MZT3v5_zJc17Vzw133_lw,1673
36
+ eventsourcing/examples/aggregate7/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ eventsourcing/examples/aggregate7/application.py,sha256=cOJ3nYKRTOCO3gA3M-CmlR0Gu-lW8Agmq5epy5uVf90,1395
38
+ eventsourcing/examples/aggregate7/domainmodel.py,sha256=pImr-nOg8uR1SjfF0Ou1R19eLjrsZ9-Xpbhbkci7izk,3261
39
+ eventsourcing/examples/aggregate7/persistence.py,sha256=zb2yJc4iVqkOc9iGLeqLCgo1E-kRRIoBYNvOBhUOfKg,1874
40
+ eventsourcing/examples/aggregate7/test_application.py,sha256=tWRTrRdIL81AlEyO-j2LHTF3l-6yWqXFTOj8Dnk2Nt4,1366
41
+ eventsourcing/examples/aggregate7/test_compression_and_encryption.py,sha256=s9EGEdQ_m4xpt6tyPBhXeGQO9JAx1IpckjHE7vtmBbo,1634
42
+ eventsourcing/examples/aggregate7/test_snapshotting_intervals.py,sha256=_poDWDfHXciTgFfA2IRcR_JVonFedWcV4afaRIto5Ho,2190
43
+ eventsourcing/examples/aggregate7a/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ eventsourcing/examples/aggregate7a/application.py,sha256=dRa5XGu29Ka31qbSY8VBfKPekvQnzWELE6_gM2Xht-E,1748
45
+ eventsourcing/examples/aggregate7a/domainmodel.py,sha256=l0mdBGedAOljbSYAxVbh6Po2nbbAKp_vhVGs915MYFA,4016
46
+ eventsourcing/examples/aggregate7a/test_application.py,sha256=06ViRUVfIE74OLEj7N3rYmVhLO7V5sbCCaS8ozLBIH4,1741
47
+ eventsourcing/examples/aggregate7a/test_compression_and_encryption.py,sha256=h3pxOUMHMCUMWx36vN2pqg4Mrwry_KCpJfMYYkA64o8,1636
48
+ eventsourcing/examples/aggregate8/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ eventsourcing/examples/aggregate8/application.py,sha256=b4MQb7wFzzk29cHe8ZuVQuwFXn2kskEmLojzqO4EKsw,1357
50
+ eventsourcing/examples/aggregate8/domainmodel.py,sha256=Nnc62RyMy_wukqPLxnRo2vJOqxho2XVAgagWfT-Vuq0,1276
51
+ eventsourcing/examples/aggregate8/persistence.py,sha256=zb2yJc4iVqkOc9iGLeqLCgo1E-kRRIoBYNvOBhUOfKg,1874
52
+ eventsourcing/examples/aggregate8/test_application.py,sha256=tbd77pTSpUopE_CENZAt31vCZOYs8E0Ot3WnFRQrhhw,1268
53
+ eventsourcing/examples/aggregate8/test_compression_and_encryption.py,sha256=UWGnTSIlRu-FbXWQ0rX1YOQuDkMj9NCCssoQES23i-w,1509
54
+ eventsourcing/examples/aggregate8/test_snapshotting_intervals.py,sha256=w_HAY_RirHqHtSQ1Z-muqqUz75RTYYBLeFGCB8ELhbI,1261
55
+ eventsourcing/examples/bankaccounts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ eventsourcing/examples/bankaccounts/application.py,sha256=a7LQ7bw4u3uGihZdjU9fII_27Vk_F8BlsMwt45hB8HM,2286
57
+ eventsourcing/examples/bankaccounts/domainmodel.py,sha256=sXTOk_R6_4axwOdH4cnDgW2jhpys9eBAxOni4eMWpsI,1574
58
+ eventsourcing/examples/bankaccounts/test.py,sha256=r6wSbjhaX1U-faQEmblWMkdUlmR18TkjZdkutQcWJm4,5577
59
+ eventsourcing/examples/cargoshipping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ eventsourcing/examples/cargoshipping/application.py,sha256=18QdjZyZltw5SV-FfN79Rl3M_4hS336YirfDhPf8BR8,3646
61
+ eventsourcing/examples/cargoshipping/domainmodel.py,sha256=ezVoA1JztlsKX7XxHY5dQ39jqIVm4jXSREiO88S-__w,9638
62
+ eventsourcing/examples/cargoshipping/interface.py,sha256=R0oWoX8V3S9bkr8gq2DP-DR3XUO2SO9aJ4-XWmtT1jg,4846
63
+ eventsourcing/examples/cargoshipping/test.py,sha256=vEYp170m_fP7Du6DDE_hLOxlP4osV2ZqgqJe7J3-sOg,9649
64
+ eventsourcing/examples/contentmanagement/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
+ eventsourcing/examples/contentmanagement/application.py,sha256=CPk7yP2323sUYK2jofQ6stRoSSoUyCLNxGnP-osSf-Y,3918
66
+ eventsourcing/examples/contentmanagement/domainmodel.py,sha256=VkWAscENxH0fBALtsu8RUl4Rqb083Cx92tNV78RjtJQ,1825
67
+ eventsourcing/examples/contentmanagement/test.py,sha256=7IwbWK1tL7uH9x4gua53NMb-ClojvdKc9E-03LDEfQQ,6230
68
+ eventsourcing/examples/contentmanagement/utils.py,sha256=NOQ5nqn8HHDg3o28wQE1-nHm-9zDlWfIyWzi43fM3Sc,745
69
+ eventsourcing/examples/contentmanagementsystem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
+ eventsourcing/examples/contentmanagementsystem/application.py,sha256=MlBee_mnqFYL7k-U6dI_XhdjzU4UJYKwfIiWbhX6TR8,1877
71
+ eventsourcing/examples/contentmanagementsystem/postgres.py,sha256=FvT-I1AaQawqVwQTO73YzpM8OVHXgHhMnxGGA8j4Ew8,423
72
+ eventsourcing/examples/contentmanagementsystem/sqlite.py,sha256=WN3uBB4ygIXKblDgJ4GTQYkh7vVJ3uMFGPGeE0zagsw,411
73
+ eventsourcing/examples/contentmanagementsystem/system.py,sha256=XB6rU8qHB66AIIWTnonS6tekpSIYqX60EXFf0u9YMDE,444
74
+ eventsourcing/examples/contentmanagementsystem/test_system.py,sha256=OtQ5GQBCgAZeojR0RhugoXcHa0yGOdZIYpQqcVwxo8U,7581
75
+ eventsourcing/examples/searchablecontent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
+ eventsourcing/examples/searchablecontent/application.py,sha256=-TxT-5BZj0VA1PIefb0LvZr2hxIDPMN_onIudcKI7e8,1670
77
+ eventsourcing/examples/searchablecontent/persistence.py,sha256=PbSJLw3wZTK1UVpxqr5bNoyZzIKwAevzlRCnUyRlIsI,596
78
+ eventsourcing/examples/searchablecontent/postgres.py,sha256=EEskpT1I0pZmbu_8K4BZylLMjISRpF8zVCWpuDXB1Dg,3831
79
+ eventsourcing/examples/searchablecontent/sqlite.py,sha256=mVb7SFsSLRyPGy7db7d1eYSJ-LB4NN3u095uDnXabbo,4736
80
+ eventsourcing/examples/searchablecontent/test_application.py,sha256=oCL6tG2NfCl6ibsI5NlpVkxMr4-D39CxWDlQIxNoltA,3971
81
+ eventsourcing/examples/searchablecontent/test_recorder.py,sha256=se8qEjVxbbUzQ4sxIVLPYEVQ8_gTHYdwAKEoAFKAI6o,2329
82
+ eventsourcing/examples/searchabletimestamps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
+ eventsourcing/examples/searchabletimestamps/application.py,sha256=uFFbuzSka9WW8Ibrmomyt7djvb6xd2eaaMvgbFuDG3o,1325
84
+ eventsourcing/examples/searchabletimestamps/persistence.py,sha256=WxVTpOobeP0D_mCO6kLmXpEhg0iFXUdu-WyojjcqlcU,543
85
+ eventsourcing/examples/searchabletimestamps/postgres.py,sha256=AlDwmLGOcCW2eS6QS2rJZZJ3arENn9I0oTI45TGvLVQ,3857
86
+ eventsourcing/examples/searchabletimestamps/sqlite.py,sha256=Gllj5N3TMrZFVTNfMFNQ0pCDm_sQE2V-LquQOmTX1uo,3312
87
+ eventsourcing/examples/searchabletimestamps/test_searchabletimestamps.py,sha256=sPW15_wqPoZZ2x89cHteCRivzXXrmzEqNkZOc_Q4M-Q,3268
88
+ eventsourcing/examples/test_invoice.py,sha256=2T_aCMUni4o5NjoD_AsIuQ4RJ59bsQI2w6_TWMT96fM,4890
89
+ eventsourcing/examples/test_parking_lot.py,sha256=Tlm8KYlMoZFBi20mX-_BSAPPJfeKDgS8CZQrIWLKATQ,6682
90
+ eventsourcing/interface.py,sha256=KzDWLeIkREf-TAFl5AFHtKJwJFA-IthqMKClFkUFqdc,4676
91
+ eventsourcing/persistence.py,sha256=TJseAtsWwdC33XLvcoyHdgwTv6s6KsvQS8XLKIq472s,37672
92
+ eventsourcing/popo.py,sha256=AApSGneHuXa8yHOWdDfsFTMVDI-9ivEpuKTX1BSOXr8,6547
93
+ eventsourcing/postgres.py,sha256=ZsDw36JJbR9O3_FeYSkA_NVab7N0fg4FrmWkVN4h3Lo,29767
94
+ eventsourcing/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
+ eventsourcing/sqlite.py,sha256=jz7SZk26Gcsjw88KL1xnr4-1tStTW16f1NR6TjMsZnQ,18466
96
+ eventsourcing/system.py,sha256=Fyho27C44MckwC3OD9opw7an1Thz20QsD7PnRymnYik,45501
97
+ eventsourcing/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
+ eventsourcing/tests/application.py,sha256=wBanhWzAZvL3fYxCFe5cloN-Up7uLw6KcdRQ2dhKVAg,17586
99
+ eventsourcing/tests/application_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
+ eventsourcing/tests/application_tests/test_application_with_automatic_snapshotting.py,sha256=RI2C3TcIRmx5QXizOU2MDyaib48yJDd5aXpJMvZPIh8,1956
101
+ eventsourcing/tests/application_tests/test_application_with_popo.py,sha256=KytM7YJEWME8fDM9nvRPnbrdykYy9hejKbduKVqflAk,678
102
+ eventsourcing/tests/application_tests/test_application_with_postgres.py,sha256=hAS_wC11aYIAYijV-I5OZorycw5Xl_Z4KT4QLDAqC0o,2431
103
+ eventsourcing/tests/application_tests/test_application_with_sqlite.py,sha256=9g1tdU1_XJirDwo29UYYehpUBR30kgysfdAJ8LfjQWE,2059
104
+ eventsourcing/tests/application_tests/test_cache.py,sha256=5WG4mVnmfavL_nGk0yDWj6bS-P9fxsdJJBRK8JkOnOg,3516
105
+ eventsourcing/tests/application_tests/test_event_sourced_log.py,sha256=IgJ-CPhaZAxeVE2O35fGwkfIu6GzNNhX6IgakzCPZ6w,5438
106
+ eventsourcing/tests/application_tests/test_notificationlog.py,sha256=jsU0-4xAeRPOu2xn4qbDDIgmAarBQGjM368WdqqfTM4,9194
107
+ eventsourcing/tests/application_tests/test_notificationlogreader.py,sha256=OOLW4_P6Rvu-XJ636EcVkq76gNNWX7laxHImZxeyj20,4298
108
+ eventsourcing/tests/application_tests/test_processapplication.py,sha256=2W3uY3-qogKsEiIgi1gopYHVmE3S3EjfWeucxkXTobI,3744
109
+ eventsourcing/tests/application_tests/test_processingpolicy.py,sha256=ViE0OGR4TLX1FeDRPc1fO1Ts43QnLZ1Hl2UiuqPkTMc,3212
110
+ eventsourcing/tests/application_tests/test_repository.py,sha256=AhL_iYYSwyx7FE9dB2Tg5sjz7r_n6eiyQpQFfqQH3p0,18873
111
+ eventsourcing/tests/application_tests/test_snapshotting.py,sha256=gpOksEaFaFXrPpwirD8wNLinXK67r3dJedUih8171Q0,2042
112
+ eventsourcing/tests/application_tests/test_upcasting.py,sha256=n_Lphch_NOqgY0IJDxDcxJI1qIV50Fzu5VmHiUltirU,14355
113
+ eventsourcing/tests/docs_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ eventsourcing/tests/docs_tests/test_docs.py,sha256=bxb4xd0PNMRG9X-SeyQ6C7Tq6nAw4MgoC3FdQ3T0rsg,10871
115
+ eventsourcing/tests/domain.py,sha256=lHSlY6jIoSeqlcPSbrrozEPUJGvJ8bgPrznlmzTxn2w,3254
116
+ eventsourcing/tests/domain_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
+ eventsourcing/tests/domain_tests/test_aggregate.py,sha256=sh4j7bnL6Mx3sYoKZX-iiu39SLFaMvYqQLN2pk4ROwg,38485
118
+ eventsourcing/tests/domain_tests/test_aggregate_decorators.py,sha256=zky6jmqblM0GKgdhCJjYdSxtEE9MwRcemYaZhqxL1AE,50256
119
+ eventsourcing/tests/domain_tests/test_domainevent.py,sha256=3EGLKnla1aWfKPzMfLCNmh7UtVAztk_ne_Oi0cP7jPU,2782
120
+ eventsourcing/tests/interface_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
+ eventsourcing/tests/interface_tests/test_remotenotificationlog.py,sha256=TCy-XZmFbr5jcZBmAny5JhbovD-A6SrlLOQlU75bwks,9140
122
+ eventsourcing/tests/persistence.py,sha256=giLWEZDdViXY8_SHCJerJ0sYVbJUP3UkLKaEbel9sqs,45777
123
+ eventsourcing/tests/persistence_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
+ eventsourcing/tests/persistence_tests/test_aes.py,sha256=fPq5yGdPCOTNS2TWco4dWpksfI9vfUEse3-hJruEdUE,2873
125
+ eventsourcing/tests/persistence_tests/test_connection_pool.py,sha256=j9FKcORI5DtFWqcVHTwD1hXpPhy6Qt2rtaj79IARjnE,23641
126
+ eventsourcing/tests/persistence_tests/test_eventstore.py,sha256=XEWzj78F8-0MEcnHIuJoc69uJd8WWjHSyxddSRcm6Fs,2261
127
+ eventsourcing/tests/persistence_tests/test_infrastructure_factory.py,sha256=xcDdUiGtWJ9R5ChFNELOEnpBEzg9y1xAfw7ZmMQxFGA,730
128
+ eventsourcing/tests/persistence_tests/test_mapper.py,sha256=3GWdhLzFrld8-h7pPfsYdNzIn1YNTa_L6iHb-dCg5zk,3806
129
+ eventsourcing/tests/persistence_tests/test_noninterleaving_notification_ids.py,sha256=O8t9AT1SJ0mwrkh9hyDvQr_bpO-n3RA-PO4S9RVdzhY,2130
130
+ eventsourcing/tests/persistence_tests/test_popo.py,sha256=7KIb72i2VF566N14IyEhM21P7eX3o8UmOLQKkaFAH84,3366
131
+ eventsourcing/tests/persistence_tests/test_postgres.py,sha256=6mxPWJCAFWB0GIgVLEDXVpxY_mPVlm4ZunU22V3VvUA,41185
132
+ eventsourcing/tests/persistence_tests/test_sqlite.py,sha256=dABEY6r0AIjGkgbBBk6f7MgfvQz9JkXgpOPEq8xvei0,11744
133
+ eventsourcing/tests/persistence_tests/test_transcoder.py,sha256=IU1phRrGpyB0KzKFxivtDzDBP2Vn609nrwU52yk9YKM,1251
134
+ eventsourcing/tests/postgres_utils.py,sha256=xymcGYasUXeZTBenkHz-ykD8HtrFjVM1Z7-qRrH6OQk,1364
135
+ eventsourcing/tests/system_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
+ eventsourcing/tests/system_tests/test_runner.py,sha256=zK5YySh1QKnOybpBeGhsCWktzaC_Qc1AZU6jaePk6JU,32020
137
+ eventsourcing/tests/system_tests/test_system.py,sha256=IRmLBovJ5Ha4KWNVg8efM-0OVewSsGcpBO4J9SY0Ut8,9492
138
+ eventsourcing/tests/utils_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
+ eventsourcing/tests/utils_tests/test_utils.py,sha256=8HcTk_0_lXyoT307fEmd2utwmOUS_joToUPGFeFnKW8,6486
140
+ eventsourcing/utils.py,sha256=PIWDvoGiKCXsNbR5DirkoJ_svopg80SoH37bqxOcjkU,8247
141
+ eventsourcing-9.3.0.dist-info/AUTHORS,sha256=8aHOM4UbNZcKlD-cHpFRcM6RWyCqtwtxRev6DeUgVRs,137
142
+ eventsourcing-9.3.0.dist-info/LICENSE,sha256=bSE_F-T6cQPmMY5LuJC27km_pGB1XCVuUFx1uY0Nueg,1512
143
+ eventsourcing-9.3.0.dist-info/METADATA,sha256=U7xzgwPqDQehIwIr8Tf4YAwCcYVpHqUQYFB1YZXVIyY,10116
144
+ eventsourcing-9.3.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
145
+ eventsourcing-9.3.0.dist-info/RECORD,,
@@ -1,5 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.40.0)
2
+ Generator: poetry-core 1.9.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
-
@@ -1,25 +0,0 @@
1
- eventsourcing/__init__.py,sha256=lrWa9m8qjc0SfzuyGLy-rENJgh9WcfV_O8ok3m1-5pw,23
2
- eventsourcing/application.py,sha256=TbgJKh7GUmL95CIpqnr9H4ZH65x8wKX3DA4t2rIEeRU,36305
3
- eventsourcing/cipher.py,sha256=TQCB9qu-vD9-XjGk1Vhu1PVgQlV1AbCXhGIFs8p53qI,3093
4
- eventsourcing/compressor.py,sha256=nE9KRiS10odCRLEmGdbkp2PMqKP49bufLFoF84ALfFs,385
5
- eventsourcing/dispatch.py,sha256=0wf9PKwiJVFyFoQQBYZc1Fv0XXbbKcru49AX3yTFM3s,2420
6
- eventsourcing/domain.py,sha256=A3-EDfgKKEwZtWKwdnn3XYrMhjVLDKj86gkm_k4wdJE,57347
7
- eventsourcing/interface.py,sha256=YrY9OChIscirZuvTqecAMjcxkEexqgt8bzld86SPxcU,4656
8
- eventsourcing/persistence.py,sha256=LFYOhGopT7_viGBHybXZXXPUBHVPqOEeqHL8XqJuTI8,37680
9
- eventsourcing/popo.py,sha256=B-GMfVRgNKtT5s0na2JpRuUDUStQj-E_TnJZBJeVJp4,6549
10
- eventsourcing/postgres.py,sha256=CB7367UaIty4UXo2sGPHLjd4_XGQeoAhZnAwz7iA0cU,36648
11
- eventsourcing/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- eventsourcing/sqlite.py,sha256=MC_cmfTMHa5JYeIN4XUj9OgrFajBw9iM-7wEzGYIdZ4,18822
13
- eventsourcing/system.py,sha256=kaV-FDQJjgS0lNovMUlqAUaugLC9W-GCEY5VAMehTTA,45654
14
- eventsourcing/utils.py,sha256=Z-5_bJHIVWIwCpcR4Fdld9YICgb1YfUM1Rx9mqO9nww,8451
15
- eventsourcing/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- eventsourcing/tests/application.py,sha256=0X8S3BB3HAxuOKDL8HmyZlaGFTP0kWrRoK3oGNyrH98,17749
17
- eventsourcing/tests/domain.py,sha256=wrxK_TOMQwBZ70nmD1vKkycN1Kr4WkEpKvYeuksl39g,3256
18
- eventsourcing/tests/persistence.py,sha256=Y2ujaVF7Dn4qMMTSaKnOEdtxcKQw3R4ctll4DMCXvco,45519
19
- eventsourcing/tests/postgres_utils.py,sha256=wJEE97_0j7qNNHDVKXgIJwnHOengFBVVuahm4Ad4haY,1340
20
- eventsourcing-9.2.21.dist-info/AUTHORS,sha256=8aHOM4UbNZcKlD-cHpFRcM6RWyCqtwtxRev6DeUgVRs,137
21
- eventsourcing-9.2.21.dist-info/LICENSE,sha256=bSE_F-T6cQPmMY5LuJC27km_pGB1XCVuUFx1uY0Nueg,1512
22
- eventsourcing-9.2.21.dist-info/METADATA,sha256=5unBNh7JS-gzUgq-FdUNegvdYw2AVHapSkiFk4R0jow,9661
23
- eventsourcing-9.2.21.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
24
- eventsourcing-9.2.21.dist-info/top_level.txt,sha256=z6uyRibvRK8Kgsq-bBb2Eg1CBkoaUItlN_n9ZU40nkk,14
25
- eventsourcing-9.2.21.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- eventsourcing