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,513 @@
1
+ """Manage Workato projects"""
2
+
3
+ import json
4
+
5
+ from typing import Any
6
+
7
+ import asyncclick as click
8
+
9
+ from dependency_injector.wiring import Provide, inject
10
+
11
+ from workato_platform_cli import Workato
12
+ from workato_platform_cli.cli.commands.projects.project_manager import ProjectManager
13
+ from workato_platform_cli.cli.containers import (
14
+ Container,
15
+ create_profile_aware_workato_config,
16
+ )
17
+ from workato_platform_cli.cli.utils.config import ConfigData, ConfigManager
18
+ from workato_platform_cli.cli.utils.exception_handler import (
19
+ handle_api_exceptions,
20
+ handle_cli_exceptions,
21
+ )
22
+ from workato_platform_cli.client.workato_api.models.project import Project
23
+
24
+
25
+ @click.group()
26
+ def projects() -> None:
27
+ """Manage Workato projects"""
28
+ pass
29
+
30
+
31
+ @projects.command(name="list")
32
+ @click.option(
33
+ "--profile",
34
+ help="Profile to use for authentication and region settings",
35
+ default=None,
36
+ )
37
+ @click.option(
38
+ "--source",
39
+ type=click.Choice(["local", "remote", "both"]),
40
+ default="local",
41
+ help="Source of projects to list: local (default), remote (server), or both",
42
+ )
43
+ @click.option(
44
+ "--output-mode",
45
+ type=click.Choice(["table", "json"]),
46
+ default="table",
47
+ help="Output format: table (default) or json",
48
+ )
49
+ @handle_cli_exceptions
50
+ @inject
51
+ @handle_api_exceptions
52
+ async def list_projects(
53
+ profile: str | None = None,
54
+ source: str = "local",
55
+ output_mode: str = "table",
56
+ config_manager: ConfigManager = Provide[Container.config_manager],
57
+ ) -> None:
58
+ """List available projects from local workspace and/or server"""
59
+
60
+ # Gather projects based on source
61
+ local_projects: list[tuple[Any, str, ConfigData | None]] = []
62
+ remote_projects: list[Project] = []
63
+
64
+ if source in ["local", "both"]:
65
+ local_projects = await _get_local_projects(config_manager)
66
+
67
+ if source in ["remote", "both"]:
68
+ workato_api_configuration = create_profile_aware_workato_config(
69
+ config_manager=config_manager,
70
+ cli_profile=profile,
71
+ )
72
+ workato_api_client = Workato(configuration=workato_api_configuration)
73
+ async with workato_api_client as workato_api_client:
74
+ project_manager = ProjectManager(workato_api_client=workato_api_client)
75
+ remote_projects = await project_manager.get_all_projects()
76
+
77
+ # Output based on mode
78
+ if output_mode == "json":
79
+ await _output_json(source, local_projects, remote_projects, config_manager)
80
+ else:
81
+ await _output_table(source, local_projects, remote_projects, config_manager)
82
+
83
+
84
+ @projects.command()
85
+ @click.argument("project_name")
86
+ @handle_cli_exceptions
87
+ @inject
88
+ async def use(
89
+ project_name: str,
90
+ config_manager: ConfigManager = Provide[Container.config_manager],
91
+ ) -> None:
92
+ """Switch to a specific project by name"""
93
+ # Find workspace root to search for projects
94
+ workspace_root = config_manager.get_workspace_root()
95
+
96
+ # Use the new config system to find all projects in workspace
97
+ all_projects = config_manager._find_all_projects(workspace_root)
98
+
99
+ # Find the project by name
100
+ target_project = None
101
+ for project_path, discovered_project_name in all_projects:
102
+ if discovered_project_name == project_name:
103
+ target_project = (project_path, discovered_project_name)
104
+ break
105
+
106
+ if not target_project:
107
+ click.echo(f"❌ Project '{project_name}' not found")
108
+ click.echo("💡 Use 'workato projects list' to see available projects")
109
+ return
110
+
111
+ project_path, _ = target_project
112
+
113
+ # Load project configuration
114
+ try:
115
+ project_config_manager = ConfigManager(project_path, skip_validation=True)
116
+ project_config = project_config_manager.load_config()
117
+ except Exception as e:
118
+ click.echo(f"❌ Project '{project_name}' has configuration errors: {e}")
119
+ click.echo("💡 Navigate to the project directory and run 'workato init'")
120
+ return
121
+
122
+ # Update workspace-level config to point to this project
123
+ try:
124
+ workspace_config = config_manager.load_config()
125
+
126
+ # Calculate relative project path for workspace config
127
+ relative_project_path = str(project_path.relative_to(workspace_root))
128
+
129
+ # Copy project-specific data to workspace config
130
+ workspace_config.project_id = project_config.project_id
131
+ workspace_config.project_name = project_config.project_name
132
+ workspace_config.project_path = relative_project_path
133
+ workspace_config.folder_id = project_config.folder_id
134
+ workspace_config.profile = project_config.profile
135
+
136
+ config_manager.save_config(workspace_config)
137
+
138
+ click.echo(f"✅ Switched to project '{project_name}'")
139
+
140
+ # Show project details
141
+ if project_config.project_name:
142
+ click.echo(f" Name: {project_config.project_name}")
143
+ if project_config.folder_id:
144
+ click.echo(f" Folder ID: {project_config.folder_id}")
145
+ if project_config.profile:
146
+ click.echo(f" Profile: {project_config.profile}")
147
+ click.echo(f" Directory: {relative_project_path}")
148
+
149
+ except Exception as e:
150
+ click.echo(f"❌ Failed to switch to project '{project_name}': {e}")
151
+
152
+
153
+ @projects.command()
154
+ @handle_cli_exceptions
155
+ @inject
156
+ async def switch(
157
+ config_manager: ConfigManager = Provide[Container.config_manager],
158
+ ) -> None:
159
+ """Interactively switch to a different project"""
160
+ import inquirer
161
+
162
+ # Find workspace root to search for projects
163
+ workspace_root = config_manager.get_workspace_root()
164
+
165
+ # Use the new config system to find all projects in workspace
166
+ all_projects = config_manager._find_all_projects(workspace_root)
167
+
168
+ if not all_projects:
169
+ click.echo("❌ No projects found")
170
+ click.echo("💡 Run 'workato init' to create your first project")
171
+ return
172
+
173
+ # Get current project for context
174
+ current_project_name = config_manager.get_current_project_name()
175
+
176
+ # Build project choices with configuration
177
+ project_choices: list[tuple[str, str, ConfigData | None]] = []
178
+
179
+ for project_path, project_name in all_projects:
180
+ try:
181
+ project_config_manager = ConfigManager(project_path, skip_validation=True)
182
+ config_data = project_config_manager.load_config()
183
+
184
+ # Create display name
185
+ display_name = project_name
186
+ if config_data.project_name and config_data.project_name != project_name:
187
+ display_name = f"{project_name} ({config_data.project_name})"
188
+
189
+ if project_name == current_project_name:
190
+ display_name += " (current)"
191
+
192
+ project_choices.append((display_name, project_name, config_data))
193
+ except Exception:
194
+ # Still include projects with configuration errors
195
+ display_name = f"{project_name} (configuration error)"
196
+ if project_name == current_project_name:
197
+ display_name += " (current)"
198
+ project_choices.append((display_name, project_name, None))
199
+
200
+ if not project_choices:
201
+ click.echo("❌ No configured projects found")
202
+ click.echo("💡 Run 'workato init' to create your first project")
203
+ return
204
+
205
+ if len(project_choices) == 1 and project_choices[0][1] == current_project_name:
206
+ click.echo("✅ Only one project available and it's already current")
207
+ return
208
+
209
+ # Create interactive selection
210
+ choices = [choice[0] for choice in project_choices]
211
+
212
+ questions = [
213
+ inquirer.List(
214
+ "project",
215
+ message="Select a project to switch to", # noboost
216
+ choices=choices,
217
+ )
218
+ ]
219
+
220
+ answers = inquirer.prompt(questions)
221
+ if not answers:
222
+ click.echo("❌ No project selected")
223
+ return
224
+
225
+ # Find the selected project
226
+ selected_project_name: str | None = None
227
+ selected_config: ConfigData | None = None
228
+
229
+ for display_name, project_name, project_config_data in project_choices:
230
+ if display_name == answers["project"]:
231
+ selected_project_name = project_name
232
+ selected_config = project_config_data
233
+ break
234
+
235
+ if not selected_project_name:
236
+ click.echo("❌ Failed to identify selected project")
237
+ return
238
+
239
+ if selected_project_name == current_project_name:
240
+ click.echo("✅ Project is already current")
241
+ return
242
+
243
+ if not selected_config:
244
+ click.echo(f"❌ Project '{selected_project_name}' has configuration errors")
245
+ return
246
+
247
+ # Find the project path
248
+ selected_project_path = None
249
+ for project_path, project_name in all_projects:
250
+ if project_name == selected_project_name:
251
+ selected_project_path = project_path
252
+ break
253
+
254
+ if not selected_project_path:
255
+ click.echo(f"❌ Failed to find path for project '{selected_project_name}'")
256
+ return
257
+
258
+ # Switch to the selected project
259
+ try:
260
+ workspace_config = config_manager.load_config()
261
+
262
+ # Calculate relative project path for workspace config
263
+ relative_project_path = str(selected_project_path.relative_to(workspace_root))
264
+
265
+ # Copy project-specific data to workspace config
266
+ workspace_config.project_id = selected_config.project_id
267
+ workspace_config.project_name = selected_config.project_name
268
+ workspace_config.project_path = relative_project_path
269
+ workspace_config.folder_id = selected_config.folder_id
270
+ workspace_config.profile = selected_config.profile
271
+
272
+ config_manager.save_config(workspace_config)
273
+
274
+ click.echo(f"✅ Switched to project '{selected_project_name}'")
275
+
276
+ # Show project details
277
+ if selected_config.project_name:
278
+ click.echo(f" Name: {selected_config.project_name}")
279
+ if selected_config.folder_id:
280
+ click.echo(f" Folder ID: {selected_config.folder_id}")
281
+ if selected_config.profile:
282
+ click.echo(f" Profile: {selected_config.profile}")
283
+ click.echo(f" Directory: {relative_project_path}")
284
+
285
+ except Exception as e:
286
+ click.echo(f"❌ Failed to switch to project '{selected_project_name}': {e}")
287
+
288
+
289
+ async def _get_local_projects(
290
+ config_manager: ConfigManager,
291
+ ) -> list[tuple[Any, str, ConfigData | None]]:
292
+ """Get local projects with their configurations"""
293
+ workspace_root = config_manager.get_workspace_root()
294
+ all_projects = config_manager._find_all_projects(workspace_root)
295
+
296
+ local_projects: list[tuple[Any, str, ConfigData | None]] = []
297
+ for project_path, project_name in all_projects:
298
+ try:
299
+ project_config_manager = ConfigManager(project_path, skip_validation=True)
300
+ config_data = project_config_manager.load_config()
301
+ local_projects.append((project_path, project_name, config_data))
302
+ except Exception:
303
+ local_projects.append((project_path, project_name, None))
304
+
305
+ return local_projects
306
+
307
+
308
+ async def _output_json(
309
+ source: str,
310
+ local_projects: list[tuple[Any, str, ConfigData | None]],
311
+ remote_projects: list[Project],
312
+ config_manager: ConfigManager,
313
+ ) -> None:
314
+ """Output projects in JSON format"""
315
+ workspace_root = config_manager.get_workspace_root()
316
+ current_project_name = config_manager.get_current_project_name()
317
+
318
+ output_data: dict[str, Any] = {
319
+ "source": source,
320
+ "current_project": current_project_name,
321
+ "workspace_root": str(workspace_root) if workspace_root else None,
322
+ "local_projects": [],
323
+ "remote_projects": [],
324
+ }
325
+
326
+ # Process local projects
327
+ if source in ["local", "both"]:
328
+ for project_path, project_name, config_data in local_projects:
329
+ if config_data:
330
+ project_info = {
331
+ "name": project_name,
332
+ "directory": str(project_path.relative_to(workspace_root))
333
+ if workspace_root
334
+ else str(project_path),
335
+ "is_current": project_name == current_project_name,
336
+ "project_id": config_data.project_id,
337
+ "folder_id": config_data.folder_id,
338
+ "profile": config_data.profile,
339
+ "configured": True,
340
+ }
341
+ else:
342
+ project_info = {
343
+ "name": project_name,
344
+ "directory": str(project_path.relative_to(workspace_root))
345
+ if workspace_root
346
+ else str(project_path),
347
+ "is_current": project_name == current_project_name,
348
+ "configured": False,
349
+ "error": "configuration error",
350
+ }
351
+ output_data["local_projects"].append(project_info)
352
+
353
+ # Process remote projects
354
+ if source in ["remote", "both"]:
355
+ for remote_project in remote_projects:
356
+ # Check if this remote project exists locally
357
+ local_match = None
358
+ if source == "both":
359
+ for _, _, config_data in local_projects:
360
+ if config_data and config_data.project_id == remote_project.id:
361
+ local_match = config_data
362
+ break
363
+
364
+ remote_info = {
365
+ "name": remote_project.name,
366
+ "project_id": remote_project.id,
367
+ "folder_id": remote_project.folder_id,
368
+ "description": remote_project.description or "",
369
+ "has_local_copy": local_match is not None,
370
+ }
371
+
372
+ if local_match:
373
+ remote_info["local_profile"] = local_match.profile
374
+
375
+ output_data["remote_projects"].append(remote_info)
376
+
377
+ click.echo(json.dumps(output_data))
378
+
379
+
380
+ async def _output_table(
381
+ source: str,
382
+ local_projects: list[tuple[Any, str, ConfigData | None]],
383
+ remote_projects: list[Project],
384
+ config_manager: ConfigManager,
385
+ ) -> None:
386
+ """Output projects in table format"""
387
+ workspace_root = config_manager.get_workspace_root()
388
+ current_project_name = config_manager.get_current_project_name()
389
+
390
+ if source == "local":
391
+ if not local_projects:
392
+ click.echo("📋 No local projects found")
393
+ click.echo("💡 Run 'workato init' to create your first project")
394
+ return
395
+
396
+ click.echo("📋 Local projects:")
397
+ for project_path, project_name, config_data in sorted(
398
+ local_projects, key=lambda x: x[1]
399
+ ):
400
+ current_indicator = (
401
+ " (current)" if project_name == current_project_name else ""
402
+ )
403
+
404
+ if config_data:
405
+ click.echo(f" • {project_name}{current_indicator}")
406
+ if config_data.project_id:
407
+ click.echo(f" Project ID: {config_data.project_id}")
408
+ if config_data.folder_id:
409
+ click.echo(f" Folder ID: {config_data.folder_id}")
410
+ if config_data.profile:
411
+ click.echo(f" Profile: {config_data.profile}")
412
+ if workspace_root:
413
+ click.echo(
414
+ f" Directory: {project_path.relative_to(workspace_root)}"
415
+ )
416
+ else:
417
+ click.echo(
418
+ f" • {project_name}{current_indicator} (configuration error)"
419
+ )
420
+ click.echo()
421
+
422
+ elif source == "remote":
423
+ if not remote_projects:
424
+ click.echo("📋 No remote projects found")
425
+ return
426
+
427
+ click.echo("📋 Remote projects:")
428
+ for remote_project in sorted(remote_projects, key=lambda x: x.name):
429
+ click.echo(f" • {remote_project.name}")
430
+ click.echo(f" Project ID: {remote_project.id}")
431
+ click.echo(f" Folder ID: {remote_project.folder_id}")
432
+ if remote_project.description:
433
+ click.echo(f" Description: {remote_project.description}")
434
+ click.echo()
435
+
436
+ else: # both
437
+ # Show combined view with sync status
438
+ if not local_projects and not remote_projects:
439
+ click.echo("📋 No projects found locally or remotely")
440
+ click.echo("💡 Run 'workato init' to create your first project")
441
+ return
442
+
443
+ click.echo("📋 All projects (local + remote):")
444
+
445
+ # Create a unified view
446
+ all_projects = {}
447
+
448
+ # Add local projects
449
+ for project_path, project_name, config_data in local_projects:
450
+ project_id = config_data.project_id if config_data else None
451
+ all_projects[project_id or f"local:{project_name}"] = {
452
+ "name": project_name,
453
+ "project_id": project_id,
454
+ "folder_id": config_data.folder_id if config_data else None,
455
+ "profile": config_data.profile if config_data else None,
456
+ "local_path": project_path,
457
+ "is_local": True,
458
+ "is_remote": False,
459
+ "is_current": project_name == current_project_name,
460
+ "config_error": config_data is None,
461
+ }
462
+
463
+ # Add/update with remote projects
464
+ for remote_project in remote_projects:
465
+ key = remote_project.id
466
+ if key in all_projects:
467
+ # Update existing local project with remote info
468
+ all_projects[key]["is_remote"] = True
469
+ all_projects[key]["remote_description"] = remote_project.description
470
+ else:
471
+ # Add remote-only project
472
+ all_projects[key] = {
473
+ "name": remote_project.name,
474
+ "project_id": remote_project.id,
475
+ "folder_id": remote_project.folder_id,
476
+ "remote_description": remote_project.description,
477
+ "is_local": False,
478
+ "is_remote": True,
479
+ "is_current": False,
480
+ "config_error": False,
481
+ }
482
+
483
+ # Display unified projects
484
+ for project_data in sorted(all_projects.values(), key=lambda x: x["name"]):
485
+ status_indicators = []
486
+ if project_data["is_current"]:
487
+ status_indicators.append("current")
488
+ if project_data["is_local"] and project_data["is_remote"]:
489
+ status_indicators.append("synced")
490
+ elif project_data["is_local"]:
491
+ status_indicators.append("local only")
492
+ elif project_data["is_remote"]:
493
+ status_indicators.append("remote only")
494
+ if project_data.get("config_error"):
495
+ status_indicators.append("config error")
496
+
497
+ status_text = (
498
+ f" ({', '.join(status_indicators)})" if status_indicators else ""
499
+ )
500
+ click.echo(f" • {project_data['name']}{status_text}")
501
+
502
+ if project_data["project_id"]:
503
+ click.echo(f" Project ID: {project_data['project_id']}")
504
+ if project_data["folder_id"]:
505
+ click.echo(f" Folder ID: {project_data['folder_id']}")
506
+ if project_data.get("profile"):
507
+ click.echo(f" Profile: {project_data['profile']}")
508
+ if project_data.get("remote_description"):
509
+ click.echo(f" Description: {project_data['remote_description']}")
510
+ if project_data.get("local_path") and workspace_root:
511
+ local_path = project_data["local_path"]
512
+ click.echo(f" Directory: {local_path.relative_to(workspace_root)}")
513
+ click.echo()