Skip to main content

A modular process environment framework: observability, server, and services — all driven by YAML config

Project description

ProcessPype

CI codecov Python 3.13+ PyPI License: MIT Docs

A modular application framework for building service-oriented Python applications with FastAPI integration, structured logging, and a clear service lifecycle.

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
  • Pure Framework: No built-in services — provides the infrastructure for building your own with clear patterns and examples
  • REST API: Application-level endpoints for service discovery, registration, and lifecycle management
  • Observability: Structured logging with multiple formatters (JSON, color, text), log redaction, and OpenTelemetry tracing support (Logfire, OTLP gRPC/HTTP, console)
  • 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 import Application, ProcessPypeConfig, Service, ServiceManager, 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 = ProcessPypeConfig(
        app={"title": "Hello App"},
        server={"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(config): Create an instance with a ProcessPypeConfig
    • 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: Hierarchical ProcessPypeConfig with app, server, and logging sections — Pydantic-validated, loadable 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-2.1.1.tar.gz (170.4 kB view details)

Uploaded Source

Built Distribution

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

processpype-2.1.1-py3-none-any.whl (56.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: processpype-2.1.1.tar.gz
  • Upload date:
  • Size: 170.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","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-2.1.1.tar.gz
Algorithm Hash digest
SHA256 746d9763ca6d347e9bb481307da4c97b99a2fab7e901fed9cb74f2937feea6a4
MD5 a1e6d8ed19f9810628f2ab5d1c4d0c2f
BLAKE2b-256 4be0c558088518fd742b03f83729725515b399ddf143421057e814542b2c51eb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: processpype-2.1.1-py3-none-any.whl
  • Upload date:
  • Size: 56.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","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-2.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 21310f788c9a41e784fb400a9725ff0fa3e2c06685d62d54ec87d73b81599f74
MD5 fa7cdc4b2e9b882d3420784d5b8351bc
BLAKE2b-256 6d235e9ca83d67b8d71cc49008d967996ba473298cdcbb90c6bfe00c6a14e1b4

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