conductor-python 1.1.4__tar.gz → 1.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- conductor_python-1.1.6/PKG-INFO +271 -0
- conductor_python-1.1.6/README.md +244 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/__init__.py +1 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_status.py +18 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_task.py +49 -8
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/conductor_workflow.py +22 -1
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/do_while_task.py +13 -1
- conductor_python-1.1.6/src/conductor/client/workflow/task/http_poll_task.py +76 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/http_task.py +0 -2
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/join_task.py +4 -1
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/task.py +38 -3
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/task_type.py +1 -0
- conductor_python-1.1.6/src/conductor_python.egg-info/PKG-INFO +271 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor_python.egg-info/SOURCES.txt +1 -0
- conductor-python-1.1.4/PKG-INFO +0 -226
- conductor-python-1.1.4/README.md +0 -199
- conductor-python-1.1.4/src/conductor_python.egg-info/PKG-INFO +0 -226
- {conductor-python-1.1.4 → conductor_python-1.1.6}/LICENSE +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/setup.cfg +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/setup.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/ai/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/ai/configuration.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/ai/integrations.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/ai/orchestrator.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/authorization_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/automator/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/automator/task_handler.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/automator/task_runner.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/automator/utils.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/configuration/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/configuration/configuration.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/configuration/settings/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/configuration/settings/authentication_settings.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/configuration/settings/metrics_settings.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/event/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/event/event_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/event/queue/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/event/queue/kafka_queue_configuration.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/event/queue/queue_configuration.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/event/queue/queue_worker_configuration.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/exceptions/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/exceptions/api_error.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/exceptions/api_exception_handler.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/helpers/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/helpers/helper.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/application_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/authorization_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/event_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/group_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/integration_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/metadata_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/prompt_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/scheduler_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/secret_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/task_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/token_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/user_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/workflow_bulk_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api/workflow_resource_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/api_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/action.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/authorization_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/bulk_response.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/conductor_application.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/conductor_user.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/correlation_ids_search_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/create_or_update_application_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/event_handler.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/external_storage_location.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/generate_token_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/group.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/health.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/health_check_status.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/integration.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/integration_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/integration_api_update.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/integration_def.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/integration_update.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/permission.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/poll_data.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/prompt_template.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/prompt_test_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/rate_limit.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/rerun_workflow_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/response.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/role.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/save_schedule_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/scrollable_search_result_workflow_summary.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/search_result_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/search_result_task_summary.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/search_result_workflow.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/search_result_workflow_schedule_execution_model.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/search_result_workflow_summary.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/skip_task_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/start_workflow.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/start_workflow_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/state_change_event.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/sub_workflow_params.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/subject_ref.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/tag_object.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/tag_string.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/target_ref.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/task_def.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/task_details.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/task_exec_log.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/task_result.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/task_result_status.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/task_summary.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/token.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/upsert_group_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/upsert_user_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_def.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_run.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_schedule.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_schedule_execution_model.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_state_update.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_summary.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_tag.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_test_request.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/rest.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/thread.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/integration_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/metadata_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/api/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/api/tags_api.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/models/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/models/access_key.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/models/access_key_status.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/models/access_type.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/models/created_access_key.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/models/granted_permission.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/models/metadata_tag.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/models/ratelimit_tag.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/orkes_authorization_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/orkes_base_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/orkes_integration_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/orkes_metadata_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/orkes_prompt_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/orkes_scheduler_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/orkes_secret_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/orkes_task_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes/orkes_workflow_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/orkes_clients.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/prompt_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/scheduler_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/secret_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/task_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/telemetry/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/telemetry/metrics_collector.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/telemetry/model/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/telemetry/model/metric_documentation.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/telemetry/model/metric_label.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/telemetry/model/metric_name.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/worker/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/worker/exception.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/worker/worker.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/worker/worker_interface.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/worker/worker_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/executor/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/executor/workflow_executor.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/dynamic_fork_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/dynamic_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/event_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/fork_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/get_document.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/human_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/inline.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/javascript_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/json_jq_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/kafka_publish.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/kafka_publish_input.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/llm_chat_complete.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/llm_generate_embeddings.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/llm_index_documents.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/llm_index_text.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/llm_query_embeddings.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/llm_search_index.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/llm_text_complete.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/utils/__init__.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/utils/embedding_model.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/llm_tasks/utils/prompt.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/set_variable_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/simple_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/start_workflow_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/sub_workflow_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/switch_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/terminate_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/timeout_policy.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/wait_for_webhook_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow/task/wait_task.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/workflow_client.py +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor_python.egg-info/dependency_links.txt +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor_python.egg-info/requires.txt +0 -0
- {conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor_python.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: conductor-python
|
|
3
|
+
Version: 1.1.6
|
|
4
|
+
Summary: Netflix Conductor Python SDK
|
|
5
|
+
Home-page: https://github.com/conductor-sdk/conductor-python
|
|
6
|
+
Author: Orkes
|
|
7
|
+
Author-email: developers@orkes.io
|
|
8
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: Intended Audience :: System Administrators
|
|
11
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
15
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
16
|
+
Requires-Python: >=3.6
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: certifi>=14.05.14
|
|
20
|
+
Requires-Dist: prometheus-client>=0.13.1
|
|
21
|
+
Requires-Dist: six>=1.10
|
|
22
|
+
Requires-Dist: requests>=2.31.0
|
|
23
|
+
Requires-Dist: typing-extensions>=4.2.0
|
|
24
|
+
Requires-Dist: astor>=0.8.1
|
|
25
|
+
Requires-Dist: shortuuid>=1.0.11
|
|
26
|
+
Requires-Dist: dacite>=1.8.1
|
|
27
|
+
|
|
28
|
+
# Conductor OSS Python SDK
|
|
29
|
+
|
|
30
|
+
Python SDK for working with https://github.com/conductor-oss/conductor.
|
|
31
|
+
|
|
32
|
+
[Conductor](https://www.conductor-oss.org/) is the leading open-source orchestration platform allowing developers to build highly scalable distributed applications.
|
|
33
|
+
|
|
34
|
+
Check out the [official documentation for Conductor](https://orkes.io/content).
|
|
35
|
+
|
|
36
|
+
## ⭐ Conductor OSS
|
|
37
|
+
|
|
38
|
+
Show support for the Conductor OSS. Please help spread the awareness by starring Conductor repo.
|
|
39
|
+
|
|
40
|
+
[](https://GitHub.com/conductor-oss/conductor/)
|
|
41
|
+
|
|
42
|
+
## Content
|
|
43
|
+
|
|
44
|
+
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
|
45
|
+
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
|
46
|
+
|
|
47
|
+
- [Install Conductor Python SDK](#install-conductor-python-sdk)
|
|
48
|
+
- [Get Conductor Python SDK](#get-conductor-python-sdk)
|
|
49
|
+
- [Hello World Application Using Conductor](#hello-world-application-using-conductor)
|
|
50
|
+
- [Step 1: Create Workflow](#step-1-create-workflow)
|
|
51
|
+
- [Creating Workflows by Code](#creating-workflows-by-code)
|
|
52
|
+
- [(Alternatively) Creating Workflows in JSON](#alternatively-creating-workflows-in-json)
|
|
53
|
+
- [Step 2: Write Task Worker](#step-2-write-task-worker)
|
|
54
|
+
- [Step 3: Write _Hello World_ Application](#step-3-write-_hello-world_-application)
|
|
55
|
+
- [Running Workflows on Conductor Standalone (Installed Locally)](#running-workflows-on-conductor-standalone-installed-locally)
|
|
56
|
+
- [Setup Environment Variable](#setup-environment-variable)
|
|
57
|
+
- [Start Conductor Server](#start-conductor-server)
|
|
58
|
+
- [Execute Hello World Application](#execute-hello-world-application)
|
|
59
|
+
- [Running Workflows on Orkes Conductor](#running-workflows-on-orkes-conductor)
|
|
60
|
+
- [Learn More about Conductor Python SDK](#learn-more-about-conductor-python-sdk)
|
|
61
|
+
- [Create and Run Conductor Workers](#create-and-run-conductor-workers)
|
|
62
|
+
- [Create Conductor Workflows](#create-conductor-workflows)
|
|
63
|
+
- [Using Conductor in your Application](#using-conductor-in-your-application)
|
|
64
|
+
|
|
65
|
+
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
|
66
|
+
|
|
67
|
+
## Install Conductor Python SDK
|
|
68
|
+
|
|
69
|
+
Before installing Conductor Python SDK, it is a good practice to set up a dedicated virtual environment as follows:
|
|
70
|
+
|
|
71
|
+
```shell
|
|
72
|
+
virtualenv conductor
|
|
73
|
+
source conductor/bin/activate
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Get Conductor Python SDK
|
|
77
|
+
|
|
78
|
+
The SDK requires Python 3.9+. To install the SDK, use the following command:
|
|
79
|
+
|
|
80
|
+
```shell
|
|
81
|
+
python3 -m pip install conductor-python
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Hello World Application Using Conductor
|
|
85
|
+
|
|
86
|
+
In this section, we will create a simple "Hello World" application that executes a "greetings" workflow managed by Conductor.
|
|
87
|
+
|
|
88
|
+
### Step 1: Create Workflow
|
|
89
|
+
|
|
90
|
+
#### Creating Workflows by Code
|
|
91
|
+
|
|
92
|
+
Create [greetings_workflow.py](examples/helloworld/greetings_workflow.py) with the following:
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
from conductor.client.workflow.conductor_workflow import ConductorWorkflow
|
|
96
|
+
from conductor.client.workflow.executor.workflow_executor import WorkflowExecutor
|
|
97
|
+
from greetings_worker import greet
|
|
98
|
+
|
|
99
|
+
def greetings_workflow(workflow_executor: WorkflowExecutor) -> ConductorWorkflow:
|
|
100
|
+
name = 'greetings'
|
|
101
|
+
workflow = ConductorWorkflow(name=name, executor=workflow_executor)
|
|
102
|
+
workflow.version = 1
|
|
103
|
+
workflow >> greet(task_ref_name='greet_ref', name=workflow.input('name'))
|
|
104
|
+
return workflow
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### (Alternatively) Creating Workflows in JSON
|
|
110
|
+
|
|
111
|
+
Create `greetings_workflow.json` with the following:
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"name": "greetings",
|
|
116
|
+
"description": "Sample greetings workflow",
|
|
117
|
+
"version": 1,
|
|
118
|
+
"tasks": [
|
|
119
|
+
{
|
|
120
|
+
"name": "greet",
|
|
121
|
+
"taskReferenceName": "greet_ref",
|
|
122
|
+
"type": "SIMPLE",
|
|
123
|
+
"inputParameters": {
|
|
124
|
+
"name": "${workflow.input.name}"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
],
|
|
128
|
+
"timeoutPolicy": "TIME_OUT_WF",
|
|
129
|
+
"timeoutSeconds": 60
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Workflows must be registered to the Conductor server. Use the API to register the greetings workflow from the JSON file above:
|
|
134
|
+
```shell
|
|
135
|
+
curl -X POST -H "Content-Type:application/json" \
|
|
136
|
+
http://localhost:8080/api/metadata/workflow -d @greetings_workflow.json
|
|
137
|
+
```
|
|
138
|
+
> [!note]
|
|
139
|
+
> To use the Conductor API, the Conductor server must be up and running (see [Running over Conductor standalone (installed locally)](#running-over-conductor-standalone-installed-locally)).
|
|
140
|
+
|
|
141
|
+
### Step 2: Write Task Worker
|
|
142
|
+
|
|
143
|
+
Using Python, a worker represents a function with the worker_task decorator. Create [greetings_worker.py](examples/helloworld/greetings_worker.py) file as illustrated below:
|
|
144
|
+
|
|
145
|
+
> [!note]
|
|
146
|
+
> A single workflow can have task workers written in different languages and deployed anywhere, making your workflow polyglot and distributed!
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
from conductor.client.worker.worker_task import worker_task
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
@worker_task(task_definition_name='greet')
|
|
153
|
+
def greet(name: str) -> str:
|
|
154
|
+
return f'Hello {name}'
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
Now, we are ready to write our main application, which will execute our workflow.
|
|
158
|
+
|
|
159
|
+
### Step 3: Write _Hello World_ Application
|
|
160
|
+
|
|
161
|
+
Let's add [helloworld.py](examples/helloworld/helloworld.py) with a `main` method:
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
from conductor.client.automator.task_handler import TaskHandler
|
|
165
|
+
from conductor.client.configuration.configuration import Configuration
|
|
166
|
+
from conductor.client.workflow.conductor_workflow import ConductorWorkflow
|
|
167
|
+
from conductor.client.workflow.executor.workflow_executor import WorkflowExecutor
|
|
168
|
+
from greetings_workflow import greetings_workflow
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def register_workflow(workflow_executor: WorkflowExecutor) -> ConductorWorkflow:
|
|
172
|
+
workflow = greetings_workflow(workflow_executor=workflow_executor)
|
|
173
|
+
workflow.register(True)
|
|
174
|
+
return workflow
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def main():
|
|
178
|
+
# The app is connected to http://localhost:8080/api by default
|
|
179
|
+
api_config = Configuration()
|
|
180
|
+
|
|
181
|
+
workflow_executor = WorkflowExecutor(configuration=api_config)
|
|
182
|
+
|
|
183
|
+
# Registering the workflow (Required only when the app is executed the first time)
|
|
184
|
+
workflow = register_workflow(workflow_executor)
|
|
185
|
+
|
|
186
|
+
# Starting the worker polling mechanism
|
|
187
|
+
task_handler = TaskHandler(configuration=api_config)
|
|
188
|
+
task_handler.start_processes()
|
|
189
|
+
|
|
190
|
+
workflow_run = workflow_executor.execute(name=workflow.name, version=workflow.version,
|
|
191
|
+
workflow_input={'name': 'Orkes'})
|
|
192
|
+
|
|
193
|
+
print(f'\nworkflow result: {workflow_run.output["result"]}\n')
|
|
194
|
+
print(f'see the workflow execution here: {api_config.ui_host}/execution/{workflow_run.workflow_id}\n')
|
|
195
|
+
task_handler.stop_processes()
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
if __name__ == '__main__':
|
|
199
|
+
main()
|
|
200
|
+
```
|
|
201
|
+
## Running Workflows on Conductor Standalone (Installed Locally)
|
|
202
|
+
|
|
203
|
+
### Setup Environment Variable
|
|
204
|
+
|
|
205
|
+
Set the following environment variable to point the SDK to the Conductor Server API endpoint:
|
|
206
|
+
|
|
207
|
+
```shell
|
|
208
|
+
export CONDUCTOR_SERVER_URL=http://localhost:8080/api
|
|
209
|
+
```
|
|
210
|
+
### Start Conductor Server
|
|
211
|
+
|
|
212
|
+
To start the Conductor server in a standalone mode from a Docker image, type the command below:
|
|
213
|
+
|
|
214
|
+
```shell
|
|
215
|
+
docker run --init -p 8080:8080 -p 5000:5000 conductoross/conductor-standalone:3.15.0
|
|
216
|
+
```
|
|
217
|
+
To ensure the server has started successfully, open Conductor UI on http://localhost:5000.
|
|
218
|
+
|
|
219
|
+
### Execute Hello World Application
|
|
220
|
+
|
|
221
|
+
To run the application, type the following command:
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
python helloworld.py
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Now, the workflow is executed, and its execution status can be viewed from Conductor UI (http://localhost:5000).
|
|
228
|
+
|
|
229
|
+
Navigate to the **Executions** tab to view the workflow execution.
|
|
230
|
+
|
|
231
|
+
<img width="1434" alt="Screenshot 2024-03-18 at 12 30 07" src="https://github.com/Srividhya-S-Subramanian/conductor-python-v1/assets/163816773/11e829b6-d46a-4b47-b2cf-0bf524a6ebdc">
|
|
232
|
+
|
|
233
|
+
## Running Workflows on Orkes Conductor
|
|
234
|
+
|
|
235
|
+
For running the workflow in Orkes Conductor,
|
|
236
|
+
|
|
237
|
+
- Update the Conductor server URL to your cluster name.
|
|
238
|
+
|
|
239
|
+
```shell
|
|
240
|
+
export CONDUCTOR_SERVER_URL=https://[cluster-name].orkesconductor.io/api
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
- If you want to run the workflow on the Orkes Conductor Playground, set the Conductor Server variable as follows:
|
|
244
|
+
|
|
245
|
+
```shell
|
|
246
|
+
export CONDUCTOR_SERVER_URL=https://play.orkes.io/api
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
- Orkes Conductor requires authentication. [Obtain the key and secret from the Conductor server](https://orkes.io/content/how-to-videos/access-key-and-secret) and set the following environment variables.
|
|
250
|
+
|
|
251
|
+
```shell
|
|
252
|
+
export CONDUCTOR_AUTH_KEY=your_key
|
|
253
|
+
export CONDUCTOR_AUTH_SECRET=your_key_secret
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Run the application and view the execution status from Conductor's UI Console.
|
|
257
|
+
|
|
258
|
+
> [!NOTE]
|
|
259
|
+
> That's it - you just created and executed your first distributed Python app!
|
|
260
|
+
|
|
261
|
+
## Learn More about Conductor Python SDK
|
|
262
|
+
|
|
263
|
+
There are three main ways you can use Conductor when building durable, resilient, distributed applications.
|
|
264
|
+
|
|
265
|
+
1. Write service workers that implement business logic to accomplish a specific goal - such as initiating payment transfer, getting user information from the database, etc.
|
|
266
|
+
2. Create Conductor workflows that implement application state - A typical workflow implements the saga pattern.
|
|
267
|
+
3. Use Conductor SDK and APIs to manage workflows from your application.
|
|
268
|
+
|
|
269
|
+
### [Create and Run Conductor Workers](workers.md)
|
|
270
|
+
### [Create Conductor Workflows](workflows.md)
|
|
271
|
+
### [Using Conductor in your Application](conductor_apps.md)
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# Conductor OSS Python SDK
|
|
2
|
+
|
|
3
|
+
Python SDK for working with https://github.com/conductor-oss/conductor.
|
|
4
|
+
|
|
5
|
+
[Conductor](https://www.conductor-oss.org/) is the leading open-source orchestration platform allowing developers to build highly scalable distributed applications.
|
|
6
|
+
|
|
7
|
+
Check out the [official documentation for Conductor](https://orkes.io/content).
|
|
8
|
+
|
|
9
|
+
## ⭐ Conductor OSS
|
|
10
|
+
|
|
11
|
+
Show support for the Conductor OSS. Please help spread the awareness by starring Conductor repo.
|
|
12
|
+
|
|
13
|
+
[](https://GitHub.com/conductor-oss/conductor/)
|
|
14
|
+
|
|
15
|
+
## Content
|
|
16
|
+
|
|
17
|
+
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
|
18
|
+
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
|
19
|
+
|
|
20
|
+
- [Install Conductor Python SDK](#install-conductor-python-sdk)
|
|
21
|
+
- [Get Conductor Python SDK](#get-conductor-python-sdk)
|
|
22
|
+
- [Hello World Application Using Conductor](#hello-world-application-using-conductor)
|
|
23
|
+
- [Step 1: Create Workflow](#step-1-create-workflow)
|
|
24
|
+
- [Creating Workflows by Code](#creating-workflows-by-code)
|
|
25
|
+
- [(Alternatively) Creating Workflows in JSON](#alternatively-creating-workflows-in-json)
|
|
26
|
+
- [Step 2: Write Task Worker](#step-2-write-task-worker)
|
|
27
|
+
- [Step 3: Write _Hello World_ Application](#step-3-write-_hello-world_-application)
|
|
28
|
+
- [Running Workflows on Conductor Standalone (Installed Locally)](#running-workflows-on-conductor-standalone-installed-locally)
|
|
29
|
+
- [Setup Environment Variable](#setup-environment-variable)
|
|
30
|
+
- [Start Conductor Server](#start-conductor-server)
|
|
31
|
+
- [Execute Hello World Application](#execute-hello-world-application)
|
|
32
|
+
- [Running Workflows on Orkes Conductor](#running-workflows-on-orkes-conductor)
|
|
33
|
+
- [Learn More about Conductor Python SDK](#learn-more-about-conductor-python-sdk)
|
|
34
|
+
- [Create and Run Conductor Workers](#create-and-run-conductor-workers)
|
|
35
|
+
- [Create Conductor Workflows](#create-conductor-workflows)
|
|
36
|
+
- [Using Conductor in your Application](#using-conductor-in-your-application)
|
|
37
|
+
|
|
38
|
+
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
|
39
|
+
|
|
40
|
+
## Install Conductor Python SDK
|
|
41
|
+
|
|
42
|
+
Before installing Conductor Python SDK, it is a good practice to set up a dedicated virtual environment as follows:
|
|
43
|
+
|
|
44
|
+
```shell
|
|
45
|
+
virtualenv conductor
|
|
46
|
+
source conductor/bin/activate
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Get Conductor Python SDK
|
|
50
|
+
|
|
51
|
+
The SDK requires Python 3.9+. To install the SDK, use the following command:
|
|
52
|
+
|
|
53
|
+
```shell
|
|
54
|
+
python3 -m pip install conductor-python
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Hello World Application Using Conductor
|
|
58
|
+
|
|
59
|
+
In this section, we will create a simple "Hello World" application that executes a "greetings" workflow managed by Conductor.
|
|
60
|
+
|
|
61
|
+
### Step 1: Create Workflow
|
|
62
|
+
|
|
63
|
+
#### Creating Workflows by Code
|
|
64
|
+
|
|
65
|
+
Create [greetings_workflow.py](examples/helloworld/greetings_workflow.py) with the following:
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
from conductor.client.workflow.conductor_workflow import ConductorWorkflow
|
|
69
|
+
from conductor.client.workflow.executor.workflow_executor import WorkflowExecutor
|
|
70
|
+
from greetings_worker import greet
|
|
71
|
+
|
|
72
|
+
def greetings_workflow(workflow_executor: WorkflowExecutor) -> ConductorWorkflow:
|
|
73
|
+
name = 'greetings'
|
|
74
|
+
workflow = ConductorWorkflow(name=name, executor=workflow_executor)
|
|
75
|
+
workflow.version = 1
|
|
76
|
+
workflow >> greet(task_ref_name='greet_ref', name=workflow.input('name'))
|
|
77
|
+
return workflow
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
#### (Alternatively) Creating Workflows in JSON
|
|
83
|
+
|
|
84
|
+
Create `greetings_workflow.json` with the following:
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"name": "greetings",
|
|
89
|
+
"description": "Sample greetings workflow",
|
|
90
|
+
"version": 1,
|
|
91
|
+
"tasks": [
|
|
92
|
+
{
|
|
93
|
+
"name": "greet",
|
|
94
|
+
"taskReferenceName": "greet_ref",
|
|
95
|
+
"type": "SIMPLE",
|
|
96
|
+
"inputParameters": {
|
|
97
|
+
"name": "${workflow.input.name}"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"timeoutPolicy": "TIME_OUT_WF",
|
|
102
|
+
"timeoutSeconds": 60
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Workflows must be registered to the Conductor server. Use the API to register the greetings workflow from the JSON file above:
|
|
107
|
+
```shell
|
|
108
|
+
curl -X POST -H "Content-Type:application/json" \
|
|
109
|
+
http://localhost:8080/api/metadata/workflow -d @greetings_workflow.json
|
|
110
|
+
```
|
|
111
|
+
> [!note]
|
|
112
|
+
> To use the Conductor API, the Conductor server must be up and running (see [Running over Conductor standalone (installed locally)](#running-over-conductor-standalone-installed-locally)).
|
|
113
|
+
|
|
114
|
+
### Step 2: Write Task Worker
|
|
115
|
+
|
|
116
|
+
Using Python, a worker represents a function with the worker_task decorator. Create [greetings_worker.py](examples/helloworld/greetings_worker.py) file as illustrated below:
|
|
117
|
+
|
|
118
|
+
> [!note]
|
|
119
|
+
> A single workflow can have task workers written in different languages and deployed anywhere, making your workflow polyglot and distributed!
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
from conductor.client.worker.worker_task import worker_task
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
@worker_task(task_definition_name='greet')
|
|
126
|
+
def greet(name: str) -> str:
|
|
127
|
+
return f'Hello {name}'
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
Now, we are ready to write our main application, which will execute our workflow.
|
|
131
|
+
|
|
132
|
+
### Step 3: Write _Hello World_ Application
|
|
133
|
+
|
|
134
|
+
Let's add [helloworld.py](examples/helloworld/helloworld.py) with a `main` method:
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
from conductor.client.automator.task_handler import TaskHandler
|
|
138
|
+
from conductor.client.configuration.configuration import Configuration
|
|
139
|
+
from conductor.client.workflow.conductor_workflow import ConductorWorkflow
|
|
140
|
+
from conductor.client.workflow.executor.workflow_executor import WorkflowExecutor
|
|
141
|
+
from greetings_workflow import greetings_workflow
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def register_workflow(workflow_executor: WorkflowExecutor) -> ConductorWorkflow:
|
|
145
|
+
workflow = greetings_workflow(workflow_executor=workflow_executor)
|
|
146
|
+
workflow.register(True)
|
|
147
|
+
return workflow
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def main():
|
|
151
|
+
# The app is connected to http://localhost:8080/api by default
|
|
152
|
+
api_config = Configuration()
|
|
153
|
+
|
|
154
|
+
workflow_executor = WorkflowExecutor(configuration=api_config)
|
|
155
|
+
|
|
156
|
+
# Registering the workflow (Required only when the app is executed the first time)
|
|
157
|
+
workflow = register_workflow(workflow_executor)
|
|
158
|
+
|
|
159
|
+
# Starting the worker polling mechanism
|
|
160
|
+
task_handler = TaskHandler(configuration=api_config)
|
|
161
|
+
task_handler.start_processes()
|
|
162
|
+
|
|
163
|
+
workflow_run = workflow_executor.execute(name=workflow.name, version=workflow.version,
|
|
164
|
+
workflow_input={'name': 'Orkes'})
|
|
165
|
+
|
|
166
|
+
print(f'\nworkflow result: {workflow_run.output["result"]}\n')
|
|
167
|
+
print(f'see the workflow execution here: {api_config.ui_host}/execution/{workflow_run.workflow_id}\n')
|
|
168
|
+
task_handler.stop_processes()
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
if __name__ == '__main__':
|
|
172
|
+
main()
|
|
173
|
+
```
|
|
174
|
+
## Running Workflows on Conductor Standalone (Installed Locally)
|
|
175
|
+
|
|
176
|
+
### Setup Environment Variable
|
|
177
|
+
|
|
178
|
+
Set the following environment variable to point the SDK to the Conductor Server API endpoint:
|
|
179
|
+
|
|
180
|
+
```shell
|
|
181
|
+
export CONDUCTOR_SERVER_URL=http://localhost:8080/api
|
|
182
|
+
```
|
|
183
|
+
### Start Conductor Server
|
|
184
|
+
|
|
185
|
+
To start the Conductor server in a standalone mode from a Docker image, type the command below:
|
|
186
|
+
|
|
187
|
+
```shell
|
|
188
|
+
docker run --init -p 8080:8080 -p 5000:5000 conductoross/conductor-standalone:3.15.0
|
|
189
|
+
```
|
|
190
|
+
To ensure the server has started successfully, open Conductor UI on http://localhost:5000.
|
|
191
|
+
|
|
192
|
+
### Execute Hello World Application
|
|
193
|
+
|
|
194
|
+
To run the application, type the following command:
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
python helloworld.py
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Now, the workflow is executed, and its execution status can be viewed from Conductor UI (http://localhost:5000).
|
|
201
|
+
|
|
202
|
+
Navigate to the **Executions** tab to view the workflow execution.
|
|
203
|
+
|
|
204
|
+
<img width="1434" alt="Screenshot 2024-03-18 at 12 30 07" src="https://github.com/Srividhya-S-Subramanian/conductor-python-v1/assets/163816773/11e829b6-d46a-4b47-b2cf-0bf524a6ebdc">
|
|
205
|
+
|
|
206
|
+
## Running Workflows on Orkes Conductor
|
|
207
|
+
|
|
208
|
+
For running the workflow in Orkes Conductor,
|
|
209
|
+
|
|
210
|
+
- Update the Conductor server URL to your cluster name.
|
|
211
|
+
|
|
212
|
+
```shell
|
|
213
|
+
export CONDUCTOR_SERVER_URL=https://[cluster-name].orkesconductor.io/api
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
- If you want to run the workflow on the Orkes Conductor Playground, set the Conductor Server variable as follows:
|
|
217
|
+
|
|
218
|
+
```shell
|
|
219
|
+
export CONDUCTOR_SERVER_URL=https://play.orkes.io/api
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
- Orkes Conductor requires authentication. [Obtain the key and secret from the Conductor server](https://orkes.io/content/how-to-videos/access-key-and-secret) and set the following environment variables.
|
|
223
|
+
|
|
224
|
+
```shell
|
|
225
|
+
export CONDUCTOR_AUTH_KEY=your_key
|
|
226
|
+
export CONDUCTOR_AUTH_SECRET=your_key_secret
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Run the application and view the execution status from Conductor's UI Console.
|
|
230
|
+
|
|
231
|
+
> [!NOTE]
|
|
232
|
+
> That's it - you just created and executed your first distributed Python app!
|
|
233
|
+
|
|
234
|
+
## Learn More about Conductor Python SDK
|
|
235
|
+
|
|
236
|
+
There are three main ways you can use Conductor when building durable, resilient, distributed applications.
|
|
237
|
+
|
|
238
|
+
1. Write service workers that implement business logic to accomplish a specific goal - such as initiating payment transfer, getting user information from the database, etc.
|
|
239
|
+
2. Create Conductor workflows that implement application state - A typical workflow implements the saga pattern.
|
|
240
|
+
3. Use Conductor SDK and APIs to manage workflows from your application.
|
|
241
|
+
|
|
242
|
+
### [Create and Run Conductor Workers](workers.md)
|
|
243
|
+
### [Create Conductor Workflows](workflows.md)
|
|
244
|
+
### [Using Conductor in your Application](conductor_apps.md)
|
{conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/__init__.py
RENAMED
|
@@ -52,3 +52,4 @@ from conductor.client.http.models.workflow_tag import WorkflowTag
|
|
|
52
52
|
from conductor.client.http.models.integration import Integration
|
|
53
53
|
from conductor.client.http.models.integration_api import IntegrationApi
|
|
54
54
|
from conductor.client.http.models.state_change_event import StateChangeEvent, StateChangeConfig, StateChangeEventType
|
|
55
|
+
from conductor.client.http.models.workflow_task import CacheConfig
|
|
@@ -3,6 +3,9 @@ import re # noqa: F401
|
|
|
3
3
|
|
|
4
4
|
import six
|
|
5
5
|
|
|
6
|
+
terminal_status = ('COMPLETED', 'FAILED', 'TIMED_OUT', 'TERMINATED')
|
|
7
|
+
successful_status = ('PAUSED', 'COMPLETED')
|
|
8
|
+
running_status = ('RUNNING', 'PAUSED')
|
|
6
9
|
|
|
7
10
|
class WorkflowStatus(object):
|
|
8
11
|
"""NOTE: This class is auto generated by the swagger code generator program.
|
|
@@ -189,6 +192,21 @@ class WorkflowStatus(object):
|
|
|
189
192
|
|
|
190
193
|
return result
|
|
191
194
|
|
|
195
|
+
def is_completed(self) -> bool:
|
|
196
|
+
"""Checks if the workflow has completed
|
|
197
|
+
:return: True if the workflow status is COMPLETED, FAILED or TERMINATED
|
|
198
|
+
"""
|
|
199
|
+
return self._status in terminal_status
|
|
200
|
+
|
|
201
|
+
def is_successful(self) -> bool:
|
|
202
|
+
"""Checks if the workflow has completed in successful state (ie COMPLETED)
|
|
203
|
+
:return: True if the workflow status is COMPLETED
|
|
204
|
+
"""
|
|
205
|
+
return self._status in successful_status
|
|
206
|
+
|
|
207
|
+
def is_running(self) -> bool:
|
|
208
|
+
return self.status in running_status
|
|
209
|
+
|
|
192
210
|
def to_str(self):
|
|
193
211
|
"""Returns the string representation of the model"""
|
|
194
212
|
return pprint.pformat(self.to_dict())
|
{conductor-python-1.1.4 → conductor_python-1.1.6}/src/conductor/client/http/models/workflow_task.py
RENAMED
|
@@ -7,11 +7,39 @@ import six
|
|
|
7
7
|
from conductor.client.http.models.state_change_event import StateChangeConfig, StateChangeEventType, StateChangeEvent
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class
|
|
11
|
-
|
|
10
|
+
class CacheConfig(object):
|
|
11
|
+
swagger_types = {
|
|
12
|
+
'key': 'str',
|
|
13
|
+
'ttl_in_second': 'int'
|
|
14
|
+
}
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
attribute_map = {
|
|
17
|
+
'key': 'key',
|
|
18
|
+
'ttl_in_second': 'ttlInSecond'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
def __init__(self, key: str, ttl_in_second: int):
|
|
22
|
+
self._key = key
|
|
23
|
+
self._ttl_in_second = ttl_in_second
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def key(self):
|
|
27
|
+
return self._key
|
|
28
|
+
|
|
29
|
+
@key.setter
|
|
30
|
+
def key(self, key):
|
|
31
|
+
self._key = key
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def ttl_in_second(self):
|
|
35
|
+
return self._ttl_in_second
|
|
36
|
+
|
|
37
|
+
@ttl_in_second.setter
|
|
38
|
+
def ttl_in_second(self, ttl_in_second):
|
|
39
|
+
self._ttl_in_second = ttl_in_second
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class WorkflowTask(object):
|
|
15
43
|
"""
|
|
16
44
|
Attributes:
|
|
17
45
|
swagger_types (dict): The key is attribute name
|
|
@@ -50,7 +78,8 @@ class WorkflowTask(object):
|
|
|
50
78
|
'evaluator_type': 'str',
|
|
51
79
|
'expression': 'str',
|
|
52
80
|
'workflow_task_type': 'str',
|
|
53
|
-
'on_state_change': 'dict(str, StateChangeConfig)'
|
|
81
|
+
'on_state_change': 'dict(str, StateChangeConfig)',
|
|
82
|
+
'cache_config': 'CacheConfig'
|
|
54
83
|
}
|
|
55
84
|
|
|
56
85
|
attribute_map = {
|
|
@@ -84,7 +113,8 @@ class WorkflowTask(object):
|
|
|
84
113
|
'evaluator_type': 'evaluatorType',
|
|
85
114
|
'expression': 'expression',
|
|
86
115
|
'workflow_task_type': 'workflowTaskType',
|
|
87
|
-
'on_state_change': 'onStateChange'
|
|
116
|
+
'on_state_change': 'onStateChange',
|
|
117
|
+
'cache_config': 'cacheConfig'
|
|
88
118
|
}
|
|
89
119
|
|
|
90
120
|
def __init__(self, name=None, task_reference_name=None, description=None, input_parameters=None, type=None,
|
|
@@ -94,7 +124,8 @@ class WorkflowTask(object):
|
|
|
94
124
|
sub_workflow_param=None, join_on=None, sink=None, optional=None, task_definition=None,
|
|
95
125
|
rate_limited=None, default_exclusive_join_task=None, async_complete=None, loop_condition=None,
|
|
96
126
|
loop_over=None, retry_count=None, evaluator_type=None, expression=None,
|
|
97
|
-
workflow_task_type=None, on_state_change: dict[str, StateChangeConfig] = None
|
|
127
|
+
workflow_task_type=None, on_state_change: dict[str, StateChangeConfig] = None,
|
|
128
|
+
cache_config: CacheConfig = None): # noqa: E501
|
|
98
129
|
"""WorkflowTask - a model defined in Swagger""" # noqa: E501
|
|
99
130
|
self._name = None
|
|
100
131
|
self._task_reference_name = None
|
|
@@ -128,6 +159,7 @@ class WorkflowTask(object):
|
|
|
128
159
|
self._workflow_task_type = None
|
|
129
160
|
self.discriminator = None
|
|
130
161
|
self._on_state_change = None
|
|
162
|
+
self._cache_config = None
|
|
131
163
|
self.name = name
|
|
132
164
|
self.task_reference_name = task_reference_name
|
|
133
165
|
if description is not None:
|
|
@@ -188,6 +220,7 @@ class WorkflowTask(object):
|
|
|
188
220
|
self.workflow_task_type = workflow_task_type
|
|
189
221
|
if on_state_change is not None:
|
|
190
222
|
self._on_state_change = on_state_change
|
|
223
|
+
self._cache_config = cache_config
|
|
191
224
|
|
|
192
225
|
@property
|
|
193
226
|
def name(self):
|
|
@@ -823,9 +856,17 @@ class WorkflowTask(object):
|
|
|
823
856
|
@on_state_change.setter
|
|
824
857
|
def on_state_change(self, state_change: StateChangeConfig):
|
|
825
858
|
self._on_state_change = {
|
|
826
|
-
state_change.type
|
|
859
|
+
state_change.type: state_change.events
|
|
827
860
|
}
|
|
828
861
|
|
|
862
|
+
@property
|
|
863
|
+
def cache_config(self) -> CacheConfig:
|
|
864
|
+
return self._cache_config
|
|
865
|
+
|
|
866
|
+
@cache_config.setter
|
|
867
|
+
def cache_config(self, cache_config: CacheConfig):
|
|
868
|
+
self._cache_config = cache_config
|
|
869
|
+
|
|
829
870
|
def to_dict(self):
|
|
830
871
|
"""Returns the model properties as a dict"""
|
|
831
872
|
result = {}
|