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.
- workato_platform_cli/__init__.py +135 -0
- workato_platform_cli/_version.py +34 -0
- workato_platform_cli/cli/__init__.py +126 -0
- workato_platform_cli/cli/commands/__init__.py +0 -0
- workato_platform_cli/cli/commands/api_clients.py +627 -0
- workato_platform_cli/cli/commands/api_collections.py +497 -0
- workato_platform_cli/cli/commands/assets.py +82 -0
- workato_platform_cli/cli/commands/connections.py +1205 -0
- workato_platform_cli/cli/commands/connectors/__init__.py +0 -0
- workato_platform_cli/cli/commands/connectors/command.py +178 -0
- workato_platform_cli/cli/commands/connectors/connector_manager.py +351 -0
- workato_platform_cli/cli/commands/data_tables.py +345 -0
- workato_platform_cli/cli/commands/guide.py +315 -0
- workato_platform_cli/cli/commands/init.py +229 -0
- workato_platform_cli/cli/commands/profiles.py +364 -0
- workato_platform_cli/cli/commands/projects/__init__.py +0 -0
- workato_platform_cli/cli/commands/projects/command.py +513 -0
- workato_platform_cli/cli/commands/projects/project_manager.py +338 -0
- workato_platform_cli/cli/commands/properties.py +174 -0
- workato_platform_cli/cli/commands/pull.py +327 -0
- workato_platform_cli/cli/commands/push/__init__.py +0 -0
- workato_platform_cli/cli/commands/push/command.py +320 -0
- workato_platform_cli/cli/commands/recipes/__init__.py +0 -0
- workato_platform_cli/cli/commands/recipes/command.py +847 -0
- workato_platform_cli/cli/commands/recipes/validator.py +1740 -0
- workato_platform_cli/cli/commands/workspace.py +73 -0
- workato_platform_cli/cli/containers.py +80 -0
- workato_platform_cli/cli/resources/data/connection-data.json +7364 -0
- workato_platform_cli/cli/resources/data/picklist-data.json +3706 -0
- workato_platform_cli/cli/resources/docs/README.md +178 -0
- workato_platform_cli/cli/resources/docs/actions.md +452 -0
- workato_platform_cli/cli/resources/docs/block-structure.md +424 -0
- workato_platform_cli/cli/resources/docs/connections-parameters.md +11946 -0
- workato_platform_cli/cli/resources/docs/data-mapping.md +779 -0
- workato_platform_cli/cli/resources/docs/formulas/array-list-formulas.md +1276 -0
- workato_platform_cli/cli/resources/docs/formulas/conditions.md +102 -0
- workato_platform_cli/cli/resources/docs/formulas/date-formulas.md +798 -0
- workato_platform_cli/cli/resources/docs/formulas/number-formulas.md +507 -0
- workato_platform_cli/cli/resources/docs/formulas/other-formulas.md +419 -0
- workato_platform_cli/cli/resources/docs/formulas/string-formulas.md +1353 -0
- workato_platform_cli/cli/resources/docs/formulas.md +214 -0
- workato_platform_cli/cli/resources/docs/naming-conventions.md +163 -0
- workato_platform_cli/cli/resources/docs/recipe-deployment-workflow.md +352 -0
- workato_platform_cli/cli/resources/docs/recipe-fundamentals.md +179 -0
- workato_platform_cli/cli/resources/docs/triggers.md +360 -0
- workato_platform_cli/cli/utils/__init__.py +10 -0
- workato_platform_cli/cli/utils/config/__init__.py +33 -0
- workato_platform_cli/cli/utils/config/manager.py +1001 -0
- workato_platform_cli/cli/utils/config/models.py +89 -0
- workato_platform_cli/cli/utils/config/profiles.py +491 -0
- workato_platform_cli/cli/utils/config/workspace.py +113 -0
- workato_platform_cli/cli/utils/exception_handler.py +531 -0
- workato_platform_cli/cli/utils/gitignore.py +32 -0
- workato_platform_cli/cli/utils/ignore_patterns.py +44 -0
- workato_platform_cli/cli/utils/spinner.py +63 -0
- workato_platform_cli/cli/utils/version_checker.py +237 -0
- workato_platform_cli/client/__init__.py +0 -0
- workato_platform_cli/client/workato_api/__init__.py +202 -0
- workato_platform_cli/client/workato_api/api/__init__.py +15 -0
- workato_platform_cli/client/workato_api/api/api_platform_api.py +2875 -0
- workato_platform_cli/client/workato_api/api/connections_api.py +1807 -0
- workato_platform_cli/client/workato_api/api/connectors_api.py +840 -0
- workato_platform_cli/client/workato_api/api/data_tables_api.py +604 -0
- workato_platform_cli/client/workato_api/api/export_api.py +621 -0
- workato_platform_cli/client/workato_api/api/folders_api.py +621 -0
- workato_platform_cli/client/workato_api/api/packages_api.py +1197 -0
- workato_platform_cli/client/workato_api/api/projects_api.py +590 -0
- workato_platform_cli/client/workato_api/api/properties_api.py +620 -0
- workato_platform_cli/client/workato_api/api/recipes_api.py +1379 -0
- workato_platform_cli/client/workato_api/api/users_api.py +285 -0
- workato_platform_cli/client/workato_api/api_client.py +807 -0
- workato_platform_cli/client/workato_api/api_response.py +21 -0
- workato_platform_cli/client/workato_api/configuration.py +601 -0
- workato_platform_cli/client/workato_api/docs/APIPlatformApi.md +844 -0
- workato_platform_cli/client/workato_api/docs/ApiClient.md +46 -0
- workato_platform_cli/client/workato_api/docs/ApiClientApiCollectionsInner.md +30 -0
- workato_platform_cli/client/workato_api/docs/ApiClientApiPoliciesInner.md +30 -0
- workato_platform_cli/client/workato_api/docs/ApiClientCreateRequest.md +46 -0
- workato_platform_cli/client/workato_api/docs/ApiClientListResponse.md +32 -0
- workato_platform_cli/client/workato_api/docs/ApiClientResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/ApiCollection.md +38 -0
- workato_platform_cli/client/workato_api/docs/ApiCollectionCreateRequest.md +32 -0
- workato_platform_cli/client/workato_api/docs/ApiEndpoint.md +41 -0
- workato_platform_cli/client/workato_api/docs/ApiKey.md +36 -0
- workato_platform_cli/client/workato_api/docs/ApiKeyCreateRequest.md +32 -0
- workato_platform_cli/client/workato_api/docs/ApiKeyListResponse.md +32 -0
- workato_platform_cli/client/workato_api/docs/ApiKeyResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/Asset.md +39 -0
- workato_platform_cli/client/workato_api/docs/AssetReference.md +37 -0
- workato_platform_cli/client/workato_api/docs/Connection.md +44 -0
- workato_platform_cli/client/workato_api/docs/ConnectionCreateRequest.md +35 -0
- workato_platform_cli/client/workato_api/docs/ConnectionUpdateRequest.md +34 -0
- workato_platform_cli/client/workato_api/docs/ConnectionsApi.md +526 -0
- workato_platform_cli/client/workato_api/docs/ConnectorAction.md +33 -0
- workato_platform_cli/client/workato_api/docs/ConnectorVersion.md +32 -0
- workato_platform_cli/client/workato_api/docs/ConnectorsApi.md +249 -0
- workato_platform_cli/client/workato_api/docs/CreateExportManifestRequest.md +29 -0
- workato_platform_cli/client/workato_api/docs/CreateFolderRequest.md +30 -0
- workato_platform_cli/client/workato_api/docs/CustomConnector.md +35 -0
- workato_platform_cli/client/workato_api/docs/CustomConnectorCodeResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/CustomConnectorCodeResponseData.md +29 -0
- workato_platform_cli/client/workato_api/docs/CustomConnectorListResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/DataTable.md +34 -0
- workato_platform_cli/client/workato_api/docs/DataTableColumn.md +37 -0
- workato_platform_cli/client/workato_api/docs/DataTableColumnRequest.md +37 -0
- workato_platform_cli/client/workato_api/docs/DataTableCreateRequest.md +31 -0
- workato_platform_cli/client/workato_api/docs/DataTableCreateResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/DataTableListResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/DataTableRelation.md +30 -0
- workato_platform_cli/client/workato_api/docs/DataTablesApi.md +172 -0
- workato_platform_cli/client/workato_api/docs/DeleteProject403Response.md +29 -0
- workato_platform_cli/client/workato_api/docs/Error.md +29 -0
- workato_platform_cli/client/workato_api/docs/ExportApi.md +175 -0
- workato_platform_cli/client/workato_api/docs/ExportManifestRequest.md +35 -0
- workato_platform_cli/client/workato_api/docs/ExportManifestResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/ExportManifestResponseResult.md +36 -0
- workato_platform_cli/client/workato_api/docs/Folder.md +35 -0
- workato_platform_cli/client/workato_api/docs/FolderAssetsResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/FolderAssetsResponseResult.md +29 -0
- workato_platform_cli/client/workato_api/docs/FolderCreationResponse.md +35 -0
- workato_platform_cli/client/workato_api/docs/FoldersApi.md +176 -0
- workato_platform_cli/client/workato_api/docs/ImportResults.md +32 -0
- workato_platform_cli/client/workato_api/docs/OAuthUrlResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/OAuthUrlResponseData.md +29 -0
- workato_platform_cli/client/workato_api/docs/OpenApiSpec.md +30 -0
- workato_platform_cli/client/workato_api/docs/PackageDetailsResponse.md +35 -0
- workato_platform_cli/client/workato_api/docs/PackageDetailsResponseRecipeStatusInner.md +30 -0
- workato_platform_cli/client/workato_api/docs/PackageResponse.md +33 -0
- workato_platform_cli/client/workato_api/docs/PackagesApi.md +364 -0
- workato_platform_cli/client/workato_api/docs/PicklistRequest.md +30 -0
- workato_platform_cli/client/workato_api/docs/PicklistResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/PlatformConnector.md +36 -0
- workato_platform_cli/client/workato_api/docs/PlatformConnectorListResponse.md +32 -0
- workato_platform_cli/client/workato_api/docs/Project.md +32 -0
- workato_platform_cli/client/workato_api/docs/ProjectsApi.md +173 -0
- workato_platform_cli/client/workato_api/docs/PropertiesApi.md +186 -0
- workato_platform_cli/client/workato_api/docs/Recipe.md +58 -0
- workato_platform_cli/client/workato_api/docs/RecipeConfigInner.md +33 -0
- workato_platform_cli/client/workato_api/docs/RecipeConnectionUpdateRequest.md +30 -0
- workato_platform_cli/client/workato_api/docs/RecipeListResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/RecipeStartResponse.md +31 -0
- workato_platform_cli/client/workato_api/docs/RecipesApi.md +367 -0
- workato_platform_cli/client/workato_api/docs/RuntimeUserConnectionCreateRequest.md +34 -0
- workato_platform_cli/client/workato_api/docs/RuntimeUserConnectionResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/RuntimeUserConnectionResponseData.md +30 -0
- workato_platform_cli/client/workato_api/docs/SuccessResponse.md +29 -0
- workato_platform_cli/client/workato_api/docs/UpsertProjectPropertiesRequest.md +29 -0
- workato_platform_cli/client/workato_api/docs/User.md +48 -0
- workato_platform_cli/client/workato_api/docs/UsersApi.md +84 -0
- workato_platform_cli/client/workato_api/docs/ValidationError.md +30 -0
- workato_platform_cli/client/workato_api/docs/ValidationErrorErrorsValue.md +28 -0
- workato_platform_cli/client/workato_api/exceptions.py +216 -0
- workato_platform_cli/client/workato_api/models/__init__.py +83 -0
- workato_platform_cli/client/workato_api/models/api_client.py +185 -0
- workato_platform_cli/client/workato_api/models/api_client_api_collections_inner.py +89 -0
- workato_platform_cli/client/workato_api/models/api_client_api_policies_inner.py +89 -0
- workato_platform_cli/client/workato_api/models/api_client_create_request.py +138 -0
- workato_platform_cli/client/workato_api/models/api_client_list_response.py +101 -0
- workato_platform_cli/client/workato_api/models/api_client_response.py +91 -0
- workato_platform_cli/client/workato_api/models/api_collection.py +110 -0
- workato_platform_cli/client/workato_api/models/api_collection_create_request.py +97 -0
- workato_platform_cli/client/workato_api/models/api_endpoint.py +117 -0
- workato_platform_cli/client/workato_api/models/api_key.py +102 -0
- workato_platform_cli/client/workato_api/models/api_key_create_request.py +93 -0
- workato_platform_cli/client/workato_api/models/api_key_list_response.py +101 -0
- workato_platform_cli/client/workato_api/models/api_key_response.py +91 -0
- workato_platform_cli/client/workato_api/models/asset.py +124 -0
- workato_platform_cli/client/workato_api/models/asset_reference.py +110 -0
- workato_platform_cli/client/workato_api/models/connection.py +173 -0
- workato_platform_cli/client/workato_api/models/connection_create_request.py +99 -0
- workato_platform_cli/client/workato_api/models/connection_update_request.py +97 -0
- workato_platform_cli/client/workato_api/models/connector_action.py +100 -0
- workato_platform_cli/client/workato_api/models/connector_version.py +99 -0
- workato_platform_cli/client/workato_api/models/create_export_manifest_request.py +91 -0
- workato_platform_cli/client/workato_api/models/create_folder_request.py +89 -0
- workato_platform_cli/client/workato_api/models/custom_connector.py +117 -0
- workato_platform_cli/client/workato_api/models/custom_connector_code_response.py +91 -0
- workato_platform_cli/client/workato_api/models/custom_connector_code_response_data.py +87 -0
- workato_platform_cli/client/workato_api/models/custom_connector_list_response.py +95 -0
- workato_platform_cli/client/workato_api/models/data_table.py +107 -0
- workato_platform_cli/client/workato_api/models/data_table_column.py +125 -0
- workato_platform_cli/client/workato_api/models/data_table_column_request.py +130 -0
- workato_platform_cli/client/workato_api/models/data_table_create_request.py +99 -0
- workato_platform_cli/client/workato_api/models/data_table_create_response.py +91 -0
- workato_platform_cli/client/workato_api/models/data_table_list_response.py +95 -0
- workato_platform_cli/client/workato_api/models/data_table_relation.py +90 -0
- workato_platform_cli/client/workato_api/models/delete_project403_response.py +87 -0
- workato_platform_cli/client/workato_api/models/error.py +87 -0
- workato_platform_cli/client/workato_api/models/export_manifest_request.py +107 -0
- workato_platform_cli/client/workato_api/models/export_manifest_response.py +91 -0
- workato_platform_cli/client/workato_api/models/export_manifest_response_result.py +112 -0
- workato_platform_cli/client/workato_api/models/folder.py +110 -0
- workato_platform_cli/client/workato_api/models/folder_assets_response.py +91 -0
- workato_platform_cli/client/workato_api/models/folder_assets_response_result.py +95 -0
- workato_platform_cli/client/workato_api/models/folder_creation_response.py +110 -0
- workato_platform_cli/client/workato_api/models/import_results.py +93 -0
- workato_platform_cli/client/workato_api/models/o_auth_url_response.py +91 -0
- workato_platform_cli/client/workato_api/models/o_auth_url_response_data.py +87 -0
- workato_platform_cli/client/workato_api/models/open_api_spec.py +96 -0
- workato_platform_cli/client/workato_api/models/package_details_response.py +126 -0
- workato_platform_cli/client/workato_api/models/package_details_response_recipe_status_inner.py +99 -0
- workato_platform_cli/client/workato_api/models/package_response.py +109 -0
- workato_platform_cli/client/workato_api/models/picklist_request.py +89 -0
- workato_platform_cli/client/workato_api/models/picklist_response.py +88 -0
- workato_platform_cli/client/workato_api/models/platform_connector.py +116 -0
- workato_platform_cli/client/workato_api/models/platform_connector_list_response.py +101 -0
- workato_platform_cli/client/workato_api/models/project.py +93 -0
- workato_platform_cli/client/workato_api/models/recipe.py +174 -0
- workato_platform_cli/client/workato_api/models/recipe_config_inner.py +100 -0
- workato_platform_cli/client/workato_api/models/recipe_connection_update_request.py +89 -0
- workato_platform_cli/client/workato_api/models/recipe_list_response.py +95 -0
- workato_platform_cli/client/workato_api/models/recipe_start_response.py +91 -0
- workato_platform_cli/client/workato_api/models/runtime_user_connection_create_request.py +97 -0
- workato_platform_cli/client/workato_api/models/runtime_user_connection_response.py +91 -0
- workato_platform_cli/client/workato_api/models/runtime_user_connection_response_data.py +89 -0
- workato_platform_cli/client/workato_api/models/success_response.py +87 -0
- workato_platform_cli/client/workato_api/models/upsert_project_properties_request.py +88 -0
- workato_platform_cli/client/workato_api/models/user.py +151 -0
- workato_platform_cli/client/workato_api/models/validation_error.py +102 -0
- workato_platform_cli/client/workato_api/models/validation_error_errors_value.py +143 -0
- workato_platform_cli/client/workato_api/rest.py +213 -0
- workato_platform_cli/client/workato_api/test/__init__.py +0 -0
- workato_platform_cli/client/workato_api/test/test_api_client.py +94 -0
- workato_platform_cli/client/workato_api/test/test_api_client_api_collections_inner.py +52 -0
- workato_platform_cli/client/workato_api/test/test_api_client_api_policies_inner.py +52 -0
- workato_platform_cli/client/workato_api/test/test_api_client_create_request.py +75 -0
- workato_platform_cli/client/workato_api/test/test_api_client_list_response.py +114 -0
- workato_platform_cli/client/workato_api/test/test_api_client_response.py +104 -0
- workato_platform_cli/client/workato_api/test/test_api_collection.py +72 -0
- workato_platform_cli/client/workato_api/test/test_api_collection_create_request.py +57 -0
- workato_platform_cli/client/workato_api/test/test_api_endpoint.py +75 -0
- workato_platform_cli/client/workato_api/test/test_api_key.py +64 -0
- workato_platform_cli/client/workato_api/test/test_api_key_create_request.py +56 -0
- workato_platform_cli/client/workato_api/test/test_api_key_list_response.py +78 -0
- workato_platform_cli/client/workato_api/test/test_api_key_response.py +68 -0
- workato_platform_cli/client/workato_api/test/test_api_platform_api.py +101 -0
- workato_platform_cli/client/workato_api/test/test_asset.py +67 -0
- workato_platform_cli/client/workato_api/test/test_asset_reference.py +62 -0
- workato_platform_cli/client/workato_api/test/test_connection.py +81 -0
- workato_platform_cli/client/workato_api/test/test_connection_create_request.py +59 -0
- workato_platform_cli/client/workato_api/test/test_connection_update_request.py +56 -0
- workato_platform_cli/client/workato_api/test/test_connections_api.py +73 -0
- workato_platform_cli/client/workato_api/test/test_connector_action.py +59 -0
- workato_platform_cli/client/workato_api/test/test_connector_version.py +58 -0
- workato_platform_cli/client/workato_api/test/test_connectors_api.py +52 -0
- workato_platform_cli/client/workato_api/test/test_create_export_manifest_request.py +88 -0
- workato_platform_cli/client/workato_api/test/test_create_folder_request.py +53 -0
- workato_platform_cli/client/workato_api/test/test_custom_connector.py +76 -0
- workato_platform_cli/client/workato_api/test/test_custom_connector_code_response.py +54 -0
- workato_platform_cli/client/workato_api/test/test_custom_connector_code_response_data.py +52 -0
- workato_platform_cli/client/workato_api/test/test_custom_connector_list_response.py +82 -0
- workato_platform_cli/client/workato_api/test/test_data_table.py +88 -0
- workato_platform_cli/client/workato_api/test/test_data_table_column.py +72 -0
- workato_platform_cli/client/workato_api/test/test_data_table_column_request.py +64 -0
- workato_platform_cli/client/workato_api/test/test_data_table_create_request.py +82 -0
- workato_platform_cli/client/workato_api/test/test_data_table_create_response.py +90 -0
- workato_platform_cli/client/workato_api/test/test_data_table_list_response.py +94 -0
- workato_platform_cli/client/workato_api/test/test_data_table_relation.py +54 -0
- workato_platform_cli/client/workato_api/test/test_data_tables_api.py +45 -0
- workato_platform_cli/client/workato_api/test/test_delete_project403_response.py +51 -0
- workato_platform_cli/client/workato_api/test/test_error.py +52 -0
- workato_platform_cli/client/workato_api/test/test_export_api.py +45 -0
- workato_platform_cli/client/workato_api/test/test_export_manifest_request.py +69 -0
- workato_platform_cli/client/workato_api/test/test_export_manifest_response.py +68 -0
- workato_platform_cli/client/workato_api/test/test_export_manifest_response_result.py +66 -0
- workato_platform_cli/client/workato_api/test/test_folder.py +64 -0
- workato_platform_cli/client/workato_api/test/test_folder_assets_response.py +80 -0
- workato_platform_cli/client/workato_api/test/test_folder_assets_response_result.py +78 -0
- workato_platform_cli/client/workato_api/test/test_folder_creation_response.py +64 -0
- workato_platform_cli/client/workato_api/test/test_folders_api.py +45 -0
- workato_platform_cli/client/workato_api/test/test_import_results.py +58 -0
- workato_platform_cli/client/workato_api/test/test_o_auth_url_response.py +54 -0
- workato_platform_cli/client/workato_api/test/test_o_auth_url_response_data.py +52 -0
- workato_platform_cli/client/workato_api/test/test_open_api_spec.py +54 -0
- workato_platform_cli/client/workato_api/test/test_package_details_response.py +64 -0
- workato_platform_cli/client/workato_api/test/test_package_details_response_recipe_status_inner.py +52 -0
- workato_platform_cli/client/workato_api/test/test_package_response.py +58 -0
- workato_platform_cli/client/workato_api/test/test_packages_api.py +59 -0
- workato_platform_cli/client/workato_api/test/test_picklist_request.py +53 -0
- workato_platform_cli/client/workato_api/test/test_picklist_response.py +52 -0
- workato_platform_cli/client/workato_api/test/test_platform_connector.py +94 -0
- workato_platform_cli/client/workato_api/test/test_platform_connector_list_response.py +106 -0
- workato_platform_cli/client/workato_api/test/test_project.py +57 -0
- workato_platform_cli/client/workato_api/test/test_projects_api.py +45 -0
- workato_platform_cli/client/workato_api/test/test_properties_api.py +45 -0
- workato_platform_cli/client/workato_api/test/test_recipe.py +124 -0
- workato_platform_cli/client/workato_api/test/test_recipe_config_inner.py +55 -0
- workato_platform_cli/client/workato_api/test/test_recipe_connection_update_request.py +54 -0
- workato_platform_cli/client/workato_api/test/test_recipe_list_response.py +134 -0
- workato_platform_cli/client/workato_api/test/test_recipe_start_response.py +54 -0
- workato_platform_cli/client/workato_api/test/test_recipes_api.py +59 -0
- workato_platform_cli/client/workato_api/test/test_runtime_user_connection_create_request.py +59 -0
- workato_platform_cli/client/workato_api/test/test_runtime_user_connection_response.py +56 -0
- workato_platform_cli/client/workato_api/test/test_runtime_user_connection_response_data.py +54 -0
- workato_platform_cli/client/workato_api/test/test_success_response.py +52 -0
- workato_platform_cli/client/workato_api/test/test_upsert_project_properties_request.py +52 -0
- workato_platform_cli/client/workato_api/test/test_user.py +85 -0
- workato_platform_cli/client/workato_api/test/test_users_api.py +38 -0
- workato_platform_cli/client/workato_api/test/test_validation_error.py +52 -0
- workato_platform_cli/client/workato_api/test/test_validation_error_errors_value.py +50 -0
- workato_platform_cli/client/workato_api_README.md +205 -0
- workato_platform_cli-1.0.0rc5.dev5.dist-info/METADATA +185 -0
- workato_platform_cli-1.0.0rc5.dev5.dist-info/RECORD +306 -0
- workato_platform_cli-1.0.0rc5.dev5.dist-info/WHEEL +4 -0
- workato_platform_cli-1.0.0rc5.dev5.dist-info/entry_points.txt +2 -0
- 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()
|