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.0.tar.gz (41.4 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.0-py3-none-any.whl (48.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dskity-1.0.0.tar.gz
  • Upload date:
  • Size: 41.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","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.0.tar.gz
Algorithm Hash digest
SHA256 71442937c4f10b2aa86c06ecbec135679176dee76defe77bea95fa770cb2b550
MD5 21fe4c541384bef0dd8b51bb8627180a
BLAKE2b-256 4f5587c746080e5cb1fdcefb09dc6cc054719d191f93a6c0f5afeaa58a6112e0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dskity-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 48.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 da71b68673ccc83ba1498de0ef1634c021089d5b0d2217fae46ba7874bdad8e8
MD5 1502a9f483229f1b691ae78a9412f56b
BLAKE2b-256 765e68209c57b88c9fb2404997fb795da302dc4bafc918891346ebe3a2068ef0

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