Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

conductor-oss/python-sdk

Open more actions menu

Repository files navigation

<# Conductor OSS Python SDK CI Status codecov

Python SDK for working with https://github.com/conductor-oss/conductor.

Conductor is the leading open-source orchestration platform allowing developers to build highly scalable distributed applications.

Check out the official documentation for Conductor.

⭐ Conductor OSS

Show support for the Conductor OSS. Please help spread the awareness by starring Conductor repo.

GitHub stars

Conductor-OSS vs. Orkes Conductor

Conductor-OSS is the open-source version of the Conductor orchestration platform, maintained by the community and available for self-hosting. It provides a robust, extensible framework for building and managing workflows, ideal for developers who want full control over their deployment and customization.

Orkes Conductor, built on top of Conductor-OSS, is a fully-managed, cloud-hosted service provided by Orkes. It offers additional features such as a user-friendly UI, enterprise-grade security, scalability, and support, making it suitable for organizations seeking a turnkey solution without managing infrastructure.

Quick Start

Installation

The SDK requires Python 3.9+. To install the SDK, use the following command:

python3 -m pip install conductor-python

For development setup, it's recommended to use a virtual environment:

virtualenv conductor
source conductor/bin/activate
python3 -m pip install conductor-python

Configuration

Basic Configuration

The SDK connects to http://localhost:8080/api by default. For other configurations:

from conductor.client.configuration.configuration import Configuration

# Default configuration (localhost:8080)
config = Configuration()

# Custom server URL
config = Configuration(server_api_url="https://your-conductor-server.com/api")

# With authentication (for Orkes Conductor)
from conductor.shared.configuration.settings.authentication_settings import AuthenticationSettings
config = Configuration(
    server_api_url="https://your-cluster.orkesconductor.io/api",
    authentication_settings=AuthenticationSettings(
        key_id="your_key",
        key_secret="your_secret"
    )
)

Environment Variables

You can also configure using environment variables:

export CONDUCTOR_SERVER_URL=https://your-conductor-server.com/api
export CONDUCTOR_AUTH_KEY=your_key
export CONDUCTOR_AUTH_SECRET=your_secret

Hello World Example

Create a simple "Hello World" application that executes a "greetings" workflow:

1. Create a Worker

from conductor.client.worker.worker_task import worker_task

@worker_task(task_definition_name='greet')
def greet(name: str) -> str:
    return f'Hello {name}'

2. Create a Workflow

from conductor.client.workflow.conductor_workflow import ConductorWorkflow
from conductor.client.workflow.executor.workflow_executor import WorkflowExecutor
from greetings_worker import greet

def greetings_workflow(workflow_executor: WorkflowExecutor) -> ConductorWorkflow:
    name = 'greetings'
    workflow = ConductorWorkflow(name=name, executor=workflow_executor)
    workflow.version = 1
    workflow >> greet(task_ref_name='greet_ref', name=workflow.input('name'))
    return workflow

3. Run the Application

from conductor.client.automator.task_handler import TaskHandler
from conductor.client.configuration.configuration import Configuration
from conductor.client.workflow.executor.workflow_executor import WorkflowExecutor
from greetings_workflow import greetings_workflow

def main():
    # Connect to Conductor server
    api_config = Configuration()
    workflow_executor = WorkflowExecutor(configuration=api_config)
    
    # Register and create workflow
    workflow = greetings_workflow(workflow_executor)
    workflow.register(True)
    
    # Start workers
    task_handler = TaskHandler(configuration=api_config)
    task_handler.start_processes()
    
    # Execute workflow
    workflow_run = workflow_executor.execute(
        name=workflow.name, 
        version=workflow.version,
        workflow_input={'name': 'Orkes'}
    )
    
    print(f'Workflow result: {workflow_run.output["result"]}')
    task_handler.stop_processes()

if __name__ == '__main__':
    main()

4. Start Conductor Server

For local development, start Conductor using Docker:

docker run --init -p 8080:8080 -p 5000:5000 conductoross/conductor-standalone:3.15.0

View the workflow execution in the Conductor UI at http://localhost:5000.

Documentation

For detailed information on specific topics, see the following documentation:

Core Concepts

Development & Testing

  • Testing - Testing workflows and workers
  • Development - Development setup and client regeneration
  • Examples - Complete working examples

Production & Deployment

Advanced Topics

  • Advanced - Advanced features and patterns

Examples

Check out the examples directory for complete working examples:

Morty Proxy This is a proxified and sanitized view of the page, visit original site.