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.
Files changed (389) hide show
  1. js7/__init__.py +8 -0
  2. js7/api/joc/http/v_2_8_2/agent/cluster/confirm_node_loss.py +36 -0
  3. js7/api/joc/http/v_2_8_2/agent/cluster/switchover.py +36 -0
  4. js7/api/joc/http/v_2_8_2/agent/delete.py +36 -0
  5. js7/api/joc/http/v_2_8_2/agents/agents.py +36 -0
  6. js7/api/joc/http/v_2_8_2/agents/cluster/delete.py +36 -0
  7. js7/api/joc/http/v_2_8_2/agents/cluster/deploy.py +36 -0
  8. js7/api/joc/http/v_2_8_2/agents/cluster/revoke.py +36 -0
  9. js7/api/joc/http/v_2_8_2/agents/cluster/store.py +36 -0
  10. js7/api/joc/http/v_2_8_2/agents/export.py +36 -0
  11. js7/api/joc/http/v_2_8_2/agents/import.py +74 -0
  12. js7/api/joc/http/v_2_8_2/agents/inventory/cluster/deploy.py +36 -0
  13. js7/api/joc/http/v_2_8_2/agents/inventory/cluster/revoke.py +36 -0
  14. js7/api/joc/http/v_2_8_2/agents/inventory/cluster/store.py +36 -0
  15. js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/delete.py +36 -0
  16. js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/disable.py +36 -0
  17. js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/enable.py +36 -0
  18. js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/reset.py +36 -0
  19. js7/api/joc/http/v_2_8_2/agents/inventory/cluster/subagents/store.py +36 -0
  20. js7/api/joc/http/v_2_8_2/agents/inventory/deploy.py +36 -0
  21. js7/api/joc/http/v_2_8_2/agents/inventory/disable.py +36 -0
  22. js7/api/joc/http/v_2_8_2/agents/inventory/enable.py +36 -0
  23. js7/api/joc/http/v_2_8_2/agents/inventory/revoke.py +36 -0
  24. js7/api/joc/http/v_2_8_2/agents/inventory/store.py +36 -0
  25. js7/api/joc/http/v_2_8_2/agents/reset.py +36 -0
  26. js7/api/joc/http/v_2_8_2/authentication/auth.py +32 -0
  27. js7/api/joc/http/v_2_8_2/authentication/joc_cockpit_permissions.py +28 -0
  28. js7/api/joc/http/v_2_8_2/authentication/login.py +35 -0
  29. js7/api/joc/http/v_2_8_2/authentication/logout.py +28 -0
  30. js7/api/joc/http/v_2_8_2/configuration/configuration.py +36 -0
  31. js7/api/joc/http/v_2_8_2/configuration/save.py +36 -0
  32. js7/api/joc/http/v_2_8_2/controller/abort.py +36 -0
  33. js7/api/joc/http/v_2_8_2/controller/abort_and_restart.py +36 -0
  34. js7/api/joc/http/v_2_8_2/controller/cluster/appoint_nodes.py +36 -0
  35. js7/api/joc/http/v_2_8_2/controller/cluster/confirm_node_loss.py +36 -0
  36. js7/api/joc/http/v_2_8_2/controller/cluster/switchover.py +36 -0
  37. js7/api/joc/http/v_2_8_2/controller/components.py +36 -0
  38. js7/api/joc/http/v_2_8_2/controller/controller.py +36 -0
  39. js7/api/joc/http/v_2_8_2/controller/register.py +42 -0
  40. js7/api/joc/http/v_2_8_2/controller/restart.py +36 -0
  41. js7/api/joc/http/v_2_8_2/controller/terminate.py +36 -0
  42. js7/api/joc/http/v_2_8_2/controller/test.py +36 -0
  43. js7/api/joc/http/v_2_8_2/controller/unregister.py +36 -0
  44. js7/api/joc/http/v_2_8_2/daily_plan/orders/cancel.py +36 -0
  45. js7/api/joc/http/v_2_8_2/daily_plan/orders/copy.py +36 -0
  46. js7/api/joc/http/v_2_8_2/daily_plan/orders/delete.py +36 -0
  47. js7/api/joc/http/v_2_8_2/daily_plan/orders/generate.py +36 -0
  48. js7/api/joc/http/v_2_8_2/daily_plan/orders/modify.py +36 -0
  49. js7/api/joc/http/v_2_8_2/daily_plan/orders/orders.py +36 -0
  50. js7/api/joc/http/v_2_8_2/daily_plan/orders/submit.py +36 -0
  51. js7/api/joc/http/v_2_8_2/daily_plan/projections/calendar.py +36 -0
  52. js7/api/joc/http/v_2_8_2/daily_plan/projections/dates.py +36 -0
  53. js7/api/joc/http/v_2_8_2/daily_plan/projections/recreate.py +28 -0
  54. js7/api/joc/http/v_2_8_2/daily_plan/submissions/delete.py +36 -0
  55. js7/api/joc/http/v_2_8_2/iam/account/change_password.py +36 -0
  56. js7/api/joc/http/v_2_8_2/iam/account/permissions.py +36 -0
  57. js7/api/joc/http/v_2_8_2/iam/account/rename.py +36 -0
  58. js7/api/joc/http/v_2_8_2/iam/account/store.py +36 -0
  59. js7/api/joc/http/v_2_8_2/iam/accounts/accounts.py +36 -0
  60. js7/api/joc/http/v_2_8_2/iam/accounts/delete.py +36 -0
  61. js7/api/joc/http/v_2_8_2/iam/accounts/disable.py +36 -0
  62. js7/api/joc/http/v_2_8_2/iam/accounts/enable.py +36 -0
  63. js7/api/joc/http/v_2_8_2/iam/accounts/reset_password.py +36 -0
  64. js7/api/joc/http/v_2_8_2/iam/blocked_account/store.py +36 -0
  65. js7/api/joc/http/v_2_8_2/iam/blocked_accounts/blocked_accounts.py +36 -0
  66. js7/api/joc/http/v_2_8_2/iam/blocked_accounts/delete.py +36 -0
  67. js7/api/joc/http/v_2_8_2/iam/folder/folder.py +36 -0
  68. js7/api/joc/http/v_2_8_2/iam/folder/rename.py +36 -0
  69. js7/api/joc/http/v_2_8_2/iam/folders/delete.py +36 -0
  70. js7/api/joc/http/v_2_8_2/iam/folders/folders.py +36 -0
  71. js7/api/joc/http/v_2_8_2/iam/folders/store.py +36 -0
  72. js7/api/joc/http/v_2_8_2/iam/identity_service/delete.py +36 -0
  73. js7/api/joc/http/v_2_8_2/iam/identity_service/identity_service.py +36 -0
  74. js7/api/joc/http/v_2_8_2/iam/identity_service/rename.py +36 -0
  75. js7/api/joc/http/v_2_8_2/iam/identity_service/store.py +42 -0
  76. js7/api/joc/http/v_2_8_2/iam/identity_services/identity_services.py +36 -0
  77. js7/api/joc/http/v_2_8_2/iam/permission/permission.py +36 -0
  78. js7/api/joc/http/v_2_8_2/iam/permission/rename.py +36 -0
  79. js7/api/joc/http/v_2_8_2/iam/permissions/delete.py +36 -0
  80. js7/api/joc/http/v_2_8_2/iam/permissions/permissions.py +36 -0
  81. js7/api/joc/http/v_2_8_2/iam/permissions/store.py +36 -0
  82. js7/api/joc/http/v_2_8_2/iam/role/rename.py +36 -0
  83. js7/api/joc/http/v_2_8_2/iam/role/role.py +36 -0
  84. js7/api/joc/http/v_2_8_2/iam/role/store.py +36 -0
  85. js7/api/joc/http/v_2_8_2/iam/roles/delete.py +36 -0
  86. js7/api/joc/http/v_2_8_2/iam/roles/roles.py +36 -0
  87. js7/api/joc/http/v_2_8_2/inventory/changes/changes.py +36 -0
  88. js7/api/joc/http/v_2_8_2/inventory/dependencies.py +33 -0
  89. js7/api/joc/http/v_2_8_2/inventory/deployment/deploy.py +36 -0
  90. js7/api/joc/http/v_2_8_2/inventory/deployment/import_deploy.py +66 -0
  91. js7/api/joc/http/v_2_8_2/inventory/deployment/revoke.py +36 -0
  92. js7/api/joc/http/v_2_8_2/inventory/export/export.py +36 -0
  93. js7/api/joc/http/v_2_8_2/inventory/export/folder.py +36 -0
  94. js7/api/joc/http/v_2_8_2/inventory/import_objects.py +88 -0
  95. js7/api/joc/http/v_2_8_2/inventory/releasables/recall/folder.py +36 -0
  96. js7/api/joc/http/v_2_8_2/inventory/releasables/recall/recall.py +36 -0
  97. js7/api/joc/http/v_2_8_2/inventory/release.py +36 -0
  98. js7/api/joc/http/v_2_8_2/inventory/remove/folder.py +36 -0
  99. js7/api/joc/http/v_2_8_2/inventory/remove/remove.py +36 -0
  100. js7/api/joc/http/v_2_8_2/inventory/repository/delete.py +36 -0
  101. js7/api/joc/http/v_2_8_2/inventory/repository/git/add.py +36 -0
  102. js7/api/joc/http/v_2_8_2/inventory/repository/git/checkout.py +36 -0
  103. js7/api/joc/http/v_2_8_2/inventory/repository/git/clone.py +36 -0
  104. js7/api/joc/http/v_2_8_2/inventory/repository/git/commit.py +36 -0
  105. js7/api/joc/http/v_2_8_2/inventory/repository/git/credentials/add.py +36 -0
  106. js7/api/joc/http/v_2_8_2/inventory/repository/git/credentials/credentials.py +28 -0
  107. js7/api/joc/http/v_2_8_2/inventory/repository/git/credentials/remove.py +36 -0
  108. js7/api/joc/http/v_2_8_2/inventory/repository/git/pull.py +36 -0
  109. js7/api/joc/http/v_2_8_2/inventory/repository/git/push.py +36 -0
  110. js7/api/joc/http/v_2_8_2/inventory/repository/read.py +36 -0
  111. js7/api/joc/http/v_2_8_2/inventory/repository/store.py +36 -0
  112. js7/api/joc/http/v_2_8_2/inventory/repository/update.py +36 -0
  113. js7/api/joc/http/v_2_8_2/inventory/revalidate/folder.py +36 -0
  114. js7/api/joc/http/v_2_8_2/inventory/store.py +36 -0
  115. js7/api/joc/http/v_2_8_2/inventory/trash/delete/delete.py +36 -0
  116. js7/api/joc/http/v_2_8_2/inventory/trash/delete/folder.py +36 -0
  117. js7/api/joc/http/v_2_8_2/inventory/trash/restore.py +36 -0
  118. js7/api/joc/http/v_2_8_2/inventory/validate.py +42 -0
  119. js7/api/joc/http/v_2_8_2/joc/cluster/restart.py +36 -0
  120. js7/api/joc/http/v_2_8_2/joc/cluster/run.py +36 -0
  121. js7/api/joc/http/v_2_8_2/joc/cluster/switch_member.py +36 -0
  122. js7/api/joc/http/v_2_8_2/joc/license.py +28 -0
  123. js7/api/joc/http/v_2_8_2/joc/proxies/restart.py +36 -0
  124. js7/api/joc/http/v_2_8_2/joc/version.py +28 -0
  125. js7/api/joc/http/v_2_8_2/joc/versions.py +36 -0
  126. js7/api/joc/http/v_2_8_2/orders/add.py +33 -0
  127. js7/api/joc/http/v_2_8_2/orders/cancel.py +33 -0
  128. js7/api/joc/http/v_2_8_2/orders/confirm.py +36 -0
  129. js7/api/joc/http/v_2_8_2/orders/continue.py +36 -0
  130. js7/api/joc/http/v_2_8_2/orders/history.py +36 -0
  131. js7/api/joc/http/v_2_8_2/orders/orders.py +36 -0
  132. js7/api/joc/http/v_2_8_2/orders/remove_when_terminated.py +33 -0
  133. js7/api/joc/http/v_2_8_2/orders/resume.py +36 -0
  134. js7/api/joc/http/v_2_8_2/orders/suspend.py +36 -0
  135. js7/api/joc/http/v_2_8_2/settings/settings.py +28 -0
  136. js7/api/joc/http/v_2_8_2/settings/store.py +36 -0
  137. js7/api/joc/http/v_2_8_2/tasks/history.py +36 -0
  138. js7/api/joc/http/v_2_8_2/workflow/transition.py +36 -0
  139. js7/api/joc/http/v_2_8_2/workflow/workflow.py +36 -0
  140. js7/api/joc/http/v_2_8_2/workflows/resume.py +36 -0
  141. js7/api/joc/http/v_2_8_2/workflows/skip.py +36 -0
  142. js7/api/joc/http/v_2_8_2/workflows/stop.py +36 -0
  143. js7/api/joc/http/v_2_8_2/workflows/suspend.py +36 -0
  144. js7/api/joc/http/v_2_8_2/workflows/unskip.py +36 -0
  145. js7/api/joc/http/v_2_8_2/workflows/unstop.py +36 -0
  146. js7/api/joc/http/v_2_8_2/workflows/workflows.py +36 -0
  147. js7/api/joc/interface/dispatcher.py +76 -0
  148. js7/api/joc/interface/interface.py +8 -0
  149. js7/api/joc/interface/resolver.py +75 -0
  150. js7/client/action/agent/confirm_node_loss_agent_action.py +75 -0
  151. js7/client/action/agent/delete_subagent_action.py +77 -0
  152. js7/client/action/agent/delete_subagent_clusters_action.py +75 -0
  153. js7/client/action/agent/deploy_cluster_agents_action.py +75 -0
  154. js7/client/action/agent/deploy_standalone_agents_action.py +75 -0
  155. js7/client/action/agent/deploy_subagent_clusters_action.py +75 -0
  156. js7/client/action/agent/disable_standalone_agents_action.py +75 -0
  157. js7/client/action/agent/disable_subagents_action.py +75 -0
  158. js7/client/action/agent/enable_standalone_agents_action.py +75 -0
  159. js7/client/action/agent/enable_subagents_action.py +75 -0
  160. js7/client/action/agent/export_agents_action.py +101 -0
  161. js7/client/action/agent/get_agents_status_action.py +55 -0
  162. js7/client/action/agent/import_agents_action.py +139 -0
  163. js7/client/action/agent/remove_agent_action.py +79 -0
  164. js7/client/action/agent/reset_agents_action.py +79 -0
  165. js7/client/action/agent/reset_subagent_action.py +79 -0
  166. js7/client/action/agent/revoke_cluster_agents_action.py +75 -0
  167. js7/client/action/agent/revoke_standalone_agents_action.py +75 -0
  168. js7/client/action/agent/revoke_subagent_clusters_action.py +75 -0
  169. js7/client/action/agent/store_cluster_agents_action.py +99 -0
  170. js7/client/action/agent/store_standalone_agents_action.py +87 -0
  171. js7/client/action/agent/store_subagent_clusters_action.py +83 -0
  172. js7/client/action/agent/store_subagents_action.py +97 -0
  173. js7/client/action/agent/switchover_agent_action.py +75 -0
  174. js7/client/action/controller/appoint_nodes_controller_action.py +67 -0
  175. js7/client/action/controller/cancel_and_restart_controller_action.py +72 -0
  176. js7/client/action/controller/cancel_controller_action.py +71 -0
  177. js7/client/action/controller/confirm_cluster_node_loss_action.py +68 -0
  178. js7/client/action/controller/get_controller_components_action.py +41 -0
  179. js7/client/action/controller/get_controller_status_action.py +72 -0
  180. js7/client/action/controller/register_controller_action.py +93 -0
  181. js7/client/action/controller/restart_controller_action.py +72 -0
  182. js7/client/action/controller/switchover_controller_cluster_action.py +67 -0
  183. js7/client/action/controller/terminate_controller_action.py +72 -0
  184. js7/client/action/controller/test_controller_instance_action.py +65 -0
  185. js7/client/action/controller/unregister_controller_action.py +68 -0
  186. js7/client/action/daily_plan/cancel_orders_action.py +59 -0
  187. js7/client/action/daily_plan/copy_orders_action.py +108 -0
  188. js7/client/action/daily_plan/create_projections_action.py +24 -0
  189. js7/client/action/daily_plan/delete_orders_action.py +80 -0
  190. js7/client/action/daily_plan/delete_submissions_action.py +83 -0
  191. js7/client/action/daily_plan/generate_orders_action.py +121 -0
  192. js7/client/action/daily_plan/get_calendar_projections_action.py +59 -0
  193. js7/client/action/daily_plan/get_orders_action.py +70 -0
  194. js7/client/action/daily_plan/get_projection_dates_action.py +59 -0
  195. js7/client/action/daily_plan/modify_orders_action.py +130 -0
  196. js7/client/action/daily_plan/submit_orders_action.py +79 -0
  197. js7/client/action/helper/decrypt_action.py +82 -0
  198. js7/client/action/helper/encrypt_action.py +87 -0
  199. js7/client/action/iam/block_account_action.py +71 -0
  200. js7/client/action/iam/change_account_password_action.py +96 -0
  201. js7/client/action/iam/disable_accounts_action.py +75 -0
  202. js7/client/action/iam/enable_accounts_action.py +75 -0
  203. js7/client/action/iam/get_account_permissions_action.py +75 -0
  204. js7/client/action/iam/get_accounts_action.py +76 -0
  205. js7/client/action/iam/get_blocked_accounts_action.py +76 -0
  206. js7/client/action/iam/get_folder_permissions_action.py +112 -0
  207. js7/client/action/iam/get_identity_service_settings_action.py +70 -0
  208. js7/client/action/iam/get_identity_services_action.py +102 -0
  209. js7/client/action/iam/get_permissions_action.py +113 -0
  210. js7/client/action/iam/get_roles_action.py +57 -0
  211. js7/client/action/iam/remove_accounts_action.py +75 -0
  212. js7/client/action/iam/remove_folder_permissions_action.py +91 -0
  213. js7/client/action/iam/remove_identity_service_action.py +67 -0
  214. js7/client/action/iam/remove_permissions_action.py +88 -0
  215. js7/client/action/iam/remove_roles_action.py +75 -0
  216. js7/client/action/iam/rename_account_action.py +83 -0
  217. js7/client/action/iam/rename_folder_permissions_action.py +100 -0
  218. js7/client/action/iam/rename_identity_service_action.py +75 -0
  219. js7/client/action/iam/rename_permission_action.py +103 -0
  220. js7/client/action/iam/rename_role_action.py +83 -0
  221. js7/client/action/iam/reset_account_passwords_action.py +75 -0
  222. js7/client/action/iam/set_folder_permissions_action.py +96 -0
  223. js7/client/action/iam/set_permissions_action.py +91 -0
  224. js7/client/action/iam/store_account_action.py +69 -0
  225. js7/client/action/iam/store_identity_service_action.py +75 -0
  226. js7/client/action/iam/store_identity_service_settings_action.py +74 -0
  227. js7/client/action/iam/store_role_action.py +79 -0
  228. js7/client/action/iam/unblock_accounts_action.py +67 -0
  229. js7/client/action/inventory/deploy_configurations_action.py +138 -0
  230. js7/client/action/inventory/export_configurations_action.py +203 -0
  231. js7/client/action/inventory/export_folders_action.py +160 -0
  232. js7/client/action/inventory/get_change_dependencies_action.py +161 -0
  233. js7/client/action/inventory/get_changes_action.py +59 -0
  234. js7/client/action/inventory/get_git_credentials_action.py +29 -0
  235. js7/client/action/inventory/git_add_action.py +72 -0
  236. js7/client/action/inventory/git_checkout_action.py +88 -0
  237. js7/client/action/inventory/git_clone_action.py +84 -0
  238. js7/client/action/inventory/git_commit_action.py +80 -0
  239. js7/client/action/inventory/git_pull_action.py +72 -0
  240. js7/client/action/inventory/git_push_action.py +76 -0
  241. js7/client/action/inventory/import_configurations_action.py +153 -0
  242. js7/client/action/inventory/import_deploy_configurations_action.py +188 -0
  243. js7/client/action/inventory/read_from_local_repository_action.py +67 -0
  244. js7/client/action/inventory/recall_folder_action.py +89 -0
  245. js7/client/action/inventory/recall_released_configuration_action.py +75 -0
  246. js7/client/action/inventory/release_configuartions_action.py +89 -0
  247. js7/client/action/inventory/remove_configurations_action.py +77 -0
  248. js7/client/action/inventory/remove_configurations_from_trash_action.py +80 -0
  249. js7/client/action/inventory/remove_folder_action.py +67 -0
  250. js7/client/action/inventory/remove_folder_from_trash_action.py +69 -0
  251. js7/client/action/inventory/remove_git_credentials_action.py +53 -0
  252. js7/client/action/inventory/remove_repository_configuration_action.py +84 -0
  253. js7/client/action/inventory/restore_configuration_from_trash_action.py +84 -0
  254. js7/client/action/inventory/revalidate_folder_action.py +46 -0
  255. js7/client/action/inventory/revoke_configurations_action.py +86 -0
  256. js7/client/action/inventory/store_configuration_action.py +79 -0
  257. js7/client/action/inventory/store_git_credentials_action.py +99 -0
  258. js7/client/action/inventory/store_repository_configuration_action.py +124 -0
  259. js7/client/action/inventory/update_repository_configuration_action.py +85 -0
  260. js7/client/action/inventory/validate_configuration_action.py +58 -0
  261. js7/client/action/joc/get_components_versions_action.py +57 -0
  262. js7/client/action/joc/get_license_info_action.py +22 -0
  263. js7/client/action/joc/get_settings_action.py +19 -0
  264. js7/client/action/joc/get_version_action.py +17 -0
  265. js7/client/action/joc/restart_proxies_action.py +50 -0
  266. js7/client/action/joc/restart_service_action.py +74 -0
  267. js7/client/action/joc/run_service_action.py +74 -0
  268. js7/client/action/joc/store_settings_action.py +62 -0
  269. js7/client/action/joc/switch_over_action.py +89 -0
  270. js7/client/action/order/add_orders_action.py +115 -0
  271. js7/client/action/order/cancel_orders_action.py +93 -0
  272. js7/client/action/order/confirm_orders_action.py +86 -0
  273. js7/client/action/order/continue_orders_action.py +86 -0
  274. js7/client/action/order/get_order_history_action.py +84 -0
  275. js7/client/action/order/get_orders_action.py +83 -0
  276. js7/client/action/order/remove_terminated_orders_action.py +86 -0
  277. js7/client/action/order/resume_orders_action.py +102 -0
  278. js7/client/action/order/suspend_orders_action.py +97 -0
  279. js7/client/action/task/get_task_history_info_action.py +88 -0
  280. js7/client/action/workflow/get_workflow_versions_action.py +131 -0
  281. js7/client/action/workflow/resume_workflows_action.py +76 -0
  282. js7/client/action/workflow/set_workflow_version_as_current_action.py +86 -0
  283. js7/client/action/workflow/skip_job_instructions_action.py +83 -0
  284. js7/client/action/workflow/stop_job_instructions_action.py +83 -0
  285. js7/client/action/workflow/suspend_workflows_action.py +76 -0
  286. js7/client/action/workflow/unskip_job_instructions_action.py +83 -0
  287. js7/client/action/workflow/unstop_job_instructions_action.py +79 -0
  288. js7/client/auth/auth_provider.py +109 -0
  289. js7/client/auth/login.py +34 -0
  290. js7/client/auth/logout.py +22 -0
  291. js7/client/client.py +250 -0
  292. js7/client/context.py +40 -0
  293. js7/client/feature/agent/agent.py +26 -0
  294. js7/client/feature/agent/deploy.py +134 -0
  295. js7/client/feature/agent/manage.py +363 -0
  296. js7/client/feature/agent/operate.py +577 -0
  297. js7/client/feature/controller/controller.py +19 -0
  298. js7/client/feature/controller/manage.py +214 -0
  299. js7/client/feature/controller/operate.py +274 -0
  300. js7/client/feature/daily_plan/daily_plan.py +14 -0
  301. js7/client/feature/daily_plan/manage.py +179 -0
  302. js7/client/feature/daily_plan/operate.py +354 -0
  303. js7/client/feature/iam/iam.py +14 -0
  304. js7/client/feature/iam/manage.py +1311 -0
  305. js7/client/feature/inventory/inventory.py +13 -0
  306. js7/client/feature/inventory/manage.py +943 -0
  307. js7/client/feature/inventory/manage_repository.py +533 -0
  308. js7/client/feature/joc/joc.py +18 -0
  309. js7/client/feature/joc/manage.py +102 -0
  310. js7/client/feature/joc/operate.py +185 -0
  311. js7/client/feature/order/manage.py +79 -0
  312. js7/client/feature/order/operate.py +346 -0
  313. js7/client/feature/order/order.py +18 -0
  314. js7/client/feature/task/task.py +54 -0
  315. js7/client/feature/workflow/manage.py +54 -0
  316. js7/client/feature/workflow/operate.py +336 -0
  317. js7/client/feature/workflow/workflow.py +19 -0
  318. js7/java/lib/3rd-party/bcpg-jdk15to18-1.78.1.jar +0 -0
  319. js7/java/lib/3rd-party/bcpkix-jdk15to18-1.78.1.jar +0 -0
  320. js7/java/lib/3rd-party/bcprov-jdk15to18-1.78.1.jar +0 -0
  321. js7/java/lib/3rd-party/bcutil-jdk15to18-1.78.1.jar +0 -0
  322. js7/java/lib/3rd-party/commons-io-2.15.1.jar +0 -0
  323. js7/java/lib/3rd-party/commons-lang3-3.14.0.jar +0 -0
  324. js7/java/lib/3rd-party/jackson-core-2.14.2.jar +0 -0
  325. js7/java/lib/3rd-party/jackson-databind-2.14.2.jar +0 -0
  326. js7/java/lib/3rd-party/jackson-dataformat-xml-2.14.2.jar +0 -0
  327. js7/java/lib/3rd-party/jakarta.annotation-api-2.1.1.jar +0 -0
  328. js7/java/lib/3rd-party/javax.activation-api-1.2.0.jar +0 -0
  329. js7/java/lib/3rd-party/jaxb-api-2.4.0-b180830.0359.jar +0 -0
  330. js7/java/lib/3rd-party/org.apache.logging.log4j.log4j-api-2.23.1.jar +0 -0
  331. js7/java/lib/3rd-party/org.apache.logging.log4j.log4j-core-2.23.1.jar +0 -0
  332. js7/java/lib/3rd-party/org.apache.logging.log4j.log4j-slf4j2-impl-2.23.1.jar +0 -0
  333. js7/java/lib/3rd-party/org.slf4j.slf4j-api-2.0.13.jar +0 -0
  334. js7/java/lib/3rd-party/stax2-api-4.2.1.jar +0 -0
  335. js7/java/lib/3rd-party/woodstox-core-6.5.0.jar +0 -0
  336. js7/java/lib/sos/sos-commons-encryption-2.7.3.jar +0 -0
  337. js7/java/lib/sos/sos-commons-exception-2.7.3.jar +0 -0
  338. js7/java/lib/sos/sos-commons-sign-2.7.3.jar +0 -0
  339. js7/java/lib/sos/sos-webservices-json-2.7.3.jar +0 -0
  340. js7/model/__init__.py +132 -0
  341. js7/model/configuration/auth_configuration.py +24 -0
  342. js7/model/configuration/client_configuration.py +6 -0
  343. js7/model/configuration/http_configuration.py +10 -0
  344. js7/model/error/http/joc_exceptions.py +151 -0
  345. js7/model/private/api/endpoint.py +30 -0
  346. js7/model/private/http/joc/joc_v_2_8_2.py +3666 -0
  347. js7/model/public/client/common/__init__.py +27 -0
  348. js7/model/public/client/common/accounts.py +21 -0
  349. js7/model/public/client/common/audit_log.py +8 -0
  350. js7/model/public/client/common/changes.py +18 -0
  351. js7/model/public/client/common/configurations.py +53 -0
  352. js7/model/public/client/common/cycle.py +12 -0
  353. js7/model/public/client/common/git_credentials.py +12 -0
  354. js7/model/public/client/common/identity_service.py +14 -0
  355. js7/model/public/client/common/schedule_time.py +50 -0
  356. js7/model/public/client/common/store_agents.py +96 -0
  357. js7/model/public/client/enum/__init__.py +19 -0
  358. js7/model/public/client/enum/object_types.py +48 -0
  359. js7/model/public/client/enum/operation_type.py +11 -0
  360. js7/model/public/client/enum/order_priority.py +9 -0
  361. js7/model/public/client/filter/__init__.py +35 -0
  362. js7/model/public/client/filter/daily_plan_order_filters.py +255 -0
  363. js7/model/public/client/filter/element/__init__.py +3 -0
  364. js7/model/public/client/filter/element/folder.py +6 -0
  365. js7/model/public/client/filter/element/workflow_id.py +10 -0
  366. js7/model/public/client/filter/export_filter.py +52 -0
  367. js7/model/public/client/filter/export_folders_filter.py +34 -0
  368. js7/model/public/client/filter/get_order_filter.py +59 -0
  369. js7/model/public/client/filter/order_history_filter.py +113 -0
  370. js7/model/public/client/filter/resume_order_filter.py +45 -0
  371. js7/model/public/client/filter/suspend_order_filter.py +44 -0
  372. js7/model/public/client/filter/tasks_filter.py +50 -0
  373. js7/model/public/client/input/__init__.py +2 -0
  374. js7/model/public/client/input/add_order.py +50 -0
  375. js7/service/http_service.py +206 -0
  376. js7/util/bytes_converter/bytes_to_archive_bytes.py +52 -0
  377. js7/util/bytes_converter/bytes_to_file.py +12 -0
  378. js7/util/bytes_converter/files_to_bytes.py +52 -0
  379. js7/util/bytes_converter/read_bytes_archive_files_to_bytes.py +69 -0
  380. js7/util/bytes_converter/sign_to_bytes.py +106 -0
  381. js7/util/check_matching_version.py +20 -0
  382. js7/util/detect_archive_type.py +37 -0
  383. js7/util/str_converter/order_id_to_order_name.py +5 -0
  384. js7/validator/http/joc_http_status_validator.py +155 -0
  385. js7_client_python-2.0.1.0.dist-info/LICENSE +674 -0
  386. js7_client_python-2.0.1.0.dist-info/METADATA +763 -0
  387. js7_client_python-2.0.1.0.dist-info/RECORD +389 -0
  388. js7_client_python-2.0.1.0.dist-info/WHEEL +5 -0
  389. js7_client_python-2.0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,83 @@
