Skip to main content

Modular Application (Plugin System) API

Project description

DSkity

Build Release PyPI Python Versions License Issues Codecov

A small, modular Python framework for building services with pluggable transports and modules.

Key features:

  • Lightweight module system with a single TransportClients object (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


Download files

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

Source Distribution

dskity-1.0.3.tar.gz (46.5 kB view details)

Uploaded Source

Built Distribution

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

dskity-1.0.3-py3-none-any.whl (54.3 kB view details)

Uploaded Python 3

File details

Details for the file dskity-1.0.3.tar.gz.

File metadata

  • Download URL: dskity-1.0.3.tar.gz
  • Upload date:
  • Size: 46.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dskity-1.0.3.tar.gz
Algorithm Hash digest
SHA256 2efcbbf791b27dd4254ad71d6c02dcf4a22c2a40d6b5d19e99dcc25d40de6e81
MD5 ec6eca87e379b096acbf4a44a52bbf57
BLAKE2b-256 c6eacf1b02237c28bbc22bb29f045cfb9ff1797b0751c9ee70a316d12882b6bd

See more details on using hashes here.

File details

Details for the file dskity-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: dskity-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 54.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dskity-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 707bf2e585591657906dca7df5b072e306afc0a8520102f783939175c87ac217
MD5 deabc9effbe4698ed32974e0f4090892
BLAKE2b-256 e337c276fba6536d6aa6b66a628f2a60f61791ff7ff1d732cd9a3297f5e37373

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