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,75 @@
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
+ AuditParams as AuditParams_V_2_8_2,
8
+ OK as OK_V_2_8_2,
9
+ DeploySubagentClusters as DeploySubagentClusters_V_2_8_2
10
+ )
11
+
12
+ from ....util.check_matching_version import check_matching_version
13
+
14
+
15
+ def deploy_subagent_clusters_action(
16
+ *,
17
+ context: Context,
18
+ controller_id: str,
19
+ subagent_cluster_ids: 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
+ subagent_cluster_ids=subagent_cluster_ids,
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="agents/cluster/deploy", 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
+ subagent_cluster_ids: List[str],
52
+ audit_log: Optional[AuditLog]
53
+ ) -> DeploySubagentClusters_V_2_8_2:
54
+
55
+ # Validates controller_id
56
+ if not controller_id:
57
+ raise ValueError("'controller_id' is required.")
58
+
59
+ # Validates subagent_cluster_id
60
+ if not subagent_cluster_ids:
61
+ raise ValueError("At least one id in 'subagent_cluster_ids' are 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 DeploySubagentClusters_V_2_8_2(
72
+ controller_id=controller_id,
73
+ subagent_cluster_ids=subagent_cluster_ids,
74
+ audit_log=res_audit_log
75
+ )
@@ -0,0 +1,75 @@
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
+ AuditParams as AuditParams_V_2_8_2,
8
+ OK as OK_V_2_8_2,
9
+ DeployAgents as DeployAgents_V_2_8_2
10
+ )
11
+
12
+ from ....util.check_matching_version import check_matching_version
13
+
14
+
15
+ def disable_standalone_agents_action(
16
+ *,
17
+ context: Context,
18
+ controller_id: str,
19
+ agent_ids: 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
+ agent_ids=agent_ids,
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="agents/inventory/disable", 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
+ agent_ids: List[str],
52
+ audit_log: Optional[AuditLog]
53
+ ) -> DeployAgents_V_2_8_2:
54
+
55
+ # Validates controller_id
56
+ if not controller_id:
57
+ raise ValueError("'controller_id' is required.")
58
+
59
+ # Validates agent_ids
60
+ if not agent_ids:
61
+ raise ValueError("At least one agent id in 'agent_ids' 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 DeployAgents_V_2_8_2(
72
+ controller_id=controller_id,
73
+ agent_ids=agent_ids,
74
+ audit_log=res_audit_log
75
+ )
@@ -0,0 +1,75 @@
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
+ AuditParams as AuditParams_V_2_8_2,
8
+ OK as OK_V_2_8_2,
9
+ SubAgentsCommand as SubAgentsCommand_V_2_8_2
10
+ )
11
+
12
+ from ....util.check_matching_version import check_matching_version
13
+
14
+
15
+ def disable_subagents_action(
16
+ *,
17
+ context: Context,
18
+ controller_id: str,
19
+ subagent_ids: 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
+ subagent_ids=subagent_ids,
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="agents/inventory/cluster/subagents/disable", 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
+ subagent_ids: List[str],
52
+ audit_log: Optional[AuditLog]
53
+ ) -> SubAgentsCommand_V_2_8_2:
54
+
55
+ # Validates controller_id
56
+ if not controller_id:
57
+ raise ValueError("'controller_id' is required.")
58
+
59
+ # Validates subagent_ids
60
+ if not subagent_ids:
61
+ raise ValueError("At least one agent id in 'subagent_ids' 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 SubAgentsCommand_V_2_8_2(
72
+ controller_id=controller_id,
73
+ subagent_ids=subagent_ids,
74
+ audit_log=res_audit_log
75
+ )
@@ -0,0 +1,75 @@
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
+ AuditParams as AuditParams_V_2_8_2,
8
+ OK as OK_V_2_8_2,
9
+ DeployAgents as DeployAgents_V_2_8_2
10
+ )
11
+
12
+ from ....util.check_matching_version import check_matching_version
13
+
14
+
15
+ def enable_standalone_agents_action(
16
+ *,
17
+ context: Context,
18
+ controller_id: str,
19
+ agent_ids: 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
+ agent_ids=agent_ids,
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="agents/inventory/enable", 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
+ agent_ids: List[str],
52
+ audit_log: Optional[AuditLog]
53
+ ) -> DeployAgents_V_2_8_2:
54
+
55
+ # Validates controller_id
56
+ if not controller_id:
57
+ raise ValueError("'controller_id' is required.")
58
+
59
+ # Validates agent_ids
60
+ if not agent_ids:
61
+ raise ValueError("At least one agent id in 'agent_ids' 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 DeployAgents_V_2_8_2(
72
+ controller_id=controller_id,
73
+ agent_ids=agent_ids,
74
+ audit_log=res_audit_log
75
+ )
@@ -0,0 +1,75 @@
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
+ AuditParams as AuditParams_V_2_8_2,
8
+ OK as OK_V_2_8_2,
9
+ SubAgentsCommand as SubAgentsCommand_V_2_8_2
10
+ )
11
+
12
+ from ....util.check_matching_version import check_matching_version
13
+
14
+
15
+ def enable_subagents_action(
16
+ *,
17
+ context: Context,
18
+ controller_id: str,
19
+ subagent_ids: 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
+ subagent_ids=subagent_ids,
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="agents/inventory/cluster/subagents/enable", 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
+ subagent_ids: List[str],
52
+ audit_log: Optional[AuditLog]
53
+ ) -> SubAgentsCommand_V_2_8_2:
54
+
55
+ # Validates controller_id
56
+ if not controller_id:
57
+ raise ValueError("'controller_id' is required.")
58
+
59
+ # Validates subagent_ids
60
+ if not subagent_ids:
61
+ raise ValueError("At least one agent id in 'subagent_ids' 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 SubAgentsCommand_V_2_8_2(
72
+ controller_id=controller_id,
73
+ subagent_ids=subagent_ids,
74
+ audit_log=res_audit_log
75
+ )
@@ -0,0 +1,101 @@
1
+ from pathlib import Path
2
+ from typing import List, Literal, Optional, Union
3
+
4
+ from ...context import Context
5
+ from ....model.public.client.common.audit_log import AuditLog
6
+ from ....model.private.api.endpoint import EndpointCall
7
+ from ....model.private.http.joc.joc_v_2_8_2 import (
8
+ AuditParams as AuditParams_V_2_8_2,
9
+ AgentExportFilter as AgentExportFilter_V_2_8_2,
10
+ ExportFile as ExportFile_V_2_8_2,
11
+ ArchiveFormat as ArchiveFormat_V_2_8_2
12
+ )
13
+
14
+ from ....util.bytes_converter.bytes_to_file import bytes_to_file
15
+ from ....util.check_matching_version import check_matching_version
16
+
17
+
18
+ def export_agents_action(
19
+ *,
20
+ context: Context,
21
+ out_path: Union[Path, str],
22
+ archive_format: Literal["ZIP", "TAR_GZ"],
23
+ agent_ids: List[str],
24
+ audit_log: Optional[AuditLog]
25
+ ) -> bool:
26
+
27
+ # Normalize out_path
28
+ out_path = Path(out_path)
29
+
30
+ # Determine expected suffix from archive_format
31
+ expected_suffix = ".tar.gz" if archive_format == "TAR_GZ" else ".zip"
32
+
33
+ # Append suffix if missing or wrong
34
+ if not out_path.name.endswith((".zip", ".tar.gz")):
35
+ out_path = out_path.with_name(out_path.name + expected_suffix)
36
+
37
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
38
+ request_data = _build_v_2_8_2_request(
39
+ out_path=out_path,
40
+ archive_format=archive_format,
41
+ agent_ids=agent_ids,
42
+ audit_log=audit_log
43
+ )
44
+ else:
45
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
46
+
47
+ # Calls the dispatcher for the matching JOC version
48
+ result = context.joc_api.dispatch(endpoint_id="agents/export", call=EndpointCall(
49
+ http_service=context.http_service,
50
+ access_token=context.auth_provider.login(),
51
+ payload=request_data,
52
+ options=None,
53
+ ))
54
+
55
+ if isinstance(result, bytes):
56
+ return bytes_to_file(data=result, out_path=Path(out_path))
57
+
58
+ raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
59
+
60
+ #---------------------#
61
+ # Build 2.8.2 request #
62
+ #---------------------#
63
+ def _build_v_2_8_2_request(
64
+ *,
65
+ out_path: Union[Path, str],
66
+ archive_format: Literal["ZIP", "TAR_GZ"],
67
+ agent_ids: List[str],
68
+ audit_log: Optional[AuditLog]
69
+ ) -> AgentExportFilter_V_2_8_2:
70
+
71
+ # Validate: out_path
72
+ if not out_path:
73
+ raise ValueError("'out_path' is required.")
74
+
75
+ # Validate: archive_format
76
+ if not archive_format:
77
+ raise ValueError("'archive_format' is required.")
78
+
79
+ # Validate: agent_ids
80
+ if not agent_ids:
81
+ raise ValueError("At least one agent id in 'agent_ids' is required.")
82
+
83
+ # Build: export_file
84
+ res_export_file = ExportFile_V_2_8_2(
85
+ filename=Path(out_path).name,
86
+ format=(ArchiveFormat_V_2_8_2(archive_format)) # Raises ValueError() if invalid.
87
+ )
88
+
89
+ # Build: Audit Log
90
+ res_audit_log = AuditParams_V_2_8_2(
91
+ ticket_link=audit_log.ticket_link,
92
+ comment=audit_log.comment,
93
+ time_spent=audit_log.time_spent
94
+ ) if audit_log else None
95
+
96
+ # Result
97
+ return AgentExportFilter_V_2_8_2(
98
+ agent_ids=agent_ids,
99
+ export_file=res_export_file,
100
+ audit_log=res_audit_log
101
+ )
@@ -0,0 +1,55 @@
1
+ from typing import Any, Dict, List
2
+
3
+ from ...context import Context
4
+ from ....model.private.api.endpoint import EndpointCall
5
+ from ....model.private.http.joc.joc_v_2_8_2 import (
6
+ ReadAgentsV as ReadAgentsV_V_2_8_2,
7
+ AgentsV as AgentsV_V_2_8_2
8
+ )
9
+
10
+ from ....util.check_matching_version import check_matching_version
11
+
12
+
13
+ def get_agents_status_action(
14
+ *,
15
+ context: Context,
16
+ controller_id: str,
17
+ agent_ids: List[str]
18
+ ) -> Dict[str, Any]:
19
+
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(controller_id=controller_id, agent_ids=agent_ids)
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="agents", call=EndpointCall(
27
+ http_service=context.http_service,
28
+ access_token=context.auth_provider.login(),
29
+ payload=request_data,
30
+ options=None,
31
+ ))
32
+
33
+ if isinstance(result, AgentsV_V_2_8_2):
34
+ return result.model_dump(mode="json").get("agents") or {}
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(*, controller_id: str, agent_ids: List[str]) -> ReadAgentsV_V_2_8_2:
42
+ # Validates controller_id
43
+ if not controller_id:
44
+ raise ValueError("'controller_id' is required.")
45
+
46
+ # Validate: agent_ids
47
+ if not agent_ids:
48
+ raise ValueError("At least one agent id in 'agent_ids' is required.")
49
+
50
+ # Result
51
+ return ReadAgentsV_V_2_8_2(
52
+ controller_id=controller_id,
53
+ agent_ids=agent_ids,
54
+ compact=False,
55
+ )
@@ -0,0 +1,139 @@
1
+ from pathlib import Path
2
+ from typing import Any, Dict, List, Literal, Optional, Tuple, Union
3
+
4
+ from ...context import Context
5
+ from ....model.public.client.common.audit_log import AuditLog
6
+ from ....model.private.api.endpoint import EndpointCall
7
+ from ....model.private.http.joc.joc_v_2_8_2 import (OK as OK_V_2_8_2)
8
+
9
+ from ....util.detect_archive_type import detect_archive_type
10
+ from ....util.bytes_converter.files_to_bytes import files_to_bytes
11
+ from ....util.bytes_converter.bytes_to_archive_bytes import bytes_to_archive_bytes
12
+ from ....util.check_matching_version import check_matching_version
13
+ from ....util.bytes_converter.read_bytes_archive_files_to_bytes import read_bytes_archive_files_to_bytes
14
+
15
+
16
+ def import_agents_action(
17
+ *,
18
+ context: Context,
19
+ controller_id: str,
20
+ file_path: Union[Path, str],
21
+ archive_format: Literal["ZIP", "TAR_GZ"],
22
+ overwrite: bool,
23
+ audit_log: Optional[AuditLog]
24
+ ) -> bool:
25
+
26
+ if check_matching_version(min="2.6.5", max="2.8.3", check=context.version):
27
+ options, data = _build_v_2_8_2_request(
28
+ controller_id=controller_id,
29
+ file_path=Path(file_path),
30
+ archive_format=archive_format,
31
+ overwrite=overwrite,
32
+ audit_log=audit_log
33
+ )
34
+ else:
35
+ raise RuntimeError(f"Version {context.version} is not compatible with building the request.")
36
+
37
+ # Calls the dispatcher for the matching JOC version
38
+ result = context.joc_api.dispatch(endpoint_id="agents/import", call=EndpointCall(
39
+ http_service=context.http_service,
40
+ access_token=context.auth_provider.login(),
41
+ payload=data,
42
+ options=options,
43
+ ))
44
+
45
+ if isinstance(result, OK_V_2_8_2):
46
+ return bool(result.ok)
47
+
48
+ raise RuntimeError(f"Unexpected response type: {type(result).__name__}")
49
+
50
+ #---------------------------------------#
51
+ # Build 2.8.2 request #
52
+ # Returns: [Formdata, List of archives] #
53
+ #---------------------------------------#
54
+ def _build_v_2_8_2_request(
55
+ *,
56
+ controller_id: str,
57
+ file_path: Path,
58
+ archive_format: Literal["ZIP", "TAR_GZ"],
59
+ overwrite: bool,
60
+ audit_log: Optional[AuditLog]
61
+ ) -> Tuple[Dict[str, Any], bytes]:
62
+
63
+ # Validate: controller_id
64
+ if not controller_id:
65
+ raise ValueError("'controller_id' is required.")
66
+
67
+ # Validate: file_path
68
+ if not file_path.exists():
69
+ raise ValueError(f"File path does not exist: {file_path}")
70
+
71
+ # Validate: archive_format
72
+ if archive_format not in ("ZIP", "TAR_GZ"):
73
+ raise ValueError("'archive_format' must be 'ZIP' or 'TAR_GZ'.")
74
+
75
+ # Build: files_as_bytes
76
+ files_as_bytes = files_to_bytes(
77
+ file_path=file_path,
78
+ filter_suffixes=[".json", ".zip", ".tar.gz", ".tgz"]
79
+ )
80
+
81
+ if not files_as_bytes:
82
+ raise ValueError(
83
+ "No matching files found for import. "
84
+ "Expected: '*.json', '*.zip', '*.tar.gz', '*.tgz'."
85
+ )
86
+
87
+ # Build: res_files
88
+ files: List[Tuple[str, bytes]] = []
89
+
90
+ for path, file in files_as_bytes:
91
+ # Skips invalid filenames
92
+ if path.rsplit("/", 1)[-1].startswith((".", "_", "-")):
93
+ continue
94
+
95
+ archive_type = detect_archive_type(file)
96
+
97
+ if not archive_type and path.endswith(".json"):
98
+ files.append((path, file))
99
+ else:
100
+ arch_files = read_bytes_archive_files_to_bytes(
101
+ file=file,
102
+ filter_suffixes=[".json"]
103
+ )
104
+
105
+ if not arch_files:
106
+ continue
107
+
108
+ for arch_path, arch_file in arch_files:
109
+ # Skips invalid filenames
110
+ if arch_path.rsplit("/", 1)[-1].startswith((".", "_", "-")):
111
+ continue
112
+
113
+ # Removes archive suffix
114
+ path = path.split(".")[0]
115
+
116
+ new_path = path + "/" + arch_path
117
+ files.append((new_path, arch_file))
118
+
119
+ # Build: res_archive
120
+ res_archive = bytes_to_archive_bytes(archive_format=archive_format, files=files)
121
+
122
+ # Build: options
123
+ res_options: Dict[str, Any] = {
124
+ "format": archive_format,
125
+ "overwrite": overwrite,
126
+ "controller_id": controller_id
127
+ }
128
+
129
+ # Build: audit_log
130
+ if audit_log:
131
+ if audit_log.ticket_link:
132
+ res_options["audit_log_ticket_link"] = audit_log.ticket_link
133
+ if audit_log.comment:
134
+ res_options["audit_log_comment"] = audit_log.comment
135
+ if audit_log.time_spent:
136
+ res_options["audit_log_time_spent"] = audit_log.time_spent
137
+
138
+ # Result
139
+ return res_options, res_archive