eventsourcing 9.2.22__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 (144) hide show
  1. eventsourcing/__init__.py +1 -1
  2. eventsourcing/application.py +116 -135
  3. eventsourcing/cipher.py +15 -12
  4. eventsourcing/dispatch.py +31 -91
  5. eventsourcing/domain.py +220 -226
  6. eventsourcing/examples/__init__.py +0 -0
  7. eventsourcing/examples/aggregate1/__init__.py +0 -0
  8. eventsourcing/examples/aggregate1/application.py +27 -0
  9. eventsourcing/examples/aggregate1/domainmodel.py +16 -0
  10. eventsourcing/examples/aggregate1/test_application.py +37 -0
  11. eventsourcing/examples/aggregate2/__init__.py +0 -0
  12. eventsourcing/examples/aggregate2/application.py +27 -0
  13. eventsourcing/examples/aggregate2/domainmodel.py +22 -0
  14. eventsourcing/examples/aggregate2/test_application.py +37 -0
  15. eventsourcing/examples/aggregate3/__init__.py +0 -0
  16. eventsourcing/examples/aggregate3/application.py +27 -0
  17. eventsourcing/examples/aggregate3/domainmodel.py +38 -0
  18. eventsourcing/examples/aggregate3/test_application.py +37 -0
  19. eventsourcing/examples/aggregate4/__init__.py +0 -0
  20. eventsourcing/examples/aggregate4/application.py +27 -0
  21. eventsourcing/examples/aggregate4/domainmodel.py +114 -0
  22. eventsourcing/examples/aggregate4/test_application.py +38 -0
  23. eventsourcing/examples/aggregate5/__init__.py +0 -0
  24. eventsourcing/examples/aggregate5/application.py +27 -0
  25. eventsourcing/examples/aggregate5/domainmodel.py +131 -0
  26. eventsourcing/examples/aggregate5/test_application.py +38 -0
  27. eventsourcing/examples/aggregate6/__init__.py +0 -0
  28. eventsourcing/examples/aggregate6/application.py +30 -0
  29. eventsourcing/examples/aggregate6/domainmodel.py +123 -0
  30. eventsourcing/examples/aggregate6/test_application.py +38 -0
  31. eventsourcing/examples/aggregate6a/__init__.py +0 -0
  32. eventsourcing/examples/aggregate6a/application.py +40 -0
  33. eventsourcing/examples/aggregate6a/domainmodel.py +149 -0
  34. eventsourcing/examples/aggregate6a/test_application.py +45 -0
  35. eventsourcing/examples/aggregate7/__init__.py +0 -0
  36. eventsourcing/examples/aggregate7/application.py +48 -0
  37. eventsourcing/examples/aggregate7/domainmodel.py +144 -0
  38. eventsourcing/examples/aggregate7/persistence.py +57 -0
  39. eventsourcing/examples/aggregate7/test_application.py +38 -0
  40. eventsourcing/examples/aggregate7/test_compression_and_encryption.py +45 -0
  41. eventsourcing/examples/aggregate7/test_snapshotting_intervals.py +67 -0
  42. eventsourcing/examples/aggregate7a/__init__.py +0 -0
  43. eventsourcing/examples/aggregate7a/application.py +56 -0
  44. eventsourcing/examples/aggregate7a/domainmodel.py +170 -0
  45. eventsourcing/examples/aggregate7a/test_application.py +46 -0
  46. eventsourcing/examples/aggregate7a/test_compression_and_encryption.py +45 -0
  47. eventsourcing/examples/aggregate8/__init__.py +0 -0
  48. eventsourcing/examples/aggregate8/application.py +47 -0
  49. eventsourcing/examples/aggregate8/domainmodel.py +65 -0
  50. eventsourcing/examples/aggregate8/persistence.py +57 -0
  51. eventsourcing/examples/aggregate8/test_application.py +37 -0
  52. eventsourcing/examples/aggregate8/test_compression_and_encryption.py +44 -0
  53. eventsourcing/examples/aggregate8/test_snapshotting_intervals.py +38 -0
  54. eventsourcing/examples/bankaccounts/__init__.py +0 -0
  55. eventsourcing/examples/bankaccounts/application.py +70 -0
  56. eventsourcing/examples/bankaccounts/domainmodel.py +56 -0
  57. eventsourcing/examples/bankaccounts/test.py +173 -0
  58. eventsourcing/examples/cargoshipping/__init__.py +0 -0
  59. eventsourcing/examples/cargoshipping/application.py +126 -0
  60. eventsourcing/examples/cargoshipping/domainmodel.py +330 -0
  61. eventsourcing/examples/cargoshipping/interface.py +143 -0
  62. eventsourcing/examples/cargoshipping/test.py +231 -0
  63. eventsourcing/examples/contentmanagement/__init__.py +0 -0
  64. eventsourcing/examples/contentmanagement/application.py +118 -0
  65. eventsourcing/examples/contentmanagement/domainmodel.py +69 -0
  66. eventsourcing/examples/contentmanagement/test.py +180 -0
  67. eventsourcing/examples/contentmanagement/utils.py +26 -0
  68. eventsourcing/examples/contentmanagementsystem/__init__.py +0 -0
  69. eventsourcing/examples/contentmanagementsystem/application.py +54 -0
  70. eventsourcing/examples/contentmanagementsystem/postgres.py +17 -0
  71. eventsourcing/examples/contentmanagementsystem/sqlite.py +17 -0
  72. eventsourcing/examples/contentmanagementsystem/system.py +14 -0
  73. eventsourcing/examples/contentmanagementsystem/test_system.py +180 -0
  74. eventsourcing/examples/searchablecontent/__init__.py +0 -0
  75. eventsourcing/examples/searchablecontent/application.py +45 -0
  76. eventsourcing/examples/searchablecontent/persistence.py +23 -0
  77. eventsourcing/examples/searchablecontent/postgres.py +118 -0
  78. eventsourcing/examples/searchablecontent/sqlite.py +136 -0
  79. eventsourcing/examples/searchablecontent/test_application.py +110 -0
  80. eventsourcing/examples/searchablecontent/test_recorder.py +68 -0
  81. eventsourcing/examples/searchabletimestamps/__init__.py +0 -0
  82. eventsourcing/examples/searchabletimestamps/application.py +32 -0
  83. eventsourcing/examples/searchabletimestamps/persistence.py +20 -0
  84. eventsourcing/examples/searchabletimestamps/postgres.py +110 -0
  85. eventsourcing/examples/searchabletimestamps/sqlite.py +99 -0
  86. eventsourcing/examples/searchabletimestamps/test_searchabletimestamps.py +94 -0
  87. eventsourcing/examples/test_invoice.py +176 -0
  88. eventsourcing/examples/test_parking_lot.py +206 -0
  89. eventsourcing/interface.py +2 -2
  90. eventsourcing/persistence.py +85 -81
  91. eventsourcing/popo.py +30 -31
  92. eventsourcing/postgres.py +379 -590
  93. eventsourcing/sqlite.py +91 -99
  94. eventsourcing/system.py +52 -57
  95. eventsourcing/tests/application.py +20 -32
  96. eventsourcing/tests/application_tests/__init__.py +0 -0
  97. eventsourcing/tests/application_tests/test_application_with_automatic_snapshotting.py +55 -0
  98. eventsourcing/tests/application_tests/test_application_with_popo.py +22 -0
  99. eventsourcing/tests/application_tests/test_application_with_postgres.py +75 -0
  100. eventsourcing/tests/application_tests/test_application_with_sqlite.py +72 -0
  101. eventsourcing/tests/application_tests/test_cache.py +134 -0
  102. eventsourcing/tests/application_tests/test_event_sourced_log.py +162 -0
  103. eventsourcing/tests/application_tests/test_notificationlog.py +232 -0
  104. eventsourcing/tests/application_tests/test_notificationlogreader.py +126 -0
  105. eventsourcing/tests/application_tests/test_processapplication.py +110 -0
  106. eventsourcing/tests/application_tests/test_processingpolicy.py +109 -0
  107. eventsourcing/tests/application_tests/test_repository.py +504 -0
  108. eventsourcing/tests/application_tests/test_snapshotting.py +68 -0
  109. eventsourcing/tests/application_tests/test_upcasting.py +459 -0
  110. eventsourcing/tests/docs_tests/__init__.py +0 -0
  111. eventsourcing/tests/docs_tests/test_docs.py +293 -0
  112. eventsourcing/tests/domain.py +1 -1
  113. eventsourcing/tests/domain_tests/__init__.py +0 -0
  114. eventsourcing/tests/domain_tests/test_aggregate.py +1180 -0
  115. eventsourcing/tests/domain_tests/test_aggregate_decorators.py +1604 -0
  116. eventsourcing/tests/domain_tests/test_domainevent.py +80 -0
  117. eventsourcing/tests/interface_tests/__init__.py +0 -0
  118. eventsourcing/tests/interface_tests/test_remotenotificationlog.py +258 -0
  119. eventsourcing/tests/persistence.py +52 -50
  120. eventsourcing/tests/persistence_tests/__init__.py +0 -0
  121. eventsourcing/tests/persistence_tests/test_aes.py +93 -0
  122. eventsourcing/tests/persistence_tests/test_connection_pool.py +722 -0
  123. eventsourcing/tests/persistence_tests/test_eventstore.py +72 -0
  124. eventsourcing/tests/persistence_tests/test_infrastructure_factory.py +21 -0
  125. eventsourcing/tests/persistence_tests/test_mapper.py +113 -0
  126. eventsourcing/tests/persistence_tests/test_noninterleaving_notification_ids.py +69 -0
  127. eventsourcing/tests/persistence_tests/test_popo.py +124 -0
  128. eventsourcing/tests/persistence_tests/test_postgres.py +1119 -0
  129. eventsourcing/tests/persistence_tests/test_sqlite.py +348 -0
  130. eventsourcing/tests/persistence_tests/test_transcoder.py +44 -0
  131. eventsourcing/tests/postgres_utils.py +7 -7
  132. eventsourcing/tests/system_tests/__init__.py +0 -0
  133. eventsourcing/tests/system_tests/test_runner.py +935 -0
  134. eventsourcing/tests/system_tests/test_system.py +284 -0
  135. eventsourcing/tests/utils_tests/__init__.py +0 -0
  136. eventsourcing/tests/utils_tests/test_utils.py +226 -0
  137. eventsourcing/utils.py +47 -50
  138. {eventsourcing-9.2.22.dist-info → eventsourcing-9.3.0.dist-info}/METADATA +29 -79
  139. eventsourcing-9.3.0.dist-info/RECORD +145 -0
  140. {eventsourcing-9.2.22.dist-info → eventsourcing-9.3.0.dist-info}/WHEEL +1 -2
  141. eventsourcing-9.2.22.dist-info/RECORD +0 -25
  142. eventsourcing-9.2.22.dist-info/top_level.txt +0 -1
  143. {eventsourcing-9.2.22.dist-info → eventsourcing-9.3.0.dist-info}/AUTHORS +0 -0
  144. {eventsourcing-9.2.22.dist-info → eventsourcing-9.3.0.dist-info}/LICENSE +0 -0
