explicit-python 2.4.0__tar.gz → 2.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. {explicit_python-2.4.0/src/explicit_python.egg-info → explicit_python-2.5.0}/PKG-INFO +35 -3
  2. {explicit_python-2.4.0 → explicit_python-2.5.0}/README.md +33 -2
  3. {explicit_python-2.4.0 → explicit_python-2.5.0}/pyproject.toml +1 -0
  4. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/messagebus/exceptions.py +2 -0
  5. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/messagebus/messagebus.py +22 -13
  6. {explicit_python-2.4.0 → explicit_python-2.5.0/src/explicit_python.egg-info}/PKG-INFO +35 -3
  7. {explicit_python-2.4.0 → explicit_python-2.5.0}/LICENSE +0 -0
  8. {explicit_python-2.4.0 → explicit_python-2.5.0}/MANIFEST.in +0 -0
  9. {explicit_python-2.4.0 → explicit_python-2.5.0}/setup.cfg +0 -0
  10. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/adapters/__init__.py +0 -0
  11. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/adapters/db.py +0 -0
  12. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/adapters/fs.py +0 -0
  13. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/adapters/messaging.py +0 -0
  14. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/contrib/__init__.py +0 -0
  15. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/contrib/domain/__init__.py +0 -0
  16. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/contrib/domain/model/__init__.py +0 -0
  17. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/contrib/domain/model/fields.py +0 -0
  18. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/contrib/messagebus/__init__.py +0 -0
  19. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/contrib/messagebus/event_registry.py +0 -0
  20. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/domain/__init__.py +0 -0
  21. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/domain/factories.py +0 -0
  22. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/domain/fields.py +0 -0
  23. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/domain/model.py +0 -0
  24. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/domain/types.py +0 -0
  25. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/domain/validation/__init__.py +0 -0
  26. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/domain/validation/exceptions.py +0 -0
  27. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/messagebus/__init__.py +0 -0
  28. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/messagebus/commands.py +0 -0
  29. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/messagebus/dependency_injection.py +0 -0
  30. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/messagebus/events.py +0 -0
  31. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/messagebus/queries.py +0 -0
  32. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/py.typed +0 -0
  33. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit/unit_of_work.py +0 -0
  34. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit_python.egg-info/SOURCES.txt +0 -0
  35. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit_python.egg-info/dependency_links.txt +0 -0
  36. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit_python.egg-info/requires.txt +0 -0
  37. {explicit_python-2.4.0 → explicit_python-2.5.0}/src/explicit_python.egg-info/top_level.txt +0 -0
  38. {explicit_python-2.4.0 → explicit_python-2.5.0}/version.conf +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: explicit-python
3
- Version: 2.4.0
3
+ Version: 2.5.0
4
4
  Summary: Набор компонентов для построения многослойной архитектуры
5
5
  Author-email: BARS Group <bars@bars-open.ru>
6
6
  Project-URL: Homepage, https://stash.bars-open.ru/projects/EDUBASE/repos/explicit/browse
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.9
17
17
  Classifier: Programming Language :: Python :: 3.10
18
18
  Classifier: Programming Language :: Python :: 3.11
19
19
  Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
20
21
  Requires-Python: >=3.9
21
22
  Description-Content-Type: text/markdown
22
23
  License-File: LICENSE
@@ -283,8 +284,39 @@ def update_person(person, data: 'PersonDTO'):
283
284
  Можно увидеть в тестовом приложении src/testapp.
284
285
 
285
286
  ## Запуск тестов
