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,229 @@
1
+ """Initialize Workato CLI for a new project"""
2
+
3
+ import json
4
+
5
+ from typing import Any
6
+
7
+ import asyncclick as click
8
+ import certifi
9
+
10
+ from workato_platform_cli import Workato
11
+ from workato_platform_cli.cli.commands.projects.project_manager import ProjectManager
12
+ from workato_platform_cli.cli.commands.pull import _pull_project
13
+ from workato_platform_cli.cli.utils.config import ConfigManager
14
+ from workato_platform_cli.cli.utils.exception_handler import (
15
+ handle_api_exceptions,
16
+ handle_cli_exceptions,
17
+ )
18
+ from workato_platform_cli.client.workato_api.configuration import Configuration
19
+
20
+
21
+ @click.command()
22
+ @click.option("--profile", help="Profile name to use (creates new if doesn't exist)")
23
+ @click.option(
24
+ "--region",
25
+ type=click.Choice(["us", "eu", "jp", "au", "sg", "custom"]),
26
+ help="Workato region",
27
+ )
28
+ @click.option("--api-token", help="Workato API token")
29
+ @click.option("--api-url", help="Custom API URL (required when region=custom)")
30
+ @click.option(
31
+ "--project-name", help="Project name (creates new project with this name)"
32
+ )
33
+ @click.option("--project-id", type=int, help="Existing project ID to use")
34
+ @click.option(
35
+ "--non-interactive",
36
+ is_flag=True,
37
+ help="Run in non-interactive mode (requires all necessary options)",
38
+ )
39
+ @click.option(
40
+ "--output-mode",
41
+ type=click.Choice(["table", "json"]),
42
+ default="table",
43
+ help="Output format: table (default) or json (only with --non-interactive)",
44
+ )
45
+ @handle_cli_exceptions
46
+ @handle_api_exceptions
47
+ async def init(
48
+ profile: str | None = None,
49
+ region: str | None = None,
50
+ api_token: str | None = None,
51
+ api_url: str | None = None,
52
+ project_name: str | None = None,
53
+ project_id: int | None = None,
54
+ non_interactive: bool = False,
55
+ output_mode: str = "table",
56
+ ) -> None:
57
+ """Initialize Workato CLI for a new project"""
58
+
59
+ # Validate that --output-mode json requires --non-interactive
60
+ if output_mode == "json" and not non_interactive:
61
+ # Return JSON error for consistency
62
+ error_data: dict[str, Any] = {
63
+ "status": "error",
64
+ "error": "--output-mode json can only be used with --non-interactive flag",
65
+ "error_code": "INVALID_OPTIONS",
66
+ }
67
+ click.echo(json.dumps(error_data))
68
+ return
69
+
70
+ if non_interactive:
71
+ # Validate required parameters for non-interactive mode
72
+ error_msg = None
73
+ error_code = None
74
+
75
+ # Either profile OR individual attributes (region, api_token) are required
76
+ if not profile and not (region and api_token):
77
+ error_msg = (
78
+ "Either --profile or both --region and --api-token are required "
79
+ "in non-interactive mode"
80
+ )
81
+ error_code = "MISSING_REQUIRED_OPTIONS"
82
+ elif region == "custom" and not api_url:
83
+ error_msg = (
84
+ "--api-url is required when region=custom in non-interactive mode"
85
+ )
86
+ error_code = "MISSING_REQUIRED_OPTIONS"
87
+ elif not project_name and not project_id:
88
+ error_msg = (
89
+ "Either --project-name or --project-id is required in "
90
+ "non-interactive mode"
91
+ )
92
+ error_code = "MISSING_REQUIRED_OPTIONS"
93
+ elif project_name and project_id:
94
+ error_msg = "Cannot specify both --project-name and --project-id"
95
+ error_code = "CONFLICTING_OPTIONS"
96
+
97
+ if error_msg:
98
+ if output_mode == "json":
99
+ error_data = {
100
+ "status": "error",
101
+ "error": error_msg,
102
+ "error_code": error_code,
103
+ }
104
+ click.echo(json.dumps(error_data))
105
+ return
106
+ else:
107
+ click.echo(f"❌ {error_msg}")
108
+ raise click.Abort() # For non-JSON mode, keep the normal abort behavior
109
+
110
+ # Initialize JSON output data structure if in JSON mode
111
+ # Since we've already validated that json mode requires non-interactive,
112
+ # we can use output_data existence as our flag throughout the code
113
+ output_data = None
114
+ if output_mode == "json":
115
+ output_data = {
116
+ "status": "success",
117
+ "profile": {},
118
+ "project": {},
119
+ }
120
+
121
+ config_manager = await ConfigManager.initialize(
122
+ profile_name=profile,
123
+ region=region,
124
+ api_token=api_token,
125
+ api_url=api_url,
126
+ project_name=project_name,
127
+ project_id=project_id,
128
+ output_mode=output_mode,
129
+ non_interactive=non_interactive,
130
+ )
131
+
132
+ # Check if project directory exists and is non-empty
133
+ # Exclude CLI-managed files from the check
134
+ cli_managed_files = {".workatoenv", ".gitignore", ".workato-ignore"}
135
+ project_dir = config_manager.get_project_directory()
136
+ has_user_files = False
137
+ if project_dir and project_dir.exists():
138
+ # Check for files that are not CLI-managed
139
+ has_user_files = any(
140
+ item.name not in cli_managed_files for item in project_dir.iterdir()
141
+ )
142
+
143
+ if has_user_files:
144
+ # Directory is non-empty
145
+ if non_interactive:
146
+ # In non-interactive mode, fail with error
147
+ error_msg = (
148
+ f"Directory '{project_dir}' is not empty. "
149
+ "Please use an empty directory or remove existing files."
150
+ )
151
+ if output_mode == "json":
152
+ error_data = {
153
+ "status": "error",
154
+ "error": error_msg,
155
+ "error_code": "DIRECTORY_NOT_EMPTY",
156
+ }
157
+ click.echo(json.dumps(error_data))
158
+ return
159
+ else:
160
+ click.echo(f"❌ {error_msg}")
161
+ raise click.Abort()
162
+ else:
163
+ # Interactive mode - ask for confirmation
164
+ click.echo(f"⚠️ Directory '{project_dir}' is not empty.")
165
+ if not click.confirm(
166
+ "Proceed with initialization? This may overwrite or delete files.",
167
+ default=False,
168
+ ):
169
+ click.echo("❌ Initialization cancelled")
170
+ return
171
+
172
+ # Automatically run pull to set up project structure
173
+ if not output_data:
174
+ click.echo()
175
+
176
+ # Get API credentials from the newly configured profile
177
+ config_data = config_manager.load_config()
178
+ project_profile_override = config_data.profile
179
+ api_token, api_host = config_manager.profile_manager.resolve_environment_variables(
180
+ project_profile_override
181
+ )
182
+
183
+ # Populate profile data for JSON output
184
+ if output_data:
185
+ profile_data = config_manager.profile_manager.get_profile(
186
+ project_profile_override
187
+ or config_manager.profile_manager.get_current_profile_name()
188
+ or "",
189
+ )
190
+ if profile_data:
191
+ output_data["profile"] = {
192
+ "name": project_profile_override
193
+ or config_manager.profile_manager.get_current_profile_name(),
194
+ "region": profile_data.region,
195
+ "region_name": profile_data.region_name,
196
+ "api_url": profile_data.region_url,
197
+ "workspace_id": profile_data.workspace_id,
198
+ }
199
+
200
+ # Create API client configuration
201
+ api_config = Configuration(
202
+ access_token=api_token, host=api_host, ssl_ca_cert=certifi.where()
203
+ )
204
+
205
+ # Create project manager and run pull
206
+ async with Workato(configuration=api_config) as workato_api_client:
207
+ project_manager = ProjectManager(workato_api_client=workato_api_client)
208
+ await _pull_project(
209
+ config_manager=config_manager,
210
+ project_manager=project_manager,
211
+ non_interactive=non_interactive,
212
+ )
213
+
214
+ # Populate project data for JSON output
215
+ if output_data:
216
+ meta_data = config_manager.load_config()
217
+ project_path = config_manager.get_project_directory()
218
+ output_data["project"] = {
219
+ "name": meta_data.project_name or "project",
220
+ "id": meta_data.project_id,
221
+ "folder_id": meta_data.folder_id,
222
+ "path": str(project_path) if project_path else None,
223
+ }
224
+
225
+ # Output final result
226
+ if output_data:
227
+ click.echo(json.dumps(output_data))
228
+ else:
229
+ click.echo("🎉 Project setup complete!")
@@ -0,0 +1,364 @@
1
+ """Manage Workato profiles for multi-environment configurations"""
2
+
3
+ import json
4
+ import os
5
+
6
+ from typing import Any
7
+
8
+ import asyncclick as click
9
+
10
+ from dependency_injector.wiring import Provide, inject
11
+
12
+ from workato_platform_cli.cli.containers import Container
13
+ from workato_platform_cli.cli.utils.config import ConfigData, ConfigManager
14
+ from workato_platform_cli.cli.utils.exception_handler import handle_cli_exceptions
15
+
16
+
17
+ @click.group()
18
+ def profiles() -> None:
19
+ """Manage Workato profiles for multi-environment configurations"""
20
+ pass
21
+
22
+
23
+ @profiles.command(name="list")
24
+ @click.option(
25
+ "--output-mode",
26
+ type=click.Choice(["table", "json"]),
27
+ default="table",
28
+ help="Output format: table (default) or json",
29
+ )
30
+ @handle_cli_exceptions
31
+ @inject
32
+ async def list_profiles(
33
+ output_mode: str = "table",
34
+ config_manager: ConfigManager = Provide[Container.config_manager],
35
+ ) -> None:
36
+ """List all available profiles"""
37
+ profiles_dict = config_manager.profile_manager.list_profiles()
38
+ current_profile_name = config_manager.profile_manager.get_current_profile_name()
39
+
40
+ if output_mode == "json":
41
+ # JSON output mode - return structured data
42
+ output_data: dict[str, Any] = {
43
+ "current_profile": current_profile_name,
44
+ "profiles": {},
45
+ }
46
+
47
+ for name, profile_data in profiles_dict.items():
48
+ output_data["profiles"][name] = profile_data.model_dump()
49
+ output_data["profiles"][name]["is_current"] = name == current_profile_name
50
+
51
+ click.echo(json.dumps(output_data))
52
+ return
53
+
54
+ # Table output mode (default)
55
+ if not profiles_dict:
56
+ click.echo("📋 No profiles configured")
57
+ click.echo("💡 Run 'workato init' to create your first profile")
58
+ return
59
+
60
+ click.echo("📋 Available profiles:")
61
+ for name, profile_data in profiles_dict.items():
62
+ current_indicator = " (current)" if name == current_profile_name else ""
63
+ click.echo(f" • {name}{current_indicator}")
64
+ click.echo(f" Region: {profile_data.region_name} ({profile_data.region})")
65
+ click.echo(f" URL: {profile_data.region_url}")
66
+ click.echo(f" Workspace ID: {profile_data.workspace_id}")
67
+ click.echo()
68
+
69
+
70
+ @profiles.command()
71
+ @handle_cli_exceptions
72
+ @inject
73
+ async def show(
74
+ profile_name: str,
75
+ config_manager: ConfigManager = Provide[Container.config_manager],
76
+ ) -> None:
77
+ """Show details of a specific profile"""
78
+ profile_data = config_manager.profile_manager.get_profile(profile_name)
79
+
80
+ if not profile_data:
81
+ click.echo(f"❌ Profile '{profile_name}' not found")
82
+ return
83
+
84
+ current_profile_name = config_manager.profile_manager.get_current_profile_name()
85
+ is_current = profile_name == current_profile_name
86
+
87
+ click.echo(f"📋 Profile: {profile_name}")
88
+ if is_current:
89
+ click.echo("✅ This is the current active profile")
90
+ click.echo()
91
+ click.echo("🌍 Region Information:")
92
+ click.echo(f" Code: {profile_data.region}")
93
+ click.echo(f" Name: {profile_data.region_name}")
94
+ click.echo(f" URL: {profile_data.region_url}")
95
+ click.echo()
96
+ click.echo("🏢 Workspace:")
97
+ click.echo(f" ID: {profile_data.workspace_id}")
98
+ click.echo()
99
+ click.echo("🔑 Authentication:")
100
+
101
+ # Check if token is available using profile manager resolution
102
+ api_token, _ = config_manager.profile_manager.resolve_environment_variables(
103
+ profile_name
104
+ if profile_name != config_manager.profile_manager.get_current_profile_name()
105
+ else None
106
+ )
107
+
108
+ if api_token:
109
+ click.echo(" Status: ✅ Token configured")
110
+ # Show where the token is coming from
111
+ if os.environ.get("WORKATO_API_TOKEN"):
112
+ click.echo(" Source: WORKATO_API_TOKEN environment variable")
113
+ else:
114
+ click.echo(" Source: ~/.workato/profiles")
115
+ else:
116
+ click.echo(" Status: ❌ Token not found")
117
+ click.echo(" 💡 Token should be stored in keyring")
118
+ click.echo(" 💡 Or set WORKATO_API_TOKEN environment variable")
119
+
120
+
121
+ @profiles.command()
122
+ @click.argument("profile_name")
123
+ @handle_cli_exceptions
124
+ @inject
125
+ async def use(
126
+ profile_name: str,
127
+ config_manager: ConfigManager = Provide[Container.config_manager],
128
+ ) -> None:
129
+ """Set the current active profile (context-aware: workspace or global)"""
130
+ profile_data = config_manager.profile_manager.get_profile(profile_name)
131
+
132
+ if not profile_data:
133
+ click.echo(f"❌ Profile '{profile_name}' not found")
134
+ click.echo("💡 Use 'workato profiles list' to see available profiles")
135
+ return
136
+
137
+ # Check if we're in a workspace context
138
+ try:
139
+ workspace_root = config_manager.get_workspace_root()
140
+ config_data = config_manager.load_config()
141
+ except Exception:
142
+ workspace_root = None
143
+ config_data = ConfigData.model_construct()
144
+
145
+ # If we have a workspace config (project_id exists), update workspace profile
146
+ if config_data.project_id and workspace_root:
147
+ config_data.profile = profile_name
148
+ config_manager.save_config(config_data)
149
+ click.echo(f"✅ Set '{profile_name}' as profile for current workspace")
150
+ click.echo(f" Workspace: {workspace_root}")
151
+
152
+ # Also update project config if it exists
153
+ project_dir = config_manager.get_project_directory()
154
+ if project_dir and project_dir != workspace_root:
155
+ project_config_manager = ConfigManager(project_dir, skip_validation=True)
156
+ project_config = project_config_manager.load_config()
157
+ if project_config.project_id:
158
+ project_config.profile = profile_name
159
+ project_config_manager.save_config(project_config)
160
+ project_dir = project_dir.relative_to(workspace_root)
161
+ click.echo(f" Project config also updated: {project_dir}")
162
+ else:
163
+ # No workspace context, set global profile
164
+ config_manager.profile_manager.set_current_profile(profile_name)
165
+ click.echo(f"✅ Set '{profile_name}' as global default profile")
166
+
167
+
168
+ @profiles.command()
169
+ @click.option(
170
+ "--output-mode",
171
+ type=click.Choice(["table", "json"]),
172
+ default="table",
173
+ help="Output format: table (default) or json",
174
+ )
175
+ @handle_cli_exceptions
176
+ @inject
177
+ async def status(
178
+ output_mode: str = "table",
179
+ config_manager: ConfigManager = Provide[Container.config_manager],
180
+ ) -> None:
181
+ """Show current profile status and configuration"""
182
+ # Get project config to check for profile override
183
+ config_data = config_manager.load_config()
184
+ project_profile_override = config_data.profile
185
+
186
+ # Get effective profile name
187
+ current_profile_name = config_manager.profile_manager.get_current_profile_name(
188
+ project_profile_override
189
+ )
190
+
191
+ output_data: dict[str, Any] = {}
192
+
193
+ if not current_profile_name:
194
+ if output_mode == "json":
195
+ output_data = {"profile": None, "error": "No active profile configured"}
196
+ click.echo(json.dumps(output_data, indent=2))
197
+ else:
198
+ click.echo("❌ No active profile configured")
199
+ click.echo("💡 Run 'workato init' to create and set a profile")
200
+ return
201
+
202
+ # JSON output mode
203
+ if output_mode == "json":
204
+ # Profile information
205
+ profile_source_type = None
206
+ profile_source_location = None
207
+ if project_profile_override:
208
+ profile_source_type = "project_override"
209
+ profile_source_location = ".workatoenv"
210
+ elif os.environ.get("WORKATO_PROFILE"):
211
+ profile_source_type = "environment_variable"
212
+ profile_source_location = "WORKATO_PROFILE"
213
+ else:
214
+ profile_source_type = "global_default"
215
+ profile_source_location = "~/.workato/profiles"
216
+
217
+ profile_data = config_manager.profile_manager.get_current_profile_data(
218
+ project_profile_override
219
+ )
220
+
221
+ output_data["profile"] = {
222
+ "name": current_profile_name,
223
+ "source": {
224
+ "type": profile_source_type,
225
+ "location": profile_source_location,
226
+ },
227
+ }
228
+
229
+ if profile_data:
230
+ output_data["profile"]["configuration"] = {
231
+ "region": {
232
+ "code": profile_data.region,
233
+ "name": profile_data.region_name,
234
+ "url": profile_data.region_url,
235
+ },
236
+ "workspace_id": profile_data.workspace_id,
237
+ }
238
+
239
+ # Authentication information
240
+ api_token, _ = config_manager.profile_manager.resolve_environment_variables(
241
+ project_profile_override
242
+ )
243
+
244
+ if api_token:
245
+ auth_source_type = None
246
+ auth_source_location = None
247
+ if os.environ.get("WORKATO_API_TOKEN"):
248
+ auth_source_type = "environment_variable"
249
+ auth_source_location = "WORKATO_API_TOKEN"
250
+ else:
251
+ auth_source_type = "keyring"
252
+ auth_source_location = "~/.workato/profiles"
253
+
254
+ output_data["authentication"] = {
255
+ "configured": True,
256
+ "source": {"type": auth_source_type, "location": auth_source_location},
257
+ }
258
+ else:
259
+ output_data["authentication"] = {"configured": False}
260
+
261
+ # Project information
262
+ try:
263
+ workspace_root = config_manager.get_workspace_root()
264
+ if workspace_root and (config_data.project_id or config_data.project_name):
265
+ project_metadata: dict[str, Any] = {}
266
+ if config_data.project_name:
267
+ project_metadata["name"] = config_data.project_name
268
+ if config_data.project_id:
269
+ project_metadata["id"] = config_data.project_id
270
+ if config_data.folder_id:
271
+ project_metadata["folder_id"] = config_data.folder_id
272
+
273
+ project_path = config_manager.get_project_directory()
274
+
275
+ if project_path:
276
+ output_data["project"] = {
277
+ "configured": True,
278
+ "path": str(project_path),
279
+ "metadata": project_metadata,
280
+ }
281
+ else:
282
+ output_data["project"] = {"configured": False}
283
+ else:
284
+ output_data["project"] = {"configured": False}
285
+ except Exception:
286
+ output_data["project"] = {"configured": False}
287
+
288
+ click.echo(json.dumps(output_data))
289
+ return
290
+
291
+ # Table output (existing code)
292
+ click.echo("📊 Profile Status:")
293
+ click.echo(f" Current Profile: {current_profile_name}")
294
+
295
+ # Show source of profile selection
296
+ if project_profile_override:
297
+ click.echo(" Source: Project override (from .workatoenv)")
298
+ else:
299
+ env_profile = os.environ.get("WORKATO_PROFILE")
300
+ if env_profile:
301
+ click.echo(" Source: Environment variable (WORKATO_PROFILE)")
302
+ else:
303
+ click.echo(" Source: Global setting (~/.workato/profiles)")
304
+
305
+ click.echo()
306
+
307
+ # Show profile details
308
+ profile_data = config_manager.profile_manager.get_current_profile_data(
309
+ project_profile_override
310
+ )
311
+
312
+ if profile_data:
313
+ click.echo("🌍 Active Profile Details:")
314
+ click.echo(f" Region: {profile_data.region_name} ({profile_data.region})")
315
+ click.echo(f" URL: {profile_data.region_url}")
316
+ click.echo(f" Workspace ID: {profile_data.workspace_id}")
317
+ click.echo()
318
+
319
+ # Check authentication status
320
+ click.echo("🔑 Authentication:")
321
+
322
+ # Check if token is available using profile manager resolution
323
+ api_token, _ = config_manager.profile_manager.resolve_environment_variables(
324
+ project_profile_override
325
+ )
326
+
327
+ if api_token:
328
+ click.echo(" Status: ✅ Token configured")
329
+ # Show where the token is coming from
330
+ if os.environ.get("WORKATO_API_TOKEN"):
331
+ click.echo(" Source: WORKATO_API_TOKEN environment variable")
332
+ else:
333
+ click.echo(" Source: ~/.workato/profiles")
334
+ else:
335
+ click.echo(" Status: ❌ Token not found")
336
+ click.echo(" 💡 Token should be stored in keyring")
337
+ click.echo(" 💡 Or set WORKATO_API_TOKEN environment variable")
338
+
339
+
340
+ @profiles.command()
341
+ @click.argument("profile_name")
342
+ @click.confirmation_option(prompt="Are you sure you want to delete this profile?")
343
+ @handle_cli_exceptions
344
+ @inject
345
+ async def delete(
346
+ profile_name: str,
347
+ config_manager: ConfigManager = Provide[Container.config_manager],
348
+ ) -> None:
349
+ """Delete a profile"""
350
+ if not config_manager.profile_manager.get_profile(profile_name):
351
+ click.echo(f"❌ Profile '{profile_name}' not found")
352
+ return
353
+
354
+ success = config_manager.profile_manager.delete_profile(profile_name)
355
+
356
+ if success:
357
+ click.echo(f"✅ Profile '{profile_name}' deleted successfully")
358
+ click.echo("💡 Profile removed from ~/.workato/profiles")
359
+ else:
360
+ click.echo(f"❌ Failed to delete profile '{profile_name}'")
361
+
362
+
363
+ # Add show as click argument command
364
+ show = click.argument("profile_name")(show)
File without changes