Skip to main content

Core nodes for Flowire workflow automation

Project description

Flowire Core Nodes

Core nodes for Flowire workflow automation. This package provides essential nodes for building workflows.

Installation

uv add fw-nodes-core

Then add the package to your Flowire settings:

# settings.py
installed_node_packages = ["fw-nodes-core"]

Included Nodes

Flow Control

Node Description
WorkflowTrigger Entry point for workflows, receives trigger data
Condition Conditional branching based on expressions
ForEach Loop over arrays, executing sub-workflows
CallFlow Execute another workflow as a sub-routine
Delay Pause execution for a specified duration
Return Return data from a workflow

Data Manipulation

Node Description
SetValues Set or transform values with Jinja2 templates
Strip Strip whitespace from strings
GenerateJSONL Generate JSONL formatted output
Debug Inspect data flowing through the pipeline

HTTP & Web

Node Description
HTTPRequest Make HTTP requests (GET, POST, PUT, DELETE, etc.)
HTMLParse Parse HTML with CSS/XPath selectors
Webhook Receive external HTTP requests
WebhookResponse Send response to webhook caller

Cloud Services

Node Description
S3Upload Upload files to AWS S3

Visual/Organization

Node Description
Comment Add notes and documentation to workflows
Group Visually group related nodes

Usage Examples

HTTP Request

# Node configuration in workflow:
{
    "method": "POST",
    "url": "https://api.example.com/data",
    "headers": {"Authorization": "Bearer {{project.api-key-uuid}}"},
    "body": {"name": "{{trigger.name}}"}
}

Condition Node

# Branch based on HTTP response status
{
    "condition": "{{http-request.status_code}} == 200"
}
# Outputs: "true" or "false" handles

ForEach Loop

# Process each item in an array
{
    "items": "{{http-request.data.results}}",
    "workflow_id": "process-item-workflow"
}

HTMLParse

# Extract data from HTML
{
    "html": "{{http-request.body}}",
    "selector": "div.product",
    "extract": "text"
}

Creating Custom Nodes

Use this package as a reference for creating your own node packages:

  1. Create a new package depending on flowire-sdk:
# pyproject.toml
[project]
name = "my-custom-nodes"
dependencies = ["flowire-sdk>=0.1.0"]

[project.entry-points."flowire.nodes"]
my_node = "my_custom_nodes.nodes:MyNode"
  1. Implement your node:
from pydantic import BaseModel, Field
from flowire_sdk import BaseNode, BaseNodeOutput, NodeMetadata

class MyInput(BaseModel):
    value: str = Field(..., description="Input value")

class MyOutput(BaseNodeOutput):
    result: str = Field(..., description="Processed result")

class MyNode(BaseNode):
    input_schema = MyInput
    output_schema = MyOutput
    metadata = NodeMetadata(
        name="My Node",
        description="Does something useful",
        category="custom",
    )

    async def execute_logic(self, validated_inputs, context):
        return MyOutput(result=f"Processed: {validated_inputs['value']}")
  1. Add to Flowire:
# settings.py
installed_node_packages = ["fw-nodes-core", "my-custom-nodes"]

Development

# Install with dev dependencies
just install

# Run linter
just lint

# Auto-fix lint issues
just lint-fix

# Format code
just format

# Run tests
just test

# Run all checks
just check

Testing Nodes

The test suite demonstrates how to test nodes in isolation using MockExecutionContext:

import pytest
from fw_nodes_core.nodes.debug import DebugNode

@pytest.fixture
def node_execution_context():
    from tests.conftest import MockExecutionContext
    return MockExecutionContext(
        workflow_id="wf_123",
        execution_id="exec_456",
        node_id="node_789",
        project_id="proj_abc",
    )

@pytest.mark.asyncio
async def test_debug_node(node_execution_context):
    node = DebugNode()
    result = await node.execute(
        {"data": "test value"},
        node_execution_context
    )
    assert result.metadata["summary"]["type"] == "str"

Project Structure

fw-nodes-core/
├── fw_nodes_core/
│   ├── __init__.py
│   └── nodes/
│       ├── __init__.py
│       ├── http_request.py
│       ├── condition.py
│       ├── debug.py
│       ├── delay.py
│       ├── set_values.py
│       ├── trigger.py
│       ├── call_flow.py
│       ├── for_each.py
│       ├── html_parse.py
│       ├── strip.py
│       ├── s3_upload.py
│       ├── comment.py
│       ├── group.py
│       ├── generate_jsonl.py
│       ├── return_node.py
│       ├── webhook.py
│       └── webhook_response.py
├── tests/
│   ├── conftest.py          # MockExecutionContext fixture
│   └── test_*.py            # Node tests
├── pyproject.toml
├── justfile
└── README.md

License

This project is licensed under the MIT License.

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

fw_nodes_core-0.0.1a1.tar.gz (30.1 kB view details)

Uploaded Source

Built Distribution

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

fw_nodes_core-0.0.1a1-py3-none-any.whl (33.0 kB view details)

Uploaded Python 3

File details

Details for the file fw_nodes_core-0.0.1a1.tar.gz.

File metadata

  • Download URL: fw_nodes_core-0.0.1a1.tar.gz
  • Upload date:
  • Size: 30.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.22

File hashes

Hashes for fw_nodes_core-0.0.1a1.tar.gz
Algorithm Hash digest
SHA256 1a4a52b5d18ab641c73f675d84268db04742f1ba790cf22077bb414f3161cf5b
MD5 31eb5c031bc4d4a2ee390e2d96692eb3
BLAKE2b-256 1de18f999f300f510e0d1ffc2943c8557f94f19650f9eafb8091a3ed9aecfcdc

See more details on using hashes here.

File details

Details for the file fw_nodes_core-0.0.1a1-py3-none-any.whl.

File metadata

File hashes

Hashes for fw_nodes_core-0.0.1a1-py3-none-any.whl
Algorithm Hash digest
SHA256 1359ceb7e8cc3c05704645e72f03e6b7f41a0bfe7c0ea81c4fdfde9d1bb6baba
MD5 2a0397111addeac8bb07ed743afeb0d4
BLAKE2b-256 675c39334a004a0a146a23b694845ade1da21612fec158091e7fb3cfd2958a19

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