A library to create a FastAPI-based OGC API Processes wrapper around existing projects.
Project description
fastprocesses
A library to create a FastAPI-based OGC API Processes wrapper around existing projects. This library simplifies the process of defining and registering processes, making it easy to build and deploy OGC API Processes.
AI was used to create this code.
Version: 0.7.5
Description
fastprocesses is a Python library that provides a simple and efficient way to create OGC API Processes using FastAPI. It allows you to define processes, register them, and expose them through a FastAPI application with minimal effort, following the OGC API Processes 1.0.0 specification.
Features
- OGC API Processes Compliance: Fully implements the OGC API Processes 1.0.0 Core specification
- FastAPI Integration: Leverages FastAPI for building high-performance APIs
- Process Management: Supports both synchronous and asynchronous process execution
- Job Control: Implements job control options (sync-execute, async-execute)
- Output Handling: Supports various output transmission modes (value, reference)
- Result Caching: Built-in Redis-based caching for process results
- Celery Integration: Asynchronous task processing using Celery
- Pydantic Models: Strong type validation for process inputs and outputs
- Logging: Uses
logurufor modern logging with rotation support
Architecture
graph TB
subgraph Client
CLI[Client Request]
end
subgraph FastAPI Application
API[OGCProcessesAPI]
Router[API Router]
PM[ProcessManager]
PR[ProcessRegistry]
end
subgraph Redis
RC[Redis Cache]
RR[Redis Registry]
end
subgraph Process
BP[BaseProcess]
SP[SimpleProcess]
end
subgraph Worker
CW[Celery Worker]
CT[CacheResultTask]
end
%% Client interactions
CLI -->|HTTP Request| API
API -->|Route Request| Router
Router -->|Execute Process| PM
%% Process Manager flow
PM -->|Get Process| PR
PM -->|Check Cache| RC
PM -->|Submit Task| CW
PM -->|Get Result| RC
%% Process Registry
PR -->|Store/Retrieve| RR
PR -.->|Registers| SP
SP -->|Inherits| BP
%% Worker flow
CW -->|Execute| SP
CW -->|Cache Result| CT
CT -->|Store| RC
%% Styling
classDef api fill:#f9f,stroke:#333,stroke-width:2px
classDef cache fill:#bbf,stroke:#333,stroke-width:2px
classDef process fill:#bfb,stroke:#333,stroke-width:2px
classDef worker fill:#fbb,stroke:#333,stroke-width:2px
class API,Router api
class RC,RR cache
class BP,SP process
class CW,CT worker
Usage
- Define a Process: Create a new process by subclassing
BaseProcessand using the@register_processdecorator.
from fastprocesses.core.base_process import BaseProcess
from fastprocesses.core.models import (
ProcessDescription,
ProcessInput,
ProcessJobControlOptions,
ProcessOutput,
ProcessOutputTransmission,
Schema,
)
from fastprocesses.processes.process_registry import register_process
@register_process("simple_process")
class SimpleProcess(BaseProcess):
# Define process description as a class variable
process_description = ProcessDescription(
id="simple_process",
title="Simple Process",
version="1.0.0",
description="A simple example process",
jobControlOptions=[
ProcessJobControlOptions.SYNC_EXECUTE,
ProcessJobControlOptions.ASYNC_EXECUTE
],
outputTransmission=[
ProcessOutputTransmission.VALUE
],
inputs={
"input_text": ProcessInput(
title="Input Text",
description="Text to process",
schema=Schema(
type="string",
minLength=1,
maxLength=1000
)
)
},
outputs={
"output_text": ProcessOutput(
title="Output Text",
description="Processed text",
schema=Schema(
type="string"
)
)
},
keywords=["text", "processing"],
metadata={
"created": "2024-02-19",
"provider": "Example Organization"
}
)
async def execute(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
input_text = inputs["inputs"]["input_text"]
output_text = input_text.upper()
return {"output_text": output_text}
- Create the FastAPI Application:
import uvicorn
from fastprocesses.api.server import OGCProcessesAPI
app = OGCProcessesAPI(
title="Simple Process API",
version="1.0.0",
description="A simple API for running processes"
).get_app()
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
- Start the Services:
Start Redis (required for caching and Celery):
docker run -d -p 6379:6379 redis
Start the Celery worker:
celery -A fastprocesses.worker.celery_app worker
Start the FastAPI application:
poetry run python examples/run_example.py
- Use the API:
Execute a process (async):
curl -X POST "http://localhost:8000/processes/simple_process/execution" \
-H "Content-Type: application/json" \
-d '{
"inputs": {
"input_text": "hello world"
},
"mode": "async"
}'
Execute a process (sync):
curl -X POST "http://localhost:8000/processes/simple_process/execution" \
-H "Content-Type: application/json" \
-d '{
"inputs": {
"input_text": "hello world"
},
"mode": "sync"
}'
API Endpoints
GET /: Landing pageGET /conformance: OGC API conformance declarationGET /processes: List available processesGET /processes/{process_id}: Get process descriptionPOST /processes/{process_id}/execution: Execute a processGET /jobs: List all jobsGET /jobs/{job_id}: Get job statusGET /jobs/{job_id}/results: Get job results
Configuration
The library can be configured using environment variables:
REDIS_CACHE_URL=redis://localhost:6379/0
CELERY_BROKER_URL=redis://localhost:6379/1
CELERY_RESULT_BACKEND=redis://localhost:6379/2
Notes:
How to serialize pydantic models within celery? -> https://benninger.ca/posts/celery-serializer-pydantic/
!IMPORTANT!: Cache hash key is based on original unprocessed inputs always this ensures consistent caching and cache retrieval which does not depend on arbitrary processed data, which can change when the process is updated or changed!
Version Notes
- Version: 0.7.5: added paging to processes and jobs, including limit and offset query params
- 0.5.0: Extended Schema model
- 0.4.0: Added full OGC API Processes 1.0.0 Core compliance
- 0.3.0: Added job control and output transmission options
- 0.2.0: Added Redis caching and Celery integration
- 0.1.0: Initial release with basic process support
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 fastprocesses-0.7.5.tar.gz.
File metadata
- Download URL: fastprocesses-0.7.5.tar.gz
- Upload date:
- Size: 18.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.12.9 Linux/6.8.0-1020-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3da88af8fe3ad31ff74e828c615ddd55dad206dde8977b65bb76ca608b4f8570
|
|
| MD5 |
34b93947d727216f009be332f57b352a
|
|
| BLAKE2b-256 |
e26c4cc24490a2c7b09f387ac75045e46ab0c5cca7618941a4b9489b0564853e
|
File details
Details for the file fastprocesses-0.7.5-py3-none-any.whl.
File metadata
- Download URL: fastprocesses-0.7.5-py3-none-any.whl
- Upload date:
- Size: 21.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.12.9 Linux/6.8.0-1020-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b85b77313326c38a0c00c5c0bfe039d82b2cb81d3cb5e6a4bf83324122f8b2b1
|
|
| MD5 |
12e900f46be64869cc99e244bd0ca9e3
|
|
| BLAKE2b-256 |
25cdcdf586023559cd5eebef3e647ade23eeb11f0eabcc1cff5204101f4f5436
|