A modular application framework with built-in FastAPI integration and pluggable services
Project description
ProcessPype
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 instanceapp.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: 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
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-1.2.0.tar.gz.
File metadata
- Download URL: processpype-1.2.0.tar.gz
- Upload date:
- Size: 172.7 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b71f09247e5692c871f62ac6f131e4ee9285e43302bece942477c12d4d1ee393
|
|
| MD5 |
b927987948705430e01b856e0c49b2c3
|
|
| BLAKE2b-256 |
1e345bf556acc90a743d042d052ab8fff864c5c3671d1317d4f7f88ad1a617e3
|
File details
Details for the file processpype-1.2.0-py3-none-any.whl.
File metadata
- Download URL: processpype-1.2.0-py3-none-any.whl
- Upload date:
- Size: 75.3 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a5f8fb0c14c9846c81e861ee2dd3a9736cc9a3ec72541b4bcd874cc4b97c155
|
|
| MD5 |
47d6a9d0e4f016fd52caa31b8ef87ca9
|
|
| BLAKE2b-256 |
eeae283b0e11cd6262242d429862fa93c59df58c9ceb19f62c48bb2057948d88
|