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,419 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Other formulas
|
|
3
|
+
date: 2017-03-30 05:00:00 Z
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Other formulas
|
|
7
|
+
|
|
8
|
+
This section covers formulas that work with a number of data types.
|
|
9
|
+
|
|
10
|
+
Formulas in Workato are allowlisted Ruby methods. Syntax and functionality for these formulas are generally unchanged. Most formulas return an error and stop the job if the formula operates on nulls (expressed as `nil` in Ruby), except for `present?`, `presence`, and `blank?`.
|
|
11
|
+
|
|
12
|
+
If a Ruby method is not found in the Workato documentation, it is not included in the allowlist and is therefore unsupported. To request the addition of new formulas to the allowlist, [submit a support ticket](https://support.workato.com/en/support/tickets/new).
|
|
13
|
+
|
|
14
|
+
## Access nested values using square brackets {: #square-brackets :}
|
|
15
|
+
|
|
16
|
+
Square brackets (`[]`) allow you to access values in a hash in Workato. For nested hashes, you can chain lookups like `data["a"]["b"]["c"]`. However, this method raises a `NoMethodError` if any part of the chain doesn't exist (for example, if `"b"` is missing).
|
|
17
|
+
|
|
18
|
+
Use the [safe navigation operator](/en/formulas/conditions.md#safe-navigation-operator) (`&.`) instead to safely access nested values without errors. For example, `data["a"]&.[]("b")&.[]("c")`. This returns `nil` if any part of the chain is `nil`.
|
|
19
|
+
|
|
20
|
+
## null
|
|
21
|
+
|
|
22
|
+
Gives a null/nil value.
|
|
23
|
+
|
|
24
|
+
:::note USE FORMULAS TO CLEAR A FIELD
|
|
25
|
+
Passing `null` into an input field does not update the field value to null. Toggle the field to formula mode and use the [clear](#clear) formula to update a field value to null.
|
|
26
|
+
:::
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## clear
|
|
33
|
+
|
|
34
|
+
Clears the value of the field in the target app to null/nil. Remember to toggle the field to formula mode.
|
|
35
|
+
|
|
36
|
+

|
|
37
|
+
_Use clear formula instead of null when looking to clear field in target app_
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## skip
|
|
42
|
+
|
|
43
|
+
Passes nothing to the destination app for this field. If the field has an existing value, it will be left untouched.
|
|
44
|
+
|
|
45
|
+
### Example
|
|
46
|
+
|
|
47
|
+
This example attempts use an updated Salesforce record to update a lead in Marketo. It checks if the Salesforce <kbd>Company</kbd> is present. If yes, it will output the Salesforce <kbd>Company</kbd> into Marketo. Otherwise, the Marketo record is left untouched.
|
|
48
|
+
|
|
49
|
+

|
|
50
|
+
_Skip formula example use case_
|
|
51
|
+
|
|
52
|
+
::: tip Skip this field if update datapill is empty
|
|
53
|
+
Use skip formula to leave existing values untouched in an update action.
|
|
54
|
+
:::
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## uuid
|
|
59
|
+
|
|
60
|
+
Generates an UUID.
|
|
61
|
+
|
|
62
|
+
### Example
|
|
63
|
+
|
|
64
|
+
| Example | Result |
|
|
65
|
+
| ------- | -------------------------------------- |
|
|
66
|
+
| uuid | "c52d735a-aee4-4d44-ba1e-bcfa3734f553" |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## encrypt
|
|
71
|
+
|
|
72
|
+
Encrypts the input string with a secret key using AES-256-CBC algorithm. Encrypted output string is packed in [RNCryptor V3](https://github.com/RNCryptor/RNCryptor-Spec/blob/master/RNCryptor-Spec-v3.md) format and base64 encoded.
|
|
73
|
+
|
|
74
|
+
:::note STORE ENCRYPTION KEYS USING ENVIRONMENT PROPERTIES
|
|
75
|
+
Do not hard code your encryption key in the recipe. Instead, use environment properties (with `key` or `password` in the name) to store encryption keys.
|
|
76
|
+
:::
|
|
77
|
+
|
|
78
|
+
### Example
|
|
79
|
+
|
|
80
|
+
`encrypt([ssn], [encryption_key])`
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## decrypt
|
|
85
|
+
|
|
86
|
+
Decrypts the encrypted input string with a secret key using the AES-256-CBC algorithm. The encrypted input string should be packed in [RNCryptor V3](https://github.com/RNCryptor/RNCryptor-Spec/blob/master/RNCryptor-Spec-v3.md) format and base64 encoded.
|
|
87
|
+
|
|
88
|
+
The [Ruby decrypt method](/developing-connectors/sdk/sdk-reference/ruby_methods.md#decrypt) returns a byte array instead of a string by default. You can convert the decrypt method output to a string by appending the `.as_string()` or `.as_utf8` function to your formula.
|
|
89
|
+
|
|
90
|
+
::: danger DON'T HARDCODE ENCRYPTION KEYS IN A RECIPE
|
|
91
|
+
|
|
92
|
+
The encryption key should not be hardcoded in the recipe. Use [environment properties](/features/account-properties.html) (with `key` or `password` in the name) to store the encryption keys.
|
|
93
|
+
|
|
94
|
+
:::
|
|
95
|
+
|
|
96
|
+
### Example
|
|
97
|
+
|
|
98
|
+
`decrypt([encrypted_ssn], [encryption_key])`
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## encode_sha256
|
|
103
|
+
|
|
104
|
+
Encodes a string or binary array using SHA256 algorithm
|
|
105
|
+
|
|
106
|
+
### Example
|
|
107
|
+
|
|
108
|
+
`"hello".encode_sha256`
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## encode_hex
|
|
113
|
+
|
|
114
|
+
Converts binary string to its hex representation
|
|
115
|
+
|
|
116
|
+
### Example
|
|
117
|
+
|
|
118
|
+
| Example | Result |
|
|
119
|
+
| ------------------------------- | ---------------------------------- |
|
|
120
|
+
| `"0101010101011010".encode_hex` | "30313031303130313031303131303130" |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## decode_hex
|
|
125
|
+
|
|
126
|
+
Decode hexadecimal into binary string
|
|
127
|
+
|
|
128
|
+
### Example
|
|
129
|
+
|
|
130
|
+
| Example | Result |
|
|
131
|
+
| ----------------------------------------------- | ------------------ |
|
|
132
|
+
| `"30313031303130313031303131303130".decode_hex` | "0101010101011010" |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## decode_url
|
|
137
|
+
|
|
138
|
+
URL decode a string. This formula uses `CGI.unescape` to URL decoding.
|
|
139
|
+
|
|
140
|
+
### Example
|
|
141
|
+
|
|
142
|
+
| Example | Result |
|
|
143
|
+
| ------------------------------------------------------------------ | --------------------------------------- |
|
|
144
|
+
| `'https%3A%2F%2Fworkato.com%2Ffoo%3Fbar%3Dat%23anchor'.decode_url` | "https://workato.com/foo?bar=at#anchor" |
|
|
145
|
+
| `'%27Stop%21%27+said+Fred"'.decode_url` | "'Stop!' said Fred" |
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## encode_base64
|
|
150
|
+
|
|
151
|
+
Encode using Base64 algorithm
|
|
152
|
+
|
|
153
|
+
### Example
|
|
154
|
+
|
|
155
|
+
| Example | Result |
|
|
156
|
+
| ------------------------------ | ------------------ |
|
|
157
|
+
| `"Hello World!".encode_base64` | "aGVsbG8gd29ybGQh" |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## decode_base64
|
|
162
|
+
|
|
163
|
+
Decode using Base64 algorithm
|
|
164
|
+
|
|
165
|
+
### Example
|
|
166
|
+
|
|
167
|
+
| Example | Result |
|
|
168
|
+
| ------------------------------------------ | -------------- |
|
|
169
|
+
| `"aGVsbG8gd29ybGQh".decode_base64.as_utf8` | "Hello World!" |
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## encode_url
|
|
174
|
+
|
|
175
|
+
URL encode a string
|
|
176
|
+
|
|
177
|
+
### Example
|
|
178
|
+
|
|
179
|
+
| Example | Result |
|
|
180
|
+
| -------------------------- | --------------- |
|
|
181
|
+
| `"Hello World".encode_url` | "Hello%20World" |
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## encode_urlsafe_base64
|
|
186
|
+
|
|
187
|
+
Encode using urlsafe modification of Base64 algorithm
|
|
188
|
+
|
|
189
|
+
### Example
|
|
190
|
+
|
|
191
|
+
| Example | Result |
|
|
192
|
+
| ------------------------------------- | ------------------ |
|
|
193
|
+
| `"Hello World".encode_urlsafe_base64` | "SGVsbG8gV29ybGQ=" |
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## decode_urlsafe_base64
|
|
198
|
+
|
|
199
|
+
Decode using urlsafe modification of Base64 algorithm
|
|
200
|
+
|
|
201
|
+
### Example
|
|
202
|
+
|
|
203
|
+
| Example | Result |
|
|
204
|
+
| ----------------------------------------- | ------------- |
|
|
205
|
+
| `"SGVsbG8gV29ybGQ".decode_urlsafe_base64` | "Hello World" |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## as_string
|
|
210
|
+
|
|
211
|
+
Decode byte sequence as string in given encoding
|
|
212
|
+
|
|
213
|
+
### Example
|
|
214
|
+
|
|
215
|
+
| Example | Result |
|
|
216
|
+
| ----------------------------------------------------- | ------------- |
|
|
217
|
+
| `"SGVsbG8gV29ybGQ=".decode_base64.as_string('utf-8')` | "Hello World" |
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## as_utf8
|
|
222
|
+
|
|
223
|
+
Decode byte sequence as UTF-8 string
|
|
224
|
+
|
|
225
|
+
### Example
|
|
226
|
+
|
|
227
|
+
| Example | Result |
|
|
228
|
+
| ------------------------------------------ | ------------- |
|
|
229
|
+
| `"SGVsbG8gV29ybGQ=".decode_base64.as_utf8` | "Hello World" |
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## to_hex
|
|
234
|
+
|
|
235
|
+
Converts binary string to its hex representation
|
|
236
|
+
|
|
237
|
+
### Example
|
|
238
|
+
|
|
239
|
+
| Example | Result |
|
|
240
|
+
| ----------------------------------------- | ------------------------ |
|
|
241
|
+
| `"SGVsbG8gV29ybGQ=".decode_base64.to_hex` | "48656c6c6f20576f726c64" |
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## SHA1
|
|
246
|
+
|
|
247
|
+
Encrypts a given string using the SHA1 encryption algorithm. [Details here](https://ruby-doc.org/stdlib-2.4.0/libdoc/digest/rdoc/Digest/SHA1.html)
|
|
248
|
+
|
|
249
|
+
### Example
|
|
250
|
+
|
|
251
|
+
| Example | Result |
|
|
252
|
+
| ----------------------------- | ------------------------------ |
|
|
253
|
+
| `"abcdef".sha1.encode_base64` | "H4rBDyPFtbwRZ72oS4M+XAV6d9I=" |
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## HMAC formulae
|
|
258
|
+
|
|
259
|
+
Creates a HMAC signatures with a variety of signing algorithms
|
|
260
|
+
|
|
261
|
+
### Example
|
|
262
|
+
|
|
263
|
+
| Signing algorithm | Example |
|
|
264
|
+
| ----------------- | -------------------------------------------- |
|
|
265
|
+
| SHA-256 | "username:password:nonce".hmac_sha256("key") |
|
|
266
|
+
| SHA-1 | "username:password:nonce".hmac_sha1("key") |
|
|
267
|
+
| SHA-512 | "username:password:nonce".hmac_sha512("key") |
|
|
268
|
+
| MD5 | "username:password:nonce".hmac_md5("key") |
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## md5_hexdigest
|
|
273
|
+
|
|
274
|
+
Accepts a string and creates message digest using the MD5 Message-Digest Algorithm
|
|
275
|
+
|
|
276
|
+
### Example
|
|
277
|
+
|
|
278
|
+
| Example | Result |
|
|
279
|
+
| ----------------------- | ---------------------------------- |
|
|
280
|
+
| `"hello".md5_hexdigest` | "5d41402abc4b2a76b9719d911017c592" |
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## jwt_decode
|
|
285
|
+
|
|
286
|
+
Decodes a JSON web token (JWT) using one of the following algorithms - RS256, RS384, RS512, HS256, HS384, HS512, ES256, ES384, or ES512.
|
|
287
|
+
|
|
288
|
+
### Example
|
|
289
|
+
|
|
290
|
+
| Example | Result |
|
|
291
|
+
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
|
|
292
|
+
| `workato.jwt_decode( "eyJhbGciO...", "PEM key", 'RS256')` | "{"payload" => {"sub"=>"123", "name"=>"John", ...}, "header" => {"typ"=>"JWT", "alg"=>"RS256"}}" |
|
|
293
|
+
| `workato.jwt_decode( "eyJhbGciO...", "PEM key", 'RS512')` | "{"payload" => {"sub"=>"123", "name"=>"John", ...}, "header" => {"typ"=>"JWT", "alg"=>"RS512"}}" |
|
|
294
|
+
| `workato.jwt_decode( "eyJhbGciO...", "my$ecretK3y", 'HS256')` | "{"payload" => {"sub"=>"123", "name"=>"John", ...}, "header" => {"typ"=>"JWT", "alg"=>"HS256"}}" |
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## jwt_encode
|
|
299
|
+
|
|
300
|
+
Creates a Jason web token (JWT) using one of the following algorithms - RS256, RS384, RS512, HS256, HS384, HS512, ES256, ES384, or ES512. Adds other named parameters to the header, such as `kid` in the following example:
|
|
301
|
+
|
|
302
|
+
### Example
|
|
303
|
+
|
|
304
|
+
| Example | Result |
|
|
305
|
+
| -------------------------------------------------------------------------------- | ---------------- |
|
|
306
|
+
| `workato.jwt_encode({ name: "John Doe" }, "PEM key", 'RS256')` | "eyJhbGciO..." |
|
|
307
|
+
| `workato.jwt_encode({ name: "John Doe" }, "PEM key", 'RS512', kid: "24668")` | "eyJ0eXAiO..." |
|
|
308
|
+
| `workato.jwt_encode({ name: "John Doe" }, "my$ecretK3y", 'HS256', kid: "24668")` | "eyJ0eXAiO..." |
|
|
309
|
+
| `workato.jwt_encode({ name: "John Doe" }, "my$ecretK3y", 'HS256')` | "eyJ0eXAiO..." |
|
|
310
|
+
| `workato.jwt_encode({ name: "John Doe" }, "ECDSA Key", 'ES256')` | "eyJhbGciOiJ..." |
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## parse_yaml
|
|
315
|
+
|
|
316
|
+
Parse a YAML string. Supports true, false, nil, numbers, strings, arrays, hashes
|
|
317
|
+
|
|
318
|
+
### Example
|
|
319
|
+
|
|
320
|
+
| Example | Result |
|
|
321
|
+
| -------------------------------------------- | -------------------- |
|
|
322
|
+
| `workato.parse_yaml("---\nfoo: bar")` | "{ "foo" => "bar" }" |
|
|
323
|
+
| `workato.parse_yaml("---\n- 1\n- 2\n- 3\n")` | "[1, 2, 3]" |
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## render_yaml
|
|
328
|
+
|
|
329
|
+
Render an object into a YAML string.
|
|
330
|
+
|
|
331
|
+
### Example
|
|
332
|
+
|
|
333
|
+
| Example | Result |
|
|
334
|
+
| ----------------------------------------- | ---------------------- |
|
|
335
|
+
| `workato.render_yaml({ "foo" => "bar" })` | "---\nfoo: bar\n" |
|
|
336
|
+
| `workato.render_yaml([1,2,3])` | "---\n- 1\n- 2\n- 3\n" |
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## lookup
|
|
341
|
+
|
|
342
|
+
This formula allows you to lookup values from your Workato lookup tables using a key. The lookup formula is data type sensitive, but is not case sensitive.
|
|
343
|
+
|
|
344
|
+
If you use a datapill in the lookup formula, we recommended that you convert the data to the correct format. For example, integer-type datapills must be converted to a string with a `.to_s` formula if you plan to compare a column that contains both integers and strings.
|
|
345
|
+
|
|
346
|
+
### Example
|
|
347
|
+
|
|
348
|
+
For example, let's use the following lookup table with name `Department Codes` with an ID of 6:
|
|
349
|
+
|
|
350
|
+

|
|
351
|
+
_Sample department codes lookup table_
|
|
352
|
+
|
|
353
|
+
| Example | Result |
|
|
354
|
+
| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
|
|
355
|
+
| `lookup('Department Lookup table', 'Department code': 'ACC')['Department']` | "Accounting" |
|
|
356
|
+
| `lookup('Department Lookup table', 'Department code': 'SLS')['Department']` | "Sales" |
|
|
357
|
+
| `lookup('Department Lookup table', 'Department': 'Marketing')['Department code']` | "MKT" |
|
|
358
|
+
| `lookup('Department Lookup table', 'Department': 'marketing')['Department code']` | nil <br>Matching is case sensitive, unable to find value "Marketing" |
|
|
359
|
+
| `lookup('Department Lookup table', 'Department': 'Marketing')['Department Code']` | nil <br>Matching is case sensitive, unable to find column "Department Code" |
|
|
360
|
+
| `lookup('6', 'Department code': 'ACC')['Department']` | "Accounting" <br>Note: Remember to enclose the lookup table ID in quotes `""`. |
|
|
361
|
+
|
|
362
|
+
::: tip Using Lookup ID
|
|
363
|
+
You can using the lookup table name and lookup table ID interchangeability. You can find the lookup table ID in the URL.
|
|
364
|
+
|
|
365
|
+
For example:
|
|
366
|
+
|
|
367
|
+
```
|
|
368
|
+
https://app.workato.com/lookup_tables/<lookup_table_id>
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
:::
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## lookup_table
|
|
376
|
+
|
|
377
|
+
This formula allows you to create a static lookup table and define the keys and values. It is case-sensitive and datatype-sensitive.
|
|
378
|
+
|
|
379
|
+
### Example
|
|
380
|
+
|
|
381
|
+
| Example | Result |
|
|
382
|
+
| ---------------------------------------------------------------------- | -------- |
|
|
383
|
+
| `{"key1" => "value1", "key2" => "value2", "key3" => "value3"}["key2"]` | "value2" |
|
|
384
|
+
| `{"High" => "urgent", "Medium" => "mid", "Low" => "normal"}["Low"]` | "normal" |
|
|
385
|
+
| `{"High" => "urgent", "Medium" => "mid", "Low" => "normal"}["low"]` | nil |
|
|
386
|
+
| `{"High" => "urgent", "Medium" => "mid", "Low" => "normal"}["normal"]` | nil |
|
|
387
|
+
| `{1 => "1", 2 => "2", 3 => "3"}[2]` | "2" |
|
|
388
|
+
| `{1 => "1", 2 => "2", 3 => "3"}[2.0]` | nil |
|
|
389
|
+
| `{1 => "1", 2 => "2", 3 => "3"}["2"]` | nil |
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## data_table_lookup {:#data-table-lookup:}
|
|
394
|
+
|
|
395
|
+
This formula allows you to look up values from your [data tables](/data-tables.md) using a key. The lookup formula is case-sensitive and datatype-sensitive.
|
|
396
|
+
|
|
397
|
+
If you use a datapill in the lookup formula, we recommended that you convert the data to the correct format. For example, integer-type datapills must be converted to a string with a `.to_s` formula if you plan to compare a string-typed column.
|
|
398
|
+
|
|
399
|
+
You also need to ensure that project name, table name, lookup key, and lookup criteria are written exactly the way they are stored in the data table, including proper capitalization.
|
|
400
|
+
|
|
401
|
+
### Example
|
|
402
|
+
|
|
403
|
+
For example, let's use the following data table with name `Wedding Guests` inside the `Wedding` project:
|
|
404
|
+
|
|
405
|
+

|
|
406
|
+
_Sample "Wedding Guests" Data table_
|
|
407
|
+
|
|
408
|
+
| Example | Result |
|
|
409
|
+
| ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
|
410
|
+
| `data_table_lookup('Wedding', 'Wedding Guests', 'Transport': 'Yes')['Seat No.']` | "10" |
|
|
411
|
+
| `data_table_lookup('Wedding', 'Wedding Guests', 'Lunch': 'No')['First Name']` | "A little" |
|
|
412
|
+
| `data_table_lookup('Wedding', 'Wedding Guests', 'First Name': 'Angela')['Table No.']` | 1 |
|
|
413
|
+
| `data_table_lookup('Wedding', 'Wedding Guests', 'First Name': 'angela')['Table No.']` | nil <br>Matching is case sensitive, unable to find value "angela" |
|
|
414
|
+
| `data_table_lookup('Wedding', 'Wedding Guests', 'First Name': 'Angela')['Table no.']` | nil <br>Matching is case sensitive, unable to find column "Table no." |
|
|
415
|
+
| `data_table_lookup('Wedding', 'Wedding Guests', 'first name': 'Angela')['Table No.']` | nil <br>Matching is case sensitive, unable to find column "first name" |
|
|
416
|
+
|
|
417
|
+
:::
|
|
418
|
+
|
|
419
|
+
---
|