eventsourcing 9.3.2__py3-none-any.whl → 9.3.4__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 (129) hide show
  1. eventsourcing/postgres.py +2 -1
  2. eventsourcing/system.py +3 -1
  3. {eventsourcing-9.3.2.dist-info → eventsourcing-9.3.4.dist-info}/METADATA +3 -8
  4. eventsourcing-9.3.4.dist-info/RECORD +24 -0
  5. eventsourcing/examples/__init__.py +0 -0
  6. eventsourcing/examples/aggregate1/__init__.py +0 -0
  7. eventsourcing/examples/aggregate1/application.py +0 -27
  8. eventsourcing/examples/aggregate1/domainmodel.py +0 -16
  9. eventsourcing/examples/aggregate1/test_application.py +0 -37
  10. eventsourcing/examples/aggregate2/__init__.py +0 -0
  11. eventsourcing/examples/aggregate2/application.py +0 -27
  12. eventsourcing/examples/aggregate2/domainmodel.py +0 -22
  13. eventsourcing/examples/aggregate2/test_application.py +0 -37
  14. eventsourcing/examples/aggregate3/__init__.py +0 -0
  15. eventsourcing/examples/aggregate3/application.py +0 -27
  16. eventsourcing/examples/aggregate3/domainmodel.py +0 -38
  17. eventsourcing/examples/aggregate3/test_application.py +0 -37
  18. eventsourcing/examples/aggregate4/__init__.py +0 -0
  19. eventsourcing/examples/aggregate4/application.py +0 -27
  20. eventsourcing/examples/aggregate4/domainmodel.py +0 -114
  21. eventsourcing/examples/aggregate4/test_application.py +0 -38
  22. eventsourcing/examples/aggregate5/__init__.py +0 -0
  23. eventsourcing/examples/aggregate5/application.py +0 -27
  24. eventsourcing/examples/aggregate5/domainmodel.py +0 -131
  25. eventsourcing/examples/aggregate5/test_application.py +0 -38
  26. eventsourcing/examples/aggregate6/__init__.py +0 -0
  27. eventsourcing/examples/aggregate6/application.py +0 -30
  28. eventsourcing/examples/aggregate6/domainmodel.py +0 -123
  29. eventsourcing/examples/aggregate6/test_application.py +0 -38
  30. eventsourcing/examples/aggregate6a/__init__.py +0 -0
  31. eventsourcing/examples/aggregate6a/application.py +0 -40
  32. eventsourcing/examples/aggregate6a/domainmodel.py +0 -149
  33. eventsourcing/examples/aggregate6a/test_application.py +0 -45
  34. eventsourcing/examples/aggregate7/__init__.py +0 -0
  35. eventsourcing/examples/aggregate7/application.py +0 -48
  36. eventsourcing/examples/aggregate7/domainmodel.py +0 -144
  37. eventsourcing/examples/aggregate7/persistence.py +0 -57
  38. eventsourcing/examples/aggregate7/test_application.py +0 -38
  39. eventsourcing/examples/aggregate7/test_compression_and_encryption.py +0 -45
  40. eventsourcing/examples/aggregate7/test_snapshotting_intervals.py +0 -67
  41. eventsourcing/examples/aggregate7a/__init__.py +0 -0
  42. eventsourcing/examples/aggregate7a/application.py +0 -56
  43. eventsourcing/examples/aggregate7a/domainmodel.py +0 -170
  44. eventsourcing/examples/aggregate7a/test_application.py +0 -46
  45. eventsourcing/examples/aggregate7a/test_compression_and_encryption.py +0 -45
  46. eventsourcing/examples/aggregate8/__init__.py +0 -0
  47. eventsourcing/examples/aggregate8/application.py +0 -47
  48. eventsourcing/examples/aggregate8/domainmodel.py +0 -65
  49. eventsourcing/examples/aggregate8/persistence.py +0 -57
  50. eventsourcing/examples/aggregate8/test_application.py +0 -37
  51. eventsourcing/examples/aggregate8/test_compression_and_encryption.py +0 -44
  52. eventsourcing/examples/aggregate8/test_snapshotting_intervals.py +0 -38
  53. eventsourcing/examples/bankaccounts/__init__.py +0 -0
  54. eventsourcing/examples/bankaccounts/application.py +0 -70
  55. eventsourcing/examples/bankaccounts/domainmodel.py +0 -56
  56. eventsourcing/examples/bankaccounts/test.py +0 -173
  57. eventsourcing/examples/cargoshipping/__init__.py +0 -0
  58. eventsourcing/examples/cargoshipping/application.py +0 -126
  59. eventsourcing/examples/cargoshipping/domainmodel.py +0 -330
  60. eventsourcing/examples/cargoshipping/interface.py +0 -143
  61. eventsourcing/examples/cargoshipping/test.py +0 -231
  62. eventsourcing/examples/contentmanagement/__init__.py +0 -0
  63. eventsourcing/examples/contentmanagement/application.py +0 -118
  64. eventsourcing/examples/contentmanagement/domainmodel.py +0 -69
  65. eventsourcing/examples/contentmanagement/test.py +0 -180
  66. eventsourcing/examples/contentmanagement/utils.py +0 -26
  67. eventsourcing/examples/contentmanagementsystem/__init__.py +0 -0
  68. eventsourcing/examples/contentmanagementsystem/application.py +0 -54
  69. eventsourcing/examples/contentmanagementsystem/postgres.py +0 -17
  70. eventsourcing/examples/contentmanagementsystem/sqlite.py +0 -17
  71. eventsourcing/examples/contentmanagementsystem/system.py +0 -14
  72. eventsourcing/examples/contentmanagementsystem/test_system.py +0 -180
  73. eventsourcing/examples/searchablecontent/__init__.py +0 -0
  74. eventsourcing/examples/searchablecontent/application.py +0 -45
  75. eventsourcing/examples/searchablecontent/persistence.py +0 -23
  76. eventsourcing/examples/searchablecontent/postgres.py +0 -118
  77. eventsourcing/examples/searchablecontent/sqlite.py +0 -136
  78. eventsourcing/examples/searchablecontent/test_application.py +0 -110
  79. eventsourcing/examples/searchablecontent/test_recorder.py +0 -68
  80. eventsourcing/examples/searchabletimestamps/__init__.py +0 -0
  81. eventsourcing/examples/searchabletimestamps/application.py +0 -32
  82. eventsourcing/examples/searchabletimestamps/persistence.py +0 -20
  83. eventsourcing/examples/searchabletimestamps/postgres.py +0 -110
  84. eventsourcing/examples/searchabletimestamps/sqlite.py +0 -99
  85. eventsourcing/examples/searchabletimestamps/test_searchabletimestamps.py +0 -94
  86. eventsourcing/examples/test_invoice.py +0 -176
  87. eventsourcing/examples/test_parking_lot.py +0 -206
  88. eventsourcing/tests/application_tests/__init__.py +0 -0
  89. eventsourcing/tests/application_tests/test_application_with_automatic_snapshotting.py +0 -55
  90. eventsourcing/tests/application_tests/test_application_with_popo.py +0 -22
  91. eventsourcing/tests/application_tests/test_application_with_postgres.py +0 -75
  92. eventsourcing/tests/application_tests/test_application_with_sqlite.py +0 -72
  93. eventsourcing/tests/application_tests/test_cache.py +0 -134
  94. eventsourcing/tests/application_tests/test_event_sourced_log.py +0 -162
  95. eventsourcing/tests/application_tests/test_notificationlog.py +0 -232
  96. eventsourcing/tests/application_tests/test_notificationlogreader.py +0 -126
  97. eventsourcing/tests/application_tests/test_processapplication.py +0 -110
  98. eventsourcing/tests/application_tests/test_processingpolicy.py +0 -109
  99. eventsourcing/tests/application_tests/test_repository.py +0 -504
  100. eventsourcing/tests/application_tests/test_snapshotting.py +0 -68
  101. eventsourcing/tests/application_tests/test_upcasting.py +0 -459
  102. eventsourcing/tests/docs_tests/__init__.py +0 -0
  103. eventsourcing/tests/docs_tests/test_docs.py +0 -293
  104. eventsourcing/tests/domain_tests/__init__.py +0 -0
  105. eventsourcing/tests/domain_tests/test_aggregate.py +0 -1200
  106. eventsourcing/tests/domain_tests/test_aggregate_decorators.py +0 -1604
  107. eventsourcing/tests/domain_tests/test_domainevent.py +0 -80
  108. eventsourcing/tests/interface_tests/__init__.py +0 -0
  109. eventsourcing/tests/interface_tests/test_remotenotificationlog.py +0 -258
  110. eventsourcing/tests/persistence_tests/__init__.py +0 -0
  111. eventsourcing/tests/persistence_tests/test_aes.py +0 -93
  112. eventsourcing/tests/persistence_tests/test_connection_pool.py +0 -722
  113. eventsourcing/tests/persistence_tests/test_eventstore.py +0 -72
  114. eventsourcing/tests/persistence_tests/test_infrastructure_factory.py +0 -21
  115. eventsourcing/tests/persistence_tests/test_mapper.py +0 -113
  116. eventsourcing/tests/persistence_tests/test_noninterleaving_notification_ids.py +0 -69
  117. eventsourcing/tests/persistence_tests/test_popo.py +0 -124
  118. eventsourcing/tests/persistence_tests/test_postgres.py +0 -1119
  119. eventsourcing/tests/persistence_tests/test_sqlite.py +0 -348
  120. eventsourcing/tests/persistence_tests/test_transcoder.py +0 -44
  121. eventsourcing/tests/system_tests/__init__.py +0 -0
  122. eventsourcing/tests/system_tests/test_runner.py +0 -935
  123. eventsourcing/tests/system_tests/test_system.py +0 -284
  124. eventsourcing/tests/utils_tests/__init__.py +0 -0
  125. eventsourcing/tests/utils_tests/test_utils.py +0 -226
  126. eventsourcing-9.3.2.dist-info/RECORD +0 -145
  127. {eventsourcing-9.3.2.dist-info → eventsourcing-9.3.4.dist-info}/AUTHORS +0 -0
  128. {eventsourcing-9.3.2.dist-info → eventsourcing-9.3.4.dist-info}/LICENSE +0 -0
  129. {eventsourcing-9.3.2.dist-info → eventsourcing-9.3.4.dist-info}/WHEEL +0 -0