eventsourcing/utils.py CHANGED
@@ -7,23 +7,24 @@ from inspect import isfunction
7
7
  from random import random
8
8
  from threading import Lock
9
9
  from time import sleep
10
- from types import FunctionType, WrapperDescriptorType
11
10
  from typing import (
11
+ TYPE_CHECKING,
12
12
  Any,
13
13
  Callable,
14
14
  Dict,
15
15
  Iterator,
16
16
  List,
17
17
  Mapping,
18
- Optional,
19
18
  Sequence,
20
19
  Type,
21
20
  TypeVar,
22
- Union,
23
21
  no_type_check,
24
22
  overload,
25
23
  )
26
24
 
25
+ if TYPE_CHECKING: # pragma: nocover
26
+ from types import FunctionType, WrapperDescriptorType
27
+
27
28
 
28
29
  class TopicError(Exception):
29
30
  """
@@ -98,12 +99,12 @@ def resolve_topic(topic: str) -> Any:
98
99
  msg = f"Failed to resolve topic '{topic}': {e}"
99
100
  raise TopicError(msg) from e
100
101
  if attr_name:
101
- for attr_name_part in attr_name.split("."):
102
- try:
102
+ try:
103
+ for attr_name_part in attr_name.split("."):
103
104
  obj = getattr(obj, attr_name_part)
104
- except AttributeError as e:
105
- msg = f"Failed to resolve topic '{topic}': {e}"
106
- 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
107
108
  register_topic(topic, obj)
108
109
  return obj
109
110
 
@@ -125,10 +126,11 @@ def register_topic(topic: str, obj: Any) -> None:
125
126
  _topic_cache[topic] = obj
126
127
  else:
127
128
  if cached_obj != obj:
128
- raise TopicError(
129
+ msg = (
129
130
  f"Object {cached_obj} is already registered "
130
131
  f"for topic '{topic}', so refusing to cache obj {obj}"
131
132
  )
133
+ raise TopicError(msg)
132
134
 
133
135
 
134
136
  def clear_topic_cache() -> None:
@@ -136,7 +138,7 @@ def clear_topic_cache() -> None:
136
138
 
137
139
 
138
140
  def retry(
139
- exc: Union[Type[Exception], Sequence[Type[Exception]]] = Exception,
141
+ exc: Type[Exception] | Sequence[Type[Exception]] = Exception,
140
142
  max_attempts: int = 1,
141
143
  wait: float = 0,
142
144
  stall: float = 0,
@@ -148,7 +150,6 @@ def retry(
148
150
  :param max_attempts: Maximum number of attempts to try.
149
151
  :param wait: Amount of time to wait before retrying after an exception.
150
152
  :param stall: Amount of time to wait before the first attempt.
151
- :param verbose: If True, prints a message to STDOUT when retries occur.
152
153
  :return: Returns the value returned by decorated function.
153
154
  """
