Skip to main content

This is a fork from Diator, a Python library for implementing CQRS pattern in your applications. The original project is apparently abandoned.

Project description

Test Downloads Package version Supported Python versions

SiKei - CQRS Library for Python

Docs | PyPI

SiKei is a Python library for implementing CQRS pattern in your Python applications forked from Diator (https://akhundmurad.github.io/diator/). It provides a set of abstractions and utilities to help you separate your read and write concerns, allowing for better scalability, performance, and maintainability of your application.

Features :bulb:

  • Implements the CQRS pattern.
  • Simple, yet flexible API.
  • Supports multiple message brokers, such as Redis Pub/Sub and Azure Service Bus.
  • Supports various di-frameworks, such as di and rodi.
  • Easy to integrate with existing codebases.

Installation :triangular_ruler:

Install the SiKei library with pip

pip install sikei

There are also several installation options:

  • To use Redis as Message Broker

    pip install sikei[redis]
    
  • Or Azure Service Bus

    pip install sikei[azure]
    

Simple Example :hammer_and_wrench:

Minimal example of sikei usage:

import asyncio
from dataclasses import dataclass, field
from di import Container, bind_by_type
from di.dependent import Dependent
from sikei.events import EventMap, Event, EventEmitter
from sikei.container.di import DIContainer
from sikei.mediator import Mesikei
from sikei.requests import Request, RequestHandler, RequestMap


@dataclass(frozen=True, kw_only=True)
class JoinMeetingCommand(Request):
    meeting_id: int
    user_id: int
    is_late: bool = field(default=False)


class JoinMeetingCommandHandler(RequestHandler[JoinMeetingCommand, None]):
    def __init__(self, meeting_api) -> None:
        self._meeting_api = meeting_api
        self._events: list[Event] = []

    @property
    def events(self) -> list[Event]:
        return self._events

    async def handle(self, request: JoinMeetingCommand) -> None:
        self._meeting_api.join(request.meeting_id, request.user_id)
        if request.is_late:
            self._meeting_api.warn(request.user_id)


def setup_di() -> DIContainer:
    external_container = Container()

    external_container.bind(
        bind_by_type(
            Dependent(JoinMeetingCommandHandler, scope="request"),
            JoinMeetingCommandHandler,
        )
    )

    container = DIContainer()
    container.attach_external_container(external_container)

    return container


async def main() -> None:
    container = setup_di()

    request_map = RequestMap()
    request_map.bind(JoinMeetingCommand, JoinMeetingCommandHandler)

    event_emitter = EventEmitter(
        event_map=EventMap(), container=container, message_broker=None
    )

    mediator = Mesikei(
        request_map=request_map,
        event_emitter=event_emitter,
        container=container,
    )

    await mediator.send(JoinMeetingCommand(user_id=1, meeting_id=1, is_late=True))


if __name__ == "__main__":
    asyncio.run(main())

Further reading :scroll:

License

This project is licensed under the terms of the MIT license.

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

sikei-0.1.2.tar.gz (18.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sikei-0.1.2-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file sikei-0.1.2.tar.gz.

File metadata

  • Download URL: sikei-0.1.2.tar.gz
  • Upload date:
  • Size: 18.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.5

File hashes

Hashes for sikei-0.1.2.tar.gz
Algorithm Hash digest
SHA256 7c40d5c3d47a4b6bdc289c0096554843b880c43ddec9ed5fde463e8ed66f8457
MD5 bbd4a9c6cb4a78afc5417ecd4d34f5af
BLAKE2b-256 e3801a3b933d55b5745665b53560f1d3fb18b6de4efbbe6b39db8548bad24e44

See more details on using hashes here.

File details

Details for the file sikei-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: sikei-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.5

File hashes

Hashes for sikei-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 af7807bd4fbd94ca67f93a989d5ea8c6620fe11276f87fa40567a04f46697c36
MD5 020d179f417b022178c2b8aeb6ce763d
BLAKE2b-256 a0389cff71fea66ff1c7a39d7b3989bf9bb0b18500193720f724470a319543ab

See more details on using hashes here.

Supported by

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