@@ -1,284 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import ClassVar, Sequence
4
- from unittest.case import TestCase
5
- from uuid import NAMESPACE_URL, uuid4, uuid5
6
-
7
- from eventsourcing.application import Application, RecordingEvent
8
- from eventsourcing.domain import Aggregate
9
- from eventsourcing.persistence import IntegrityError, Notification, Tracking
10
- from eventsourcing.system import (
11
- Follower,
12
- Leader,
13
- ProcessApplication,
14
- RecordingEventReceiver,
15
- System,
16
- )
17
- from eventsourcing.tests.application import BankAccounts
18
- from eventsourcing.tests.application_tests.test_processapplication import EmailProcess
19
- from eventsourcing.tests.domain import BankAccount
20
- from eventsourcing.utils import get_topic, resolve_topic
21
-
22
- system_defined_as_global = System(
23
- pipes=[
24
- [
25
- BankAccounts,
26
- EmailProcess,
27
- ],
28
- [Application],
29
- ]
30
- )
31
-
32
-
33
- class TestSystem(TestCase):
34
- def test_graph_nodes_and_edges(self):
35
- system = System(
36
- pipes=[
37
- [
38
- BankAccounts,
39
- EmailProcess,
40
- ],
41
- [Application],
42
- ]
43
- )
44
- self.assertEqual(len(system.nodes), 3)
45
- self.assertEqual(system.nodes["BankAccounts"], get_topic(BankAccounts))
46
- self.assertEqual(system.nodes["EmailProcess"], get_topic(EmailProcess))
47
- self.assertEqual(system.nodes["Application"], get_topic(Application))
48
-
49
- self.assertEqual(system.leaders, ["BankAccounts"])
50
- self.assertEqual(system.followers, ["EmailProcess"])
51
- self.assertEqual(system.singles, ["Application"])
52
-
53
- self.assertEqual(len(system.edges), 1)
54
- self.assertIn(
55
- (
56
- "BankAccounts",
57
- "EmailProcess",
58
- ),
59
- system.edges,
60
- )
61
-
62
- self.assertEqual(len(system.singles), 1)
63
-
64
- def test_duplicate_edges_are_eliminated(self):
65
- system = System(
66
- pipes=[
67
- [
68
- BankAccounts,
69
- EmailProcess,
70
- ],
71
- [
72
- BankAccounts,
73
- EmailProcess,
74
- ],
75
- [Application],
76
- ]
77
- )
78
- self.assertEqual(len(system.nodes), 3)
79
- self.assertEqual(system.nodes["BankAccounts"], get_topic(BankAccounts))
80
- self.assertEqual(system.nodes["EmailProcess"], get_topic(EmailProcess))
81
- self.assertEqual(system.nodes["Application"], get_topic(Application))
82
-
83
- self.assertEqual(system.leaders, ["BankAccounts"])
84
- self.assertEqual(system.followers, ["EmailProcess"])
85
- self.assertEqual(system.singles, ["Application"])
86
-
87
- self.assertEqual(len(system.edges), 1)
88
- self.assertIn(
89
- (
90
- "BankAccounts",
91
- "EmailProcess",
92
- ),
93
- system.edges,
94
- )
95
-
96
- self.assertEqual(len(system.singles), 1)
97
-
98
- def test_raises_type_error_not_a_follower(self):
99
- with self.assertRaises(TypeError) as cm:
100
- System(
101
- pipes=[
102
- [
103
- BankAccounts,
104
- Leader,
105
- ],
106
- ]
107
- )
108
- exception = cm.exception
109
- self.assertEqual(
110
- exception.args[0],
111
- "Not a follower class: <class 'eventsourcing.system.Leader'>",
112
- )
113
-
114
- def test_raises_type_error_not_a_processor(self):
115
- with self.assertRaises(TypeError) as cm:
116
- System(
117
- pipes=[
118
- [
119
- BankAccounts,
120
- Follower,
121
- EmailProcess,
122
- ],
123
- ]
124
- )
125
- exception = cm.exception
126
- self.assertEqual(
127
- exception.args[0],
128
- "Not a process application class: <class 'eventsourcing.system.Follower'>",
129
- )
130
-
131
- def test_is_leaders_only(self):
132
- system = System(
133
- pipes=[
134
- [
135
- Leader,
136
- ProcessApplication,
137
- ProcessApplication,
138
- ],
139
- ]
140
- )
141
- self.assertEqual(list(system.leaders_only), ["Leader"])
142
-
143
- def test_leader_class(self):
144
- system = System(
145
- pipes=[
146
- [
147
- Application,
148
- ProcessApplication,
149
- ProcessApplication,
150
- ],
151
- ]
152
- )
153
- self.assertTrue(issubclass(system.leader_cls("Application"), Leader))
154
- self.assertTrue(issubclass(system.leader_cls("ProcessApplication"), Leader))
155
-
156
- def test_system_has_topic_if_defined_as_module_attribute(self):
157
- system_topic = system_defined_as_global.topic
158
- self.assertTrue(system_topic.endswith("test_system:system_defined_as_global"))
159
- self.assertEqual(resolve_topic(system_topic), system_defined_as_global)
160
-
161
- def test_system_topic_is_none_if_defined_in_function_body(self):
162
- system = System([[]])
163
- self.assertIsNone(system.topic)
164
-
165
-
166
- class TestLeader(TestCase):
167
- def test(self):
168
- # Define fixture that receives prompts.
169
- class FollowerFixture(RecordingEventReceiver):
170
- def __init__(self):
171
- self.num_received = 0
172
-
173
- def receive_recording_event(self, _: RecordingEvent) -> None:
174
- self.num_received += 1
175
-
176
- # Test fixture is working.
177
- follower = FollowerFixture()
178
- follower.receive_recording_event(RecordingEvent("Leader", [], 1))
179
- self.assertEqual(follower.num_received, 1)
180
-
181
- # Construct leader.
182
- leader = Leader()
183
- leader.lead(follower)
184
-
185
- # Check follower receives a prompt when there are new events.
186
- leader.save(Aggregate())
187
- self.assertEqual(follower.num_received, 2)
188
-
189
- # Check follower doesn't receive prompt when no new events.
190
- leader.save()
191
- self.assertEqual(follower.num_received, 2)
192
-
193
- # Check follower doesn't receive prompt when recordings are filtered out.
194
- leader.notify_topics = ["topic1"]
195
- leader.save(Aggregate())
196
- self.assertEqual(follower.num_received, 2)
197
-
198
-
199
- class TestFollower(TestCase):
200
- def test_process_event(self):
201
- class UUID5EmailNotification(Aggregate):
202
- def __init__(self, to, subject, message):
203
- self.to = to
204
- self.subject = subject
205
- self.message = message
206
-
207
- @staticmethod
208
- def create_id(to: str):
209
- return uuid5(NAMESPACE_URL, f"/emails/{to}")
210
-
211
- class UUID5EmailProcess(EmailProcess):
212
- def policy(self, domain_event, processing_event):
213
- if isinstance(domain_event, BankAccount.Opened):
214
- notification = UUID5EmailNotification(
215
- to=domain_event.email_address,
216
- subject="Your New Account",
217
- message=f"Dear {domain_event.full_name}, ...",
218
- )
219
- processing_event.collect_events(notification)
220
-
221
- bank_accounts = BankAccounts()
222
- email_process = UUID5EmailProcess()
223
-
224
- account = BankAccount.open(
225
- full_name="Alice",
226
- email_address="alice@example.com",
227
- )
228
-
229
- recordings = bank_accounts.save(account)
230
-
231
- self.assertEqual(len(recordings), 1)
232
-
233
- aggregate_event = recordings[0].domain_event
234
- notification = recordings[0].notification
235
- tracking = Tracking(bank_accounts.name, notification.id)
236
-
237
- # Process the event.
238
- email_process.process_event(aggregate_event, tracking)
239
- self.assertEqual(
240
- email_process.recorder.max_tracking_id(bank_accounts.name), notification.id
241
- )
242
-
243
- # Process the event again, ignore tracking integrity error.
244
- email_process.process_event(aggregate_event, tracking)
245
- self.assertEqual(
246
- email_process.recorder.max_tracking_id(bank_accounts.name), notification.id
247
- )
248
-
249
- # Create another event that will cause conflict with email processing.
250
- account = BankAccount.open(
251
- full_name="Alice",
252
- email_address="alice@example.com",
253
- )
254
- recordings = bank_accounts.save(account)
255
-
256
- # Process the event and expect an integrity error.
257
- aggregate_event = recordings[0].domain_event
258
- notification = recordings[0].notification
259
- tracking = Tracking(bank_accounts.name, notification.id)
260
- with self.assertRaises(IntegrityError):
261
- email_process.process_event(aggregate_event, tracking)
262
-
263
- def test_filter_received_notifications(self):
264
- class MyFollower(Follower):
265
- follow_topics: ClassVar[Sequence[str]] = []
266
-
267
- def policy(self, *args, **kwargs):
268
- pass
269
-
270
- follower = MyFollower()
271
- notifications = [
272
- Notification(
273
- id=1,
274
- originator_id=uuid4(),
275
- originator_version=1,
276
- state=b"",
277
- topic="topic1",
278
- )
279
- ]
280
- self.assertEqual(len(follower.filter_received_notifications(notifications)), 1)
281
- follower.follow_topics = ["topic1"]
282
- self.assertEqual(len(follower.filter_received_notifications(notifications)), 1)
283
- follower.follow_topics = ["topic2"]
284
- self.assertEqual(len(follower.filter_received_notifications(notifications)), 0)
File without changes
@@ -1,226 +0,0 @@
1
- from typing import cast
2
- from unittest import TestCase
3
-
4
- import eventsourcing
5
- from eventsourcing.domain import Aggregate
6
- from eventsourcing.utils import (
7
- TopicError,
8
- clear_topic_cache,
9
- get_topic,
10
- register_topic,
11
- resolve_topic,
12
- retry,
13
- strtobool,
14
- )
15
-
16
-
17
- class TestRetryDecorator(TestCase):
18
- def test_bare(self):
19
- @retry
20
- def f():
21
- pass
22
-
23
- f()
24
-
25
- def test_no_args(self):
26
- @retry()
27
- def f():
28
- pass
29
-
30
- f()
31
-
32
- def test_exception_single_value(self):
33
- @retry(ValueError)
34
- def f():
35
- pass
36
-
37
- f()
38
-
39
- def test_exception_sequence(self):
40
- @retry((ValueError, TypeError))
41
- def f():
42
- pass
43
-
44
- f()
45
-
46
- def test_exception_type_error(self):
47
- with self.assertRaises(TypeError):
48
-
49
- @retry(1)
50
- def _():
51
- pass
52
-
53
- with self.assertRaises(TypeError):
54
-
55
- @retry((ValueError, 1))
56
- def _():
57
- pass
58
-
59
- def test_exception_raised_no_retry(self):
60
- self.call_count = 0
61
-
62
- @retry(ValueError)
63
- def f():
64
- self.call_count += 1
65
- raise ValueError
66
-
67
- with self.assertRaises(ValueError):
68
- f()
69
-
70
- self.assertEqual(self.call_count, 1)
71
-
72
- def test_max_attempts(self):
73
- self.call_count = 0
74
-
75
- @retry(ValueError, max_attempts=2)
76
- def f():
77
- self.call_count += 1
78
- raise ValueError
79
-
80
- with self.assertRaises(ValueError):
81
- f()
82
-
83
- self.assertEqual(self.call_count, 2)
84
-
85
- def test_max_attempts_not_int(self):
86
- with self.assertRaises(TypeError):
87
-
88
- @retry(ValueError, max_attempts="a")
89
- def f():
90
- pass
91
-
92
- def test_wait(self):
93
- self.call_count = 0
94
-
95
- @retry(ValueError, max_attempts=2, wait=0.001)
96
- def f():
97
- self.call_count += 1
98
- raise ValueError
99
-
100
- with self.assertRaises(ValueError):
101
- f()
102
-
103
- self.assertEqual(self.call_count, 2)
104
-
105
- def test_wait_not_float(self):
106
- with self.assertRaises(TypeError):
107
-
108
- @retry(ValueError, max_attempts=1, wait="a")
109
- def f():
110
- pass
111
-
112
- def test_stall(self):
113
- self.call_count = 0
114
-
115
- @retry(ValueError, max_attempts=2, stall=0.001)
116
- def f():
117
- self.call_count += 1
118
- raise ValueError
119
-
120
- with self.assertRaises(ValueError):
121
- f()
122
-
123
- self.assertEqual(self.call_count, 2)
124
-
125
- def test_stall_not_float(self):
126
- with self.assertRaises(TypeError):
127
-
128
- @retry(ValueError, max_attempts=1, stall="a")
129
- def f():
130
- pass
131
-
132
-
133
- class TestStrtobool(TestCase):
134
- def test_true_values(self):
135
- for s in ("y", "yes", "t", "true", "on", "1"):
136
- self.assertTrue(strtobool(s), s)
137
-
138
- def test_false_values(self):
139
- for s in ("n", "no", "f", "false", "off", "0"):
140
- self.assertFalse(strtobool(s), s)
141
-
142
- def test_raises_value_error(self):
143
- for s in ("", "a", "b", "c"):
144
- with self.assertRaises(ValueError):
145
- strtobool(s)
146
-
147
- def test_raises_type_error(self):
148
- for x in (None, True, False, 1, 2, 3):
149
- with self.assertRaises(TypeError):
150
- strtobool(cast(str, x))
151
-
152
-
153
- class TestTopics(TestCase):
154
- def test_get_topic(self):
155
- self.assertEqual("eventsourcing.domain:Aggregate", get_topic(Aggregate))
156
-
157
- def test_resolve_topic(self):
158
- self.assertEqual(Aggregate, resolve_topic("eventsourcing.domain:Aggregate"))
159
-
160
- def test_register_topic_rename_class(self):
161
- register_topic("eventsourcing.domain:OldClass", Aggregate)
162
- self.assertEqual(Aggregate, resolve_topic("eventsourcing.domain:OldClass"))
163
- self.assertEqual(
164
- Aggregate.Created, resolve_topic("eventsourcing.domain:OldClass.Created")
165
- )
166
-
167
- def test_register_topic_move_module_into_package(self):
168
- register_topic("oldmodule", eventsourcing.domain)
169
- self.assertEqual(Aggregate, resolve_topic("oldmodule:Aggregate"))
170
- self.assertEqual(
171
- Aggregate.Created, resolve_topic("oldmodule:Aggregate.Created")
172
- )
173
-
174
- def test_register_topic_rename_package(self):
175
- register_topic("oldpackage", eventsourcing)
176
- self.assertEqual(Aggregate, resolve_topic("oldpackage.domain:Aggregate"))
177
- self.assertEqual(
178
- Aggregate.Created, resolve_topic("oldpackage.domain:Aggregate.Created")
179
- )
180
-
181
- def test_register_topic_move_package(self):
182
- register_topic("old.eventsourcing.domain", eventsourcing.domain)
183
- self.assertEqual(Aggregate, resolve_topic("old.eventsourcing.domain:Aggregate"))
184
-
185
- def test_register_topic_rename_package_and_module(self):
186
- register_topic("old.old", eventsourcing.domain)
187
- self.assertEqual(Aggregate, resolve_topic("old.old:Aggregate"))
188
-
189
- def test_topic_errors(self):
190
- # Wrong module name.
191
- with self.assertRaises(TopicError) as cm:
192
- resolve_topic("oldmodule:Aggregate")
193
- expected_msg = (
194
- "Failed to resolve topic 'oldmodule:Aggregate': No module named 'oldmodule'"
195
- )
196
- self.assertEqual(expected_msg, cm.exception.args[0])
197
-
198
- # Wrong class name.
199
- with self.assertRaises(TopicError) as cm:
200
- resolve_topic("eventsourcing.domain:OldClass")
201
- expected_msg = (
202
- "Failed to resolve topic 'eventsourcing.domain:OldClass': "
203
- "module 'eventsourcing.domain' has no attribute 'OldClass'"
204
- )
205
- self.assertEqual(expected_msg, cm.exception.args[0])
206
-
207
- # Wrong class attribute.
208
- with self.assertRaises(TopicError) as cm:
209
- resolve_topic("eventsourcing.domain:Aggregate.OldClass")
210
- expected_msg = (
211
- "Failed to resolve topic 'eventsourcing.domain:Aggregate.OldClass': "
212
- "type object 'Aggregate' has no attribute 'OldClass'"
213
- )
214
- self.assertEqual(expected_msg, cm.exception.args[0])
215
-
216
- # Can register same thing twice.
217
- register_topic("old", eventsourcing)
218
- register_topic("old", eventsourcing)
219
-
220
- # Can't overwrite with another thing.
221
- with self.assertRaises(TopicError) as cm:
222
- register_topic("old", TestCase)
223
- self.assertIn("is already registered for topic 'old'", cm.exception.args[0])
224
-
225
- def tearDown(self) -> None:
226
- clear_topic_cache()
@@ -1,145 +0,0 @@
1
- eventsourcing/__init__.py,sha256=st2H3shrhTk5rqoUeZHUW8XD9iOX9tGGtQFWr2HGYmo,26
2
- eventsourcing/application.py,sha256=c5aTi86mBOiQicmqEUsqseAeL7CwDie3G9e0Y8kWLYM,36324
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=XRO4YbFTW0mwJYVJ0hLBOJRyFs28XSyvRxlpkD5pibA,39133
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.2.dist-info/AUTHORS,sha256=8aHOM4UbNZcKlD-cHpFRcM6RWyCqtwtxRev6DeUgVRs,137
142
- eventsourcing-9.3.2.dist-info/LICENSE,sha256=bSE_F-T6cQPmMY5LuJC27km_pGB1XCVuUFx1uY0Nueg,1512
143
- eventsourcing-9.3.2.dist-info/METADATA,sha256=QFafd2jcyxKW5UCb_N5-8M-iZBJKU8YPdk5fOCJYcsQ,9968
144
- eventsourcing-9.3.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
145
- eventsourcing-9.3.2.dist-info/RECORD,,