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.2.tar.gz (45.7 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.2-py3-none-any.whl (53.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dskity-1.0.2.tar.gz
  • Upload date:
  • Size: 45.7 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.2.tar.gz
Algorithm Hash digest
SHA256 2558bd3f7d6b8a0f1e2192d88bc8c52b80278e6320d32390f3248f8212b701d6
MD5 31dc662ed4bb5dae815331d70701ab8f
BLAKE2b-256 407776dd790a0b5af83bda178c0f097b73edd729185b745e61379a79b11a4625

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dskity-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 53.5 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6563667c3d568064240226586fc2a078d4b48092fff2cbfadb3ad35ab60120fe
MD5 b13c71af98e02f48a13a86e7288fa9fe
BLAKE2b-256 0978ddab7528fe3eea77535fe2c66907ecfecf956def3e01e4adb9e994a81fb9

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