286
- ```sh
287
- $ tox
287
+
288
+ Тесты запускаются через `tox`. В системе должен быть установлен [uv](https://docs.astral.sh/uv/).
289
+
290
+ Для корректного запуска тестов необходимы следующие значения переменных окружения в системе. Вместо `<login>` и `<password>` необходимо подставить данные от УЗ БАРС:
291
+
292
+ ```bash
293
+ UV_INDEX="internal=http://<login>:<password>@nexus.py.bars.group/repository/pypi-all/simple"
294
+ UV_DEFAULT_INDEX="https://pypi.org/simple"
295
+ UV_INDEX_STRATEGY=unsafe-best-match
296
+ # Для docker 29+
297
+ TOX_DOCKER_GATEWAY=localhost
298
+ ```
299
+
300
+ Чтобы не менять значения системных переменных, можно создать `.env` файл c переменными окружения и запускать команды через [python-dotenv](https://github.com/theskumar/python-dotenv/).
301
+
302
+ Установка `tox` с необходимыми зависимостями:
303
+ ```bash
304
+ uv tool install tox --with tox-uv --with m3-tox-docker
305
+ ```
306
+
307
+ Или с использованием `python-dotenv`:
308
+ ```bash
309
+ dotenv run uv tool install tox --with tox-uv --with m3-tox-docker
310
+ ```
311
+
312
+ Запуск тестов:
313
+ ```bash
314
+ tox
315
+ ```
316
+
317
+ Через `python-dotenv`:
318
+ ```bash
319
+ dotenv run tox
288
320
  ```
289
321
 
290
322
 
@@ -257,8 +257,39 @@ def update_person(person, data: 'PersonDTO'):
257
257
  Можно увидеть в тестовом приложении src/testapp.
258
258
 
259
259
  ## Запуск тестов
260
- ```sh
261
- $ tox
260
+
261
+ Тесты запускаются через `tox`. В системе должен быть установлен [uv](https://docs.astral.sh/uv/).
262
+
263
+ Для корректного запуска тестов необходимы следующие значения переменных окружения в системе. Вместо `<login>` и `<password>` необходимо подставить данные от УЗ БАРС:
264
+
265
+ ```bash
266
+ UV_INDEX="internal=http://<login>:<password>@nexus.py.bars.group/repository/pypi-all/simple"
267
+ UV_DEFAULT_INDEX="https://pypi.org/simple"
268
+ UV_INDEX_STRATEGY=unsafe-best-match
269
+ # Для docker 29+
270
+ TOX_DOCKER_GATEWAY=localhost
271
+ ```
272
+
273
+ Чтобы не менять значения системных переменных, можно создать `.env` файл c переменными окружения и запускать команды через [python-dotenv](https://github.com/theskumar/python-dotenv/).
274
+
275
+ Установка `tox` с необходимыми зависимостями:
276
+ ```bash
277
+ uv tool install tox --with tox-uv --with m3-tox-docker
278
+ ```
279
+
280
+ Или с использованием `python-dotenv`:
281
+ ```bash
282
+ dotenv run uv tool install tox --with tox-uv --with m3-tox-docker
283
+ ```
284
+
285
+ Запуск тестов:
286
+ ```bash
287
+ tox
288
+ ```
289
+
290
+ Через `python-dotenv`:
291
+ ```bash
292
+ dotenv run tox
262
293
  ```
263
294
 
264
295
 
@@ -29,6 +29,7 @@ classifiers = [
29
29
  'Programming Language :: Python :: 3.10',
30
30
  'Programming Language :: Python :: 3.11',
31
31
  'Programming Language :: Python :: 3.12',
32
+ 'Programming Language :: Python :: 3.13',
32
33
  ]
33
34
  dependencies = [
34
35
  'more_itertools',
@@ -1,3 +1,5 @@
1
+ """Исключения шины сообщений."""
2
+
1
3
  from typing import Any
2
4
 
3
5
 
@@ -67,24 +67,33 @@ class MessageBus(DependencyInjectionMixin, QueryBusMixin, CommandBusMixin, Event
67
67
  def handle(self, message):
68
68
  result = None
69
69
 
70
- self._message_queue[:] = [message]
70
+ parent_queue = getattr(self._thread_local, 'message_bus_queue', None)
71
+ # Для вложенного вызова bus.handle() создаём отдельную рабочую очередь,
72
+ # чтобы не потерять pending-сообщения внешнего вызова.
73
+ self._thread_local.message_bus_queue = [message]
71
74
 
72
- while self._message_queue:
73
- message = self._message_queue.pop(0)
75
+ try:
76
+ while self._message_queue:
77
+ message = self._message_queue.pop(0)
74
78
 
75
- if isinstance(message, Query):
76
- result = self.handle_query(message)
79
+ if isinstance(message, Query):
80
+ result = self.handle_query(message)
77
81
 
78
- elif isinstance(message, Command):
79
- result = self.handle_command(message)
82
+ elif isinstance(message, Command):
83
+ result = self.handle_command(message)
80
84
 
81
- elif isinstance(message, Event):
82
- # результат обработки события нас не интересует.
83
- self.handle_event(message)
85
+ elif isinstance(message, Event):
86
+ # результат обработки события нас не интересует.
87
+ self.handle_event(message)
84
88
 
85
- else:
86
- raise ValueError(f'Unknown message type: {message}')
89
+ else:
90
+ raise ValueError(f'Unknown message type: {message}')
87
91
 
88
- self._collect_events()
92
+ self._collect_events()
93
+ finally:
94
+ if parent_queue is None:
95
+ self._thread_local.message_bus_queue = []
96
+ else:
97
+ self._thread_local.message_bus_queue = parent_queue
89
98
 
90
99
  return result
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: explicit-python
3
- Version: 2.4.0
3
+ Version: 2.5.0
4
4
  Summary: Набор компонентов для построения многослойной архитектуры
5
5
  Author-email: BARS Group <bars@bars-open.ru>
6
6
  Project-URL: Homepage, https://stash.bars-open.ru/projects/EDUBASE/repos/explicit/browse
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.9
17
17
  Classifier: Programming Language :: Python :: 3.10
18
18
  Classifier: Programming Language :: Python :: 3.11
19
19
  Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
20
21
  Requires-Python: >=3.9
21
22
  Description-Content-Type: text/markdown
22
23
  License-File: LICENSE
@@ -283,8 +284,39 @@ def update_person(person, data: 'PersonDTO'):
283
284
  Можно увидеть в тестовом приложении src/testapp.
284
285
 
285
286
  ## Запуск тестов
286
- ```sh
287
- $ tox
287
+
288
+ Тесты запускаются через `tox`. В системе должен быть установлен [uv](https://docs.astral.sh/uv/).
289
+
290
+ Для корректного запуска тестов необходимы следующие значения переменных окружения в системе. Вместо `<login>` и `<password>` необходимо подставить данные от УЗ БАРС:
291
+
292
+ ```bash
293
+ UV_INDEX="internal=http://<login>:<password>@nexus.py.bars.group/repository/pypi-all/simple"
294
+ UV_DEFAULT_INDEX="https://pypi.org/simple"
295
+ UV_INDEX_STRATEGY=unsafe-best-match
296
+ # Для docker 29+
297
+ TOX_DOCKER_GATEWAY=localhost
298
+ ```
299
+
300
+ Чтобы не менять значения системных переменных, можно создать `.env` файл c переменными окружения и запускать команды через [python-dotenv](https://github.com/theskumar/python-dotenv/).
301
+
302
+ Установка `tox` с необходимыми зависимостями:
303
+ ```bash
304
+ uv tool install tox --with tox-uv --with m3-tox-docker
305
+ ```
306
+
307
+ Или с использованием `python-dotenv`:
308
+ ```bash
309
+ dotenv run uv tool install tox --with tox-uv --with m3-tox-docker
310
+ ```
311
+
312
+ Запуск тестов:
313
+ ```bash
314
+ tox
315
+ ```
316
+
317
+ Через `python-dotenv`:
318
+ ```bash
319
+ dotenv run tox
288
320
  ```
289
321
 
290
322
 
File without changes