Skip to main content

PipeDSL — Declarative HTTP Pipeline Orchestration

PipeDSL is a lightweight framework for defining and executing sequences of HTTP requests using a YAML-based DSL. It supports chaining tasks, passing data between steps, parallel execution, and extracting structured values from JSON responses using JSONPath.

Use PipeDSL to:

  • Automate multi-step API workflows
  • Build integration or end-to-end tests
  • Fetch and transform data across multiple endpoints
  • Define complex request pipelines with minimal code

Quick Start

Install the package:

pip install PipeDSL

Run a pipeline from a YAML string:

import asyncio
from PipeDSL import YamlTaskReader, TaskScheduler

config = """
tasks:
  - type: http
    id: get_user
    name: Fetch user
    url: https://httpbin.org/get
    method: get
    is_singleton: false

  - type: http
    id: log_action
    name: Log action
    url: https://httpbin.org/post
    method: post
    body: '{"source": "!{{1}}"}'
    is_singleton: false

  - type: pipeline
    id: user_flow
    name: User workflow
    pipeline: "get_user() >> log_action(get_user.url)"
"""

async def main():
    tasks = YamlTaskReader.generate_tasks(config_body=config)
    async for task, result in TaskScheduler.schedule(tasks):
        print(f"Completed {task.id} → {result.payload_type}")

asyncio.run(main())

Note: TaskScheduler.schedule() is an async generator. Use async for to consume results.


Writing Pipelines

Basic HTTP Task

tasks:
  - type: http
    id: healthcheck
    name: Health check
    url: https://api.example.com/health
    method: get

Sequential Execution

tasks:
  - type: http
    id: login
    url: https://api.example.com/login
    method: post
    body: '{"email": "user@example.com"}'
    json_extractor_props:
      token: 'access_token'
    is_singleton: false

  - type: http
    id: profile
    url: https://api.example.com/profile
    method: get
    headers:
      - ["Authorization", "Bearer !{{1}}"]
    is_singleton: false

  - type: pipeline
    id: auth_flow
    pipeline: "login() >> profile(login.token)"

The expression profile(login.token) passes the token field extracted from the login response as the first argument (!{{1}}) to the profile request.

Parallel Execution with Product Operator

tasks:
  - type: http
    id: list_ids
    url: https://api.example.com/items
    method: get
    json_extractor_props:
      ids: '$.results[*].id'
    is_singleton: false

  - type: http
    id: fetch_item
    url: https://api.example.com/items/!{{1}}
    method: get
    is_singleton: false

  - type: pipeline
    id: bulk_fetch
    pipeline: "list_ids() >> [list_ids.ids] * [fetch_item($1)]"

The syntax [A] * [B($1)] means: for each element in A, execute B, substituting the element as $1. This enables fan-out patterns and bulk operations.


Task Reference

Field Required Description
id Yes Unique identifier (used in DSL expressions)
name No Human-readable label
type Yes Either http or pipeline
is_singleton No If true (default), the task runs standalone. If false, it can be called from a pipeline.
url, method, headers, body Yes (for http) Standard HTTP request parameters
json_extractor_props No Maps {name: JSONPath} to extract values from JSON responses
pipeline_context No (for pipeline) Key-value store available as pipeline_context.key in DSL

Placeholders like !{{1}}, !{{2}}, etc., are replaced with positional arguments during execution.


How It Works

  1. Parsing: The DSL string (e.g., login() >> profile(login.token)) is tokenized and parsed into an abstract syntax tree (AST) using NLTK and a context-free grammar.
  2. Execution: Tasks are scheduled asynchronously. Results are stored in an execution context under the task’s id.
  3. Data Flow: Expressions like task.property resolve to extracted values from prior responses.
  4. Parallelism: The product operator ([X] * [Y($1)]) expands into a Cartesian product and executes sub-pipelines in parallel.

Architecture

  • YamlTaskReader: Reads YAML and builds task definitions with compiled ASTs for pipelines.
  • TaskScheduler: Orchestrates execution of top-level (single: true) tasks.
  • PipelineExecutor: Interprets the AST, manages context, and handles sequential/parallel execution.
  • HttpRequestExecutor: Sends requests via aiohttp and processes responses.

All core models are immutable (Pydantic with frozen=True), and the system is fully typed.


Development

To set up a development environment:

git clone https://github.com/yourname/PipeDSL.git
cd PipeDSL
pip install -e .
pytest

License

Apache License 2.0. See LICENSE for details.

Metadata

Release files for PipeDSL 0.1.13

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

Source distribution (sdist)

Source distribution for PipeDSL 0.1.13
File Size Uploaded
pipedsl-0.1.13.tar.gz 13.5 kB Details

Built distribution (wheel)

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

Total release size: 30.4 kB

Release files / pipedsl-0.1.13.tar.gz

Download URL pipedsl-0.1.13.tar.gz
Size 13.5 kB
Tags Source
SHA-256 checksum
How to use checksums
09a11bbca274bbd67793bd9604da6ace3fa3fa4235b5e7b794a3b7e03e4f6460
BLAKE2b-256 checksum
How to use checksums
54d82648ecab4af1403c557c50fafdeb53fb072ae16524063d8f23a76b2141c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.9

Release files / pipedsl-0.1.13-py3-none-any.whl

Download URL pipedsl-0.1.13-py3-none-any.whl
Size 17.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4693ef2a709e6a31b117d7463e8a835b2dcbd59f559d1c3c4169ebea6a054578
BLAKE2b-256 checksum
How to use checksums
126645bc305dd37df2b4515e63fc1ce77f5b2dd398932721dca2a315468efe27
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.9

Release history Release notifications | RSS feed

This release

0.1.13 This release

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

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