Skip to main content

Rafay workflow handler Python function SDK

Project description

Environment Manager Python Function SDK

SDK for building Python functions invoked by the Environment Manager workflow engine. It handles HTTP serving (FastAPI), request metadata, and event context so you can focus on your function logic.

Installation

pip install python_sdk_rafay_workflow

Or add the package to your project (e.g. from a local or private repo). For a working example, see examples/python/cloudformation.

Quick start

Implement a handler and run the SDK:

import logging
from python_sdk_rafay_workflow import serve_function

def handle(logger: logging.Logger, request: dict) -> dict:
    logger.info("request received")
    return {"result": "ok"}

if __name__ == "__main__":
    serve_function(handle)

Handler and request/response

Your handler has the signature:

def handle(logger: logging.Logger, request: dict) -> dict:
    ...

Handlers can be sync or async (async def handle(logger, request): ...).

  • request is a dict containing the JSON body plus a metadata key filled from incoming headers: activity ID, environment ID/name, organization ID, project ID, state store URL/token, and event source, event source name, and event type. This metadata drives EventDetails below.
  • response is a dict returned as JSON under a data key in the HTTP response.

EventDetails

Each invocation can carry event metadata (source, source name, and event type). EventDetails is the typed view of that metadata so you can branch or read names without parsing headers yourself.

Obtaining EventDetails

from python_sdk_rafay_workflow import EventDetails

event = EventDetails(request)

EventDetails(request) takes the handler’s request dict and populates source, source_name, and type from request["metadata"].

Fields

Field Type Description
source str Event source (e.g. workload, action).
source_name str Name of the source resource.
type str Event type (deploy, destroy, force-destroy).

Event types

Use the EventType enum for comparisons and string conversion:

Member String value
EventType.DEPLOY "deploy"
EventType.DESTROY "destroy"
EventType.FORCE_DESTROY "force-destroy"

Use str(EventType.DEPLOY) or EventType.DEPLOY.value to get the string.

Sources

The engine may send events from these sources (used by the helpers below): "action", "schedules", "workload", "environment".

Convenience helpers

Source checks: return True when the event’s source matches.

Method Source
is_action() action
is_schedules() schedules
is_workload() workload
(environment) use combined helpers below

Name getters: return (str, bool) — the source name and True only when the event’s source matches.

Method Source
get_action_name() action
get_schedules_name() schedules
get_workload_name() workload
(environment) use combined helpers below

Type checks: is_deploy(), is_destroy(), is_force_destroy(), get_type_as_string().

Combined (source + type):

Method Condition
is_workload_deploy() source is workload and type deploy
is_workload_destroy() source is workload and type destroy or force-destroy
is_environment_deploy() source is environment and type deploy
is_environment_destroy() source is environment and type destroy or force-destroy

Example usage

from python_sdk_rafay_workflow import EventDetails, EventType

def handle(logger, request):
    event = EventDetails(request)
    # create a variable called action with default value "deploy"
    action = str(EventType.DEPLOY)
    # if action is the source of this event, then get the action name
    name, ok = event.get_action_name()
    if ok:
        action = name
    if event.is_workload_deploy():
        name, _ = event.get_workload_name()
        # deploy workload "name"
    if event.is_environment_destroy():
        # teardown environment
    return {"ok": True}

Errors

Raise the SDK exception types from your handler; the SDK encodes them as a structured JSON response with an error code so the engine can retry or handle appropriately:

Exception Use when
FailedException(message) Permanent failure; do not retry.
TransientException(message) Temporary failure; engine may retry.
ExecuteAgainException(message, **data) Ask engine to re-invoke (e.g. with updated data).

Example:

from python_sdk_rafay_workflow import FailedException

def handle(logger, request):
    if not request.get("required_field"):
        raise FailedException("required_field is required")
    return {"result": "ok"}

Configuration

Call serve_function with optional arguments:

Argument Default Description
handler (required) Your function handler.
host '0.0.0.0' Bind address.
port 5000 HTTP port.

Additional behavior is controlled via environment variables (e.g. GUNICORN_WORKERS, LOG_FLUSH_TIMEOUT, skip_tls_verify). See the package source for the full list.

Example

The examples/python/cloudformation directory contains a CloudFormation-based function that uses the SDK: handler signature, request parsing, and FailedException. You can use EventDetails(request) there to branch on event source and type.

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

rafay_workflow_sdk-0.0.34rc2.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

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

rafay_workflow_sdk-0.0.34rc2-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file rafay_workflow_sdk-0.0.34rc2.tar.gz.

File metadata

  • Download URL: rafay_workflow_sdk-0.0.34rc2.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for rafay_workflow_sdk-0.0.34rc2.tar.gz
Algorithm Hash digest
SHA256 c2fe8f90c2b009473787c53a9a5ae8b0eb7c6664ab2d3a15f89947deae661a7f
MD5 cab45e1552bb93a3e46cc1d92d94effa
BLAKE2b-256 699c01c191e42a81d64aaa157201dee733fc6a332637b7b47abe4d9435014866

See more details on using hashes here.

File details

Details for the file rafay_workflow_sdk-0.0.34rc2-py3-none-any.whl.

File metadata

File hashes

Hashes for rafay_workflow_sdk-0.0.34rc2-py3-none-any.whl
Algorithm Hash digest
SHA256 f685095bd96a5c784eaba3a0c5c5867383937e5526f544b4150246b0eb352f85
MD5 c92650e143e7fbd3396de719c21520b5
BLAKE2b-256 beae75d68c9dd6cae872a4caf9e16732200ecf1ae7d6a6b16dd83b577ce9a9e4

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