Skip to main content

Drop-in replacement for robocorp-workitems with broader applicability

Project description

actions-work-items

A drop-in replacement for robocorp-workitems with broader applicability beyond robots.

Overview

actions-work-items provides work item management for producer-consumer workflows. It enables:

  • Robots/Automations: Traditional RPA producer-consumer patterns
  • Microservices: Async job queues with persistent state
  • ETL Pipelines: Data processing with tracking and error handling
  • Action Server Integration: Native REST API for work items

Installation

pip install actions-work-items

Or with poetry:

poetry add actions-work-items

Quick Start

robocorp-workitems Compatible API

from actions.work_items import inputs, outputs

# Process work items using singleton pattern
for item in inputs:
    data = item.payload
    # Process...
    outputs.create({"result": "processed"})
    item.done()

Context Manager Pattern (Recommended)

from actions.work_items import inputs, outputs, BusinessException

for item in inputs:
    with item:  # Auto-release on exit
        if not item.payload.get("required_field"):
            raise BusinessException("Missing required field")

        # Process item...
        outputs.create({"status": "success"})
        # item.done() called automatically

Explicit Initialization

from actions.work_items import init, create_adapter, inputs, outputs

# Create specific adapter
adapter = create_adapter("sqlite", db_path="./my-workitems.db")
init(adapter)

for item in inputs:
    # Process...

Adapters

SQLiteAdapter (Default)

Persistent local storage using SQLite database.

from actions.work_items import SQLiteAdapter, init

adapter = SQLiteAdapter(
    db_path="./workitems.db",
    queue_name="default",
    files_dir="./work_item_files",
)
init(adapter)

Environment variables:

  • RC_WORKITEM_DB_PATH: Database path (default: ./workitems.db)
  • RC_WORKITEM_QUEUE_NAME: Input queue (default: default)
  • RC_WORKITEM_OUTPUT_QUEUE_NAME: Output queue (default: {queue}_output)
  • RC_WORKITEM_FILES_DIR: Files directory (default: ./work_item_files)

FileAdapter

JSON file-based storage compatible with Robocorp Control Room format.

from actions.work_items import FileAdapter, init

adapter = FileAdapter(
    input_path="./output/work-items-in",
    output_path="./output/work-items-out",
)
init(adapter)

Environment variables:

  • RC_WORKITEM_INPUT_PATH: Input directory
  • RC_WORKITEM_OUTPUT_PATH: Output directory

RedisAdapter

Redis-backed storage for distributed workers and shared queues. Install the optional dependency before using it:

pip install "actions-work-items[redis]"
from actions.work_items import create_adapter, init

adapter = create_adapter("redis")
init(adapter)

