Skip to main content

Netflix Conductor Python SDK

Project description

Conductor Python

Software Development Kit for Netflix Conductor, written on Python.

Set up Conductor

  1. Clone Netflix Conductor repository: https://github.com/Netflix/conductor
    $ git clone https://github.com/Netflix/conductor.git
    
  2. Start Conductor server by running this command at the repo root folder (/conductor):
    $ ./gradlew bootRun
    
  3. Start Conductor UI by running this command at the UI folder (/conductor/ui):
    $ yarn install
    $ yarn run start
    

You should be able to access:

Install Python SDK package

// TODO

Run

Create new task

You need to define a Task within Conductor that your Python Worker is capable of running.

Make a POST request to /metadata/taskdefs endpoint at your conductor server.

  • URL example: http://localhost:8080/api/metadata/taskdefs
  • Task Definition example:
    [
      {
        "name": "simple_python_worker",
        "description": "Simple Python Worker",
        "retryCount": 3,
        "retryLogic": "FIXED",
        "retryDelaySeconds": 10,
        "timeoutSeconds": 300,
        "timeoutPolicy": "TIME_OUT_WF",
        "responseTimeoutSeconds": 180,
        "ownerEmail": "example@example.com"
      }
    ]
    
  • Command example:
    $ curl -X 'POST' \
        'http://localhost:8080/api/metadata/taskdefs' \
        -H 'accept: */*' \
        -H 'Content-Type: application/json' \
        -d '[
        {
          "name": "simple_python_worker",
          "description": "Simple Python Worker",
          "retryCount": 3,
          "retryLogic": "FIXED",
          "retryDelaySeconds": 10,
          "timeoutSeconds": 300,
          "timeoutPolicy": "TIME_OUT_WF",
          "responseTimeoutSeconds": 180,
          "ownerEmail": "example@example.com"
        }
      ]'
    

Create new workflow

You need to define a Workflow within Conductor that contains the Task you had just defined.

Make a POST request to /metadata/workflow endpoint at your conductor server.

  • URL example: http://localhost:8080/api/metadata/workflow
  • Workflow Definition example:
    {
      "createTime": 1634021619147,
      "updateTime": 1630694890267,
      "name": "simple_workflow_with_python_worker",
      "description": "Simple Workflow with Python Worker",
      "version": 1,
      "tasks": [
        {
          "name": "simple_python_worker",
          "taskReferenceName": "simple_python_worker_ref_1",
          "inputParameters": {},
          "type": "SIMPLE"
        }
      ],
      "inputParameters": [],
      "outputParameters": {
        "workerOutput": "${simple_python_worker_ref_1.output}"
      },
      "schemaVersion": 2,
      "restartable": true,
      "ownerEmail": "example@example.com",
      "timeoutPolicy": "ALERT_ONLY",
      "timeoutSeconds": 0
    }
    
  • Command example:
    $ curl -X 'POST' \
        'http://localhost:8080/api/metadata/workflow' \
        -H 'accept: */*' \
        -H 'Content-Type: application/json' \
        -d '{
        "createTime": 1634021619147,
        "updateTime": 1630694890267,
        "name": "simple_workflow_with_python_worker",
        "description": "Simple Workflow with Python Worker",
        "version": 1,
        "tasks": [
          {
            "name": "simple_python_worker",
            "taskReferenceName": "simple_python_worker_ref_1",
            "inputParameters": {},
            "type": "SIMPLE"
          }
        ],
        "inputParameters": [],
        "outputParameters": {
          "workerOutput": "${simple_python_worker_ref_1.output}"
        },
        "schemaVersion": 2,
        "restartable": true,
        "ownerEmail": "example@example.com",
        "timeoutPolicy": "ALERT_ONLY",
        "timeoutSeconds": 0
      }'
    

Start new workflow

Now that you have defined a Task and a Workflow within Conductor, you should be able to run it.

Make a POST request to /workflow/{name} endpoint at your conductor server.

  • URL example: http://localhost:8080/api/workflow/simple_workflow_with_python_worker
    • Priority should be empty
    • Request body should be empty, like: {}
  • Command example:
    $ curl -X 'POST' \
        'http://localhost:8080/api/workflow/simple_workflow_with_python_worker' \
        -H 'accept: text/plain' \
        -H 'Content-Type: application/json' \
        -d '{}'
    
  • Create a bunch of workflows:
    $ export CREATE_WORKFLOW_SHORTCUT="curl -X 'POST' \
        'http://localhost:8080/api/workflow/simple_workflow_with_python_worker' \
        -H 'accept: text/plain' \
        -H 'Content-Type: application/json' \
        -d '{}' \
        -s"
    
    $ for idx in {1..100}; do \
        echo "Creating workflow ${idx}"; \
        workflow_id=$(eval "${CREATE_WORKFLOW_SHORTCUT}"); \
        echo "workflow_id=${workflow_id}"; \
      done
    
    • Expected output example:
      Creating workflow 1
      workflow_id=6dd2c86b-5ce6-487a-9a65-632139da1345
      Creating workflow 2
      workflow_id=b0ddfdcf-0c4a-4fd3-892c-97fc38c46d63
      ...
      

You should receive a Workflow ID at the Response body

  • Workflow ID example: 8ff0bc06-4413-4c94-b27a-b3210412a914

See workflow execution

Now you must be able to see its execution through the UI.

  • URL:
    • prefix: http://localhost:5001/execution
    • suffix: ${workflow_id}
  • Example: http://localhost:5001/execution/8ff0bc06-4413-4c94-b27a-b3210412a914

Project details


Release history Release notifications | RSS feed

This version

1.0.2

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

conductor-python-1.0.2.tar.gz (56.9 kB view details)

Uploaded Source

Built Distribution

conductor_python-1.0.2-py3-none-any.whl (96.2 kB view details)

Uploaded Python 3

File details

Details for the file conductor-python-1.0.2.tar.gz.

File metadata

  • Download URL: conductor-python-1.0.2.tar.gz
  • Upload date:
  • Size: 56.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.9

File hashes

Hashes for conductor-python-1.0.2.tar.gz
Algorithm Hash digest
SHA256 0ec2ed1172075f14fdf4aab5db6d81296ed48c2dfb22e69ef65948b087740d78
MD5 e573b6f093b31614dc1757c0290c3c9b
BLAKE2b-256 8dfe3d51953525c95e973b945a289812db322679994bdfcbf0017489b25ac29f

See more details on using hashes here.

File details

Details for the file conductor_python-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: conductor_python-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 96.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.9

File hashes

Hashes for conductor_python-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c5e11b8d4bb6e1a7610c23fb79fcd71f555c328f80633fbcab44cca49ef93c1c
MD5 a7bd658e7cd68a149671719f85812c8c
BLAKE2b-256 ef3f7317fa8c796997370cbb643b86fabaed58cfe3ee917cb1b7a24928dfd186

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page