Domain-driven Design Misc
Пакет предоставляет базовые классы и утилиты для реализации проекта с событийно-ориентированной архитектурой с использованием набора принципов DDD.
Классы
Классы объектов
BaseAggregate- базовый класс для создания агрегата доменаDDDEvent- базовый класс для реализации событий доменаDDDCommand- базовый класс для реализации команд доменаDDDStructure- базовый класс для создания структур данных при описании команд и событий
Атрибуты классов DDDEvent, DDDCommand и DDDSturcture задаются с использованием Field-классов из пакета dddmisc.fields
get_message_class- метод получения класса события или команды по его идентификатору из общего регистраget_error_class- метод получения класса исключения домена из общего регистра
Класс репозиторий
Репозиторий уровень абстракции отвечающий за сохранение и воссоздание состояния агрегата.
В пакете репозиторий представлен 2-мя абстрактными классами для синхронной и асинхронной реализации:
AbstractSyncRepository- абстрактный класс для реализации синхронного репозиторияAbstractAsyncRepository- абстрактный класс для реализации асинхронного репозитория
а также в пакете реализованы 2 декоратора dddmisc.decorators.getter и dddmisc.decorators.agetter для
декорирования методов репозитория для получения агрегата из базы данных.
UnitOfWork
Unit of work уровень абстракции отвечающий за обеспечения консистентности при сохранении состояния агрегата. Unit of work является надстройкой над репозиторием.
В пакете UnitOfWork представлен 2-мя абстрактными классами для синхронной и асинхронной реализации:
AbstractSyncUnitOfWork- абстрактный класс для реализации синхронного UnitOfWorkAbstractAsyncUnitOfWork- абстрактный класс для реализации асинхронного UnitOfWork
MessageBus
В целях абстрагирования и унификации процесса доставки событий и команд до их обработчиков используется внутрення шина сообщений. Дополнительно внутренняя шина сообщений обеспечивает итеративный процесс доставки событий, порожденных агрегатом в процессе исполнения обработчиков на предыдущей итерации.
В пакете внутрення шина сообщений представлена классами:
AsyncMessageBus- реализации шины сообщений для использования в асинхронном кодеSyncMessageBus- реализации шины сообщений для использования в синхронном коде
tools
ThreadLoop- класс реализующий запуск asyncio.EventLoop в отдельном потокеFuture- класс аналогasyncio.Futureдля работы в многопоточном режимеasync_to_sync- функция вызова асинхронной корутины из синхронного кода
ThreadLoop
ThreadLoop()
Свойства:
loop- EventLoop работающий внутри потокаdone- Флаг завершен ли поток
Методы:
def start()- запускает поток блокируя передачу управления до завершения запуска EventLoopdef stop(timeout=None)- останавливает работу потока блокируя перерачу управления до завершения процесса закрытия EventLooptimeout- время ожидания процесса остановки
def call_thread_safe(coro: t.Callable[..., t.Awaitable], *args, **kwargs)coro- асинхронная функция которая должна быть исполнена во вложенном потоке*args, **kwargs- параметры вызова корутины
Future
Future()
Свойства
done- Флаг завершенияresult- Результат установленный в классexception- Исключение установленное к класс
Методы:
def set_result(value)- метод установки результата в классdef set_exception(self, exception)- метод установки исключенияdef wait(*, timeout=None, raise_exception=True)- метод ожидания futuretimeout- время ожидания завершения Futureraise_exception- поднимает исключение в случае если установлено значение вTrue
async_to_sync
def async_to_sync(loop: asyncio.AbstractEventLoop, coro: t.Callable[..., t.Awaitable], *args, **kwargs)
loop- EventLoop в котором должна исполниться корутинаcoro- корутина*args, **kwargs- параметры вызова корутины
Changelog
0.8.4
- Fixed behaviour of dump nullable fields
0.8.3
- fix error with dump nullable
fields.Structure
0.8.2
- added
regexattribute toStringfield
0.8.1
- fix error with
pytzversion
0.8.0
- add package
ddd_misc.tools
0.7.2
change:
- convert
handlermethod ofAsyncMessageBusfrom async function to sync function return awaitable object - change equals method for
DDDMessageobjects
0.7.1
bugfix:
- fix
pytzdependency conflict
0.7.0 changes:
- В классах
BaseDDDException,DDDEvent,DDDCommndизменен тип поля__timestamp__cfloatнаdatetime - Для классов
AbstractMessagebusдобавлены методыsubscribe,unsubscribeи enum-атрибутSignalTypesдля подписки и отписки на сигналы - Для классов
DDDEvent,DDDCommndрасширена сигнатура методовloadиloadsне обязательными атрибутамиreferenceиtimestamp
0.6.5
changes:
DDDMessage.__timestamp__now is datetime value- Remove specified dump and load methods from DDDMessage
- Remove fields
timestamp,domainandreferencefrom DDDException dump and load methods
0.6.4
futures:
- Make
AbstractAsyncUnitOfWork,AbstractSyncUnitOfWorkas Generic classes - set
engineas optional parameter for sync and async Messagebus - fix hinting for
registermethod of sync and async Messagebus
0.6.1
future:
- add
filtermethod forgetterandagetterdecorators
0.6.0
future:
- Remove external messagebus from package.
- Remove DDDResponse from package. Now messagebus handle method return object returned from handler.
- Refactoring messagebus for set specified uow, repository and engine for handler.
- Add decorators for get methods of repository. Removed abstract method
_get_from_storagefrom repository.
0.5.4
future:
- Execute events from commit aggregate changes when handler failed after commit
- Parallel exec handlers subscribed to once event in sync messagebus
0.5.3
bugfix:
- Make parallel execute event handlers in messagebus
- Change messagebus log format
0.5.2
bugfix:
- Fix error with nullable and default field attributes
Metadata
Release files for ddd-misc 0.8.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ddd_misc-0.8.4.tar.gz | 20.8 kB | Without provenance | Details for ddd_misc-0.8.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ddd_misc-0.8.4-py3-none-any.whl | Python 3 | none | any | Details for ddd_misc-0.8.4-py3-none-any.whl |
Total release size: 45.6 kB
Release files / ddd_misc-0.8.4.tar.gz
| Download URL | ddd_misc-0.8.4.tar.gz |
|---|---|
| Size | 20.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e09c49d69b1b27d9842209068dffff75f9380e706cd7bab28670c2e1ba221a4
|
|
BLAKE2b-256 checksum How to use checksums |
ce363026e4dec15dc689135ec21fd141f0dec426892b08fe33d335d47c4ad59e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.2.2 CPython/3.10.9 Linux/3.10.0-1160.80.1.el7.x86_64
|
Release files / ddd_misc-0.8.4-py3-none-any.whl
| Download URL | ddd_misc-0.8.4-py3-none-any.whl |
|---|---|
| Size | 24.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a37e811f6bfd877b424ca37f365d39715dec3677900e81fbfe3969bca27fd7a7
|
|
BLAKE2b-256 checksum How to use checksums |
a84b60425c4dfe1ae713efc644b839bfba7597b82d2eb9056df571dc416d0260
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.2.2 CPython/3.10.9 Linux/3.10.0-1160.80.1.el7.x86_64
|
Security for ddd-misc 0.8.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.