Skip to main content

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 - абстрактный класс для реализации синхронного UnitOfWork
  • AbstractAsyncUnitOfWork - абстрактный класс для реализации асинхронного UnitOfWork

MessageBus

В целях абстрагирования и унификации процесса доставки событий и команд до их обработчиков используется внутрення шина сообщений. Дополнительно внутренняя шина сообщений обеспечивает итеративный процесс доставки событий, порожденных агрегатом в процессе исполнения обработчиков на предыдущей итерации.

В пакете внутрення шина сообщений представлена классами:

  • AsyncMessageBus - реализации шины сообщений для использования в асинхронном коде
  • SyncMessageBus - реализации шины сообщений для использования в синхронном коде

tools

  • ThreadLoop - класс реализующий запуск asyncio.EventLoop в отдельном потоке
  • Future - класс аналог asyncio.Future для работы в многопоточном режиме
  • async_to_sync - функция вызова асинхронной корутины из синхронного кода

ThreadLoop

ThreadLoop()

Свойства:

  • loop - EventLoop работающий внутри потока
  • done - Флаг завершен ли поток

Методы:

  • def start() - запускает поток блокируя передачу управления до завершения запуска EventLoop
  • def stop(timeout=None) - останавливает работу потока блокируя перерачу управления до завершения процесса закрытия EventLoop
    • timeout - время ожидания процесса остановки
  • 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) - метод ожидания future
    • timeout - время ожидания завершения Future
    • raise_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 to String field

0.8.1

  • fix error with pytz version

0.8.0

  • add package ddd_misc.tools

0.7.2

change:

  • convert handler method of AsyncMessageBus 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__ c float на 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 and reference 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 for getter and agetter 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

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)

Source distribution for ddd-misc 0.8.4
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)

Table of built distributions (wheels) for ddd-misc 0.8.4
File Interpreter ABI Platform Actions
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page