Skip to main content

pyawe

Python client library for the AWE (Advanced Workflow Engine) API.

Documentation

Installation

pip install pyawe

Quick start

from pyawe import AweClient

client = AweClient(
    api_url="http://localhost:8080",
    auth_url="http://localhost:8081",   # ullav-user-management service
)
client.login(email="user@example.com", password="secret")

# Workflows
workflows = client.workflows.list()
wf = client.workflows.create("Q1 Onboarding", is_template=False)
detail = client.workflows.get(wf.id)          # WorkflowWithTasks

# Tasks
task = client.tasks.create("Review docs", workflow_id=wf.id, is_start=True)
client.tasks.update(task.id, status="In Progress")
mine = client.tasks.list_mine()               # tasks assigned to me / my roles

# Jobs
job = client.jobs.create("Q1 Campaign")
client.jobs.clone_workflow(job.id, workflow_template_id)

# Automated tasks
client.task_scripts.upsert(
    task.id,
    script_type="python",
    script_body="print('hello')",
    timeout_secs=60,
)
runs = client.task_runs.list(task.id)

Example: list your tasks

Print every task assigned to the authenticated user, along with its status and the workflow (and job, if any) it belongs to:

import os
from pyawe import AweClient

client = AweClient(
    api_url=os.environ["AWE_API_URL"],
    auth_url=os.environ.get("AWE_AUTH_URL", os.environ["AWE_API_URL"]),
)
client.login(email=os.environ["AWE_EMAIL"], password=os.environ["AWE_PASSWORD"])

for twc in client.tasks.list_mine():
    context = twc.workflow_name
    if twc.job_name:
        context = f"{twc.job_name} / {twc.workflow_name}"
    print(f"[{twc.task.status}]  {twc.task.name}  ({context})")

A runnable version of this script is at examples/list_my_tasks.py.

Authentication

AweClient authenticates against the ullav-user-management service, which issues the JWT accepted by the AWE server.

  • api_url — AWE server base URL (e.g. http://awe-server:8080)
  • auth_url — auth service base URL (e.g. http://ullav-user-management:8081); omit if both services are behind the same proxy

Call client.login(email, password) before any other method. Tokens expire according to the server's configuration; call login() again to refresh.

Resource clients

Attribute Resource
client.workflows Workflow CRUD, merge, duplicate, duplicate-of, team
client.tasks Task CRUD, mine, decide, rework
client.task_links Link create/delete, next/previous tasks, data bindings
client.task_ports Port spec CRUD, input/output values, workflow-wide ports
client.task_scripts Automated task script upsert/delete
client.task_secrets Task secret value set/clear
client.task_runs Execution run history
client.task_team_roles Team-role assignment
client.jobs Job CRUD, clone workflow, team, workflow allocations
client.projects Project CRUD
client.execution_profiles Kubernetes execution profile CRUD
client.loop_blocks Loop block CRUD
client.task_history Task status transition history
client.connections Reusable credential ("connection profile") CRUD, secret set, test, MCP tool listing
client.work_items Reusable task template CRUD, ports/script/checks/branches, instantiate
client.checkpoint_checks Checkpoint check CRUD, manual verify, script run
client.scheduled_scripts Cron-scheduled script CRUD, trigger, run history
client.ai_chat_sessions The authenticated user's own AI chat session/message history

Removed in this version: client.notes, client.note_folders, and client.idea_boards — awe-server has dropped the Notes/Note Folders/Idea Boards HTTP surface entirely; that functionality now lives in a separate service (tack-server). This is a breaking change if you used any of them.

Error handling

from pyawe import AweAuthError, AweNotFoundError, AweValidationError

try:
    wf = client.workflows.get("non-existent-id")
except AweNotFoundError:
    print("not found")
except AweAuthError:
    client.login(email, password)  # token expired — re-authenticate
except AweValidationError as e:
    print("bad request:", e)
Exception HTTP status
AweAuthError 401 / 403, or login() not called
AweNotFoundError 404
AweValidationError 400
AweServerError 5xx
AweError base class

Status values

Use the Status and ScheduleStatus enumerations or plain strings:

from pyawe import Status, ScheduleStatus

client.tasks.update(task_id, status=Status.IN_PROGRESS)
client.tasks.update(task_id, status="In Progress")  # equivalent

Licence

MIT

Metadata

Release files for pyawe 26.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyawe 26.4.0
File Size Uploaded Provenance
pyawe-26.4.0.tar.gz 52.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pyawe 26.4.0
File Interpreter ABI Platform
pyawe-26.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 87.5 kB

Release files / pyawe-26.4.0.tar.gz

Download URL pyawe-26.4.0.tar.gz
Size 52.9 kB
Tags Source
SHA-256 checksum
How to use checksums
ca3617122dab631271d062144ba41e136b2a8161842aa09833a933277d7996d0
BLAKE2b-256 checksum
How to use checksums
9360e8092dd6de9d99b226fb102a6b73ae8f40b5950555cafc9c51fceab57744
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / pyawe-26.4.0-py3-none-any.whl

Download URL pyawe-26.4.0-py3-none-any.whl
Size 34.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
25fc00d6d69697289f2c2286b0dba7aa92e69c7e2d1b4e8c86b48ddcbfb36608
BLAKE2b-256 checksum
How to use checksums
12d6a3e42029b54bfdbf1d3dec8aea3570cf022e8f184d501108c607a7744873
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Security for pyawe 26.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page