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,74 @@
1
+ from typing import Literal, Optional
2
+
3
+ from ...context import Context
4
+ from ....model.private.api.endpoint import EndpointCall
5
+ from ....model.public.client.common.audit_log import AuditLog
6
+ from ....model.private.http.joc.joc_v_2_8_2 import (
7
+ AuditParams as AuditParams_V_2_8_2,
8
+ ClusterServices as ClusterServices_V_2_8_2,
9
+ ClusterResponse as ClusterResponse_V_2_8_2,
10
+ ClusterServiceRun as ClusterServiceRun_V_2_8_2
11
+ )
12
+
13
+ from ....util.check_matching_version import check_matching_version
14
+
15
+
16
+ def run_service_action(
17
+ *,
18
+ context: Context,
19
+ service_type: Literal["cleanup", "cluster", "dailyplan", "history", "lognotification", "monitor"],
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(service_type=service_type, audit_log=audit_log)
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="joc/cluster/run", call=EndpointCall(
30
+ http_service=context.http_service,
31
+ payload=request_data,
32
+ access_token=context.auth_provider.login(),
33
+ options=None
34
+ ))
35
+
36
+ if isinstance(result, ClusterResponse_V_2_8_2):
37
+ if not result.state:
38
+ return False
39
+
40
+ if result.state.value in ["ERROR", "MISSING_CONFIGURATION", "MISSING_HANDLERS", "MISSING_LICENSE", "UNCOMPLETED"]:
41
+ raise Exception(f"Restart of service: {service_type} failed with state: {result.state.value}.")
42
+
43
+ return True
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
+ service_type: Literal["cleanup", "cluster", "dailyplan", "history", "lognotification", "monitor"],
53
+ audit_log: Optional[AuditLog]
54
+ ) -> ClusterServiceRun_V_2_8_2:
55
+
56
+ # Validate: service_type
57
+ svc_types = ["cleanup", "cluster", "dailyplan", "history", "lognotification", "monitor"]
58
+ if not service_type:
59
+ raise ValueError("'service_type' is required")
60
+ if service_type not in svc_types:
61
+ raise ValueError(f"Unsupported 'service_type': {service_type}. Supported values are: {svc_types}")
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 ClusterServiceRun_V_2_8_2(
72
+ type=ClusterServices_V_2_8_2(service_type), # Raises ValueError if invalid.
73
+ audit_log=res_audit_log
74
+ )
@@ -0,0 +1,62 @@
1
+ import json
2
+ from typing import Any, Dict, Optional
3
+
4
+ from ...context import Context
5
+ from ....model.private.api.endpoint import EndpointCall
6
+ from ....model.public.client.common.audit_log import AuditLog
7
+ from ....model.private.http.joc.joc_v_2_8_2 import (
8
+ StoreSettingsFilter as StoreSettingsFilter_V_2_8_2,
9
+ AuditParams as AuditParams_V_2_8_2,
10
+ OK as OK_V_2_8_2
11
+ )
12
+
13
+ from ....util.check_matching_version import check_matching_version
14
+
15
+
16
+ def store_settings_action(*, context: Context, payload: Dict[str, Any], audit_log: Optional[AuditLog]) -> bool:
17
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
18
+ request_data = _build_v_2_8_2_request(
19
+ payload=payload,
20
+ audit_log=audit_log
21
+ )
22
+ else:
23
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
24
+
25
+ # Calls the dispatcher for the matching JOC version
26
+ result = context.joc_api.dispatch(endpoint_id="settings/store", call=EndpointCall(
27
+ http_service=context.http_service,
28
+ payload=request_data,
29
+ access_token=context.auth_provider.login(),
30
+ options=None
31
+ ))
32
+
33
+ if isinstance(result, OK_V_2_8_2):
34
+ return bool(result.ok)
35
+
36
+ raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
37
+
38
+ #---------------------#
39
+ # Build 2.8.2 request #
40
+ #---------------------#
41
+ def _build_v_2_8_2_request(
42
+ *,
43
+ payload: Dict[str, Any],
44
+ audit_log: Optional[AuditLog]
45
+ ) -> StoreSettingsFilter_V_2_8_2:
46
+
47
+ # Validate: payload
48
+ if not payload:
49
+ raise ValueError("'payload' is required")
50
+
51
+ # Build: audit_log
52
+ res_audit_log = AuditParams_V_2_8_2(
53
+ ticket_link=audit_log.ticket_link,
54
+ comment=audit_log.comment,
55
+ time_spent=audit_log.time_spent
56
+ ) if audit_log else None
57
+
58
+ # Result
59
+ return StoreSettingsFilter_V_2_8_2(
60
+ configuration_item=json.dumps(payload),
61
+ audit_log=res_audit_log
62
+ )
@@ -0,0 +1,89 @@
1
+ from ...context import Context
2
+ from ....model.private.api.endpoint import EndpointCall
3
+ from ....model.private.http.joc.joc_v_2_8_2 import (
4
+ ControllerIdReq as ControllerIdReq_V_2_8_2,
5
+ Components as Components_V_2_8_2,
6
+ ClusterSwitchMember as ClusterSwitchMember_V_2_8_2,
7
+ ClusterResponse as ClusterResponse_V_2_8_2
8
+ )
9
+
10
+ from ....util.check_matching_version import check_matching_version
11
+
12
+
13
+ def switch_over_action(
14
+ *,
15
+ context: Context,
16
+ controller_id: str
17
+ ) -> bool:
18
+
19
+ if not check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
20
+ raise RuntimeError(
21
+ f"Version {context.version} is not compatible with switch over."
22
+ )
23
+
24
+ request_data = _build_v_2_8_2_request(controller_id=controller_id)
25
+
26
+ # (1) Get controller components
27
+ result = context.joc_api.dispatch(
28
+ endpoint_id="controller/components",
29
+ call=EndpointCall(
30
+ http_service=context.http_service,
31
+ payload=request_data,
32
+ access_token=context.auth_provider.login(),
33
+ options=None
34
+ )
35
+ )
36
+
37
+ if not isinstance(result, Components_V_2_8_2):
38
+ raise RuntimeError(f"Unexpected response type from controller/components: {type(result).__name__}")
39
+
40
+ if not result.jocs:
41
+ raise ValueError("No JOC Cockpit instances found.")
42
+
43
+ # (2) Find exactly one standby JOC (severity == 1)
44
+ standby_members = [
45
+ j.member_id
46
+ for j in result.jocs
47
+ if j.member_id
48
+ and j.cluster_node_state
49
+ and j.cluster_node_state.severity == 1
50
+ ]
51
+
52
+ if not standby_members:
53
+ raise ValueError("Switch over failed: no standby JOC Cockpit instance found.")
54
+
55
+ if len(standby_members) > 1:
56
+ raise ValueError(f"Switch over failed: multiple standby JOCs found: {standby_members}")
57
+
58
+ member_id = standby_members[0]
59
+
60
+ # (3) Switch to standby member
61
+ result = context.joc_api.dispatch(
62
+ endpoint_id="joc/cluster/switch_member",
63
+ call=EndpointCall(
64
+ http_service=context.http_service,
65
+ payload=ClusterSwitchMember_V_2_8_2(member_id=member_id),
66
+ access_token=context.auth_provider.login(),
67
+ options=None
68
+ )
69
+ )
70
+
71
+ if not isinstance(result, ClusterResponse_V_2_8_2):
72
+ raise RuntimeError(f"Unexpected response type from switch_member: {type(result).__name__}")
73
+
74
+ if not result.state:
75
+ raise RuntimeError("Switch over failed: missing state in response.")
76
+
77
+ if result.state.value != "SWITCH_MEMBER":
78
+ raise RuntimeError(f"Switch over failed with state: {result.state.value}")
79
+
80
+ return True
81
+
82
+ #---------------------#
83
+ # Build 2.8.2 request #
84
+ #---------------------#
85
+ def _build_v_2_8_2_request(*, controller_id: str) -> ControllerIdReq_V_2_8_2:
86
+ if not controller_id:
87
+ raise ValueError("'controller_id' is required.")
88
+
89
+ return ControllerIdReq_V_2_8_2(controller_id=controller_id)
@@ -0,0 +1,115 @@
1
+ from typing import List, Optional
2
+
3
+ from ...context import Context
4
+ from ....model.public.client.common.schedule_time import ScheduleTime
5
+ from ....model.public.client.input.add_order import Order
6
+ from ....model.public.client.common.audit_log import AuditLog
7
+ from ....model.private.api.endpoint import EndpointCall
8
+ from ....model.private.http.joc.joc_v_2_8_2 import (
9
+ AddOrders as AddOrders_V_2_8_2,
10
+ AddOrder as AddOrder_V_2_8_2,
11
+ OrderIDS as OrderIDS_V_2_8_2,
12
+ AuditParams as AuditParams_V_2_8_2,
13
+ PlanID as PlanID_V_2_8_2
14
+ )
15
+
16
+ from ....util.check_matching_version import check_matching_version
17
+
18
+
19
+ # Returns: OrderIDs
20
+ def add_orders_action(
21
+ *,
22
+ context: Context,
23
+ controller_id: str,
24
+ orders: List[Order],
25
+ audit_log: Optional[AuditLog]
26
+ ) -> List[str]:
27
+
28
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
29
+ request_data = _build_v_2_8_2_request(
30
+ timezone=context.client_config.timezone,
31
+ controller_id=controller_id,
32
+ orders=orders,
33
+ audit_log=audit_log
34
+ )
35
+ else:
36
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
37
+
38
+ # Calls the dispatcher for the matching JOC version
39
+ result = context.joc_api.dispatch(endpoint_id="orders/add", call=EndpointCall(
40
+ http_service=context.http_service,
41
+ access_token=context.auth_provider.login(),
42
+ payload=request_data,
43
+ options=None,
44
+ ))
45
+
46
+ if isinstance(result, OrderIDS_V_2_8_2):
47
+ if not result.order_ids:
48
+ raise RuntimeError("No order id returned by server.")
49
+ return result.order_ids
50
+
51
+ raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
52
+
53
+ #---------------------#
54
+ # Build 2.8.2 request #
55
+ #---------------------#
56
+ def _build_v_2_8_2_request(
57
+ *,
58
+ timezone: str,
59
+ controller_id: str,
60
+ orders: List[Order],
61
+ audit_log: Optional[AuditLog]
62
+ ) -> AddOrders_V_2_8_2:
63
+
64
+ # Validate: timezone
65
+ if not timezone:
66
+ raise ValueError("'timezone' is required in client configuration.")
67
+
68
+ # Validate: controller_id
69
+ if not controller_id:
70
+ raise ValueError("'controller_id' is required.")
71
+
72
+ # Validate: orders
73
+ if not orders:
74
+ raise ValueError("At least one order in 'orders' is required.")
75
+
76
+ # Build: audit_log
77
+ res_audit_log = AuditParams_V_2_8_2(
78
+ ticket_link=audit_log.ticket_link,
79
+ comment=audit_log.comment,
80
+ time_spent=audit_log.time_spent
81
+ ) if audit_log else None
82
+
83
+ # Result
84
+ return AddOrders_V_2_8_2(
85
+ controller_id=controller_id,
86
+ audit_log=res_audit_log,
87
+ orders=[
88
+ AddOrder_V_2_8_2(
89
+ arguments=o.arguments,
90
+ block_position=o.block_position,
91
+ end_positions=o.end_positions,
92
+ force_job_admission=o.force_job_admission,
93
+ open_closed_plan=o.open_closed_plan,
94
+ order_name=o.order_name if o.order_name else "unnamed",
95
+ plan_id=(
96
+ PlanID_V_2_8_2(
97
+ notice_space_key=o.plan_id.notice_space_key,
98
+ plan_schema_id=o.plan_id.plan_schema_id
99
+ )
100
+ if o.plan_id else None
101
+ ),
102
+ priority=o.priority,
103
+ scheduled_for=(
104
+ o.scheduled_for.value
105
+ if o.scheduled_for
106
+ else None
107
+ ) if isinstance(o.scheduled_for, ScheduleTime) else o.scheduled_for,
108
+ start_position=o.start_position,
109
+ tags=o.tags,
110
+ time_zone=timezone,
111
+ workflow_path=o.workflow_path,
112
+ )
113
+ for o in orders
114
+ ]
115
+ )
@@ -0,0 +1,93 @@
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
+ CancelOrders as CancelOrders_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 cancel_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
+ timezone=context.client_config.timezone,
29
+ order_ids=order_ids,
30
+ workflow_paths=workflow_paths,
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/cancel", 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
+ timezone: str,
56
+ order_ids: Optional[List[str]],
57
+ workflow_paths: Optional[List[str]],
58
+ audit_log: Optional[AuditLog]
59
+ ) -> CancelOrders_V_2_8_2:
60
+
61
+ # Validate: timezone
62
+ if not timezone:
63
+ raise ValueError("'timezone' is required in client configuration.")
64
+
65
+ # Validate: controller_id
66
+ if not controller_id:
67
+ raise ValueError("'controller_id' is required.")
68
+
69
+ # Validate: Any of order_ids or workflow_paths
70
+ if not (order_ids or workflow_paths):
71
+ raise ValueError("At least one of 'order_ids' or 'workflow_paths' must be provided.")
72
+
73
+ # Build: res_audit_log
74
+ res_audit_log = AuditParams_V_2_8_2(
75
+ ticket_link=audit_log.ticket_link,
76
+ comment=audit_log.comment,
77
+ time_spent=audit_log.time_spent
78
+ ) if audit_log else None
79
+
80
+ # Build: res_workflow_ids
81
+ res_workflow_ids = [
82
+ WorkflowID_V_2_8_2(path=path)
83
+ for path in workflow_paths
84
+ ] if workflow_paths else None
85
+
86
+ # Result
87
+ return CancelOrders_V_2_8_2(
88
+ controller_id=controller_id,
89
+ workflow_ids=res_workflow_ids,
90
+ order_ids=order_ids,
91
+ audit_log=res_audit_log,
92
+ time_zone=timezone
93
+ )
@@ -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 confirm_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/confirm", 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: One of order_ids or workflow_paths
64
+ if sum([bool(order_ids), bool(workflow_paths)]) != 1:
65
+ raise ValueError("Exactly 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,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 continue_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/continue", 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,84 @@
1
+ from typing import Any, Dict
2
+
3
+ from ...context import Context
4
+ from ....model.private.api.endpoint import EndpointCall
5
+ from ....model.public.client.filter.order_history_filter import OrderHistoryFilter
6
+ from ....model.private.http.joc.joc_v_2_8_2 import (
7
+ OrdersFilter as OrdersFilter_V_2_8_2,
8
+ OrderHistory as OrderHistory_V_2_8_2,
9
+ Folder as Folder_V_2_8_2,
10
+ HistoryStateText as HistoryStateText_V_2_8_2
11
+ )
12
+
13
+ from ....util.check_matching_version import check_matching_version
14
+
15
+
16
+ def get_order_history_action(*, context: Context, controller_id: str, filter: OrderHistoryFilter) -> Dict[str, Any]:
17
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
18
+ request_data = _build_v_2_8_2_request(
19
+ controller_id=controller_id,
20
+ timezone=context.client_config.timezone,
21
+ filter=filter
22
+ )
23
+ else:
24
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
25
+
26
+ # Calls the dispatcher for the matching JOC version
27
+ result = context.joc_api.dispatch(endpoint_id="orders/history", call=EndpointCall(
28
+ http_service=context.http_service,
29
+ access_token=context.auth_provider.login(),
30
+ payload=request_data,
31
+ options=None,
32
+ ))
33
+
34
+ if isinstance(result, OrderHistory_V_2_8_2):
35
+ return result.model_dump()
36
+
37
+ raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
38
+
39
+ #---------------------#
40
+ # Build 2.8.2 request #
41
+ #---------------------#
42
+ def _build_v_2_8_2_request(
43
+ *,
44
+ controller_id: str,
45
+ timezone: str,
46
+ filter: OrderHistoryFilter
47
+ ) -> OrdersFilter_V_2_8_2:
48
+
49
+ # Validates controller_id
50
+ if not controller_id:
51
+ raise ValueError("'controller_id' is required.")
52
+
53
+ # Validate: timezone
54
+ if not timezone:
55
+ raise ValueError("'timezone' is required in client configuration.")
56
+
57
+ # Result
58
+ return OrdersFilter_V_2_8_2(
59
+ controller_id=controller_id,
60
+ date_from=filter.date_from,
61
+ date_to=filter.date_to,
62
+ completed_date_from=filter.completed_date_from,
63
+ completed_date_to=filter.completed_date_to,
64
+ time_zone=timezone,
65
+ order_id=filter.order_id,
66
+ workflow_name=filter.workflow_name,
67
+ limit=filter.limit,
68
+
69
+ folders=[
70
+ Folder_V_2_8_2(folder=f.folder_path, recursive=f.recursive)
71
+ for f in filter.folders
72
+ ] if filter.folders else None,
73
+
74
+ history_states=[
75
+ HistoryStateText_V_2_8_2(s)
76
+ for s in filter.history_states
77
+ ] if filter.history_states else None,
78
+
79
+ compact=None,
80
+ exclude_workflows=None,
81
+ history_ids=None,
82
+ orders=None,
83
+ workflow_path=None
84
+ )