workato-platform-cli 1.0.0rc5.dev5__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 (306) hide show
  1. workato_platform_cli/__init__.py +135 -0
  2. workato_platform_cli/_version.py +34 -0
  3. workato_platform_cli/cli/__init__.py +126 -0
  4. workato_platform_cli/cli/commands/__init__.py +0 -0
  5. workato_platform_cli/cli/commands/api_clients.py +627 -0
  6. workato_platform_cli/cli/commands/api_collections.py +497 -0
  7. workato_platform_cli/cli/commands/assets.py +82 -0
  8. workato_platform_cli/cli/commands/connections.py +1205 -0
  9. workato_platform_cli/cli/commands/connectors/__init__.py +0 -0
  10. workato_platform_cli/cli/commands/connectors/command.py +178 -0
  11. workato_platform_cli/cli/commands/connectors/connector_manager.py +351 -0
  12. workato_platform_cli/cli/commands/data_tables.py +345 -0
  13. workato_platform_cli/cli/commands/guide.py +315 -0
  14. workato_platform_cli/cli/commands/init.py +229 -0
  15. workato_platform_cli/cli/commands/profiles.py +364 -0
  16. workato_platform_cli/cli/commands/projects/__init__.py +0 -0
  17. workato_platform_cli/cli/commands/projects/command.py +513 -0
  18. workato_platform_cli/cli/commands/projects/project_manager.py +338 -0
  19. workato_platform_cli/cli/commands/properties.py +174 -0
  20. workato_platform_cli/cli/commands/pull.py +327 -0
  21. workato_platform_cli/cli/commands/push/__init__.py +0 -0
  22. workato_platform_cli/cli/commands/push/command.py +320 -0
  23. workato_platform_cli/cli/commands/recipes/__init__.py +0 -0
  24. workato_platform_cli/cli/commands/recipes/command.py +847 -0
  25. workato_platform_cli/cli/commands/recipes/validator.py +1740 -0
  26. workato_platform_cli/cli/commands/workspace.py +73 -0
  27. workato_platform_cli/cli/containers.py +80 -0
  28. workato_platform_cli/cli/resources/data/connection-data.json +7364 -0
  29. workato_platform_cli/cli/resources/data/picklist-data.json +3706 -0
  30. workato_platform_cli/cli/resources/docs/README.md +178 -0
  31. workato_platform_cli/cli/resources/docs/actions.md +452 -0
  32. workato_platform_cli/cli/resources/docs/block-structure.md +424 -0
  33. workato_platform_cli/cli/resources/docs/connections-parameters.md +11946 -0
  34. workato_platform_cli/cli/resources/docs/data-mapping.md +779 -0
  35. workato_platform_cli/cli/resources/docs/formulas/array-list-formulas.md +1276 -0
  36. workato_platform_cli/cli/resources/docs/formulas/conditions.md +102 -0
  37. workato_platform_cli/cli/resources/docs/formulas/date-formulas.md +798 -0
  38. workato_platform_cli/cli/resources/docs/formulas/number-formulas.md +507 -0
  39. workato_platform_cli/cli/resources/docs/formulas/other-formulas.md +419 -0
  40. workato_platform_cli/cli/resources/docs/formulas/string-formulas.md +1353 -0
  41. workato_platform_cli/cli/resources/docs/formulas.md +214 -0
  42. workato_platform_cli/cli/resources/docs/naming-conventions.md +163 -0
  43. workato_platform_cli/cli/resources/docs/recipe-deployment-workflow.md +352 -0
  44. workato_platform_cli/cli/resources/docs/recipe-fundamentals.md +179 -0
  45. workato_platform_cli/cli/resources/docs/triggers.md +360 -0
  46. workato_platform_cli/cli/utils/__init__.py +10 -0
  47. workato_platform_cli/cli/utils/config/__init__.py +33 -0
  48. workato_platform_cli/cli/utils/config/manager.py +1001 -0
  49. workato_platform_cli/cli/utils/config/models.py +89 -0
  50. workato_platform_cli/cli/utils/config/profiles.py +491 -0
  51. workato_platform_cli/cli/utils/config/workspace.py +113 -0
  52. workato_platform_cli/cli/utils/exception_handler.py +531 -0
  53. workato_platform_cli/cli/utils/gitignore.py +32 -0
  54. workato_platform_cli/cli/utils/ignore_patterns.py +44 -0
  55. workato_platform_cli/cli/utils/spinner.py +63 -0
  56. workato_platform_cli/cli/utils/version_checker.py +237 -0
  57. workato_platform_cli/client/__init__.py +0 -0
  58. workato_platform_cli/client/workato_api/__init__.py +202 -0
  59. workato_platform_cli/client/workato_api/api/__init__.py +15 -0
  60. workato_platform_cli/client/workato_api/api/api_platform_api.py +2875 -0
  61. workato_platform_cli/client/workato_api/api/connections_api.py +1807 -0
  62. workato_platform_cli/client/workato_api/api/connectors_api.py +840 -0
  63. workato_platform_cli/client/workato_api/api/data_tables_api.py +604 -0
  64. workato_platform_cli/client/workato_api/api/export_api.py +621 -0
  65. workato_platform_cli/client/workato_api/api/folders_api.py +621 -0
  66. workato_platform_cli/client/workato_api/api/packages_api.py +1197 -0
  67. workato_platform_cli/client/workato_api/api/projects_api.py +590 -0
  68. workato_platform_cli/client/workato_api/api/properties_api.py +620 -0
  69. workato_platform_cli/client/workato_api/api/recipes_api.py +1379 -0
  70. workato_platform_cli/client/workato_api/api/users_api.py +285 -0
  71. workato_platform_cli/client/workato_api/api_client.py +807 -0
  72. workato_platform_cli/client/workato_api/api_response.py +21 -0
  73. workato_platform_cli/client/workato_api/configuration.py +601 -0
  74. workato_platform_cli/client/workato_api/docs/APIPlatformApi.md +844 -0
  75. workato_platform_cli/client/workato_api/docs/ApiClient.md +46 -0
  76. workato_platform_cli/client/workato_api/docs/ApiClientApiCollectionsInner.md +30 -0
  77. workato_platform_cli/client/workato_api/docs/ApiClientApiPoliciesInner.md +30 -0
  78. workato_platform_cli/client/workato_api/docs/ApiClientCreateRequest.md +46 -0
  79. workato_platform_cli/client/workato_api/docs/ApiClientListResponse.md +32 -0
  80. workato_platform_cli/client/workato_api/docs/ApiClientResponse.md +29 -0
  81. workato_platform_cli/client/workato_api/docs/ApiCollection.md +38 -0
  82. workato_platform_cli/client/workato_api/docs/ApiCollectionCreateRequest.md +32 -0
  83. workato_platform_cli/client/workato_api/docs/ApiEndpoint.md +41 -0
  84. workato_platform_cli/client/workato_api/docs/ApiKey.md +36 -0
  85. workato_platform_cli/client/workato_api/docs/ApiKeyCreateRequest.md +32 -0
  86. workato_platform_cli/client/workato_api/docs/ApiKeyListResponse.md +32 -0
  87. workato_platform_cli/client/workato_api/docs/ApiKeyResponse.md +29 -0
  88. workato_platform_cli/client/workato_api/docs/Asset.md +39 -0
  89. workato_platform_cli/client/workato_api/docs/AssetReference.md +37 -0
  90. workato_platform_cli/client/workato_api/docs/Connection.md +44 -0
  91. workato_platform_cli/client/workato_api/docs/ConnectionCreateRequest.md +35 -0
  92. workato_platform_cli/client/workato_api/docs/ConnectionUpdateRequest.md +34 -0
  93. workato_platform_cli/client/workato_api/docs/ConnectionsApi.md +526 -0
  94. workato_platform_cli/client/workato_api/docs/ConnectorAction.md +33 -0
  95. workato_platform_cli/client/workato_api/docs/ConnectorVersion.md +32 -0
  96. workato_platform_cli/client/workato_api/docs/ConnectorsApi.md +249 -0
  97. workato_platform_cli/client/workato_api/docs/CreateExportManifestRequest.md +29 -0
  98. workato_platform_cli/client/workato_api/docs/CreateFolderRequest.md +30 -0
  99. workato_platform_cli/client/workato_api/docs/CustomConnector.md +35 -0
  100. workato_platform_cli/client/workato_api/docs/CustomConnectorCodeResponse.md +29 -0
  101. workato_platform_cli/client/workato_api/docs/CustomConnectorCodeResponseData.md +29 -0
  102. workato_platform_cli/client/workato_api/docs/CustomConnectorListResponse.md +29 -0
  103. workato_platform_cli/client/workato_api/docs/DataTable.md +34 -0
  104. workato_platform_cli/client/workato_api/docs/DataTableColumn.md +37 -0
  105. workato_platform_cli/client/workato_api/docs/DataTableColumnRequest.md +37 -0
  106. workato_platform_cli/client/workato_api/docs/DataTableCreateRequest.md +31 -0
  107. workato_platform_cli/client/workato_api/docs/DataTableCreateResponse.md +29 -0
  108. workato_platform_cli/client/workato_api/docs/DataTableListResponse.md +29 -0
  109. workato_platform_cli/client/workato_api/docs/DataTableRelation.md +30 -0
  110. workato_platform_cli/client/workato_api/docs/DataTablesApi.md +172 -0
  111. workato_platform_cli/client/workato_api/docs/DeleteProject403Response.md +29 -0
  112. workato_platform_cli/client/workato_api/docs/Error.md +29 -0
  113. workato_platform_cli/client/workato_api/docs/ExportApi.md +175 -0
  114. workato_platform_cli/client/workato_api/docs/ExportManifestRequest.md +35 -0
  115. workato_platform_cli/client/workato_api/docs/ExportManifestResponse.md +29 -0
  116. workato_platform_cli/client/workato_api/docs/ExportManifestResponseResult.md +36 -0
  117. workato_platform_cli/client/workato_api/docs/Folder.md +35 -0
  118. workato_platform_cli/client/workato_api/docs/FolderAssetsResponse.md +29 -0
  119. workato_platform_cli/client/workato_api/docs/FolderAssetsResponseResult.md +29 -0
  120. workato_platform_cli/client/workato_api/docs/FolderCreationResponse.md +35 -0
  121. workato_platform_cli/client/workato_api/docs/FoldersApi.md +176 -0
  122. workato_platform_cli/client/workato_api/docs/ImportResults.md +32 -0
  123. workato_platform_cli/client/workato_api/docs/OAuthUrlResponse.md +29 -0
  124. workato_platform_cli/client/workato_api/docs/OAuthUrlResponseData.md +29 -0
  125. workato_platform_cli/client/workato_api/docs/OpenApiSpec.md +30 -0
  126. workato_platform_cli/client/workato_api/docs/PackageDetailsResponse.md +35 -0
  127. workato_platform_cli/client/workato_api/docs/PackageDetailsResponseRecipeStatusInner.md +30 -0
  128. workato_platform_cli/client/workato_api/docs/PackageResponse.md +33 -0
  129. workato_platform_cli/client/workato_api/docs/PackagesApi.md +364 -0
  130. workato_platform_cli/client/workato_api/docs/PicklistRequest.md +30 -0
  131. workato_platform_cli/client/workato_api/docs/PicklistResponse.md +29 -0
  132. workato_platform_cli/client/workato_api/docs/PlatformConnector.md +36 -0
  133. workato_platform_cli/client/workato_api/docs/PlatformConnectorListResponse.md +32 -0
  134. workato_platform_cli/client/workato_api/docs/Project.md +32 -0
  135. workato_platform_cli/client/workato_api/docs/ProjectsApi.md +173 -0
  136. workato_platform_cli/client/workato_api/docs/PropertiesApi.md +186 -0
  137. workato_platform_cli/client/workato_api/docs/Recipe.md +58 -0
  138. workato_platform_cli/client/workato_api/docs/RecipeConfigInner.md +33 -0
  139. workato_platform_cli/client/workato_api/docs/RecipeConnectionUpdateRequest.md +30 -0
  140. workato_platform_cli/client/workato_api/docs/RecipeListResponse.md +29 -0
  141. workato_platform_cli/client/workato_api/docs/RecipeStartResponse.md +31 -0
  142. workato_platform_cli/client/workato_api/docs/RecipesApi.md +367 -0
  143. workato_platform_cli/client/workato_api/docs/RuntimeUserConnectionCreateRequest.md +34 -0
  144. workato_platform_cli/client/workato_api/docs/RuntimeUserConnectionResponse.md +29 -0
  145. workato_platform_cli/client/workato_api/docs/RuntimeUserConnectionResponseData.md +30 -0
  146. workato_platform_cli/client/workato_api/docs/SuccessResponse.md +29 -0
  147. workato_platform_cli/client/workato_api/docs/UpsertProjectPropertiesRequest.md +29 -0
  148. workato_platform_cli/client/workato_api/docs/User.md +48 -0
  149. workato_platform_cli/client/workato_api/docs/UsersApi.md +84 -0
  150. workato_platform_cli/client/workato_api/docs/ValidationError.md +30 -0
  151. workato_platform_cli/client/workato_api/docs/ValidationErrorErrorsValue.md +28 -0
  152. workato_platform_cli/client/workato_api/exceptions.py +216 -0
  153. workato_platform_cli/client/workato_api/models/__init__.py +83 -0
  154. workato_platform_cli/client/workato_api/models/api_client.py +185 -0
  155. workato_platform_cli/client/workato_api/models/api_client_api_collections_inner.py +89 -0
  156. workato_platform_cli/client/workato_api/models/api_client_api_policies_inner.py +89 -0
  157. workato_platform_cli/client/workato_api/models/api_client_create_request.py +138 -0
  158. workato_platform_cli/client/workato_api/models/api_client_list_response.py +101 -0
  159. workato_platform_cli/client/workato_api/models/api_client_response.py +91 -0
  160. workato_platform_cli/client/workato_api/models/api_collection.py +110 -0
  161. workato_platform_cli/client/workato_api/models/api_collection_create_request.py +97 -0
  162. workato_platform_cli/client/workato_api/models/api_endpoint.py +117 -0
  163. workato_platform_cli/client/workato_api/models/api_key.py +102 -0
  164. workato_platform_cli/client/workato_api/models/api_key_create_request.py +93 -0
  165. workato_platform_cli/client/workato_api/models/api_key_list_response.py +101 -0
  166. workato_platform_cli/client/workato_api/models/api_key_response.py +91 -0
  167. workato_platform_cli/client/workato_api/models/asset.py +124 -0
  168. workato_platform_cli/client/workato_api/models/asset_reference.py +110 -0
  169. workato_platform_cli/client/workato_api/models/connection.py +173 -0
  170. workato_platform_cli/client/workato_api/models/connection_create_request.py +99 -0
  171. workato_platform_cli/client/workato_api/models/connection_update_request.py +97 -0
  172. workato_platform_cli/client/workato_api/models/connector_action.py +100 -0
  173. workato_platform_cli/client/workato_api/models/connector_version.py +99 -0
  174. workato_platform_cli/client/workato_api/models/create_export_manifest_request.py +91 -0
  175. workato_platform_cli/client/workato_api/models/create_folder_request.py +89 -0
  176. workato_platform_cli/client/workato_api/models/custom_connector.py +117 -0
  177. workato_platform_cli/client/workato_api/models/custom_connector_code_response.py +91 -0
  178. workato_platform_cli/client/workato_api/models/custom_connector_code_response_data.py +87 -0
  179. workato_platform_cli/client/workato_api/models/custom_connector_list_response.py +95 -0
  180. workato_platform_cli/client/workato_api/models/data_table.py +107 -0
  181. workato_platform_cli/client/workato_api/models/data_table_column.py +125 -0
  182. workato_platform_cli/client/workato_api/models/data_table_column_request.py +130 -0
  183. workato_platform_cli/client/workato_api/models/data_table_create_request.py +99 -0
  184. workato_platform_cli/client/workato_api/models/data_table_create_response.py +91 -0
  185. workato_platform_cli/client/workato_api/models/data_table_list_response.py +95 -0
  186. workato_platform_cli/client/workato_api/models/data_table_relation.py +90 -0
  187. workato_platform_cli/client/workato_api/models/delete_project403_response.py +87 -0
  188. workato_platform_cli/client/workato_api/models/error.py +87 -0
  189. workato_platform_cli/client/workato_api/models/export_manifest_request.py +107 -0
  190. workato_platform_cli/client/workato_api/models/export_manifest_response.py +91 -0
  191. workato_platform_cli/client/workato_api/models/export_manifest_response_result.py +112 -0
  192. workato_platform_cli/client/workato_api/models/folder.py +110 -0
  193. workato_platform_cli/client/workato_api/models/folder_assets_response.py +91 -0
  194. workato_platform_cli/client/workato_api/models/folder_assets_response_result.py +95 -0
  195. workato_platform_cli/client/workato_api/models/folder_creation_response.py +110 -0
  196. workato_platform_cli/client/workato_api/models/import_results.py +93 -0
  197. workato_platform_cli/client/workato_api/models/o_auth_url_response.py +91 -0
  198. workato_platform_cli/client/workato_api/models/o_auth_url_response_data.py +87 -0
  199. workato_platform_cli/client/workato_api/models/open_api_spec.py +96 -0
  200. workato_platform_cli/client/workato_api/models/package_details_response.py +126 -0
  201. workato_platform_cli/client/workato_api/models/package_details_response_recipe_status_inner.py +99 -0
  202. workato_platform_cli/client/workato_api/models/package_response.py +109 -0
  203. workato_platform_cli/client/workato_api/models/picklist_request.py +89 -0
  204. workato_platform_cli/client/workato_api/models/picklist_response.py +88 -0
  205. workato_platform_cli/client/workato_api/models/platform_connector.py +116 -0
  206. workato_platform_cli/client/workato_api/models/platform_connector_list_response.py +101 -0
  207. workato_platform_cli/client/workato_api/models/project.py +93 -0
  208. workato_platform_cli/client/workato_api/models/recipe.py +174 -0
  209. workato_platform_cli/client/workato_api/models/recipe_config_inner.py +100 -0
  210. workato_platform_cli/client/workato_api/models/recipe_connection_update_request.py +89 -0
  211. workato_platform_cli/client/workato_api/models/recipe_list_response.py +95 -0
  212. workato_platform_cli/client/workato_api/models/recipe_start_response.py +91 -0
  213. workato_platform_cli/client/workato_api/models/runtime_user_connection_create_request.py +97 -0
  214. workato_platform_cli/client/workato_api/models/runtime_user_connection_response.py +91 -0
  215. workato_platform_cli/client/workato_api/models/runtime_user_connection_response_data.py +89 -0
  216. workato_platform_cli/client/workato_api/models/success_response.py +87 -0
  217. workato_platform_cli/client/workato_api/models/upsert_project_properties_request.py +88 -0
  218. workato_platform_cli/client/workato_api/models/user.py +151 -0
  219. workato_platform_cli/client/workato_api/models/validation_error.py +102 -0
  220. workato_platform_cli/client/workato_api/models/validation_error_errors_value.py +143 -0
  221. workato_platform_cli/client/workato_api/rest.py +213 -0
  222. workato_platform_cli/client/workato_api/test/__init__.py +0 -0
  223. workato_platform_cli/client/workato_api/test/test_api_client.py +94 -0
  224. workato_platform_cli/client/workato_api/test/test_api_client_api_collections_inner.py +52 -0
  225. workato_platform_cli/client/workato_api/test/test_api_client_api_policies_inner.py +52 -0
  226. workato_platform_cli/client/workato_api/test/test_api_client_create_request.py +75 -0
  227. workato_platform_cli/client/workato_api/test/test_api_client_list_response.py +114 -0
  228. workato_platform_cli/client/workato_api/test/test_api_client_response.py +104 -0
  229. workato_platform_cli/client/workato_api/test/test_api_collection.py +72 -0
  230. workato_platform_cli/client/workato_api/test/test_api_collection_create_request.py +57 -0
  231. workato_platform_cli/client/workato_api/test/test_api_endpoint.py +75 -0
  232. workato_platform_cli/client/workato_api/test/test_api_key.py +64 -0
  233. workato_platform_cli/client/workato_api/test/test_api_key_create_request.py +56 -0
  234. workato_platform_cli/client/workato_api/test/test_api_key_list_response.py +78 -0
  235. workato_platform_cli/client/workato_api/test/test_api_key_response.py +68 -0
  236. workato_platform_cli/client/workato_api/test/test_api_platform_api.py +101 -0
  237. workato_platform_cli/client/workato_api/test/test_asset.py +67 -0
  238. workato_platform_cli/client/workato_api/test/test_asset_reference.py +62 -0
  239. workato_platform_cli/client/workato_api/test/test_connection.py +81 -0
  240. workato_platform_cli/client/workato_api/test/test_connection_create_request.py +59 -0
  241. workato_platform_cli/client/workato_api/test/test_connection_update_request.py +56 -0
  242. workato_platform_cli/client/workato_api/test/test_connections_api.py +73 -0
  243. workato_platform_cli/client/workato_api/test/test_connector_action.py +59 -0
  244. workato_platform_cli/client/workato_api/test/test_connector_version.py +58 -0
  245. workato_platform_cli/client/workato_api/test/test_connectors_api.py +52 -0
  246. workato_platform_cli/client/workato_api/test/test_create_export_manifest_request.py +88 -0
  247. workato_platform_cli/client/workato_api/test/test_create_folder_request.py +53 -0
  248. workato_platform_cli/client/workato_api/test/test_custom_connector.py +76 -0
  249. workato_platform_cli/client/workato_api/test/test_custom_connector_code_response.py +54 -0
  250. workato_platform_cli/client/workato_api/test/test_custom_connector_code_response_data.py +52 -0
  251. workato_platform_cli/client/workato_api/test/test_custom_connector_list_response.py +82 -0
  252. workato_platform_cli/client/workato_api/test/test_data_table.py +88 -0
  253. workato_platform_cli/client/workato_api/test/test_data_table_column.py +72 -0
  254. workato_platform_cli/client/workato_api/test/test_data_table_column_request.py +64 -0
  255. workato_platform_cli/client/workato_api/test/test_data_table_create_request.py +82 -0
  256. workato_platform_cli/client/workato_api/test/test_data_table_create_response.py +90 -0
  257. workato_platform_cli/client/workato_api/test/test_data_table_list_response.py +94 -0
  258. workato_platform_cli/client/workato_api/test/test_data_table_relation.py +54 -0
  259. workato_platform_cli/client/workato_api/test/test_data_tables_api.py +45 -0
  260. workato_platform_cli/client/workato_api/test/test_delete_project403_response.py +51 -0
  261. workato_platform_cli/client/workato_api/test/test_error.py +52 -0
  262. workato_platform_cli/client/workato_api/test/test_export_api.py +45 -0
  263. workato_platform_cli/client/workato_api/test/test_export_manifest_request.py +69 -0
  264. workato_platform_cli/client/workato_api/test/test_export_manifest_response.py +68 -0
  265. workato_platform_cli/client/workato_api/test/test_export_manifest_response_result.py +66 -0
  266. workato_platform_cli/client/workato_api/test/test_folder.py +64 -0
  267. workato_platform_cli/client/workato_api/test/test_folder_assets_response.py +80 -0
  268. workato_platform_cli/client/workato_api/test/test_folder_assets_response_result.py +78 -0
  269. workato_platform_cli/client/workato_api/test/test_folder_creation_response.py +64 -0
  270. workato_platform_cli/client/workato_api/test/test_folders_api.py +45 -0
  271. workato_platform_cli/client/workato_api/test/test_import_results.py +58 -0
  272. workato_platform_cli/client/workato_api/test/test_o_auth_url_response.py +54 -0
  273. workato_platform_cli/client/workato_api/test/test_o_auth_url_response_data.py +52 -0
  274. workato_platform_cli/client/workato_api/test/test_open_api_spec.py +54 -0
  275. workato_platform_cli/client/workato_api/test/test_package_details_response.py +64 -0
  276. workato_platform_cli/client/workato_api/test/test_package_details_response_recipe_status_inner.py +52 -0
  277. workato_platform_cli/client/workato_api/test/test_package_response.py +58 -0
  278. workato_platform_cli/client/workato_api/test/test_packages_api.py +59 -0
  279. workato_platform_cli/client/workato_api/test/test_picklist_request.py +53 -0
  280. workato_platform_cli/client/workato_api/test/test_picklist_response.py +52 -0
  281. workato_platform_cli/client/workato_api/test/test_platform_connector.py +94 -0
  282. workato_platform_cli/client/workato_api/test/test_platform_connector_list_response.py +106 -0
  283. workato_platform_cli/client/workato_api/test/test_project.py +57 -0
  284. workato_platform_cli/client/workato_api/test/test_projects_api.py +45 -0
  285. workato_platform_cli/client/workato_api/test/test_properties_api.py +45 -0
  286. workato_platform_cli/client/workato_api/test/test_recipe.py +124 -0
  287. workato_platform_cli/client/workato_api/test/test_recipe_config_inner.py +55 -0
  288. workato_platform_cli/client/workato_api/test/test_recipe_connection_update_request.py +54 -0
  289. workato_platform_cli/client/workato_api/test/test_recipe_list_response.py +134 -0
  290. workato_platform_cli/client/workato_api/test/test_recipe_start_response.py +54 -0
  291. workato_platform_cli/client/workato_api/test/test_recipes_api.py +59 -0
  292. workato_platform_cli/client/workato_api/test/test_runtime_user_connection_create_request.py +59 -0
  293. workato_platform_cli/client/workato_api/test/test_runtime_user_connection_response.py +56 -0
  294. workato_platform_cli/client/workato_api/test/test_runtime_user_connection_response_data.py +54 -0
  295. workato_platform_cli/client/workato_api/test/test_success_response.py +52 -0
  296. workato_platform_cli/client/workato_api/test/test_upsert_project_properties_request.py +52 -0
  297. workato_platform_cli/client/workato_api/test/test_user.py +85 -0
  298. workato_platform_cli/client/workato_api/test/test_users_api.py +38 -0
  299. workato_platform_cli/client/workato_api/test/test_validation_error.py +52 -0
  300. workato_platform_cli/client/workato_api/test/test_validation_error_errors_value.py +50 -0
  301. workato_platform_cli/client/workato_api_README.md +205 -0
  302. workato_platform_cli-1.0.0rc5.dev5.dist-info/METADATA +185 -0
  303. workato_platform_cli-1.0.0rc5.dev5.dist-info/RECORD +306 -0
  304. workato_platform_cli-1.0.0rc5.dev5.dist-info/WHEEL +4 -0
  305. workato_platform_cli-1.0.0rc5.dev5.dist-info/entry_points.txt +2 -0
  306. workato_platform_cli-1.0.0rc5.dev5.dist-info/licenses/LICENSE +7 -0
