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.1.tar.gz (41.8 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.1-py3-none-any.whl (49.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dskity-1.0.1.tar.gz
  • Upload date:
  • Size: 41.8 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.1.tar.gz
Algorithm Hash digest
SHA256 d3ea1448d0b02186d1d92cbe71eec79b472d4caed20429fc6e70d320a90396fd
MD5 4cf07e73f04be868468cabd1fa95285b
BLAKE2b-256 3199a8a6cf06a7da9783e51947a0e7808161675b78431348053aae79bbe08ff4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dskity-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 49.4 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 dc1bc3f00ae84b8baabf9382d6cc9b5abf832a025eb15db696d384c55fa6c5d0
MD5 925bff27a8f9ae4d1a7db3c6da7479a0
BLAKE2b-256 c3910817e0c40a15d17af5e701a36809479961e033f74cddc57e8c1521f05f6a

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