Environment variables:

  • RC_REDIS_URL: Redis connection URL (default: redis://localhost:6379/0)
  • RC_WORKITEM_QUEUE_NAME: Input queue (default: default)
  • RC_WORKITEM_OUTPUT_QUEUE_NAME: Output queue (default: {queue}_output)
  • RC_WORKITEM_FILES_DIR: Directory for large file attachments

DocumentDBAdapter

MongoDB-compatible storage with GridFS support for large attachments. Install the optional dependency before using it:

pip install "actions-work-items[docdb]"
from actions.work_items import create_adapter, init

adapter = create_adapter("documentdb")
init(adapter)

Environment variables:

  • DOCDB_URI: MongoDB/DocumentDB connection URI
  • DOCDB_DATABASE: Database name
  • RC_WORKITEM_QUEUE_NAME: Input queue (default: default)
  • RC_WORKITEM_OUTPUT_QUEUE_NAME: Output queue (default: {queue}_output)
  • RC_WORKITEM_FILE_SIZE_THRESHOLD: Size threshold for GridFS-backed files

Features

Producer Pattern

from actions.work_items import seed_input, init

init()

# Create work items for processing
for data in fetch_data():
    seed_input(
        payload={"url": data["url"], "name": data["name"]},
        queue_name="downloads",
    )

File Attachments

from actions.work_items import inputs, outputs

for item in inputs:
    with item:
        # List files
        files = item.list_files()

        # Get file content
        content = item.get_file("data.csv")

        # Add files (single or glob pattern)
        item.add_file(path="./report.pdf")
        item.add_files("./output/*.csv")

        # Remove files
        item.remove_file("temp.txt", missing_ok=True)
        item.remove_files("*.tmp")

Email Parsing

from actions.work_items import inputs

for item in inputs:
    with item:
        # Parse email attachment
        email = item.get_email("message.eml")

        print(f"From: {email.sender}")
        print(f"Subject: {email.subject}")
        print(f"Body: {email.body}")

Error Handling

from actions.work_items import (
    inputs,
    BusinessException,
    ApplicationException,
)

for item in inputs:
    with item:
        try:
            process(item.payload)
        except ValidationError as e:
            # Business error - don't retry
            raise BusinessException(str(e), code="VALIDATION_ERROR")
        except ConnectionError as e:
            # Application error - may retry
            raise ApplicationException(str(e), code="CONNECTION_ERROR")

Action Server Integration

The Action Server provides REST endpoints at /api/work-items:

# Create work item
curl -X POST http://localhost:8080/api/work-items \
  -H "Content-Type: application/json" \
  -d '{"payload": {"org": "sema4ai"}, "queue_name": "repos"}'

# List work items
curl http://localhost:8080/api/work-items?queue_name=repos&state=PENDING

# Get queue stats
curl http://localhost:8080/api/work-items/stats?queue_name=repos

API Reference

Singletons

  • inputs - Inputs collection singleton
  • outputs - Outputs collection singleton

Functions

  • init(adapter=None) - Initialize context
  • create_adapter(type=None, **kwargs) - Create adapter
  • seed_input(payload, files, queue_name) - Seed new input
  • get_context() - Get current context
  • get_input() - Get next input
  • create_output(payload, files, save) - Create output

Classes

  • Input - Input work item with done(), fail(), context manager
  • Output - Output work item with save()
  • Inputs - Collection with iteration, indexing, current, released
  • Outputs - Collection with create(), last

Adapters

  • BaseAdapter - Abstract interface
  • SQLiteAdapter - SQLite storage
  • FileAdapter - JSON file storage
  • RedisAdapter - Redis-backed queue storage
  • DocumentDBAdapter - MongoDB-compatible queue storage

Types

  • State - PENDING, IN_PROGRESS, DONE, FAILED
  • ExceptionType - BUSINESS, APPLICATION
  • Email - Parsed email dataclass
  • Address - Email address dataclass

Exceptions

  • EmptyQueue - No items available
  • BusinessException - Expected failure (no retry)
  • ApplicationException - Unexpected failure (may retry)

Migration from robocorp-workitems

# Before (robocorp-workitems)
from robocorp import workitems

for item in workitems.inputs:
    workitems.outputs.create(payload=item.payload)
    item.done()

# After (actions-work-items) - same API!
from actions.work_items import inputs, outputs

for item in inputs:
    outputs.create(payload=item.payload)
    item.done()

License

Apache 2.0 - Based on robocorp-workitems

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

actions_work_items-0.2.3.tar.gz (41.0 kB view details)

Uploaded Source

Built Distribution

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

actions_work_items-0.2.3-py3-none-any.whl (49.8 kB view details)

Uploaded Python 3

File details

Details for the file actions_work_items-0.2.3.tar.gz.

File metadata

  • Download URL: actions_work_items-0.2.3.tar.gz
  • Upload date:
  • Size: 41.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.4 CPython/3.12.3 Linux/6.17.0-1010-azure

File hashes

Hashes for actions_work_items-0.2.3.tar.gz
Algorithm Hash digest
SHA256 bba9f3c04347098c845f07d3ac1b44a76b3c39e4798640a615a5adfa086ba7d4
MD5 132b90f6fe0e936ce0cf38ca4e6cf7ea
BLAKE2b-256 9e449def727d6e9cd47f1d06dd7cb9ec954e5266522106328fef4aab806deade

See more details on using hashes here.

File details

Details for the file actions_work_items-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: actions_work_items-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 49.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.4 CPython/3.12.3 Linux/6.17.0-1010-azure

File hashes

Hashes for actions_work_items-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9255cf16dc956e5be7500ded8f79b3d62790ed605bc9cef6f895c06fd054c5d5
MD5 d612b1ae22f00ecd3f76c5b9a5cacceb
BLAKE2b-256 88dccb32cf42a6ddaa40bcae83fb96876e8eb665146b605449e111acf6276319

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