@@ -0,0 +1,497 @@
1
+ from pathlib import Path
2
+
3
+ import aiohttp
4
+ import asyncclick as click
5
+
6
+ from dependency_injector.wiring import Provide, inject
7
+
8
+ from workato_platform_cli import Workato
9
+ from workato_platform_cli.cli.commands.projects.project_manager import ProjectManager
10
+ from workato_platform_cli.cli.containers import Container
11
+ from workato_platform_cli.cli.utils import Spinner
12
+ from workato_platform_cli.cli.utils.config import ConfigManager
13
+ from workato_platform_cli.cli.utils.exception_handler import (
14
+ handle_api_exceptions,
15
+ handle_cli_exceptions,
16
+ )
17
+ from workato_platform_cli.client.workato_api.models.api_collection import ApiCollection
18
+ from workato_platform_cli.client.workato_api.models.api_collection_create_request import ( # noqa: E501
19
+ ApiCollectionCreateRequest,
20
+ )
21
+ from workato_platform_cli.client.workato_api.models.api_endpoint import ApiEndpoint
22
+ from workato_platform_cli.client.workato_api.models.open_api_spec import OpenApiSpec
23
+
24
+
25
+ @click.group()
26
+ def api_collections() -> None:
27
+ """Manage API collections (generates recipes and endpoints from OpenAPI specs)"""
28
+ pass
29
+
30
+
31
+ @api_collections.command()
32
+ @click.option("--name", help="Name for the API collection (defaults to project name)")
33
+ @click.option(
34
+ "--format",
35
+ type=click.Choice(["json", "yaml", "url"]),
36
+ required=True,
37
+ help="Format of the OpenAPI spec",
38
+ )
39
+ @click.option(
40
+ "--content",
41
+ required=True,
42
+ help="Path to the spec file (for json/yaml) or URL (for url format)",
43
+ )
44
+ @click.option(
45
+ "--proxy-connection-id",
46
+ type=int,
47
+ help="ID of the proxy connection to use",
48
+ )
49
+ @handle_cli_exceptions
50
+ @inject
51
+ @handle_api_exceptions
52
+ async def create(
53
+ name: str,
54
+ format: str,
55
+ content: str,
56
+ proxy_connection_id: int | None = None,
57
+ config_manager: ConfigManager = Provide[Container.config_manager],
58
+ project_manager: ProjectManager = Provide[Container.project_manager],
59
+ workato_api_client: Workato = Provide[Container.workato_api_client],
60
+ ) -> None:
61
+ """Create a new API collection from OpenAPI spec (creates recipes and endpoints)"""
62
+
63
+ # Load project metadata
64
+ meta_data = config_manager.load_config()
65
+ project_id = meta_data.project_id
66
+ if not project_id:
67
+ click.echo("❌ No project configured. Please run 'workato init' first.")
68
+ return
69
+
70
+ # Use project name as default if name not provided
71
+ if not name:
72
+ name = meta_data.project_name or "API Collection"
73
+
74
+ # Prepare OpenAPI spec content
75
+ openapi_spec = {"format": format}
76
+
77
+ if format in ["json", "yaml"]:
78
+ # Read content from file
79
+ content_path = Path(content)
80
+ if not content_path.exists():
81
+ click.echo(f"❌ File not found: {content}")
82
+ return
83
+
84
+ try:
85
+ with open(content_path) as f:
86
+ openapi_spec["content"] = f.read()
87
+ except (FileNotFoundError, PermissionError, OSError) as e:
88
+ click.echo(f"❌ Failed to read file {content}: {str(e)}")
89
+ return
90
+ else: # url format, download the file
91
+ async with aiohttp.ClientSession() as session:
92
+ response = await session.get(content)
93
+ openapi_spec["content"] = await response.text()
94
+ openapi_spec["format"] = "json"
95
+
96
+ # Create API collection
97
+ spinner = Spinner(f"Creating API collection '{name}'")
98
+ spinner.start()
99
+
100
+ try:
101
+ collection_response = (
102
+ await workato_api_client.api_platform_api.create_api_collection(
103
+ api_collection_create_request=ApiCollectionCreateRequest(
104
+ name=name,
105
+ project_id=project_id,
106
+ proxy_connection_id=proxy_connection_id,
107
+ openapi_spec=OpenApiSpec.model_validate(openapi_spec),
108
+ ),
109
+ )
110
+ )
111
+ collection_id = collection_response.id
112
+ finally:
113
+ elapsed = spinner.stop()
114
+
115
+ click.echo(
116
+ f"✅ API collection '{name}' ({collection_id}) created successfully "
117
+ f"({elapsed:.1f}s)"
118
+ )
119
+ click.echo()
120
+
121
+ # Display detailed collection information from create response
122
+ # Handle different possible response structures (result, data, or direct)
123
+ display_collection_summary(collection_response)
124
+
125
+ click.echo()
126
+ click.echo("🎉 Generated from OpenAPI spec:")
127
+ click.echo(" â€ĸ API endpoints for each path/method combination")
128
+ click.echo(" â€ĸ Workato recipes implementing the business logic")
129
+ click.echo(" â€ĸ Request/response schemas and validation")
130
+ click.echo()
131
+ click.echo("💡 Next steps:")
132
+ click.echo(" â€ĸ Review generated recipes in your project")
133
+ click.echo(
134
+ " â€ĸ Enable endpoints: workato api-collections enable-endpoint "
135
+ "--api-endpoint-id <ID>"
136
+ )
137
+ click.echo(" â€ĸ Test API endpoints with your API client")
138
+
139
+ # Handle post-creation sync
140
+ await project_manager.handle_post_api_sync()
141
+
142
+
143
+ @api_collections.command(name="list")
144
+ @click.option("--page", default=1, type=int, help="Page number (default: 1)")
145
+ @click.option(
146
+ "--per-page",
147
+ default=100,
148
+ type=int,
149
+ help="Items per page (default: 100, max: 100)",
150
+ )
151
+ @handle_cli_exceptions
152
+ @inject
153
+ @handle_api_exceptions
154
+ async def list_collections(
155
+ page: int,
156
+ per_page: int,
157
+ workato_api_client: Workato = Provide[Container.workato_api_client],
158
+ ) -> None:
159
+ """List API collections"""
160
+
161
+ # Validate per_page limit
162
+ if per_page > 100:
163
+ click.echo("❌ Maximum per-page limit is 100")
164
+ return
165
+
166
+ spinner = Spinner(f"Fetching API collections (page {page})")
167
+ spinner.start()
168
+
169
+ try:
170
+ collections = await workato_api_client.api_platform_api.list_api_collections(
171
+ page=page,
172
+ per_page=per_page,
173
+ )
174
+ finally:
175
+ elapsed = spinner.stop()
176
+
177
+ click.echo(f"📚 API Collections ({elapsed:.1f}s)")
178
+ click.echo(f" 📄 Page {page} ({len(collections)} collections)")
179
+
180
+ if not collections:
181
+ click.echo(" â„šī¸ No API collections found")
182
+ if page > 1:
183
+ click.echo(" 💡 Try a lower page number")
184
+ return
185
+
186
+ click.echo()
187
+
188
+ # Display collections
189
+ for collection in collections:
190
+ display_collection_summary(collection=collection)
191
+ click.echo()
192
+
193
+ # Show pagination info if more than per_page results might exist
194
+ if len(collections) == per_page:
195
+ click.echo("💡 Pagination:")
196
+ click.echo(f" â€ĸ Next page: workato api-collections list --page {page + 1}")
197
+
198
+ if page > 1:
199
+ click.echo(f" â€ĸ Previous page: workato api-collections list --page {page - 1}")
200
+
201
+ click.echo()
202
+ click.echo("💡 Commands:")
203
+ click.echo(
204
+ " â€ĸ List endpoints: workato api-collections list-endpoints "
205
+ "--api-collection-id <ID>"
206
+ )
207
+ click.echo(
208
+ " â€ĸ Enable endpoint: workato api-collections enable-endpoint "
209
+ "--api-endpoint-id <ID>"
210
+ )
211
+
212
+
213
+ @api_collections.command(name="list-endpoints")
214
+ @click.option(
215
+ "--api-collection-id", required=True, type=int, help="ID of the API collection"
216
+ )
217
+ @handle_cli_exceptions
218
+ @inject
219
+ @handle_api_exceptions
220
+ async def list_endpoints(
221
+ api_collection_id: int,
222
+ workato_api_client: Workato = Provide[Container.workato_api_client],
223
+ ) -> None:
224
+ """List endpoints for an API collection"""
225
+ spinner = Spinner(f"Fetching endpoints for collection {api_collection_id}")
226
+ spinner.start()
227
+
228
+ try:
229
+ endpoints: list[ApiEndpoint] = []
230
+ page = 1
231
+ while True:
232
+ page_endpoints = (
233
+ await workato_api_client.api_platform_api.list_api_endpoints(
234
+ api_collection_id=api_collection_id,
235
+ page=page,
236
+ per_page=100,
237
+ )
238
+ )
239
+ endpoints.extend(page_endpoints)
240
+ if len(page_endpoints) < 100:
241
+ break
242
+ page += 1
243
+
244
+ finally:
245
+ elapsed = spinner.stop()
246
+
247
+ if not endpoints:
248
+ click.echo(" â„šī¸ No endpoints found for this collection")
249
+ return
250
+
251
+ # Parse the response - API returns a list directly
252
+ total_count = len(endpoints)
253
+
254
+ click.echo(
255
+ f"🔗 {total_count} API Endpoints for API Collection {api_collection_id} "
256
+ f"({elapsed:.1f}s)"
257
+ )
258
+ click.echo(
259
+ f" 🌐 Base URL: {endpoints[0].url.removesuffix(f'/{endpoints[0].path}')}"
260
+ )
261
+
262
+ click.echo()
263
+
264
+ # Display endpoints
265
+ for endpoint in endpoints:
266
+ display_endpoint_summary(endpoint=endpoint)
267
+ click.echo()
268
+
269
+ click.echo()
270
+ click.echo("💡 Commands:")
271
+ click.echo(
272
+ " â€ĸ Enable endpoint: workato api-collections enable-endpoint "
273
+ "--api-endpoint-id <ID>"
274
+ )
275
+ click.echo(
276
+ " â€ĸ Enable all endpoints: workato api-collections enable-endpoint "
277
+ "--api-collection-id <ID> --all"
278
+ )
279
+
280
+
281
+ @api_collections.command(name="enable-endpoint")
282
+ @click.option("--api-endpoint-id", type=int, help="ID of the API endpoint to enable")
283
+ @click.option(
284
+ "--api-collection-id", type=int, help="ID of the API collection (use with --all)"
285
+ )
286
+ @click.option(
287
+ "--all",
288
+ is_flag=True,
289
+ help="Enable all endpoints in the collection (requires --api-collection-id)",
290
+ )
291
+ @handle_cli_exceptions
292
+ @handle_api_exceptions
293
+ async def enable_endpoint(
294
+ api_endpoint_id: int,
295
+ api_collection_id: int,
296
+ all: bool,
297
+ ) -> None:
298
+ """Enable an API endpoint or all endpoints in a collection"""
299
+
300
+ # Validate parameter combinations
301
+ if all and not api_collection_id:
302
+ click.echo("❌ --all flag requires --api-collection-id")
303
+ return
304
+
305
+ if all and api_endpoint_id:
306
+ click.echo("❌ Cannot specify both --api-endpoint-id and --all")
307
+ return
308
+
309
+ if not all and not api_endpoint_id:
310
+ click.echo(
311
+ "❌ Must specify either --api-endpoint-id or --all with --api-collection-id"
312
+ )
313
+ return
314
+
315
+ if all:
316
+ # Enable all endpoints in the collection
317
+ await enable_all_endpoints_in_collection(api_collection_id)
318
+ else:
319
+ # Enable single endpoint
320
+ await enable_api_endpoint(api_endpoint_id)
321
+
322
+
323
+ @inject
324
+ async def enable_all_endpoints_in_collection(
325
+ api_collection_id: int,
326
+ workato_api_client: Workato = Provide[Container.workato_api_client],
327
+ ) -> None:
328
+ """Enable all endpoints in an API collection"""
329
+ spinner = Spinner(f"Fetching endpoints for collection {api_collection_id}")
330
+ spinner.start()
331
+
332
+ # First, get all endpoints in the collection
333
+ try:
334
+ endpoints: list[ApiEndpoint] = []
335
+ page = 1
336
+ while True:
337
+ page_endpoints = (
338
+ await workato_api_client.api_platform_api.list_api_endpoints(
339
+ api_collection_id=api_collection_id,
340
+ page=page,
341
+ per_page=100,
342
+ )
343
+ )
344
+ endpoints.extend(page_endpoints)
345
+ if len(page_endpoints) < 100:
346
+ break
347
+ page += 1
348
+
349
+ finally:
350
+ elapsed = spinner.stop()
351
+
352
+ if not endpoints:
353
+ click.echo(f"❌ No endpoints found for collection {api_collection_id}")
354
+ return
355
+
356
+ # Filter for disabled endpoints
357
+ disabled_endpoints = [ep for ep in endpoints if not ep.active]
358
+
359
+ if not disabled_endpoints:
360
+ click.echo(
361
+ f"✅ All endpoints in collection {api_collection_id} are already enabled"
362
+ )
363
+ return
364
+
365
+ click.echo(
366
+ f"📋 Found {len(disabled_endpoints)} disabled endpoints in "
367
+ f"collection {api_collection_id}"
368
+ )
369
+ click.echo("💡 Enabling all disabled endpoints:")
370
+ for ep in disabled_endpoints:
371
+ method = ep.method.upper()
372
+ click.echo(f" â€ĸ {ep.name} ({method} {ep.url})")
373
+ click.echo()
374
+
375
+ # Enable each disabled endpoint
376
+ success_count = 0
377
+ failed_endpoints = []
378
+
379
+ for endpoint in disabled_endpoints:
380
+ endpoint_id = endpoint.id
381
+ endpoint_name = endpoint.name
382
+
383
+ try:
384
+ spinner = Spinner(f"Enabling {endpoint_name}")
385
+ spinner.start()
386
+
387
+ try:
388
+ await workato_api_client.api_platform_api.enable_api_endpoint(
389
+ api_endpoint_id=endpoint_id
390
+ )
391
+ success_count += 1
392
+ finally:
393
+ elapsed = spinner.stop()
394
+
395
+ click.echo(f" ✅ {endpoint_name} enabled ({elapsed:.1f}s)")
396
+
397
+ except Exception as e:
398
+ # Keep broad exception handling here since we want to continue with other
399
+ # endpoints even if one fails, and the outer function has
400
+ # @handle_api_exceptions for overall errors
401
+ failed_endpoints.append((endpoint_name, str(e)))
402
+ click.echo(f" ❌ Failed to enable {endpoint_name}: {str(e)}")
403
+
404
+ # Summary
405
+ click.echo()
406
+ click.echo("📊 Results:")
407
+ click.echo(f" ✅ Successfully enabled: {success_count}")
408
+ if failed_endpoints:
409
+ click.echo(f" ❌ Failed: {len(failed_endpoints)}")
410
+ for name, error in failed_endpoints:
411
+ click.echo(f" â€ĸ {name}: {error}")
412
+
413
+ if success_count > 0:
414
+ click.echo()
415
+ click.echo("💡 Next steps:")
416
+ click.echo(" â€ĸ Test the enabled endpoints with API calls")
417
+ click.echo(" â€ĸ Monitor endpoint usage and performance")
418
+
419
+
420
+ @inject
421
+ async def enable_api_endpoint(
422
+ api_endpoint_id: int,
423
+ workato_api_client: Workato = Provide[Container.workato_api_client],
424
+ ) -> None:
425
+ """Enable an API endpoint using the Workato API"""
426
+ spinner = Spinner(f"Enabling API endpoint {api_endpoint_id}")
427
+ spinner.start()
428
+
429
+ try:
430
+ await workato_api_client.api_platform_api.enable_api_endpoint(
431
+ api_endpoint_id=api_endpoint_id
432
+ )
433
+ finally:
434
+ elapsed = spinner.stop()
435
+
436
+ click.echo(f"✅ API endpoint enabled successfully ({elapsed:.1f}s)")
437
+ click.echo()
438
+ click.echo("💡 Next steps:")
439
+ click.echo(" â€ĸ Test the endpoint with API calls")
440
+ click.echo(" â€ĸ Monitor endpoint usage and performance")
441
+ click.echo(" â€ĸ Configure rate limiting if needed")
442
+
443
+
444
+ def display_endpoint_summary(endpoint: ApiEndpoint) -> None:
445
+ """Display a summary of an API endpoint"""
446
+ name = endpoint.name
447
+ endpoint_id = endpoint.id
448
+
449
+ # Try different field names for enabled/active status
450
+ enabled = endpoint.active
451
+
452
+ status_icon = "✅" if enabled else "❌"
453
+ status_text = "Enabled" if enabled else "Disabled"
454
+
455
+ click.echo(f" {status_icon} {name}")
456
+ click.echo(f" 🆔 ID: {endpoint_id}")
457
+ click.echo(f" 🔗 Method: {endpoint.method}")
458
+ click.echo(f" 📍 Path: {endpoint.url}")
459
+ click.echo(f" 📊 Status: {status_text}")
460
+
461
+ # Show flow ID if available (recipe connection)
462
+ if endpoint.flow_id:
463
+ click.echo(f" 🔄 Recipe ID: {endpoint.flow_id}")
464
+
465
+ # Show additional metadata if available
466
+ click.echo(f" 🕐 Created: {endpoint.created_at.strftime('%Y-%m-%d')}")
467
+
468
+ # Show legacy status if available
469
+ if endpoint.legacy:
470
+ click.echo(f" 📜 Legacy: {'Yes' if endpoint.legacy else 'No'}")
471
+
472
+ # Show collection info if available
473
+ click.echo(f" 📚 Collection ID: {endpoint.api_collection_id}")
474
+
475
+
476
+ def display_collection_summary(collection: ApiCollection) -> None:
477
+ """Display a summary of an API collection"""
478
+ name = collection.name or "Unknown"
479
+ collection_id = collection.id or "Unknown"
480
+
481
+ click.echo(f" 📚 {name}")
482
+ click.echo(f" 🆔 ID: {collection_id}")
483
+ click.echo(f" 📁 Project ID: {collection.project_id}")
484
+
485
+ url = collection.url
486
+ if len(url) > 60:
487
+ url = url[:57] + "..."
488
+ click.echo(f" 🌐 API URL: {url}")
489
+ spec_url = collection.api_spec_url
490
+ if len(spec_url) > 60:
491
+ spec_url = spec_url[:57] + "..."
492
+ click.echo(f" 📄 Spec URL: {spec_url}")
493
+
494
+ click.echo(f" 🕐 Created: {collection.created_at.strftime('%Y-%m-%d')}")
495
+
496
+ if collection.updated_at and collection.updated_at != collection.created_at:
497
+ click.echo(f" 🔄 Updated: {collection.updated_at.strftime('%Y-%m-%d')}")
@@ -0,0 +1,82 @@
1
+ import asyncclick as click
2
+
3
+ from dependency_injector.wiring import Provide, inject
4
+
5
+ from workato_platform_cli import Workato
6
+ from workato_platform_cli.cli.containers import Container
7
+ from workato_platform_cli.cli.utils import Spinner
8
+ from workato_platform_cli.cli.utils.config import ConfigManager
9
+ from workato_platform_cli.cli.utils.exception_handler import (
10
+ handle_api_exceptions,
11
+ handle_cli_exceptions,
12
+ )
13
+ from workato_platform_cli.client.workato_api.models.asset import Asset
14
+
15
+
16
+ @click.command()
17
+ @click.option(
18
+ "--folder-id", help="Folder ID (uses current project folder if not specified)"
19
+ )
20
+ @handle_cli_exceptions
21
+ @inject
22
+ @handle_api_exceptions
23
+ async def assets(
24
+ folder_id: int | None = None,
25
+ config_manager: ConfigManager = Provide[Container.config_manager],
26
+ workato_api_client: Workato = Provide[Container.workato_api_client],
27
+ ) -> None:
28
+ """List project assets (data tables, custom connectors, properties, etc.)"""
29
+
30
+ # Get folder ID from parameter or meta file
31
+ if not folder_id:
32
+ meta_data = config_manager.load_config()
33
+ folder_id = meta_data.folder_id
34
+
35
+ if not folder_id:
36
+ click.echo("❌ No folder ID provided and no project configured.")
37
+ click.echo("💡 Either specify --folder-id or run 'workato init' first.")
38
+ return
39
+ spinner = Spinner(f"Fetching assets for folder {folder_id}")
40
+ spinner.start()
41
+
42
+ try:
43
+ response = await workato_api_client.export_api.list_assets_in_folder(
44
+ folder_id=folder_id,
45
+ )
46
+ finally:
47
+ elapsed = spinner.stop()
48
+
49
+ assets = response.result.assets
50
+
51
+ click.echo(f"📁 Project Assets ({len(assets)} total) - ({elapsed:.1f}s)")
52
+ click.echo(f" 📋 Folder ID: {folder_id}")
53
+
54
+ if not assets:
55
+ click.echo(" â„šī¸ No assets found in this project")
56
+ return
57
+
58
+ # Group assets by type
59
+ asset_groups: dict[str, list[Asset]] = {}
60
+ for asset in assets:
61
+ asset_type = asset.type
62
+ if asset_type not in asset_groups:
63
+ asset_groups[asset_type] = []
64
+ asset_groups[asset_type].append(asset)
65
+
66
+ # Display assets by type
67
+ for asset_type, type_assets in asset_groups.items():
68
+ click.echo(
69
+ f"\n đŸ“Ļ {asset_type.replace('_', ' ').title()} ({len(type_assets)} items)"
70
+ )
71
+
72
+ for asset in type_assets:
73
+ name = asset.name
74
+ asset_id = asset.id
75
+
76
+ # Basic info
77
+ click.echo(f" â€ĸ {name}")
78
+
79
+ if asset_id:
80
+ click.echo(f" 🆔 ID: {asset_id}")
81
+
82
+ click.echo()