Skip to content

ConductorWorkflow requires a live executor at construction time — prevents offline use #432

Description

@nthmost-orkes

Summary

Tested against: Conductor OSS 3.32.0-rc.9

ConductorWorkflow.__init__() takes executor: WorkflowExecutor as a mandatory
first positional argument. This forces a live server connection at the point of
constructing a workflow definition, making offline use impossible.

Impact

  • Unit testing: tests that validate workflow structure (task order, task types,
    inputParameters) cannot be written without a running Conductor server.
  • Library code: functions that return workflow definitions must thread an
    executor parameter through all their call chains, coupling definition logic
    to connection management.
  • Code generation / serialization: workflow definitions cannot be built and
    exported to JSON without a server connection.

Reproduction

# Fails without a server running:
wf = ConductorWorkflow(name="my_wf", version=1)
# TypeError: ConductorWorkflow.__init__() missing 1 required positional argument: 'executor'

# Required:
config = Configuration(server_api_url="http://localhost:8080/api")
executor = WorkflowExecutor(config)
wf = ConductorWorkflow(executor=executor, name="my_wf", version=1)

Suggested fix

Make executor optional; raise RuntimeError only when an executor-dependent
method (.register(), .start_workflow(), .execute()) is called on a workflow
with no executor set:

def __init__(self, name: str, version: Optional[int] = None,
             executor: Optional[WorkflowExecutor] = None, ...):
    self._executor = executor
    ...

def register(self, overwrite: bool):
    if self._executor is None:
        raise RuntimeError("ConductorWorkflow.register() requires an executor. "
                           "Pass executor= at construction time.")
    ...

Verified against

Conductor server 3.32.0-rc.9, Python SDK (editable install from
conductor-oss/python-sdk main branch).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions