A library to create ETW apps with the ProcessCube platform.
Project description
ProcessCube ETW Library
Build External Task Workers (ETW) for ProcessCube, featuring health checks, typed handlers, and environment-based configuration.
Installation
uv add processcube-etw-library
Configuration
Environment Variables
The library uses environment variables for configuration. You can set these in your environment or in a .env file in your project root.
| Variable | Default | Description |
|---|---|---|
PROCESSCUBE_ENGINE_URL |
http://localhost:56000 |
URL of the ProcessCube Engine |
PROCESSCUBE_AUTHORITY_URL |
Auto-discovered from engine | URL of the ProcessCube Authority (OAuth server) |
PROCESSCUBE_ETW_CLIENT_ID |
test_etw |
OAuth client ID for the External Task Worker |
PROCESSCUBE_ETW_CLIENT_SECRET |
3ef62eb3-fe49-4c2c-ba6f-73e4d234321b |
OAuth client secret for the External Task Worker |
PROCESSCUBE_ETW_CLIENT_SCOPES |
engine_etw |
OAuth scopes for the External Task Worker |
PROCESSCUBE_MAX_GET_OAUTH_ACCESS_TOKEN_RETRIES |
10 |
Maximum retries for obtaining OAuth access token |
PROCESSCUBE_ETW_LONG_POLLING_TIMEOUT_IN_MS |
60000 |
Long polling timeout in milliseconds for external tasks |
ENVIRONMENT |
development |
Environment mode (development or production) |
Example .env File
PROCESSCUBE_ENGINE_URL=http://localhost:56000
PROCESSCUBE_ETW_CLIENT_ID=my_etw_client
PROCESSCUBE_ETW_CLIENT_SECRET=my_secret_key
PROCESSCUBE_ETW_CLIENT_SCOPES=engine_etw
ENVIRONMENT=production
Extending Settings
You can extend the base settings class to add your own environment variables:
from pydantic import Field
from processcube_etw_library.settings import ETWSettings, load_settings
class MyAppSettings(ETWSettings):
database_url: str = Field(default="sqlite:///app.db")
api_key: str = Field(default="")
# Load settings with your custom class
settings = load_settings(MyAppSettings)
Usage
Start the ETW Application
from processcube_etw_library import new_external_task_worker_app
# Create the application
app = new_external_task_worker_app()
# Run the application
app.run()
Subscribe to External Task Topics
from processcube_etw_library import new_external_task_worker_app
app = new_external_task_worker_app()
def my_handler(task):
# Process the task
result = {"processed": True}
return result
# Subscribe to a topic
app.subscribe_to_external_task_for_topic("my-topic", my_handler)
app.run()
Typed Handlers
Use typed handlers for automatic payload validation with Pydantic models:
from pydantic import BaseModel
from processcube_etw_library import new_external_task_worker_app
class MyInput(BaseModel):
name: str
value: int
class MyOutput(BaseModel):
result: str
app = new_external_task_worker_app()
def my_typed_handler(payload: MyInput) -> MyOutput:
return MyOutput(result=f"Processed {payload.name} with value {payload.value}")
app.subscribe_to_external_task_for_topic_typed("my-typed-topic", my_typed_handler)
app.run()
Add a Custom Health Check
from processcube_etw_library import new_external_task_worker_app
from processcube_etw_library.health import HealthCheck, create_url_health_check
app = new_external_task_worker_app()
# Add a URL-based health check
app.add_health_check(
HealthCheck(
create_url_health_check("http://my-service:8080/health"),
service_name="My Service",
tags=["backend", "api"],
comments=["Checks if My Service is reachable"],
)
)
# Add a custom health check function
def check_database():
# Return True if healthy, False otherwise
try:
# Your database check logic here
return True
except Exception:
return False
app.add_health_check(
HealthCheck(
check_database,
service_name="Database",
tags=["backend", "database"],
comments=["Checks database connectivity"],
)
)
app.run()
Managing Health Checks
# Get all registered health checks
checks = app.get_health_checks()
# Get a specific health check by service name
db_check = app.get_health_check("Database")
# Remove a health check
app.remove_health_check("Database")
Disabling Built-in Health Checks
By default, the library registers health checks for the ProcessCube Engine and Authority. You can disable these:
app = new_external_task_worker_app(built_in_health_checks=False)
Health Endpoints
The application exposes health endpoints at /healthyz and /readyz that return the status of all registered health checks.
To check if the application is running without performing health checks, use /livez.
Server Configuration
The server configuration is determined by the ENVIRONMENT variable:
| Setting | Development | Production |
|---|---|---|
| Host | 0.0.0.0 |
0.0.0.0 |
| Port | 8000 |
8000 |
| Log Level | debug |
warning |
| Access Log | true |
false |
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 processcube_etw_library-2026.3.19.102217.tar.gz.
File metadata
- Download URL: processcube_etw_library-2026.3.19.102217.tar.gz
- Upload date:
- Size: 133.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","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 |
2161446f05e0c06b72c4514a7253cd535406a1db1a4b87f963a934bb7419a0d6
|
|
| MD5 |
95a51181a1263b72ae9da6a41d0ab21f
|
|
| BLAKE2b-256 |
e27e7601150a1e4867ccea66ee829840ae6cfe2656a70059c9af12d16aad982f
|
File details
Details for the file processcube_etw_library-2026.3.19.102217-py3-none-any.whl.
File metadata
- Download URL: processcube_etw_library-2026.3.19.102217-py3-none-any.whl
- Upload date:
- Size: 51.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","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 |
4c485842fbee2b97358d61040a0a417c124d362e7ac06f62ff55edefbe056de0
|
|
| MD5 |
dd1430c110bb80849b6202d306fb71d8
|
|
| BLAKE2b-256 |
cb24ce678217e3c5affb644b9011b67044b60563c0e9aec98d979c24ed7c1936
|