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
regex
attribute toString
field
0.8.1
- fix error with
pytz
version
0.8.0
- add package
ddd_misc.tools
0.7.2
change:
- convert
handler
method ofAsyncMessageBus
from async function to sync function return awaitable object - change equals method for
DDDMessage
objects
0.7.1
bugfix:
- fix
pytz
dependency 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
,domain
andreference
from DDDException dump and load methods
0.6.4
futures:
- Make
AbstractAsyncUnitOfWork
,AbstractSyncUnitOfWork
as Generic classes - set
engine
as optional parameter for sync and async Messagebus - fix hinting for
register
method of sync and async Messagebus
0.6.1
future:
- add
filter
method forgetter
andagetter
decorators
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_storage
from 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
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 |