A modular process environment framework: observability, server, and services — all driven by YAML config
Project description
ProcessPype
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 aProcessPypeConfigapp.register_service(ServiceClass): Register and wire a service into the applicationapp.start_service(name)/app.stop_service(name): Lifecycle control
-
Service: Abstract base class for all services — implement
create_manager()and optionallycreate_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
- Automatic REST endpoints:
-
ServiceManager: Handles business logic for a service — implement
start()andstop() -
Configuration: Hierarchical
ProcessPypeConfigwithapp,server, andloggingsections — 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
746d9763ca6d347e9bb481307da4c97b99a2fab7e901fed9cb74f2937feea6a4
|
|
| MD5 |
a1e6d8ed19f9810628f2ab5d1c4d0c2f
|
|
| BLAKE2b-256 |
4be0c558088518fd742b03f83729725515b399ddf143421057e814542b2c51eb
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21310f788c9a41e784fb400a9725ff0fa3e2c06685d62d54ec87d73b81599f74
|
|
| MD5 |
fa7cdc4b2e9b882d3420784d5b8351bc
|
|
| BLAKE2b-256 |
6d235e9ca83d67b8d71cc49008d967996ba473298cdcbb90c6bfe00c6a14e1b4
|