1
+ from typing import List
2
+
3
+ from ...context import Context
4
+ from ....model.public.client.common.schedule_time import ScheduleTime
5
+ from ....model.private.api.endpoint import EndpointCall
6
+ from ....model.public.client.filter.get_order_filter import GetOrderFilter
7
+ from ....model.public.client.input.add_order import Order, PlanID
8
+ from ....model.private.http.joc.joc_v_2_8_2 import (
9
+ OrdersFilterV as OrdersFilterV_V_2_8_2,
10
+ OrderStateText as OrderStateText_V_2_8_2,
11
+ OrdersV as OrdersV_V_2_8_2
12
+ )
13
+
14
+ from ....util.check_matching_version import check_matching_version
15
+ from ....util.str_converter.order_id_to_order_name import order_id_to_order_name
16
+
17
+
18
+ def get_orders_action(*, context: Context, controller_id: str, filter: GetOrderFilter) -> List[Order]:
19
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
20
+ request_data = _build_v_2_8_2_request(controller_id=controller_id, filter=filter)
21
+ else:
22
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
23
+
24
+ # Calls the dispatcher for the matching JOC version
25
+ result = context.joc_api.dispatch(endpoint_id="orders", call=EndpointCall(
26
+ http_service=context.http_service,
27
+ access_token=context.auth_provider.login(),
28
+ payload=request_data,
29
+ options=None,
30
+ ))
31
+
32
+ if isinstance(result, OrdersV_V_2_8_2):
33
+ return [
34
+ Order(
35
+ arguments=o.arguments,
36
+ block_position=o.position,
37
+ end_positions=o.end_positions,
38
+ force_job_admission=False,
39
+ open_closed_plan=False,
40
+ order_name = order_id_to_order_name(o.order_id),
41
+ plan_id=PlanID(
42
+ notice_space_key=o.plan_id.notice_space_key,
43
+ plan_schema_id=o.plan_id.plan_schema_id
44
+ ) if o.plan_id else None,
45
+ priority=o.priority,
46
+ scheduled_for=ScheduleTime.normalize(o.scheduled_for),
47
+ start_position=None,
48
+ tags=o.tags,
49
+ workflow_path=o.workflow_id.path or "" if o.workflow_id else ""
50
+ )
51
+ for o in result.orders
52
+ ] if result.orders else []
53
+
54
+ raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
55
+
56
+ #---------------------#
57
+ # Build 2.8.2 request #
58
+ #---------------------#
59
+ def _build_v_2_8_2_request(*, controller_id: str, filter: GetOrderFilter) -> OrdersFilterV_V_2_8_2:
60
+ # Validates controller_id
61
+ if not controller_id:
62
+ raise ValueError("'controller_id' is required.")
63
+
64
+ # Build: States
65
+ res_states = [
66
+ OrderStateText_V_2_8_2(state) # Raises ValueError() if invalid.
67
+ for state in filter.states
68
+ ] if filter.states else None
69
+
70
+ # Result
71
+ return OrdersFilterV_V_2_8_2(
72
+ controller_id=controller_id,
73
+ compact=filter.compact,
74
+ limit=filter.limit,
75
+ order_ids=filter.order_ids,
76
+ order_tags=filter.order_tags,
77
+ regex=filter.regex,
78
+ state_date_from=filter.state_date_from,
79
+ state_date_to=filter.state_date_to,
80
+ states=res_states,
81
+ without_workflow_tags=filter.without_workflow_tags,
82
+ workflow_tags=filter.workflow_tags
83
+ )
@@ -0,0 +1,86 @@
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
+ ModifyOrdersBase as ModifyOrdersBase_V_2_8_2,
8
+ OK as OK_V_2_8_2,
9
+ WorkflowID as WorkflowID_V_2_8_2,
10
+ AuditParams as AuditParams_V_2_8_2
11
+ )
12
+
13
+ from ....util.check_matching_version import check_matching_version
14
+
15
+
16
+ def remove_terminated_orders_action(
17
+ *,
18
+ context: Context,
19
+ controller_id: str,
20
+ order_ids: Optional[List[str]],
21
+ workflow_paths: Optional[List[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
+ order_ids=order_ids,
29
+ workflow_paths=workflow_paths,
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="orders/remove_when_terminated", 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
+ order_ids: Optional[List[str]],
55
+ workflow_paths: Optional[List[str]],
56
+ audit_log: Optional[AuditLog]
57
+ ) -> ModifyOrdersBase_V_2_8_2:
58
+
59
+ # Validate: controller_id
60
+ if not controller_id:
61
+ raise ValueError("'controller_id' is required.")
62
+
63
+ # Validate: Any of order_ids or workflow_paths
64
+ if not (order_ids or workflow_paths):
65
+ raise ValueError("At least one of 'order_ids' or 'workflow_paths' must be provided.")
66
+
67
+ # Build: audit_log
68
+ res_audit_log = AuditParams_V_2_8_2(
69
+ ticket_link=audit_log.ticket_link,
70
+ comment=audit_log.comment,
71
+ time_spent=audit_log.time_spent
72
+ ) if audit_log else None
73
+
74
+ # Build: res_workflow_ids
75
+ res_workflow_ids = [
76
+ WorkflowID_V_2_8_2(path=path)
77
+ for path in workflow_paths
78
+ ] if workflow_paths else None
79
+
80
+ # Result
81
+ return ModifyOrdersBase_V_2_8_2(
82
+ controller_id=controller_id,
83
+ order_ids=order_ids,
84
+ workflow_ids=res_workflow_ids,
85
+ audit_log=res_audit_log
86
+ )
@@ -0,0 +1,102 @@
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.public.client.filter.resume_order_filter import ResumeOrderFilter
7
+ from ....model.private.http.joc.joc_v_2_8_2 import (
8
+ OK as OK_V_2_8_2,
9
+ WorkflowID as WorkflowID_V_2_8_2,
10
+ AuditParams as AuditParams_V_2_8_2,
11
+ ResumeOrders as ResumeOrders_V_2_8_2,
12
+ Folder as Folder_V_2_8_2,
13
+ OrderStateText as OrderStateText_V_2_8_2
14
+ )
15
+
16
+ from ....util.check_matching_version import check_matching_version
17
+
18
+
19
+ def resume_orders_action(
20
+ *,
21
+ context: Context,
22
+ controller_id: str,
23
+ filter: ResumeOrderFilter,
24
+ audit_log: Optional[AuditLog]
25
+ ) -> bool:
26
+
27
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
28
+ request_data = _build_v_2_8_2_request(
29
+ controller_id=controller_id,
30
+ filter=filter,
31
+ audit_log=audit_log
32
+ )
33
+ else:
34
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
35
+
36
+ # Calls the dispatcher for the matching JOC version
37
+ result = context.joc_api.dispatch(endpoint_id="orders/resume", call=EndpointCall(
38
+ http_service=context.http_service,
39
+ access_token=context.auth_provider.login(),
40
+ payload=request_data,
41
+ options=None,
42
+ ))
43
+
44
+ if isinstance(result, OK_V_2_8_2):
45
+ return bool(result.ok)
46
+
47
+ raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
48
+
49
+ #---------------------#
50
+ # Build 2.8.2 request #
51
+ #---------------------#
52
+ def _build_v_2_8_2_request(
53
+ *,
54
+ controller_id: str,
55
+ filter: ResumeOrderFilter,
56
+ audit_log: Optional[AuditLog]
57
+ ) -> ResumeOrders_V_2_8_2:
58
+
59
+ res_audit_log = AuditParams_V_2_8_2(
60
+ ticket_link=audit_log.ticket_link,
61
+ comment=audit_log.comment,
62
+ time_spent=audit_log.time_spent
63
+ ) if audit_log else None
64
+
65
+ # Build: res_workflow_ids
66
+ res_workflow_ids = [
67
+ WorkflowID_V_2_8_2(
68
+ path=id.workflow_path,
69
+ version_id=id.version_id
70
+ )
71
+ for id in filter.workflow_ids
72
+ ] if filter.workflow_ids else None
73
+
74
+ # Build: folders
75
+ res_folders = [
76
+ Folder_V_2_8_2(
77
+ folder=folder.folder_path,
78
+ recursive=folder.recursive
79
+ )
80
+ for folder in filter.folders
81
+ ] if filter.folders else None
82
+
83
+ # Build: States
84
+ res_states = [
85
+ OrderStateText_V_2_8_2(state) # Raises ValueError() if invalid.
86
+ for state in filter.states
87
+ ] if filter.states else None
88
+
89
+ # Result
90
+ return ResumeOrders_V_2_8_2(
91
+ controller_id=controller_id,
92
+ order_ids=filter.order_ids,
93
+ workflow_ids=res_workflow_ids,
94
+ folders=res_folders,
95
+ states=res_states,
96
+ force=filter.force,
97
+ from_current_block=filter.from_current_block,
98
+ position=filter.position,
99
+ variables=filter.variables,
100
+ cycle_end_time=filter.cycle_end_time,
101
+ audit_log=res_audit_log
102
+ )
@@ -0,0 +1,97 @@
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.public.client.filter.suspend_order_filter import SuspendOrderFilter
7
+ from ....model.private.http.joc.joc_v_2_8_2 import (
8
+ OK as OK_V_2_8_2,
9
+ WorkflowID as WorkflowID_V_2_8_2,
10
+ AuditParams as AuditParams_V_2_8_2,
11
+ SuspendOrders as SuspendOrders_V_2_8_2,
12
+ Folder as Folder_V_2_8_2,
13
+ OrderStateText as OrderStateText_V_2_8_2
14
+ )
15
+
16
+ from ....util.check_matching_version import check_matching_version
17
+
18
+
19
+ def suspend_orders_action(*, context: Context, controller_id: str, filter: SuspendOrderFilter, audit_log: Optional[AuditLog]) -> bool:
20
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
21
+ request_data = _build_v_2_8_2_request(
22
+ controller_id=controller_id,
23
+ filter=filter,
24
+ audit_log=audit_log
25
+ )
26
+ else:
27
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
28
+
29
+ # Calls the dispatcher for the matching JOC version
30
+ result = context.joc_api.dispatch(endpoint_id="orders/suspend", call=EndpointCall(
31
+ http_service=context.http_service,
32
+ access_token=context.auth_provider.login(),
33
+ payload=request_data,
34
+ options=None,
35
+ ))
36
+
37
+ if isinstance(result, OK_V_2_8_2):
38
+ return bool(result.ok)
39
+
40
+ raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
41
+
42
+ #---------------------#
43
+ # Build 2.8.2 request #
44
+ #---------------------#
45
+ def _build_v_2_8_2_request(
46
+ *,
47
+ controller_id: str,
48
+ filter: SuspendOrderFilter,
49
+ audit_log: Optional[AuditLog]
50
+ ) -> SuspendOrders_V_2_8_2:
51
+
52
+ # Build: res_audit_log
53
+ res_audit_log = AuditParams_V_2_8_2(
54
+ ticket_link=audit_log.ticket_link,
55
+ comment=audit_log.comment,
56
+ time_spent=audit_log.time_spent
57
+ ) if audit_log else None
58
+
59
+ # Build: res_workflow_ids
60
+ res_workflow_ids = [
61
+ WorkflowID_V_2_8_2(
62
+ path=id.workflow_path,
63
+ version_id=id.version_id
64
+ )
65
+ for id in filter.workflow_ids
66
+ ] if filter.workflow_ids else None
67
+
68
+ # Build: folders
69
+ res_folders = [
70
+ Folder_V_2_8_2(
71
+ folder=folder.folder_path,
72
+ recursive=folder.recursive
73
+ )
74
+ for folder in filter.folders
75
+ ] if filter.folders else None
76
+
77
+ # Build: States
78
+ res_states = [
79
+ OrderStateText_V_2_8_2(state) # Raises ValueError() if invalid.
80
+ for state in filter.states
81
+ ] if filter.states else None
82
+
83
+ # Result
84
+ return SuspendOrders_V_2_8_2(
85
+ controller_id=controller_id,
86
+ order_ids=filter.order_ids,
87
+ workflow_ids=res_workflow_ids,
88
+ folders=res_folders,
89
+ states=res_states,
90
+ date_from=filter.date_from,
91
+ date_to=filter.date_to,
92
+ time_zone=filter.timezone,
93
+ reset=filter.reset,
94
+ kill=filter.kill,
95
+ deep=filter.deep,
96
+ audit_log=res_audit_log
97
+ )
@@ -0,0 +1,88 @@
1
+ from typing import Any, Dict
2
+
3
+ from ...context import Context
4
+ from ....model.public.client.filter.tasks_filter import TasksFilter
5
+ from ....model.private.api.endpoint import EndpointCall
6
+ from ....model.private.http.joc.joc_v_2_8_2 import (
7
+ JobsFilter as JobsFilter_V_2_8_2,
8
+ TaskHistory as TaskHistory_V_2_8_2,
9
+ Folder as Folder_V_2_8_2,
10
+ HistoryState as HistoryState_V_2_8_2,
11
+ HistoryStateText as HistoryStateText_V_2_8_2,
12
+ JobCriticality as JobCriticality_V_2_8_2
13
+ )
14
+
15
+ from ....util.check_matching_version import check_matching_version
16
+
17
+
18
+ def get_task_history_info_action(*, context: Context, controller_id: str, filter: TasksFilter) -> Dict[str, Any]:
19
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
20
+ request_data = _build_v_2_8_2_request(
21
+ controller_id=controller_id,
22
+ timezone=context.client_config.timezone,
23
+ filter=filter
24
+ )
25
+ else:
26
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
27
+
28
+ # Calls the dispatcher for the matching JOC version
29
+ result = context.joc_api.dispatch(endpoint_id="tasks/history", call=EndpointCall(
30
+ http_service=context.http_service,
31
+ access_token=context.auth_provider.login(),
32
+ payload=request_data,
33
+ options=None,
34
+ ))
35
+
36
+ if isinstance(result, TaskHistory_V_2_8_2):
37
+ return result.model_dump(mode="json").get("history") or {}
38
+
39
+ raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
40
+
41
+ #---------------------#
42
+ # Build 2.8.2 request #
43
+ #---------------------#
44
+ def _build_v_2_8_2_request(
45
+ *,
46
+ controller_id: str,
47
+ timezone: str,
48
+ filter: TasksFilter
49
+ ) -> JobsFilter_V_2_8_2:
50
+
51
+ # Validate: controller_id: str
52
+ if not controller_id:
53
+ raise ValueError("'controller_id' is required.")
54
+
55
+ return JobsFilter_V_2_8_2(
56
+ controller_id=controller_id,
57
+ time_zone=timezone,
58
+
59
+ date_from=filter.date_from.isoformat() if filter.date_from else None,
60
+ date_to=filter.date_to.isoformat() if filter.date_to else None,
61
+ completed_date_from=filter.completed_date_from.isoformat() if filter.completed_date_from else None,
62
+ completed_date_to=filter.completed_date_to.isoformat() if filter.completed_date_to else None,
63
+
64
+ job_name=filter.job_name,
65
+ workflow_name=filter.workflow_name,
66
+ workflow_path=filter.workflow_paths,
67
+
68
+ folders=[
69
+ Folder_V_2_8_2(folder=f.folder_path, recursive=f.recursive)
70
+ for f in filter.folders
71
+ ] if filter.folders else None,
72
+
73
+ history_states=[
74
+ HistoryState_V_2_8_2(text=HistoryStateText_V_2_8_2(h)) # Raises ValueError() if invalid.
75
+ for h in filter.history_states
76
+ ] if filter.history_states else None,
77
+
78
+ criticalities=[
79
+ JobCriticality_V_2_8_2(c) # Raises ValueError() if invalid.
80
+ for c in filter.criticalities
81
+ ] if filter.criticalities else None,
82
+
83
+ exclude_jobs=None,
84
+ history_ids=None,
85
+ jobs=None,
86
+ task_ids=None,
87
+ limit=None,
88
+ )
@@ -0,0 +1,131 @@
1
+ from typing import Dict
2
+ from pathlib import PurePosixPath
3
+
4
+ from ...context import Context
5
+ from ....model.private.api.endpoint import EndpointCall
6
+ from ....model.private.http.joc.joc_v_2_8_2 import (
7
+ WorkflowID as WorkflowID_V_2_8_2,
8
+ WorkflowFilter as WorkflowFilter_V_2_8_2,
9
+ Workflow as Workflow_V_2_8_2,
10
+ WorkflowsFilter as WorkflowsFilter_V_2_8_2,
11
+ Workflows as Workflows_V_2_8_2,
12
+ Folder as Folder_V_2_8_2
13
+ )
14
+
15
+ from ....util.check_matching_version import check_matching_version
16
+
17
+
18
+ # Returns: { Version ID: Path }
19
+ def get_workflow_versions_action(
20
+ *,
21
+ context: Context,
22
+ controller_id: str,
23
+ workflow_path: str,
24
+ exclude_current_version: bool,
25
+ ) -> Dict[str, str]:
26
+
27
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
28
+ result = _build_v_2_8_2_request(
29
+ ctx=context,
30
+ controller_id=controller_id,
31
+ workflow_path=workflow_path
32
+ )
33
+
34
+ return _build_v_2_8_2_response(
35
+ response=result,
36
+ exclude_current_version=exclude_current_version,
37
+ filter_workflow_path=workflow_path
38
+ )
39
+ else:
40
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
41
+
42
+ #---------------------#
43
+ # Build 2.8.2 request #
44
+ #---------------------#
45
+ def _build_v_2_8_2_request(
46
+ *,
47
+ ctx: Context,
48
+ controller_id: str,
49
+ workflow_path: str,
50
+ ) -> Workflows_V_2_8_2:
51
+
52
+ # Validate: controller_id
53
+ if not controller_id:
54
+ raise ValueError("'controller_id' is required.")
55
+
56
+ # Validate: workflow_path
57
+ if not workflow_path:
58
+ raise ValueError("'workflow_path' is required.")
59
+
60
+ # Request: /workflow
61
+ res_workflow = ctx.joc_api.dispatch(endpoint_id="workflow", call=EndpointCall(
62
+ http_service=ctx.http_service,
63
+ access_token=ctx.auth_provider.login(),
64
+ payload=WorkflowFilter_V_2_8_2(
65
+ controller_id=controller_id,
66
+ workflow_id=WorkflowID_V_2_8_2(
67
+ path=workflow_path,
68
+ version_id=None
69
+ ),
70
+ compact=False
71
+ ),
72
+ options=None,
73
+ ))
74
+
75
+ if not isinstance(res_workflow, Workflow_V_2_8_2):
76
+ raise RuntimeError(f"Unexpected response type: {type(res_workflow).__name__}")
77
+
78
+ # Request: /workflows
79
+ if not (res_workflow.workflow and res_workflow.workflow.path):
80
+ raise ValueError("'workflow.path' missing in response.")
81
+
82
+ res_workflows = ctx.joc_api.dispatch(endpoint_id="workflows", call=EndpointCall(
83
+ http_service=ctx.http_service,
84
+ access_token=ctx.auth_provider.login(),
85
+ payload=WorkflowsFilter_V_2_8_2(
86
+ controller_id=controller_id,
87
+ folders=[Folder_V_2_8_2(
88
+ folder=str(PurePosixPath(res_workflow.workflow.path).parent),
89
+ recursive=False
90
+ )],
91
+ compact=False,
92
+
93
+ ),
94
+ options=None,
95
+ ))
96
+
97
+ if not isinstance(res_workflows, Workflows_V_2_8_2):
98
+ raise RuntimeError(f"Unexpected response type: {type(res_workflow).__name__}")
99
+
100
+ return res_workflows
101
+
102
+ #----------------------#
103
+ # Build 2.8.2 response #
104
+ #----------------------#
105
+ def _build_v_2_8_2_response(
106
+ *,
107
+ response: Workflows_V_2_8_2,
108
+ exclude_current_version: bool,
109
+ filter_workflow_path: str
110
+ ) -> Dict[str, str]:
111
+ res: Dict[str, str] = {}
112
+
113
+ # Returns empty dictionary if no workflows found
114
+ if not response.workflows:
115
+ return res
116
+
117
+ for w in response.workflows:
118
+ # Remove: Not matching workflows paths
119
+ if w.path != filter_workflow_path:
120
+ continue
121
+
122
+ # Filter: exclude_current_version
123
+ if exclude_current_version and w.is_current_version:
124
+ continue
125
+
126
+ if not (w.version_id and w.path):
127
+ continue
128
+
129
+ res[w.version_id] = w.path
130
+
131
+ return res
@@ -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 resume_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/resume", 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_path
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
+ )