Skip to main content

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ddd_misc-0.8.4.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

ddd_misc-0.8.4-py3-none-any.whl (24.8 kB view details)

Uploaded Python 3

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

Hashes for ddd_misc-0.8.4.tar.gz
Algorithm Hash digest
SHA256 2e09c49d69b1b27d9842209068dffff75f9380e706cd7bab28670c2e1ba221a4
MD5 04516f79a5e07c85b9a968b130932e09
BLAKE2b-256 ce363026e4dec15dc689135ec21fd141f0dec426892b08fe33d335d47c4ad59e

See more details on using hashes here.

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

Hashes for ddd_misc-0.8.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a37e811f6bfd877b424ca37f365d39715dec3677900e81fbfe3969bca27fd7a7
MD5 d18ac071eada7600b6745d87941c9c56
BLAKE2b-256 a84b60425c4dfe1ae713efc644b839bfba7597b82d2eb9056df571dc416d0260

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page