js7-client-python 2.0.1__py3-none-any.whl
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.
- js7/__init__.py +8 -0
- js7/api/joc/http/v_2_8_2/agent/cluster/confirm_node_loss.py +36 -0
- js7/api/joc/http/v_2_8_2/agent/cluster/switchover.py +36 -0
- js7/api/joc/http/v_2_8_2/agent/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/agents.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/cluster/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/cluster/deploy.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/cluster/revoke.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/cluster/store.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/export.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/import.py +74 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/cluster/deploy.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/cluster/revoke.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/cluster/store.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/disable.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/enable.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/reset.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/store.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/deploy.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/disable.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/enable.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/revoke.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/inventory/store.py +36 -0
- js7/api/joc/http/v_2_8_2/agents/reset.py +36 -0
- js7/api/joc/http/v_2_8_2/authentication/auth.py +32 -0
- js7/api/joc/http/v_2_8_2/authentication/joc_cockpit_permissions.py +28 -0
- js7/api/joc/http/v_2_8_2/authentication/login.py +35 -0
- js7/api/joc/http/v_2_8_2/authentication/logout.py +28 -0
- js7/api/joc/http/v_2_8_2/configuration/configuration.py +36 -0
- js7/api/joc/http/v_2_8_2/configuration/save.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/abort.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/abort_and_restart.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/cluster/appoint_nodes.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/cluster/confirm_node_loss.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/cluster/switchover.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/components.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/controller.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/register.py +42 -0
- js7/api/joc/http/v_2_8_2/controller/restart.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/terminate.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/test.py +36 -0
- js7/api/joc/http/v_2_8_2/controller/unregister.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/orders/cancel.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/orders/copy.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/orders/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/orders/generate.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/orders/modify.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/orders/orders.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/orders/submit.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/projections/calendar.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/projections/dates.py +36 -0
- js7/api/joc/http/v_2_8_2/daily_plan/projections/recreate.py +28 -0
- js7/api/joc/http/v_2_8_2/daily_plan/submissions/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/account/change_password.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/account/permissions.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/account/rename.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/account/store.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/accounts/accounts.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/accounts/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/accounts/disable.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/accounts/enable.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/accounts/reset_password.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/blocked_account/store.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/blocked_accounts/blocked_accounts.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/blocked_accounts/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/folder/folder.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/folder/rename.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/folders/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/folders/folders.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/folders/store.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/identity_service/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/identity_service/identity_service.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/identity_service/rename.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/identity_service/store.py +42 -0
- js7/api/joc/http/v_2_8_2/iam/identity_services/identity_services.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/permission/permission.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/permission/rename.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/permissions/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/permissions/permissions.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/permissions/store.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/role/rename.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/role/role.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/role/store.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/roles/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/iam/roles/roles.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/changes/changes.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/dependencies.py +33 -0
- js7/api/joc/http/v_2_8_2/inventory/deployment/deploy.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/deployment/import_deploy.py +66 -0
- js7/api/joc/http/v_2_8_2/inventory/deployment/revoke.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/export/export.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/export/folder.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/import_objects.py +88 -0
- js7/api/joc/http/v_2_8_2/inventory/releasables/recall/folder.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/releasables/recall/recall.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/release.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/remove/folder.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/remove/remove.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/git/add.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/git/checkout.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/git/clone.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/git/commit.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/git/credentials/add.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/git/credentials/credentials.py +28 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/git/credentials/remove.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/git/pull.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/git/push.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/read.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/store.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/repository/update.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/revalidate/folder.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/store.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/trash/delete/delete.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/trash/delete/folder.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/trash/restore.py +36 -0
- js7/api/joc/http/v_2_8_2/inventory/validate.py +42 -0
- js7/api/joc/http/v_2_8_2/joc/cluster/restart.py +36 -0
- js7/api/joc/http/v_2_8_2/joc/cluster/run.py +36 -0
- js7/api/joc/http/v_2_8_2/joc/cluster/switch_member.py +36 -0
- js7/api/joc/http/v_2_8_2/joc/license.py +28 -0
- js7/api/joc/http/v_2_8_2/joc/proxies/restart.py +36 -0
- js7/api/joc/http/v_2_8_2/joc/version.py +28 -0
- js7/api/joc/http/v_2_8_2/joc/versions.py +36 -0
- js7/api/joc/http/v_2_8_2/orders/add.py +33 -0
- js7/api/joc/http/v_2_8_2/orders/cancel.py +33 -0
- js7/api/joc/http/v_2_8_2/orders/confirm.py +36 -0
- js7/api/joc/http/v_2_8_2/orders/continue.py +36 -0
- js7/api/joc/http/v_2_8_2/orders/history.py +36 -0
- js7/api/joc/http/v_2_8_2/orders/orders.py +36 -0
- js7/api/joc/http/v_2_8_2/orders/remove_when_terminated.py +33 -0
- js7/api/joc/http/v_2_8_2/orders/resume.py +36 -0
- js7/api/joc/http/v_2_8_2/orders/suspend.py +36 -0
- js7/api/joc/http/v_2_8_2/settings/settings.py +28 -0
- js7/api/joc/http/v_2_8_2/settings/store.py +36 -0
- js7/api/joc/http/v_2_8_2/tasks/history.py +36 -0
- js7/api/joc/http/v_2_8_2/workflow/transition.py +36 -0
- js7/api/joc/http/v_2_8_2/workflow/workflow.py +36 -0
- js7/api/joc/http/v_2_8_2/workflows/resume.py +36 -0
- js7/api/joc/http/v_2_8_2/workflows/skip.py +36 -0
- js7/api/joc/http/v_2_8_2/workflows/stop.py +36 -0
- js7/api/joc/http/v_2_8_2/workflows/suspend.py +36 -0
- js7/api/joc/http/v_2_8_2/workflows/unskip.py +36 -0
- js7/api/joc/http/v_2_8_2/workflows/unstop.py +36 -0
- js7/api/joc/http/v_2_8_2/workflows/workflows.py +36 -0
- js7/api/joc/interface/dispatcher.py +76 -0
- js7/api/joc/interface/interface.py +8 -0
- js7/api/joc/interface/resolver.py +75 -0
- js7/client/action/agent/confirm_node_loss_agent_action.py +75 -0
- js7/client/action/agent/delete_subagent_action.py +77 -0
- js7/client/action/agent/delete_subagent_clusters_action.py +75 -0
- js7/client/action/agent/deploy_cluster_agents_action.py +75 -0
- js7/client/action/agent/deploy_standalone_agents_action.py +75 -0
- js7/client/action/agent/deploy_subagent_clusters_action.py +75 -0
- js7/client/action/agent/disable_standalone_agents_action.py +75 -0
- js7/client/action/agent/disable_subagents_action.py +75 -0
- js7/client/action/agent/enable_standalone_agents_action.py +75 -0
- js7/client/action/agent/enable_subagents_action.py +75 -0
- js7/client/action/agent/export_agents_action.py +101 -0
- js7/client/action/agent/get_agents_status_action.py +55 -0
- js7/client/action/agent/import_agents_action.py +139 -0
- js7/client/action/agent/remove_agent_action.py +79 -0
- js7/client/action/agent/reset_agents_action.py +79 -0
- js7/client/action/agent/reset_subagent_action.py +79 -0
- js7/client/action/agent/revoke_cluster_agents_action.py +75 -0
- js7/client/action/agent/revoke_standalone_agents_action.py +75 -0
- js7/client/action/agent/revoke_subagent_clusters_action.py +75 -0
- js7/client/action/agent/store_cluster_agents_action.py +99 -0
- js7/client/action/agent/store_standalone_agents_action.py +87 -0
- js7/client/action/agent/store_subagent_clusters_action.py +83 -0
- js7/client/action/agent/store_subagents_action.py +97 -0
- js7/client/action/agent/switchover_agent_action.py +75 -0
- js7/client/action/controller/appoint_nodes_controller_action.py +67 -0
- js7/client/action/controller/cancel_and_restart_controller_action.py +72 -0
- js7/client/action/controller/cancel_controller_action.py +71 -0
- js7/client/action/controller/confirm_cluster_node_loss_action.py +68 -0
- js7/client/action/controller/get_controller_components_action.py +41 -0
- js7/client/action/controller/get_controller_status_action.py +72 -0
- js7/client/action/controller/register_controller_action.py +93 -0
- js7/client/action/controller/restart_controller_action.py +72 -0
- js7/client/action/controller/switchover_controller_cluster_action.py +67 -0
- js7/client/action/controller/terminate_controller_action.py +72 -0
- js7/client/action/controller/test_controller_instance_action.py +65 -0
- js7/client/action/controller/unregister_controller_action.py +68 -0
- js7/client/action/daily_plan/cancel_orders_action.py +59 -0
- js7/client/action/daily_plan/copy_orders_action.py +108 -0
- js7/client/action/daily_plan/create_projections_action.py +24 -0
- js7/client/action/daily_plan/delete_orders_action.py +80 -0
- js7/client/action/daily_plan/delete_submissions_action.py +83 -0
- js7/client/action/daily_plan/generate_orders_action.py +121 -0
- js7/client/action/daily_plan/get_calendar_projections_action.py +59 -0
- js7/client/action/daily_plan/get_orders_action.py +70 -0
- js7/client/action/daily_plan/get_projection_dates_action.py +59 -0
- js7/client/action/daily_plan/modify_orders_action.py +130 -0
- js7/client/action/daily_plan/submit_orders_action.py +79 -0
- js7/client/action/helper/decrypt_action.py +82 -0
- js7/client/action/helper/encrypt_action.py +87 -0
- js7/client/action/iam/block_account_action.py +71 -0
- js7/client/action/iam/change_account_password_action.py +96 -0
- js7/client/action/iam/disable_accounts_action.py +75 -0
- js7/client/action/iam/enable_accounts_action.py +75 -0
- js7/client/action/iam/get_account_permissions_action.py +75 -0
- js7/client/action/iam/get_accounts_action.py +76 -0
- js7/client/action/iam/get_blocked_accounts_action.py +76 -0
- js7/client/action/iam/get_folder_permissions_action.py +112 -0
- js7/client/action/iam/get_identity_service_settings_action.py +70 -0
- js7/client/action/iam/get_identity_services_action.py +102 -0
- js7/client/action/iam/get_permissions_action.py +113 -0
- js7/client/action/iam/get_roles_action.py +57 -0
- js7/client/action/iam/remove_accounts_action.py +75 -0
- js7/client/action/iam/remove_folder_permissions_action.py +91 -0
- js7/client/action/iam/remove_identity_service_action.py +67 -0
- js7/client/action/iam/remove_permissions_action.py +88 -0
- js7/client/action/iam/remove_roles_action.py +75 -0
- js7/client/action/iam/rename_account_action.py +83 -0
- js7/client/action/iam/rename_folder_permissions_action.py +100 -0
- js7/client/action/iam/rename_identity_service_action.py +75 -0
- js7/client/action/iam/rename_permission_action.py +103 -0
- js7/client/action/iam/rename_role_action.py +83 -0
- js7/client/action/iam/reset_account_passwords_action.py +75 -0
- js7/client/action/iam/set_folder_permissions_action.py +96 -0
- js7/client/action/iam/set_permissions_action.py +91 -0
- js7/client/action/iam/store_account_action.py +69 -0
- js7/client/action/iam/store_identity_service_action.py +75 -0
- js7/client/action/iam/store_identity_service_settings_action.py +74 -0
- js7/client/action/iam/store_role_action.py +79 -0
- js7/client/action/iam/unblock_accounts_action.py +67 -0
- js7/client/action/inventory/deploy_configurations_action.py +138 -0
- js7/client/action/inventory/export_configurations_action.py +203 -0
- js7/client/action/inventory/export_folders_action.py +160 -0
- js7/client/action/inventory/get_change_dependencies_action.py +161 -0
- js7/client/action/inventory/get_changes_action.py +59 -0
- js7/client/action/inventory/get_git_credentials_action.py +29 -0
- js7/client/action/inventory/git_add_action.py +72 -0
- js7/client/action/inventory/git_checkout_action.py +88 -0
- js7/client/action/inventory/git_clone_action.py +84 -0
- js7/client/action/inventory/git_commit_action.py +80 -0
- js7/client/action/inventory/git_pull_action.py +72 -0
- js7/client/action/inventory/git_push_action.py +76 -0
- js7/client/action/inventory/import_configurations_action.py +153 -0
- js7/client/action/inventory/import_deploy_configurations_action.py +188 -0
- js7/client/action/inventory/read_from_local_repository_action.py +67 -0
- js7/client/action/inventory/recall_folder_action.py +89 -0
- js7/client/action/inventory/recall_released_configuration_action.py +75 -0
- js7/client/action/inventory/release_configuartions_action.py +89 -0
- js7/client/action/inventory/remove_configurations_action.py +77 -0
- js7/client/action/inventory/remove_configurations_from_trash_action.py +80 -0
- js7/client/action/inventory/remove_folder_action.py +67 -0
- js7/client/action/inventory/remove_folder_from_trash_action.py +69 -0
- js7/client/action/inventory/remove_git_credentials_action.py +53 -0
- js7/client/action/inventory/remove_repository_configuration_action.py +84 -0
- js7/client/action/inventory/restore_configuration_from_trash_action.py +84 -0
- js7/client/action/inventory/revalidate_folder_action.py +46 -0
- js7/client/action/inventory/revoke_configurations_action.py +86 -0
- js7/client/action/inventory/store_configuration_action.py +79 -0
- js7/client/action/inventory/store_git_credentials_action.py +99 -0
- js7/client/action/inventory/store_repository_configuration_action.py +124 -0
- js7/client/action/inventory/update_repository_configuration_action.py +85 -0
- js7/client/action/inventory/validate_configuration_action.py +58 -0
- js7/client/action/joc/get_components_versions_action.py +57 -0
- js7/client/action/joc/get_license_info_action.py +22 -0
- js7/client/action/joc/get_settings_action.py +19 -0
- js7/client/action/joc/get_version_action.py +17 -0
- js7/client/action/joc/restart_proxies_action.py +50 -0
- js7/client/action/joc/restart_service_action.py +74 -0
- js7/client/action/joc/run_service_action.py +74 -0
- js7/client/action/joc/store_settings_action.py +62 -0
- js7/client/action/joc/switch_over_action.py +89 -0
- js7/client/action/order/add_orders_action.py +115 -0
- js7/client/action/order/cancel_orders_action.py +93 -0
- js7/client/action/order/confirm_orders_action.py +86 -0
- js7/client/action/order/continue_orders_action.py +86 -0
- js7/client/action/order/get_order_history_action.py +84 -0
- js7/client/action/order/get_orders_action.py +83 -0
- js7/client/action/order/remove_terminated_orders_action.py +86 -0
- js7/client/action/order/resume_orders_action.py +102 -0
- js7/client/action/order/suspend_orders_action.py +97 -0
- js7/client/action/task/get_task_history_info_action.py +88 -0
- js7/client/action/workflow/get_workflow_versions_action.py +131 -0
- js7/client/action/workflow/resume_workflows_action.py +76 -0
- js7/client/action/workflow/set_workflow_version_as_current_action.py +86 -0
- js7/client/action/workflow/skip_job_instructions_action.py +83 -0
- js7/client/action/workflow/stop_job_instructions_action.py +83 -0
- js7/client/action/workflow/suspend_workflows_action.py +76 -0
- js7/client/action/workflow/unskip_job_instructions_action.py +83 -0
- js7/client/action/workflow/unstop_job_instructions_action.py +79 -0
- js7/client/auth/auth_provider.py +109 -0
- js7/client/auth/login.py +34 -0
- js7/client/auth/logout.py +22 -0
- js7/client/client.py +250 -0
- js7/client/context.py +40 -0
- js7/client/feature/agent/agent.py +26 -0
- js7/client/feature/agent/deploy.py +134 -0
- js7/client/feature/agent/manage.py +363 -0
- js7/client/feature/agent/operate.py +577 -0
- js7/client/feature/controller/controller.py +19 -0
- js7/client/feature/controller/manage.py +214 -0
- js7/client/feature/controller/operate.py +274 -0
- js7/client/feature/daily_plan/daily_plan.py +14 -0
- js7/client/feature/daily_plan/manage.py +179 -0
- js7/client/feature/daily_plan/operate.py +354 -0
- js7/client/feature/iam/iam.py +14 -0
- js7/client/feature/iam/manage.py +1311 -0
- js7/client/feature/inventory/inventory.py +13 -0
- js7/client/feature/inventory/manage.py +943 -0
- js7/client/feature/inventory/manage_repository.py +533 -0
- js7/client/feature/joc/joc.py +18 -0
- js7/client/feature/joc/manage.py +102 -0
- js7/client/feature/joc/operate.py +185 -0
- js7/client/feature/order/manage.py +79 -0
- js7/client/feature/order/operate.py +346 -0
- js7/client/feature/order/order.py +18 -0
- js7/client/feature/task/task.py +54 -0
- js7/client/feature/workflow/manage.py +54 -0
- js7/client/feature/workflow/operate.py +336 -0
- js7/client/feature/workflow/workflow.py +19 -0
- js7/java/lib/3rd-party/bcpg-jdk15to18-1.78.1.jar +0 -0
- js7/java/lib/3rd-party/bcpkix-jdk15to18-1.78.1.jar +0 -0
- js7/java/lib/3rd-party/bcprov-jdk15to18-1.78.1.jar +0 -0
- js7/java/lib/3rd-party/bcutil-jdk15to18-1.78.1.jar +0 -0
- js7/java/lib/3rd-party/commons-io-2.15.1.jar +0 -0
- js7/java/lib/3rd-party/commons-lang3-3.14.0.jar +0 -0
- js7/java/lib/3rd-party/jackson-core-2.14.2.jar +0 -0
- js7/java/lib/3rd-party/jackson-databind-2.14.2.jar +0 -0
- js7/java/lib/3rd-party/jackson-dataformat-xml-2.14.2.jar +0 -0
- js7/java/lib/3rd-party/jakarta.annotation-api-2.1.1.jar +0 -0
- js7/java/lib/3rd-party/javax.activation-api-1.2.0.jar +0 -0
- js7/java/lib/3rd-party/jaxb-api-2.4.0-b180830.0359.jar +0 -0
- js7/java/lib/3rd-party/org.apache.logging.log4j.log4j-api-2.23.1.jar +0 -0
- js7/java/lib/3rd-party/org.apache.logging.log4j.log4j-core-2.23.1.jar +0 -0
- js7/java/lib/3rd-party/org.apache.logging.log4j.log4j-slf4j2-impl-2.23.1.jar +0 -0
- js7/java/lib/3rd-party/org.slf4j.slf4j-api-2.0.13.jar +0 -0
- js7/java/lib/3rd-party/stax2-api-4.2.1.jar +0 -0
- js7/java/lib/3rd-party/woodstox-core-6.5.0.jar +0 -0
- js7/java/lib/sos/sos-commons-encryption-2.7.3.jar +0 -0
- js7/java/lib/sos/sos-commons-exception-2.7.3.jar +0 -0
- js7/java/lib/sos/sos-commons-sign-2.7.3.jar +0 -0
- js7/java/lib/sos/sos-webservices-json-2.7.3.jar +0 -0
- js7/model/__init__.py +132 -0
- js7/model/configuration/auth_configuration.py +24 -0
- js7/model/configuration/client_configuration.py +6 -0
- js7/model/configuration/http_configuration.py +10 -0
- js7/model/error/http/joc_exceptions.py +151 -0
- js7/model/private/api/endpoint.py +30 -0
- js7/model/private/http/joc/joc_v_2_8_2.py +3666 -0
- js7/model/public/client/common/__init__.py +27 -0
- js7/model/public/client/common/accounts.py +21 -0
- js7/model/public/client/common/audit_log.py +8 -0
- js7/model/public/client/common/changes.py +18 -0
- js7/model/public/client/common/configurations.py +53 -0
- js7/model/public/client/common/cycle.py +12 -0
- js7/model/public/client/common/git_credentials.py +12 -0
- js7/model/public/client/common/identity_service.py +14 -0
- js7/model/public/client/common/schedule_time.py +50 -0
- js7/model/public/client/common/store_agents.py +96 -0
- js7/model/public/client/enum/__init__.py +19 -0
- js7/model/public/client/enum/object_types.py +48 -0
- js7/model/public/client/enum/operation_type.py +11 -0
- js7/model/public/client/enum/order_priority.py +9 -0
- js7/model/public/client/filter/__init__.py +35 -0
- js7/model/public/client/filter/daily_plan_order_filters.py +255 -0
- js7/model/public/client/filter/element/__init__.py +3 -0
- js7/model/public/client/filter/element/folder.py +6 -0
- js7/model/public/client/filter/element/workflow_id.py +10 -0
- js7/model/public/client/filter/export_filter.py +52 -0
- js7/model/public/client/filter/export_folders_filter.py +34 -0
- js7/model/public/client/filter/get_order_filter.py +59 -0
- js7/model/public/client/filter/order_history_filter.py +113 -0
- js7/model/public/client/filter/resume_order_filter.py +45 -0
- js7/model/public/client/filter/suspend_order_filter.py +44 -0
- js7/model/public/client/filter/tasks_filter.py +50 -0
- js7/model/public/client/input/__init__.py +2 -0
- js7/model/public/client/input/add_order.py +50 -0
- js7/service/http_service.py +206 -0
- js7/util/bytes_converter/bytes_to_archive_bytes.py +52 -0
- js7/util/bytes_converter/bytes_to_file.py +12 -0
- js7/util/bytes_converter/files_to_bytes.py +52 -0
- js7/util/bytes_converter/read_bytes_archive_files_to_bytes.py +69 -0
- js7/util/bytes_converter/sign_to_bytes.py +106 -0
- js7/util/check_matching_version.py +20 -0
- js7/util/detect_archive_type.py +37 -0
- js7/util/str_converter/order_id_to_order_name.py +5 -0
- js7/validator/http/joc_http_status_validator.py +155 -0
- js7_client_python-2.0.1.0.dist-info/LICENSE +674 -0
- js7_client_python-2.0.1.0.dist-info/METADATA +763 -0
- js7_client_python-2.0.1.0.dist-info/RECORD +389 -0
- js7_client_python-2.0.1.0.dist-info/WHEEL +5 -0
- js7_client_python-2.0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....model.public.client.common.audit_log import AuditLog
|
|
5
|
+
from ....model.private.api.endpoint import EndpointCall
|
|
6
|
+
from ....model.private.http.joc.joc_v_2_8_2 import (
|
|
7
|
+
OK as OK_V_2_8_2,
|
|
8
|
+
AuditParams as AuditParams_V_2_8_2,
|
|
9
|
+
ModifyWorkflow as ModifyWorkflow_V_2_8_2,
|
|
10
|
+
WorkflowID as WorkflowID_V_2_8_2
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
from ....util.check_matching_version import check_matching_version
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def set_workflow_version_as_current_action(
|
|
17
|
+
*,
|
|
18
|
+
context: Context,
|
|
19
|
+
controller_id: str,
|
|
20
|
+
workflow_path: str,
|
|
21
|
+
workflow_version_id: str,
|
|
22
|
+
audit_log: Optional[AuditLog]
|
|
23
|
+
) -> bool:
|
|
24
|
+
|
|
25
|
+
if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
|
|
26
|
+
request_data = _build_v_2_8_2_request(
|
|
27
|
+
controller_id=controller_id,
|
|
28
|
+
workflow_path=workflow_path,
|
|
29
|
+
workflow_version_id=workflow_version_id,
|
|
30
|
+
audit_log=audit_log
|
|
31
|
+
)
|
|
32
|
+
else:
|
|
33
|
+
raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
|
|
34
|
+
|
|
35
|
+
# Calls the dispatcher for the matching JOC version
|
|
36
|
+
result = context.joc_api.dispatch(endpoint_id="workflow/transition", call=EndpointCall(
|
|
37
|
+
http_service=context.http_service,
|
|
38
|
+
access_token=context.auth_provider.login(),
|
|
39
|
+
payload=request_data,
|
|
40
|
+
options=None,
|
|
41
|
+
))
|
|
42
|
+
|
|
43
|
+
if isinstance(result, OK_V_2_8_2):
|
|
44
|
+
return bool(result.ok)
|
|
45
|
+
|
|
46
|
+
raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
|
|
47
|
+
|
|
48
|
+
#---------------------#
|
|
49
|
+
# Build 2.8.2 request #
|
|
50
|
+
#---------------------#
|
|
51
|
+
def _build_v_2_8_2_request(
|
|
52
|
+
*,
|
|
53
|
+
controller_id: str,
|
|
54
|
+
workflow_path: str,
|
|
55
|
+
workflow_version_id: str,
|
|
56
|
+
audit_log: Optional[AuditLog]
|
|
57
|
+
) -> ModifyWorkflow_V_2_8_2:
|
|
58
|
+
|
|
59
|
+
# Validate: controller_id
|
|
60
|
+
if not controller_id:
|
|
61
|
+
raise ValueError("'controller_id' is required")
|
|
62
|
+
|
|
63
|
+
# Validate: workflow_version_id
|
|
64
|
+
if not workflow_version_id:
|
|
65
|
+
raise ValueError("'workflow_version_id' is required")
|
|
66
|
+
|
|
67
|
+
# Validate: workflow_path
|
|
68
|
+
if not workflow_path:
|
|
69
|
+
raise ValueError("'workflow_path' is required")
|
|
70
|
+
|
|
71
|
+
# Build: audit_log
|
|
72
|
+
res_audit_log = AuditParams_V_2_8_2(
|
|
73
|
+
ticket_link=audit_log.ticket_link,
|
|
74
|
+
comment=audit_log.comment,
|
|
75
|
+
time_spent=audit_log.time_spent
|
|
76
|
+
) if audit_log else None
|
|
77
|
+
|
|
78
|
+
# Result
|
|
79
|
+
return ModifyWorkflow_V_2_8_2(
|
|
80
|
+
controller_id=controller_id,
|
|
81
|
+
workflow_id=WorkflowID_V_2_8_2(
|
|
82
|
+
path=workflow_path,
|
|
83
|
+
version_id=workflow_version_id
|
|
84
|
+
),
|
|
85
|
+
audit_log=res_audit_log
|
|
86
|
+
)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....model.public.client.common.audit_log import AuditLog
|
|
5
|
+
from ....model.private.api.endpoint import EndpointCall
|
|
6
|
+
from ....model.private.http.joc.joc_v_2_8_2 import (
|
|
7
|
+
OK as OK_V_2_8_2,
|
|
8
|
+
AuditParams as AuditParams_V_2_8_2,
|
|
9
|
+
ModifyWorkflowLabels as ModifyWorkflowLabels_V_2_8_2
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from ....util.check_matching_version import check_matching_version
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def skip_job_instructions_action(
|
|
16
|
+
*,
|
|
17
|
+
context: Context,
|
|
18
|
+
controller_id: str,
|
|
19
|
+
workflow_path: str,
|
|
20
|
+
labels: List[str],
|
|
21
|
+
audit_log: Optional[AuditLog]
|
|
22
|
+
) -> bool:
|
|
23
|
+
|
|
24
|
+
if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
|
|
25
|
+
request_data = _build_v_2_8_2_request(
|
|
26
|
+
controller_id=controller_id,
|
|
27
|
+
workflow_path=workflow_path,
|
|
28
|
+
labels=labels,
|
|
29
|
+
audit_log=audit_log
|
|
30
|
+
)
|
|
31
|
+
else:
|
|
32
|
+
raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
|
|
33
|
+
|
|
34
|
+
# Calls the dispatcher for the matching JOC version
|
|
35
|
+
result = context.joc_api.dispatch(endpoint_id="workflow/skip", call=EndpointCall(
|
|
36
|
+
http_service=context.http_service,
|
|
37
|
+
access_token=context.auth_provider.login(),
|
|
38
|
+
payload=request_data,
|
|
39
|
+
options=None,
|
|
40
|
+
))
|
|
41
|
+
|
|
42
|
+
if isinstance(result, OK_V_2_8_2):
|
|
43
|
+
return bool(result.ok)
|
|
44
|
+
|
|
45
|
+
raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
|
|
46
|
+
|
|
47
|
+
#---------------------#
|
|
48
|
+
# Build 2.8.2 request #
|
|
49
|
+
#---------------------#
|
|
50
|
+
def _build_v_2_8_2_request(
|
|
51
|
+
*,
|
|
52
|
+
controller_id: str,
|
|
53
|
+
workflow_path: str,
|
|
54
|
+
labels: List[str],
|
|
55
|
+
audit_log: Optional[AuditLog]
|
|
56
|
+
) -> ModifyWorkflowLabels_V_2_8_2:
|
|
57
|
+
|
|
58
|
+
# Validate: controller_id
|
|
59
|
+
if not controller_id:
|
|
60
|
+
raise ValueError("'controller_id' is required.")
|
|
61
|
+
|
|
62
|
+
# Validate: workflow_path
|
|
63
|
+
if not workflow_path:
|
|
64
|
+
raise ValueError("'workflow_path' is required.")
|
|
65
|
+
|
|
66
|
+
# Validate: labels
|
|
67
|
+
if not labels:
|
|
68
|
+
raise ValueError("At least one label in 'labels' is required.")
|
|
69
|
+
|
|
70
|
+
# Build: audit_log
|
|
71
|
+
res_audit_log = AuditParams_V_2_8_2(
|
|
72
|
+
ticket_link=audit_log.ticket_link,
|
|
73
|
+
comment=audit_log.comment,
|
|
74
|
+
time_spent=audit_log.time_spent
|
|
75
|
+
) if audit_log else None
|
|
76
|
+
|
|
77
|
+
# Result
|
|
78
|
+
return ModifyWorkflowLabels_V_2_8_2(
|
|
79
|
+
controller_id=controller_id,
|
|
80
|
+
workflow_path=workflow_path,
|
|
81
|
+
labels=labels,
|
|
82
|
+
audit_log=res_audit_log
|
|
83
|
+
)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....model.public.client.common.audit_log import AuditLog
|
|
5
|
+
from ....model.private.api.endpoint import EndpointCall
|
|
6
|
+
from ....model.private.http.joc.joc_v_2_8_2 import (
|
|
7
|
+
OK as OK_V_2_8_2,
|
|
8
|
+
AuditParams as AuditParams_V_2_8_2,
|
|
9
|
+
ModifyWorkflowPositions as ModifyWorkflowPositions_V_2_8_2
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from ....util.check_matching_version import check_matching_version
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def stop_job_instructions_action(
|
|
16
|
+
*,
|
|
17
|
+
context: Context,
|
|
18
|
+
controller_id: str,
|
|
19
|
+
workflow_path: str,
|
|
20
|
+
labels: List[str],
|
|
21
|
+
audit_log: Optional[AuditLog]
|
|
22
|
+
) -> bool:
|
|
23
|
+
|
|
24
|
+
if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
|
|
25
|
+
request_data = _build_v_2_8_2_request(
|
|
26
|
+
controller_id=controller_id,
|
|
27
|
+
workflow_path=workflow_path,
|
|
28
|
+
labels=labels,
|
|
29
|
+
audit_log=audit_log
|
|
30
|
+
)
|
|
31
|
+
else:
|
|
32
|
+
raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
|
|
33
|
+
|
|
34
|
+
# Calls the dispatcher for the matching JOC version
|
|
35
|
+
result = context.joc_api.dispatch(endpoint_id="workflow/stop", call=EndpointCall(
|
|
36
|
+
http_service=context.http_service,
|
|
37
|
+
access_token=context.auth_provider.login(),
|
|
38
|
+
payload=request_data,
|
|
39
|
+
options=None,
|
|
40
|
+
))
|
|
41
|
+
|
|
42
|
+
if isinstance(result, OK_V_2_8_2):
|
|
43
|
+
return bool(result.ok)
|
|
44
|
+
|
|
45
|
+
raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
|
|
46
|
+
|
|
47
|
+
#---------------------#
|
|
48
|
+
# Build 2.8.2 request #
|
|
49
|
+
#---------------------#
|
|
50
|
+
def _build_v_2_8_2_request(
|
|
51
|
+
*,
|
|
52
|
+
controller_id: str,
|
|
53
|
+
workflow_path: str,
|
|
54
|
+
labels: List[str],
|
|
55
|
+
audit_log: Optional[AuditLog]
|
|
56
|
+
) -> ModifyWorkflowPositions_V_2_8_2:
|
|
57
|
+
|
|
58
|
+
# Validate: controller_id
|
|
59
|
+
if not controller_id:
|
|
60
|
+
raise ValueError("'controller_id' is required")
|
|
61
|
+
|
|
62
|
+
# Validate: workflow_path
|
|
63
|
+
if not workflow_path:
|
|
64
|
+
raise ValueError("'workflow_path' is required")
|
|
65
|
+
|
|
66
|
+
# Validate: labels
|
|
67
|
+
if not labels:
|
|
68
|
+
raise ValueError("At least one label in 'labels' is required.")
|
|
69
|
+
|
|
70
|
+
# Build: audit_log
|
|
71
|
+
res_audit_log = AuditParams_V_2_8_2(
|
|
72
|
+
ticket_link=audit_log.ticket_link,
|
|
73
|
+
comment=audit_log.comment,
|
|
74
|
+
time_spent=audit_log.time_spent
|
|
75
|
+
) if audit_log else None
|
|
76
|
+
|
|
77
|
+
# Result
|
|
78
|
+
return ModifyWorkflowPositions_V_2_8_2(
|
|
79
|
+
controller_id=controller_id,
|
|
80
|
+
workflow_paths=[workflow_path],
|
|
81
|
+
positions=[label for label in labels], # Type checker trick.
|
|
82
|
+
audit_log=res_audit_log
|
|
83
|
+
)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....model.public.client.common.audit_log import AuditLog
|
|
5
|
+
from ....model.private.api.endpoint import EndpointCall
|
|
6
|
+
from ....model.private.http.joc.joc_v_2_8_2 import (
|
|
7
|
+
OK as OK_V_2_8_2,
|
|
8
|
+
AuditParams as AuditParams_V_2_8_2,
|
|
9
|
+
ModifyWorkflows as ModifyWorkflows_V_2_8_2
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from ....util.check_matching_version import check_matching_version
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def suspend_workflows_action(
|
|
16
|
+
*,
|
|
17
|
+
context: Context,
|
|
18
|
+
controller_id: str,
|
|
19
|
+
workflow_paths: List[str],
|
|
20
|
+
audit_log: Optional[AuditLog]
|
|
21
|
+
) -> bool:
|
|
22
|
+
|
|
23
|
+
if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
|
|
24
|
+
request_data = _build_v_2_8_2_request(
|
|
25
|
+
controller_id=controller_id,
|
|
26
|
+
workflow_paths=workflow_paths,
|
|
27
|
+
audit_log=audit_log
|
|
28
|
+
)
|
|
29
|
+
else:
|
|
30
|
+
raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
|
|
31
|
+
|
|
32
|
+
# Calls the dispatcher for the matching JOC version
|
|
33
|
+
result = context.joc_api.dispatch(endpoint_id="workflows/suspend", call=EndpointCall(
|
|
34
|
+
http_service=context.http_service,
|
|
35
|
+
access_token=context.auth_provider.login(),
|
|
36
|
+
payload=request_data,
|
|
37
|
+
options=None,
|
|
38
|
+
))
|
|
39
|
+
|
|
40
|
+
if isinstance(result, OK_V_2_8_2):
|
|
41
|
+
return bool(result.ok)
|
|
42
|
+
|
|
43
|
+
raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
|
|
44
|
+
|
|
45
|
+
#---------------------#
|
|
46
|
+
# Build 2.8.2 request #
|
|
47
|
+
#---------------------#
|
|
48
|
+
def _build_v_2_8_2_request(
|
|
49
|
+
*,
|
|
50
|
+
controller_id: str,
|
|
51
|
+
workflow_paths: List[str],
|
|
52
|
+
audit_log: Optional[AuditLog]
|
|
53
|
+
) -> ModifyWorkflows_V_2_8_2:
|
|
54
|
+
|
|
55
|
+
# Validate: controller_id
|
|
56
|
+
if not controller_id:
|
|
57
|
+
raise ValueError("'controller_id' is required")
|
|
58
|
+
|
|
59
|
+
# Validate: workflow_paths
|
|
60
|
+
if not workflow_paths:
|
|
61
|
+
raise ValueError("At least one workflow path in 'workflow_paths' is required.")
|
|
62
|
+
|
|
63
|
+
# Build: audit_log
|
|
64
|
+
res_audit_log = AuditParams_V_2_8_2(
|
|
65
|
+
ticket_link=audit_log.ticket_link,
|
|
66
|
+
comment=audit_log.comment,
|
|
67
|
+
time_spent=audit_log.time_spent
|
|
68
|
+
) if audit_log else None
|
|
69
|
+
|
|
70
|
+
# Result
|
|
71
|
+
return ModifyWorkflows_V_2_8_2(
|
|
72
|
+
controller_id=controller_id,
|
|
73
|
+
workflow_paths=workflow_paths,
|
|
74
|
+
all=False,
|
|
75
|
+
audit_log=res_audit_log
|
|
76
|
+
)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....model.public.client.common.audit_log import AuditLog
|
|
5
|
+
from ....model.private.api.endpoint import EndpointCall
|
|
6
|
+
from ....model.private.http.joc.joc_v_2_8_2 import (
|
|
7
|
+
OK as OK_V_2_8_2,
|
|
8
|
+
AuditParams as AuditParams_V_2_8_2,
|
|
9
|
+
ModifyWorkflowLabels as ModifyWorkflowLabels_V_2_8_2
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from ....util.check_matching_version import check_matching_version
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def unskip_job_instructions_action(
|
|
16
|
+
*,
|
|
17
|
+
context: Context,
|
|
18
|
+
controller_id: str,
|
|
19
|
+
workflow_path: str,
|
|
20
|
+
labels: List[str],
|
|
21
|
+
audit_log: Optional[AuditLog]
|
|
22
|
+
) -> bool:
|
|
23
|
+
|
|
24
|
+
if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
|
|
25
|
+
request_data = _build_v_2_8_2_request(
|
|
26
|
+
controller_id=controller_id,
|
|
27
|
+
workflow_path=workflow_path,
|
|
28
|
+
labels=labels,
|
|
29
|
+
audit_log=audit_log
|
|
30
|
+
)
|
|
31
|
+
else:
|
|
32
|
+
raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
|
|
33
|
+
|
|
34
|
+
# Calls the dispatcher for the matching JOC version
|
|
35
|
+
result = context.joc_api.dispatch(endpoint_id="workflow/unskip", call=EndpointCall(
|
|
36
|
+
http_service=context.http_service,
|
|
37
|
+
access_token=context.auth_provider.login(),
|
|
38
|
+
payload=request_data,
|
|
39
|
+
options=None,
|
|
40
|
+
))
|
|
41
|
+
|
|
42
|
+
if isinstance(result, OK_V_2_8_2):
|
|
43
|
+
return bool(result.ok)
|
|
44
|
+
|
|
45
|
+
raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
|
|
46
|
+
|
|
47
|
+
#---------------------#
|
|
48
|
+
# Build 2.8.2 request #
|
|
49
|
+
#---------------------#
|
|
50
|
+
def _build_v_2_8_2_request(
|
|
51
|
+
*,
|
|
52
|
+
controller_id: str,
|
|
53
|
+
workflow_path: str,
|
|
54
|
+
labels: List[str],
|
|
55
|
+
audit_log: Optional[AuditLog]
|
|
56
|
+
) -> ModifyWorkflowLabels_V_2_8_2:
|
|
57
|
+
|
|
58
|
+
# Validate: controller_id
|
|
59
|
+
if not controller_id:
|
|
60
|
+
raise ValueError("'controller_id' is required.")
|
|
61
|
+
|
|
62
|
+
# Validate: workflow_path
|
|
63
|
+
if not workflow_path:
|
|
64
|
+
raise ValueError("'workflow_path' is required.")
|
|
65
|
+
|
|
66
|
+
# Validate: labels
|
|
67
|
+
if not labels:
|
|
68
|
+
raise ValueError("At least one label in 'labels' is required.")
|
|
69
|
+
|
|
70
|
+
# Build: audit_log
|
|
71
|
+
res_audit_log = AuditParams_V_2_8_2(
|
|
72
|
+
ticket_link=audit_log.ticket_link,
|
|
73
|
+
comment=audit_log.comment,
|
|
74
|
+
time_spent=audit_log.time_spent
|
|
75
|
+
) if audit_log else None
|
|
76
|
+
|
|
77
|
+
# Result
|
|
78
|
+
return ModifyWorkflowLabels_V_2_8_2(
|
|
79
|
+
controller_id=controller_id,
|
|
80
|
+
workflow_path=workflow_path,
|
|
81
|
+
labels=labels,
|
|
82
|
+
audit_log=res_audit_log
|
|
83
|
+
)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from ...context import Context
|
|
4
|
+
from ....model.public.client.common.audit_log import AuditLog
|
|
5
|
+
from ....model.private.api.endpoint import EndpointCall
|
|
6
|
+
from ....model.private.http.joc.joc_v_2_8_2 import (
|
|
7
|
+
OK as OK_V_2_8_2,
|
|
8
|
+
AuditParams as AuditParams_V_2_8_2,
|
|
9
|
+
ModifyWorkflowPositions as ModifyWorkflowPositions_V_2_8_2
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from ....util.check_matching_version import check_matching_version
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def unstop_job_instructions_action(
|
|
16
|
+
*,
|
|
17
|
+
context: Context,
|
|
18
|
+
controller_id: str,
|
|
19
|
+
workflow_path: str,
|
|
20
|
+
labels: List[str],
|
|
21
|
+
audit_log: Optional[AuditLog]
|
|
22
|
+
) -> bool:
|
|
23
|
+
|
|
24
|
+
if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
|
|
25
|
+
request_data = _build_v_2_8_2_request(
|
|
26
|
+
controller_id=controller_id,
|
|
27
|
+
workflow_path=workflow_path,
|
|
28
|
+
labels=labels,
|
|
29
|
+
audit_log=audit_log
|
|
30
|
+
)
|
|
31
|
+
else:
|
|
32
|
+
raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
|
|
33
|
+
|
|
34
|
+
# Calls the dispatcher for the matching JOC version
|
|
35
|
+
result = context.joc_api.dispatch(endpoint_id="workflow/unstop", call=EndpointCall(
|
|
36
|
+
http_service=context.http_service,
|
|
37
|
+
access_token=context.auth_provider.login(),
|
|
38
|
+
payload=request_data,
|
|
39
|
+
options=None,
|
|
40
|
+
))
|
|
41
|
+
|
|
42
|
+
if isinstance(result, OK_V_2_8_2):
|
|
43
|
+
return bool(result.ok)
|
|
44
|
+
|
|
45
|
+
raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
|
|
46
|
+
|
|
47
|
+
#---------------------#
|
|
48
|
+
# Build 2.8.2 request #
|
|
49
|
+
#---------------------#
|
|
50
|
+
def _build_v_2_8_2_request(
|
|
51
|
+
*,
|
|
52
|
+
controller_id: str,
|
|
53
|
+
workflow_path: str,
|
|
54
|
+
labels: List[str],
|
|
55
|
+
audit_log: Optional[AuditLog]
|
|
56
|
+
) -> ModifyWorkflowPositions_V_2_8_2:
|
|
57
|
+
|
|
58
|
+
# Validate: controller_id
|
|
59
|
+
if not controller_id:
|
|
60
|
+
raise ValueError("'controller_id' is required")
|
|
61
|
+
|
|
62
|
+
# Validate: workflow_path
|
|
63
|
+
if not workflow_path:
|
|
64
|
+
raise ValueError("'workflow_path' is required")
|
|
65
|
+
|
|
66
|
+
# Build: audit_log
|
|
67
|
+
res_audit_log = AuditParams_V_2_8_2(
|
|
68
|
+
ticket_link=audit_log.ticket_link,
|
|
69
|
+
comment=audit_log.comment,
|
|
70
|
+
time_spent=audit_log.time_spent
|
|
71
|
+
) if audit_log else None
|
|
72
|
+
|
|
73
|
+
# Result
|
|
74
|
+
return ModifyWorkflowPositions_V_2_8_2(
|
|
75
|
+
controller_id=controller_id,
|
|
76
|
+
workflow_paths=[workflow_path],
|
|
77
|
+
positions=[label for label in labels], # Type checker trick.
|
|
78
|
+
audit_log=res_audit_log
|
|
79
|
+
)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import base64, time
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
from ...service.http_service import HTTPService
|
|
5
|
+
from ...model.configuration.auth_configuration import AuthConfiguration
|
|
6
|
+
|
|
7
|
+
from .login import login as login_handler
|
|
8
|
+
from .logout import logout as logout_handler
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class AuthProvider:
|
|
12
|
+
def __init__(self, http_service: HTTPService, joc_version: Optional[str]):
|
|
13
|
+
self._http_service = http_service
|
|
14
|
+
self._joc_version = joc_version
|
|
15
|
+
|
|
16
|
+
self._auth_cache: Optional[AuthConfiguration] = None
|
|
17
|
+
self._access_token: Optional[str] = None
|
|
18
|
+
self._access_token_expires_at: float = 0.0
|
|
19
|
+
|
|
20
|
+
def _basic_auth_header(self, username: str, password: str) -> str:
|
|
21
|
+
if not username or not password:
|
|
22
|
+
raise ValueError("'username' or 'password' must not be empty.")
|
|
23
|
+
|
|
24
|
+
token = f"{username}:{password}"
|
|
25
|
+
encoded_token = base64.b64encode(token.encode("utf-8")).decode("ascii")
|
|
26
|
+
return f"Basic {encoded_token}"
|
|
27
|
+
|
|
28
|
+
def login(self, auth_config: Optional[AuthConfiguration] = None, force_server_login: bool = False) -> str:
|
|
29
|
+
"""Returns the access token"""
|
|
30
|
+
|
|
31
|
+
# Checks whether the access token is still valid
|
|
32
|
+
if self._access_token and self._access_token_expires_at > time.time():
|
|
33
|
+
# Returns the cached access token if no forced server login is required
|
|
34
|
+
if not force_server_login:
|
|
35
|
+
return self._access_token
|
|
36
|
+
|
|
37
|
+
# Return stored access token if no auth was provided
|
|
38
|
+
if self._access_token and not auth_config:
|
|
39
|
+
return self._access_token
|
|
40
|
+
|
|
41
|
+
if not auth_config:
|
|
42
|
+
self._auth_cache = None
|
|
43
|
+
raise ValueError("Authentication failed.")
|
|
44
|
+
|
|
45
|
+
# Performs certificate login
|
|
46
|
+
if auth_config.cert_auth:
|
|
47
|
+
# Sets cert file paths in server handler
|
|
48
|
+
self._http_service.auth_certfile_path = auth_config.cert_auth.certfile_path
|
|
49
|
+
self._http_service.auth_keyfile_path = auth_config.cert_auth.keyfile_path
|
|
50
|
+
|
|
51
|
+
login_response = login_handler(
|
|
52
|
+
http_service=self._http_service,
|
|
53
|
+
basic_auth=None
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
self._auth_cache = auth_config
|
|
57
|
+
self._access_token = login_response.access_token
|
|
58
|
+
|
|
59
|
+
if login_response.session_timeout:
|
|
60
|
+
self._access_token_expires_at = time.time() + login_response.session_timeout / 1000
|
|
61
|
+
else:
|
|
62
|
+
self._access_token_expires_at = 0
|
|
63
|
+
|
|
64
|
+
return self._access_token
|
|
65
|
+
|
|
66
|
+
elif auth_config.basic_auth: # Performs username & password login
|
|
67
|
+
if not auth_config.basic_auth.username or not auth_config.basic_auth.password:
|
|
68
|
+
raise ValueError("'username' and 'password' are required.")
|
|
69
|
+
|
|
70
|
+
basic_auth_str = self._basic_auth_header(auth_config.basic_auth.username, auth_config.basic_auth.password)
|
|
71
|
+
|
|
72
|
+
login_response = login_handler(
|
|
73
|
+
http_service=self._http_service,
|
|
74
|
+
basic_auth=basic_auth_str
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
self._access_token = login_response.access_token
|
|
78
|
+
|
|
79
|
+
if login_response.session_timeout:
|
|
80
|
+
self._access_token_expires_at = time.time() + login_response.session_timeout / 1000
|
|
81
|
+
else:
|
|
82
|
+
self._access_token_expires_at = 0
|
|
83
|
+
|
|
84
|
+
return self._access_token
|
|
85
|
+
|
|
86
|
+
else:
|
|
87
|
+
raise RuntimeError("Authentication failed. Neither certificate nor Basic Auth parameters are available.")
|
|
88
|
+
|
|
89
|
+
def logout(self) -> bool:
|
|
90
|
+
try:
|
|
91
|
+
access_token = self.login()
|
|
92
|
+
|
|
93
|
+
if not access_token:
|
|
94
|
+
return False
|
|
95
|
+
|
|
96
|
+
return logout_handler(
|
|
97
|
+
http_service=self._http_service,
|
|
98
|
+
access_token=access_token,
|
|
99
|
+
)
|
|
100
|
+
except Exception:
|
|
101
|
+
return False
|
|
102
|
+
finally:
|
|
103
|
+
# Always clean up local state
|
|
104
|
+
self._http_service.close()
|
|
105
|
+
self._joc_version = None
|
|
106
|
+
self._logger = None
|
|
107
|
+
self._auth_cache = None
|
|
108
|
+
self._access_token = None
|
|
109
|
+
self._access_token_expires_at = 0.0
|
js7/client/auth/login.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
from ...api.joc.interface.interface import Interface
|
|
6
|
+
from ...service.http_service import HTTPService
|
|
7
|
+
from ...model.private.http.joc.joc_v_2_8_2 import Authentication as Authentication_V_2_8_2
|
|
8
|
+
from ...model.private.api.endpoint import EndpointCall
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class LoginResponse:
|
|
13
|
+
access_token: str
|
|
14
|
+
session_timeout: Optional[int]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def login(*, http_service: HTTPService, basic_auth: Optional[str]) -> LoginResponse:
|
|
18
|
+
joc_in = Interface(version=None)
|
|
19
|
+
|
|
20
|
+
result = joc_in.dispatch(endpoint_id="authentication/login", call=EndpointCall(
|
|
21
|
+
http_service=http_service,
|
|
22
|
+
access_token=None,
|
|
23
|
+
options={ "basic_auth": basic_auth }
|
|
24
|
+
))
|
|
25
|
+
|
|
26
|
+
if isinstance(result, Authentication_V_2_8_2):
|
|
27
|
+
if not result.access_token:
|
|
28
|
+
raise ValueError("Authentication response does not contain an access token.")
|
|
29
|
+
|
|
30
|
+
if all([result.access_token, result.session_timeout]):
|
|
31
|
+
return LoginResponse(access_token=result.access_token, session_timeout=result.session_timeout)
|
|
32
|
+
|
|
33
|
+
raise RuntimeError("Response model is unknown")
|
|
34
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from ...model.private.api.endpoint import EndpointCall
|
|
2
|
+
from ...service.http_service import HTTPService
|
|
3
|
+
from ...model.private.http.joc.joc_v_2_8_2 import Authentication as Authentication_V_2_8_2
|
|
4
|
+
from ...api.joc.interface.interface import Interface
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def logout(*, http_service: HTTPService, access_token: str) -> bool:
|
|
8
|
+
joc_in = Interface(version=None)
|
|
9
|
+
|
|
10
|
+
result = joc_in.dispatch(endpoint_id="authentication/logout", call=EndpointCall(
|
|
11
|
+
http_service=http_service,
|
|
12
|
+
access_token=access_token,
|
|
13
|
+
options=None
|
|
14
|
+
))
|
|
15
|
+
|
|
16
|
+
if isinstance(result, Authentication_V_2_8_2):
|
|
17
|
+
if not result.is_authenticated:
|
|
18
|
+
return True
|
|
19
|
+
else:
|
|
20
|
+
return False
|
|
21
|
+
|
|
22
|
+
raise RuntimeError("Response model is unknown")
|