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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions