Python EDA & DDD utilites
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ddd_misc-0.8.4.tar.gz.
File metadata
- Download URL: ddd_misc-0.8.4.tar.gz
- Upload date:
- Size: 20.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.10.9 Linux/3.10.0-1160.80.1.el7.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e09c49d69b1b27d9842209068dffff75f9380e706cd7bab28670c2e1ba221a4
|
|
| MD5 |
04516f79a5e07c85b9a968b130932e09
|
|
| BLAKE2b-256 |
ce363026e4dec15dc689135ec21fd141f0dec426892b08fe33d335d47c4ad59e
|
File details
Details for the file ddd_misc-0.8.4-py3-none-any.whl.
File metadata
- Download URL: ddd_misc-0.8.4-py3-none-any.whl
- Upload date:
- Size: 24.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.10.9 Linux/3.10.0-1160.80.1.el7.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a37e811f6bfd877b424ca37f365d39715dec3677900e81fbfe3969bca27fd7a7
|
|
| MD5 |
d18ac071eada7600b6745d87941c9c56
|
|
| BLAKE2b-256 |
a84b60425c4dfe1ae713efc644b839bfba7597b82d2eb9056df571dc416d0260
|