Skip to main content

A modular application framework with built-in FastAPI integration and pluggable services

Project description

ProcessPype

CI codecov Python 3.13+ PyPI License: MIT Docs

A modular application framework for building service-oriented Python applications with built-in FastAPI integration, structured logging, and pluggable services.

Features

  • 🏗️ Service Framework: Define services with a clear lifecycle (initialize, configure, start, stop) and automatic REST API endpoints
  • FastAPI Integration: Each service automatically gets HTTP endpoints for status, start, stop, and configuration
  • 🔧 Configuration Management: YAML file, environment variable, and programmatic configuration with Pydantic models
  • 📦 Pluggable Services: Built-in clock, database, storage, notification, and monitoring services — add your own with a single class
  • 🌐 REST API: Application-level endpoints for service discovery, registration, and lifecycle management
  • 📊 Structured Logging: Integrated Logfire support for production-grade observability
  • 🔒 Type Safe: Fully typed with MyPy strict mode
  • 🧪 Well Tested: Comprehensive test suite with high coverage

Installation

# Using pip
pip install processpype

# Using uv
uv add processpype

Quick Start

import asyncio
from processpype.core.application import Application
from processpype.core.configuration.models import ApplicationConfiguration
from processpype.core.service.service import Service
from processpype.core.service.manager import ServiceManager
from processpype.core.configuration.models import ServiceConfiguration


class GreeterManager(ServiceManager):
    async def start(self) -> None:
        self.logger.info("Greeter ready")

    async def stop(self) -> None:
        self.logger.info("Greeter stopped")


class GreeterService(Service):
    configuration_class = ServiceConfiguration

    def create_manager(self) -> GreeterManager:
        return GreeterManager(self.logger)

    def requires_configuration(self) -> bool:
        return False


async def main() -> None:
    config = ApplicationConfiguration(title="Hello App", port=8080)
    async with Application(config) as app:
        await app.initialize()
        service = app.register_service(GreeterService)
        await app.start_service(service.name)


asyncio.run(main())

Core Components

  • Application: Central orchestrator that manages the FastAPI server, configuration, and service lifecycle

    • Application.create(config_file): Load configuration from YAML and create an instance
    • app.register_service(ServiceClass): Register and wire a service into the application
    • app.start_service(name) / app.stop_service(name): Lifecycle control
  • Service: Abstract base class for all services — implement create_manager() and optionally create_router()

    • Automatic REST endpoints: GET /services/{name}, POST /services/{name}/start, POST /services/{name}/stop
    • Built-in state machine: INITIALIZED → CONFIGURED → STARTING → RUNNING → STOPPING → STOPPED
  • ServiceManager: Handles business logic for a service — implement start() and stop()

  • Configuration: Pydantic-validated models loaded from YAML files, environment variables, or kwargs

Documentation

Full documentation is available at gianlucapagliara.github.io/processpype.

Development

ProcessPype uses uv for dependency management and packaging:

# Install dependencies
uv sync

# Run tests
uv run pytest

# Run type checks
uv run mypy processpype

# Run linting
uv run ruff check .

# Run pre-commit hooks
uv run pre-commit run --all-files

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

processpype-1.3.0.tar.gz (106.3 kB view details)

Uploaded Source

Built Distribution

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

processpype-1.3.0-py3-none-any.whl (27.9 kB view details)

Uploaded Python 3

File details

Details for the file processpype-1.3.0.tar.gz.

File metadata

  • Download URL: processpype-1.3.0.tar.gz
  • Upload date:
  • Size: 106.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","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 processpype-1.3.0.tar.gz
Algorithm Hash digest
SHA256 bb4b43bc20a429d2b4f77079e91102bfb5bbbea99e0b6fe7321d9257db89c7ca
MD5 e3b2058bf4a51afb80de5905b157b509
BLAKE2b-256 15ff762b6056d850f65da445cea7b7f5fbbd29620e9bbc12ccf6577ef63a24d7

See more details on using hashes here.

File details

Details for the file processpype-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: processpype-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 27.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","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 processpype-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e252d4a9eef68e9d1fd872a5d3c79e1fd8f7ea0a283bcd0e2a24fcb5f27be592
MD5 c06fde33049063d70df889c2fcab4bf6
BLAKE2b-256 d21aa7d8fb72fda70a8b055a131f69448834fbb52a286b883ab4af55d7d0d71e

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