Skip to main content

Small framework for Temporal development

Project description

Temporal-boost

social_preview

Python 3.10+ PyPI MIT

Documentation is available on GitHub Pages

Small framework based on temporalio/sdk-python - create Temporal microservices as fast as you can

Requirements

  • Python >= 3.10

Features

  • Create Temporal workers with FastAPI-style
  • Add CRON workers with one code line
  • Append ASGI (ex. FastAPI) workers like Temporal
  • Auto documentation with web UI (like SwaggerUI in FastAPI)
  • Build-in logger and OTLP tracer

Installation

Install core:

pip install temporal-boost
# or
poetry add temporal-boost

Optional extras:

  • faststream integration: pip install "temporal-boost[faststream]" or poetry add temporal-boost -E faststream
  • uvicorn ASGI: pip install "temporal-boost[uvicorn]" or poetry add temporal-boost -E uvicorn
  • hypercorn ASGI: pip install "temporal-boost[hypercorn]" or poetry add temporal-boost -E hypercorn
  • granian ASGI: pip install "temporal-boost[granian]" or poetry add temporal-boost -E granian

Quick start

from temporal_boost import BoostApp
from temporalio import activity
from temporalio import workflow

# Create `BoostApp` object
app = BoostApp()


# Describe your activities/workflows
@activity.defn(name="test_boost_activity_1")
async def test_boost_activity_1(foo: str, bar: str) -> str:
    app.logger.info("This is built-in logger")
    return f"1_{foo}{bar}"


@activity.defn(name="test_boost_activity_2")
async def test_boost_activity_2(foo: str, bar: str) -> str:
    return f"2_{foo}{bar}"


@workflow.defn(name="TestCronWorkflow", sandboxed=False)
class TestCronWorkflow:
    @workflow.run
    async def run(self) -> None:
        app.logger.warning("With is cron workflow")
        return None


# Add async workers to your app (FastAPI style)

app.add_worker(
    "worker_1",
    "task_q_1",
    activities=[test_boost_activity_1],
    metrics_endpoint="0.0.0.0:9000"
)

app.add_worker(
    "worker_2",
    "task_q_2",
    activities=[test_boost_activity_2]
)

# Example of CRON worker
app.add_worker(
    "test_cron",
    "task_q_3",
    workflows=[TestCronWorkflow],
    cron_schedule="* * * * *",
    cron_runner=TestCronWorkflow.run
)

# Run your app and start workers with CLI
app.run()
python3 main.py

Usage: main.py [OPTIONS] COMMAND [ARGS]...

# Options:
#   --install-completion [bash|zsh|fish|powershell|pwsh]
#                                   Install completion for the specified shell.
#   --show-completion [bash|zsh|fish|powershell|pwsh]
#                                   Show completion for the specified shell, to
#                                   copy it or customize the installation.
#   --help                          Show this message and exit.

Commands:
  cron
  run
python3 main.py run

Usage: main.py run [OPTIONS] COMMAND [ARGS]...

# Options:
#   --help  Show this message and exit.

Commands:
  all
  test_cron
  worker_1
  worker_2
python3 main.py run worker_1

# 2023-09-20T21:25:12 | INFO     | Worker worker_1 was registered in CLI
# 2023-09-20T21:25:12 | INFO     | Worker worker_2 was registered in CLI
# 2023-09-20T21:25:12 | INFO     | Worker test_cron was registered in CLI
# 2023-09-20T21:25:12 | INFO     | Worker worker_1 started on task_q_1 queue

Environment variables

Core configuration is managed via environment variables (see temporal_boost/temporal/config.py):

  • TEMPORAL_TARGET_HOST (default: localhost:7233)
  • TEMPORAL_NAMESPACE (default: default)
  • TEMPORAL_TLS (default: false)
  • TEMPORAL_API_KEY (optional)
  • TEMPORAL_IDENTITY (optional)
  • TEMPORAL_USE_PYDANTIC_DATA_CONVERTER (default: false)

Worker tuning:

  • TEMPORAL_MAX_CONCURRENT_WORKFLOW_TASKS (default: 300)
  • TEMPORAL_MAX_CONCURRENT_ACTIVITIES (default: 300)
  • TEMPORAL_MAX_CONCURRENT_LOCAL_ACTIVITIES (default: 100)
  • TEMPORAL_MAX_WORKFLOW_TASK_POLLS (default: 10)
  • TEMPORAL_MAX_ACTIVITY_TASK_POLLS (default: 10)
  • TEMPORAL_NONSTICKY_TO_STICKY_RATIO (default: 0.2)
  • TEMPORAL_GRACEFUL_SHUTDOWN_TIMEOUT (seconds, default: 30)

Telemetry (Prometheus runtime):

  • TEMPORAL_PROMETHEUS_BIND_ADDRESS (e.g. 0.0.0.0:8801)
  • TEMPORAL_PROMETHEUS_COUNTERS_TOTAL_SUFFIX (default: false)
  • TEMPORAL_PROMETHEUS_UNIT_SUFFIX (default: false)
  • TEMPORAL_PROMETHEUS_DURATIONS_AS_SECONDS (default: false)

Example:

export TEMPORAL_TARGET_HOST=temporal.example.com:7233
export TEMPORAL_NAMESPACE=production
export TEMPORAL_USE_PYDANTIC_DATA_CONVERTER=true

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

temporal_boost-2.0.2.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

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

temporal_boost-2.0.2-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file temporal_boost-2.0.2.tar.gz.

File metadata

  • Download URL: temporal_boost-2.0.2.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.0 Linux/6.11.0-1018-azure

File hashes

Hashes for temporal_boost-2.0.2.tar.gz
Algorithm Hash digest
SHA256 5b5fa9f23099378c75ff15fc05d61012faed3566471e48499bfb994c7edd8095
MD5 87e8dcc31129fc8b51c8a509d6aef628
BLAKE2b-256 0aea37154bc49c66cb0ed53174829292c2cdc648e08395862d4a75d89585a59c

See more details on using hashes here.

File details

Details for the file temporal_boost-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: temporal_boost-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 22.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.0 Linux/6.11.0-1018-azure

File hashes

Hashes for temporal_boost-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ddedb97f75ffa376fd4aff18dcce90f874d61381c92af353c8d64212c4b4aa0d
MD5 21766243912ead5cf47785c19c01d90a
BLAKE2b-256 4ae1ca80a8b57be8e9123c50fcf1baee5825818ef4c9edf76ed5b56c8a5b066d

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