154
155
 
@@ -162,13 +163,13 @@ def retry(
162
163
  while True:
163
164
  try:
164
165
  return func(*args, **kwargs)
165
- except exc as e:
166
+ except exc: # noqa: PERF203
166
167
  attempts += 1
167
168
  if max_attempts is None or attempts < max_attempts:
168
- sleep(wait * (1 + 0.1 * (random() - 0.5)))
169
+ sleep(wait * (1 + 0.1 * (random() - 0.5))) # noqa: S311
169
170
  else:
170
171
  # Max retries exceeded.
171
- raise e
172
+ raise
172
173
 
173
174
  return retry_decorator
174
175
 
@@ -181,23 +182,26 @@ def retry(
181
182
  exc = Exception
182
183
  # Wrap and return.
183
184
  return _retry(func=_func)
184
- else:
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
- raise TypeError("not an exception class: {}".format(_exc))
191
- else:
192
- if not (isinstance(exc, type) and issubclass(exc, Exception)):
193
- raise TypeError("not an exception class: {}".format(exc))
194
- if not isinstance(max_attempts, int):
195
- raise TypeError("'max_attempts' must be an int: {}".format(max_attempts))
196
- if not isinstance(wait, (float, int)):
197
- raise TypeError("'wait' must be a float: {}".format(max_attempts))
198
- if not isinstance(stall, (float, int)):
199
- raise TypeError("'stall' must be a float: {}".format(max_attempts))
200
- 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
201
205
 
202
206
 
203
207
  def strtobool(val: str) -> bool:
@@ -208,28 +212,25 @@ def strtobool(val: str) -> bool:
208
212
  'val' is anything else.
209
213
  """
210
214
  if not isinstance(val, str):
211
- raise TypeError(f"{val} is not a str")
215
+ msg = f"{val} is not a str"
216
+ raise TypeError(msg)
212
217
  val = val.lower()
213
218
  if val in ("y", "yes", "t", "true", "on", "1"):
214
219
  return True
215
- elif val in ("n", "no", "f", "false", "off", "0"):
220
+ if val in ("n", "no", "f", "false", "off", "0"):
216
221
  return False
217
- else:
218
- raise ValueError("invalid truth value %r" % (val,))
222
+ msg = f"invalid truth value {val!r}"
223
+ raise ValueError(msg)
219
224
 
220
225
 
221
226
  def reversed_keys(d: Dict[Any, Any]) -> Iterator[Any]:
222
- if sys.version_info >= (3, 8): # pragma: no cover
223
- return reversed(d.keys())
224
- else: # pragma: no cover
225
- return reversed(list(d.keys()))
227
+ return reversed(d.keys())
226
228
 
227
229
 
228
- def get_method_name(method: Union[FunctionType, WrapperDescriptorType]) -> str:
230
+ def get_method_name(method: FunctionType | WrapperDescriptorType) -> str:
229
231
  if sys.version_info >= (3, 10): # pragma: no cover
230
232
  return method.__qualname__
231
- else: # pragma: no cover
232
- return method.__name__
233
+ return method.__name__ # pragma: no cover
233
234
 
234
235
 
235
236
  EnvType = Mapping[str, str]
@@ -237,21 +238,17 @@ T = TypeVar("T")
237
238
 
238
239
 
239
240
  class Environment(Dict[str, str]):
240
- def __init__(self, name: str = "", env: Optional[EnvType] = None):
241
+ def __init__(self, name: str = "", env: EnvType | None = None):
241
242
  super().__init__(env or {})
242
243
  self.name = name
243
244
 
244
245
  @overload
245
- def get(self, key: str) -> Optional[str]:
246
- ... # pragma: no cover
246
+ def get(self, key: str) -> str | None: ... # pragma: no cover
247
247
 
248
248
  @overload
249
- def get(self, key: str, default: Union[str, T]) -> Union[str, T]:
250
- ... # pragma: no cover
249
+ def get(self, key: str, default: str | T) -> str | T: ... # pragma: no cover
251
250
 
252
- def get(
253
- self, key: str, default: Optional[Union[str, T]] = None
254
- ) -> Optional[Union[str, T]]:
251
+ def get(self, key: str, default: str | T | None = None) -> str | T | None:
255
252
  for _key in self.create_keys(key):
256
253
  value = super().get(_key, None)
257
254
  if value is not None:
@@ -1,104 +1,53 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: eventsourcing
3
- Version: 9.2.22
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
24
  Classifier: Programming Language :: Python :: 3.12
23
- Classifier: Programming Language :: Python :: Implementation :: CPython
24
25
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
- Requires-Python: >=3.7
26
- Description-Content-Type: text/markdown
27
- License-File: LICENSE
28
- License-File: AUTHORS
29
- Requires-Dist: typing-extensions ; python_version < "3.8"
30
26
  Provides-Extra: crypto
31
- Requires-Dist: pycryptodome (<=3.16.99999) ; extra == 'crypto'
32
- Provides-Extra: dev
33
- Requires-Dist: psycopg2-binary (<=2.9.99999) ; extra == 'dev'
34
- Requires-Dist: pycryptodome (<=3.16.99999) ; extra == 'dev'
35
- Requires-Dist: Sphinx (==4.2.0) ; extra == 'dev'
36
- Requires-Dist: docutils (==0.17.1) ; extra == 'dev'
37
- Requires-Dist: sphinx-rtd-theme (==1.3.0) ; extra == 'dev'
38
- Requires-Dist: sphinxcontrib-applehelp (==1.0.2) ; extra == 'dev'
39
- Requires-Dist: sphinxcontrib-devhelp (==1.0.2) ; extra == 'dev'
40
- Requires-Dist: sphinxcontrib-htmlhelp (==2.0.0) ; extra == 'dev'
41
- Requires-Dist: sphinxcontrib-jquery (==4.1) ; extra == 'dev'
42
- Requires-Dist: sphinxcontrib-qthelp (==1.0.3) ; extra == 'dev'
43
- Requires-Dist: sphinxcontrib-serializinghtml (==1.1.5) ; extra == 'dev'
44
- Requires-Dist: Jinja2 (==3.1.2) ; extra == 'dev'
45
- Requires-Dist: Pygments (==2.16.1) ; extra == 'dev'
46
- Requires-Dist: snowballstemmer (==2.2.0) ; extra == 'dev'
47
- Requires-Dist: alabaster (==0.7.13) ; extra == 'dev'
48
- Requires-Dist: Babel (==2.13.0) ; extra == 'dev'
49
- Requires-Dist: imagesize (==1.4.1) ; extra == 'dev'
50
- Requires-Dist: requests (==2.31.0) ; extra == 'dev'
51
- Requires-Dist: packaging (==23.2) ; extra == 'dev'
52
- Requires-Dist: MarkupSafe (==2.1.3) ; extra == 'dev'
53
- Requires-Dist: charset-normalizer (==3.3.0) ; extra == 'dev'
54
- Requires-Dist: idna (==3.4) ; extra == 'dev'
55
- Requires-Dist: urllib3 (==2.0.7) ; extra == 'dev'
56
- Requires-Dist: certifi (==2023.7.22) ; extra == 'dev'
57
- Requires-Dist: pydantic (==2.4.2) ; extra == 'dev'
58
- Requires-Dist: pydantic-core (==2.10.1) ; extra == 'dev'
59
- Requires-Dist: annotated-types (==0.5.0) ; extra == 'dev'
60
- Requires-Dist: orjson (==3.9.7) ; extra == 'dev'
61
- Requires-Dist: python-coveralls ; extra == 'dev'
62
- Requires-Dist: coverage ; extra == 'dev'
63
- Requires-Dist: black ; extra == 'dev'
64
- Requires-Dist: mypy ; extra == 'dev'
65
- Requires-Dist: flake8 ; extra == 'dev'
66
- Requires-Dist: flake8-bugbear ; extra == 'dev'
67
- Requires-Dist: isort ; extra == 'dev'
68
- Requires-Dist: backports.zoneinfo ; (python_version < "3.9") and extra == 'dev'
69
27
  Provides-Extra: docs
70
- Requires-Dist: psycopg2-binary (<=2.9.99999) ; extra == 'docs'
71
- Requires-Dist: pycryptodome (<=3.16.99999) ; extra == 'docs'
72
- Requires-Dist: Sphinx (==4.2.0) ; extra == 'docs'
73
- Requires-Dist: docutils (==0.17.1) ; extra == 'docs'
74
- Requires-Dist: sphinx-rtd-theme (==1.3.0) ; extra == 'docs'
75
- Requires-Dist: sphinxcontrib-applehelp (==1.0.2) ; extra == 'docs'
76
- Requires-Dist: sphinxcontrib-devhelp (==1.0.2) ; extra == 'docs'
77
- Requires-Dist: sphinxcontrib-htmlhelp (==2.0.0) ; extra == 'docs'
78
- Requires-Dist: sphinxcontrib-jquery (==4.1) ; extra == 'docs'
79
- Requires-Dist: sphinxcontrib-qthelp (==1.0.3) ; extra == 'docs'
80
- Requires-Dist: sphinxcontrib-serializinghtml (==1.1.5) ; extra == 'docs'
81
- Requires-Dist: Jinja2 (==3.1.2) ; extra == 'docs'
82
- Requires-Dist: Pygments (==2.16.1) ; extra == 'docs'
83
- Requires-Dist: snowballstemmer (==2.2.0) ; extra == 'docs'
84
- Requires-Dist: alabaster (==0.7.13) ; extra == 'docs'
85
- Requires-Dist: Babel (==2.13.0) ; extra == 'docs'
86
- Requires-Dist: imagesize (==1.4.1) ; extra == 'docs'
87
- Requires-Dist: requests (==2.31.0) ; extra == 'docs'
88
- Requires-Dist: packaging (==23.2) ; extra == 'docs'
89
- Requires-Dist: MarkupSafe (==2.1.3) ; extra == 'docs'
90
- Requires-Dist: charset-normalizer (==3.3.0) ; extra == 'docs'
91
- Requires-Dist: idna (==3.4) ; extra == 'docs'
92
- Requires-Dist: urllib3 (==2.0.7) ; extra == 'docs'
93
- Requires-Dist: certifi (==2023.7.22) ; extra == 'docs'
94
- Requires-Dist: pydantic (==2.4.2) ; extra == 'docs'
95
- Requires-Dist: pydantic-core (==2.10.1) ; extra == 'docs'
96
- Requires-Dist: annotated-types (==0.5.0) ; extra == 'docs'
97
- Requires-Dist: orjson (==3.9.7) ; extra == 'docs'
98
28
  Provides-Extra: postgres
99
- Requires-Dist: psycopg2 (<=2.9.99999) ; extra == 'postgres'
100
- Provides-Extra: postgres_dev
101
- 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
102
51
 
103
52
  A library for event sourcing in Python.
104
53
 
@@ -294,3 +243,4 @@ for this project, which you are [welcome to join](https://join.slack.com/t/event
294
243
 
295
244
  Please refer to the [documentation](https://eventsourcing.readthedocs.io/) for installation and usage guides.
296
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=Hpg9SdjfYItZxEUzUbD9mGUqUeUTNonU51w0c-M2cRs,23
2
- eventsourcing/application.py,sha256=jfq-iXsrCPAfp328kxnRzg_5Td8LAY62SIAUFh4-X9Q,37372
3
- eventsourcing/cipher.py,sha256=WlqJyaizIxtsGy9ewNhr9284b_veBANymlNTLgN50t8,3129
4
- eventsourcing/compressor.py,sha256=IdvrJUB9B2td871oifInv4lGXmHwYL9d69MbHHCr7uI,421
5
- eventsourcing/dispatch.py,sha256=cG9ox7PLLqOkHGLDgzhOR_-2k_1c4TXaZwcfLHdsz0c,3828
6
- eventsourcing/domain.py,sha256=LdH8lxDecOnaxUg8B6VD4yUQZxnEnzESLQk9h6Uki40,57336
7
- eventsourcing/interface.py,sha256=3-1qnvxwjf4miwD5d2HaMc-eFSobmpTNb9YowsL394k,4692
8
- eventsourcing/persistence.py,sha256=1s-q7lb-tTvxW6NNGaegzHiLID1C-3e7mX0VyDO7sXU,37715
9
- eventsourcing/popo.py,sha256=PicK5f7B7vXBt-Yb9IhyK6MKFIW_m2Eee1aPrm1OcjY,6585
10
- eventsourcing/postgres.py,sha256=bxzSoR18pNjtJgYODj_Xnmzct7t1lwg9IYKJ79pSre4,36887
11
- eventsourcing/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- eventsourcing/sqlite.py,sha256=151ZG0nUBghRntoHgS6TDBxdddzb0X-CGNyJ-7Q8Sh8,19042
13
- eventsourcing/system.py,sha256=1b55dZd8V9yLn2rfQhinJy4EQHnbXj9yupZM64sIDzw,45818
14
- eventsourcing/utils.py,sha256=KOajw9kWoHNj38ZloTQMzk8o51kVcqW9sOeB7qFvWkg,8487
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.22.dist-info/AUTHORS,sha256=8aHOM4UbNZcKlD-cHpFRcM6RWyCqtwtxRev6DeUgVRs,137
21
- eventsourcing-9.2.22.dist-info/LICENSE,sha256=bSE_F-T6cQPmMY5LuJC27km_pGB1XCVuUFx1uY0Nueg,1512
22
- eventsourcing-9.2.22.dist-info/METADATA,sha256=H_Ff4w_1lFah2OVRaIU9PVU4XeF3UrSqH0J0tfqIIDU,12330
23
- eventsourcing-9.2.22.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
24
- eventsourcing-9.2.22.dist-info/top_level.txt,sha256=z6uyRibvRK8Kgsq-bBb2Eg1CBkoaUItlN_n9ZU40nkk,14
25
- eventsourcing-9.2.22.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- eventsourcing