Modular Application (Plugin System) API
Project description
DSkity
A small, modular Python framework for building services with pluggable transports and modules.
Key features:
- Lightweight module system with a single
TransportClientsobject (HTTP, gRPC, MQTT). - Simple key-value backends (in-memory, Redis, Consul) with a unified interface.
- FastAPI-based HTTP transport and optional gRPC/MQTT clients.
- CI workflow with PyPI publishing support via GitHub Actions and OIDC.
Table of Contents
- Overview
- Getting Started
- Configuration
- Running Locally
- Testing
- CI & Publishing
- Contributing
Overview
DSkity provides a minimal foundation to register independent modules that receive a single TransportClients object containing references to available transport clients (HTTP app, gRPC client, MQTT client). The design keeps optional dependencies lazy-loaded and avoids hard runtime requirements for gRPC or MQTT unless they are used.
Getting Started
Prerequisites:
- Python 3.11+ (project tests are configured for modern Python versions)
- Optional: Redis or Consul if you plan to use those KV backends
Install project dependencies (development):
python -m pip install --upgrade pip
pip install -e .[dev]
Configuration
Configuration is handled via the DSkitySettings pydantic settings model in src/dskity/config. You can provide a YAML or environment variables to configure transports and KV backends.
modules:
service1:
enabled: true
database:
url: "sqlite:///:memory:"
pool_size: 10
max_overflow: 20
pool_pre_ping: true
service2:
enabled: false
service3:
enabled: true
database:
url: "postgresql+psycopg2://user:pass@127.0.0.1:5432/service3"
You can also use envioriments variables to set values:
DSKITY_MODULES_SERVICE3_DATABASE_URL="postgresql+psycopg2://user:superpass@127.0.0.1:5432/service3"
By default, those are the default settings.
"advertise_url": "http://0.0.0.0:8000"
"port": "8000"
"common":
"advertise_url": "http://127.0.0.1:8000"
"internal_base_url": "http://127.0.0.1:8000"
"registry":
"enabled": true
"heartbeat_interval_seconds": 30
"ttl_seconds": 60
"config": "./settings.yaml"
"host": "0.0.0.0"
"kv":
"consul":
"key_prefix": "dskity"
"url": "http://127.0.0.1:8500"
"verify": true
"default_ttl_seconds": 60
"redis":
"key_prefix": "dskity"
"url": "redis://127.0.0.1:6379/0"
"ring":
"vnodes": 64
"store": "inmemory"
"modules":
"modules_search_paths":
-"modules"
Running Locally
Run the FastAPI app (when present) or import dskity.bootstrap to construct an application instance.
Example (development):
dskity
Testing
Run the test suite with pytest:
pytest -q
Module API
Modules must implement a register(self, clients: TransportClients, config: DSkitySettings | dict) -> None method. Use clients.http to access the FastAPI app (if available), clients.grpc for the gRPC client, and clients.mqtt for MQTT.
Contributing
Contributions are welcome. Typical workflow:
git checkout -b feature/my-change
pytest
git push --set-upstream origin feature/my-change
Open a pull request for review. Please follow existing code style and update tests when adding or changing behavior.
License
See pyproject.toml / PKG-INFO for license information.
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
File details
Details for the file dskity-0.1.1.tar.gz.
File metadata
- Download URL: dskity-0.1.1.tar.gz
- Upload date:
- Size: 41.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8858d51604ab2992af83e2c93d53c76c5177f805507272b756e4ffc526d266a
|
|
| MD5 |
da40188af343d85ff4d6a6dbc1cb9e31
|
|
| BLAKE2b-256 |
b9b6e823d0118d4cbb73f24b2b31f7de9ea184e7b4b4aaefe74cde1c0d43c744
|