SamWarden/didiator
50.0
Weak · 20 September 2026
879
lines of production code
Python
primary language
4
measurements over time
What this system is
Didiator is a Python library that implements the Mediator pattern to manage command and event dispatching within applications. It provides a structured way to handle requests and events through typed interfaces, supporting both synchronous and asynchronous execution. The system integrates with dependency injection containers like Dishka and the \di\ library, allowing for flexible object graph management and scope handling. Additionally, it includes a middleware infrastructure for cross-cutting concerns such as logging, and offers examples for integration with web and bot frameworks.
Features
Add DiBuilder implementation for dependency injection
Added a new \DiBuilderImpl\ class in \didiator/utils/di\_builder.py\ that implements the \DiBuilder\ interface, providing concrete methods for binding hooks, entering scopes, solving dependencies, and executing async calls using the \di\ library. The implementation includes a \copy\ method to duplicate the builder state and initializes internal state structures (such as \di\_scopes\ and \\_solved\_dependencies\) as empty lists and dictionaries by default.
didiator/utils · high confidence
Add middleware infrastructure and built-in logging support
The didiator library now includes a middleware system that allows wrapping request handlers with custom logic. This change introduces a base \Middleware\ protocol and a \wrap\_middleware\ utility for composing middleware chains. Additionally, it provides a \LoggingMiddleware\ that automatically logs the execution of Commands, Queries, and Events, including request details and results, configurable via a logger instance or name and log level.
didiator/middlewares · high confidence
Added copy method to DiBuilder interface
The DiBuilder protocol in the interface utilities now includes a copy method, allowing users to create a duplicate instance of the dependency injection builder. This addition supports cloning the builder's state and configuration for isolated usage scenarios.
didiator/interface/utils · high confidence
Initial project configuration and documentation
This release establishes the foundational development environment and documentation for the didiator library. It introduces configuration files for linting and type checking (flake8, pylint, mypy) and test execution (pytest), alongside a Makefile to standardize installation, linting, and testing workflows. The project also includes a README with usage examples for the Mediator pattern, DI integration, and event publishing, as well as an MIT license file.
(repo-wide) · high confidence
Initial release of Didiator v0.4.0 with Mediator and Dishka integration
This entry introduces the Didiator library (v0.4.0), providing a mediator pattern implementation for handling commands and events. Users can now utilize \MediatorImpl\ to send requests and publish events, with built-in support for dependency injection via the \DishkaIoc\ adapter. The package exposes core interfaces such as \Request\, \Event\, \Handler\, and \EventHandler\, and includes type hints (\py.typed\) for static analysis.
didiator · high confidence
Introduce didiator interface package with Mediator, entities, and exceptions
The new \didiator/interface\ package defines the core abstractions for the library. It introduces the \Mediator\ protocol with methods for registering request and event handlers, and for sending requests or publishing events. It also provides base entity protocols (\Request\ and \Event\), a handler type definition, an \Ioc\ protocol for dependency injection integration, and specific exception classes (\MediatorError\, \HandlerNotFound\) to handle mediation errors.
didiator/interface · high confidence
Introduce structured handler interfaces for requests and events
The library now exposes explicit protocol-based interfaces for handling commands and events. Users can define request handlers via the new \Handler\ protocol and event handlers via the \EventHandler\ protocol, both available in the \didiator.interface.handlers\ module. Additionally, an \EventListener\ class is provided to bind specific event types to their corresponding handlers, enabling more type-safe and structured event dispatching.
didiator/interface/handlers · high confidence
New didiator usage examples for aiogram, aiohttp, and Dishka
Added three new example scripts in the \examples/\ directory demonstrating how to integrate the \didiator\ library with different frameworks and dependency injection containers. The \aiogram\_with\_sqlalchemy.py\ example shows integration with the aiogram Telegram bot framework and SQLAlchemy for database operations. The \aiohttp\_with\_sqlalchemy.py\ example demonstrates similar patterns using the aiohttp web framework. The \simple.py\ example illustrates usage with the Dishka dependency injection container, providing a minimal setup for command handling.
examples · high confidence
Test coverage
Added integration tests for the DI library; Added mock middleware implementations for testing; Added test infrastructure for command and query dispatchers; Added unit tests for the didiator package.
Dependencies
Initial project setup with dependency injection support
The project is initialized with a new \pyproject.toml\ and \poetry.lock\ file, establishing the build system and dependencies. The library, named \didiator\, now supports two dependency injection backends: \di\ (version 0.79.2) and \dishka\ (version 1.3.0), both available as optional extras. Development tooling includes \pytest\, \pytest-asyncio\, \pylint\, \mypy\, and \flake8\ for testing and linting.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 46 → 50 (+3.7)
- Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 99 → 99 (+0.3)
- Architecture 69 → 69 (+0.0)
- Maturity 41 → 43 (+1.4)
- Readiness 26 → 33 (+7.7)
- Security 100 → 97 (-3.3)
- Domain Modelling 100 → 100 (+0.0)
Resolved (8)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — no supported dependency manifest was read
- Duplicated block (11 lines × 2) (examples/aiogram_with_sqlalchemy.py)
- Duplicated block (7 lines × 2) (examples/aiogram_with_sqlalchemy.py)
- Duplicated block (8 lines × 2) (examples/aiogram_with_sqlalchemy.py)
- No exposed public API
- Test reliability not included
- single-maintainer — knowledge-concentration (bus factor) risk
New (9)
- Critical CVE: [GHSA redacted] (poetry.lock)
- Dependency hygiene PARTLY measured — Python dependencies read, no exact pin to grade for currency
- Documentation: no architecture or design documentation (README.rst)
- Duplicated block (10 lines × 2) (examples/aiogram_with_sqlalchemy.py)
- Duplicated block (7 lines × 2) (examples/aiogram_with_sqlalchemy.py)
- Duplicated block (7 lines × 2) (examples/aiogram_with_sqlalchemy.py)
- Duplicated block (7 lines × 2) (examples/aiogram_with_sqlalchemy.py)
- Medium CVE: [GHSA redacted] (poetry.lock)
- Medium CVE: [GHSA redacted] (poetry.lock)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
SamWarden/didiator was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 438cf5b07dab0c1d2446ddf89b82ef7b1d9b9d87 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.