From 5a5d89b2f8a012e02e8b7841bde69691832ef431 Mon Sep 17 00:00:00 2001 From: Pranav Vishnumolakala Date: Thu, 19 Feb 2026 12:42:19 -0800 Subject: [PATCH] Release 6.0.0 --- .config/dotnet-tools.json | 4 +- .editorconfig | 2 +- .github/.secrets.default | 6 + .github/.vars.default | 38 + .github/workflows/build-docs.yml | 6 +- .github/workflows/build-dotnet.yml | 13 +- .github/workflows/build-python-package.yml | 14 +- .github/workflows/create-release.yml | 18 +- .github/workflows/deploy-all.yml | 1 + .github/workflows/deploy-docs.yml | 4 +- .github/workflows/deploy-dotnet.yml | 20 +- .github/workflows/deploy-python.yml | 14 +- .github/workflows/lint-python.yml | 8 +- .github/workflows/sdk-workflow.yml | 4 +- .github/workflows/test-dotnet.yml | 16 +- .github/workflows/test-python.yml | 39 +- Directory.Build.props | 6 +- LICENSE.txt | 2 +- .../Csharp.ExampleApplication.csproj | 2 +- .../MyMigrationApplication.cs | 8 +- .../EmptyMigrationContentLoader.cs | 16 + .../packages.lock.json | 1030 +++++------ ...endencyInjection.ExampleApplication.csproj | 2 +- .../packages.lock.json | 700 ++++---- .../transformers/migrated_tag_transformer.py | 17 +- .../Python.ExampleApplication/pyproject.toml | 2 +- .../requirements.txt | 2 +- .../empty_migration_content_loader.py | 11 + global.json | 2 +- scripts/generate-docs.ps1 | 22 +- src/Documentation/api-python/index.md | 4 +- .../articles/configuration/data_loading.md | 63 + .../index.md} | 10 +- .../configuration/skip_content_type.md | 36 + .../articles/content-type-api-ver.md | 5 + .../index.md} | 6 +- .../migration_services.md | 126 ++ .../articles/hooks/custom_hooks.md | 2 +- src/Documentation/articles/logging.md | 2 +- src/Documentation/articles/terms.md | 2 +- src/Documentation/articles/toc.yml | 16 +- src/Documentation/articles/troubleshooting.md | 4 + src/Documentation/docfx.json | 3 +- .../configuration/sdk_opts_content_types.html | 11 + .../configuration/sdk_opts_network_res.html | 4 +- .../includes/content_types_api_mapping.html | 133 ++ .../log_migration_batches.md | 2 +- .../samples/bulk-post-publish/bulk_logging.md | 2 +- .../filters/filter_custom_views_by_shared.md | 4 +- .../filters/filter_projects_by_name.md | 4 +- .../filters/filter_users_by_site_role.md | 4 +- src/Documentation/samples/index.md | 6 +- .../set_custom_context.md | 10 +- .../samples/mappings/change_projects.md | 4 +- .../samples/mappings/rename_projects.md | 4 +- .../mappings/username_email_mapping.md | 4 +- .../log_migration_actions.md | 4 +- .../action_url_xml_transformer.md | 6 +- .../custom_view_default_users_transformer.md | 3 +- .../encrypt_extracts_transformer.md | 4 +- .../transformers/migrated_tag_transformer.md | 4 +- .../transformers/modify_permissions.md | 6 +- .../transformers/start_at_transformer.md | 4 +- src/Documentation/scripts/table-sorter.js | 122 ++ .../tableau/partials/scripts.tmpl.partial | 6 + .../templates/tableau/styles/main.css | 36 + src/Python/LICENSE | 2 +- src/Python/Python.pyproj | 6 + src/Python/pyproject.toml | 37 +- src/Python/requirements.txt | 10 +- src/Python/scripts/build-package.ps1 | 14 +- src/Python/scripts/build_binaries.py | 5 +- src/Python/src/tableau_migration/__init__.py | 12 +- src/Python/src/tableau_migration/migration.py | 62 +- .../tableau_migration/migration_api_rest.py | 2 +- .../migration_api_rest_models.py | 2 +- .../migration_api_rest_models_types.py | 2 +- .../tableau_migration/migration_content.py | 96 +- .../migration_content_permissions.py | 46 +- .../migration_content_schedules.py | 8 +- .../migration_content_schedules_cloud.py | 2 +- .../migration_content_schedules_server.py | 2 +- .../migration_content_search.py | 2 +- .../src/tableau_migration/migration_engine.py | 175 +- .../migration_engine_actions.py | 2 +- .../migration_engine_endpoints_caching.py | 114 ++ .../migration_engine_endpoints_search.py | 215 ++- .../migration_engine_hooks.py | 30 +- .../migration_engine_hooks_filters.py | 8 +- .../migration_engine_hooks_filters_interop.py | 10 +- ...ration_engine_hooks_initializemigration.py | 2 +- .../migration_engine_hooks_interop.py | 132 +- .../migration_engine_hooks_mappings.py | 8 +- ...migration_engine_hooks_mappings_interop.py | 14 +- .../migration_engine_hooks_postpublish.py | 2 +- ...ration_engine_hooks_postpublish_interop.py | 20 +- .../migration_engine_hooks_transformers.py | 14 +- ...ation_engine_hooks_transformers_interop.py | 26 +- .../migration_engine_manifest.py | 2 +- .../migration_engine_migrators.py | 2 +- .../migration_engine_migrators_batch.py | 2 +- .../migration_engine_options.py | 2 +- .../migration_engine_pipelines.py | 2 +- .../migration_engine_services.py | 365 ++++ .../src/tableau_migration/migration_enum.py | 2 +- .../tableau_migration/migration_interop.py | 146 ++ .../src/tableau_migration/migration_logger.py | 2 +- .../src/tableau_migration/migration_paging.py | 117 ++ .../tableau_migration/migration_services.py | 2 +- src/Python/tests/__init__.py | 22 +- src/Python/tests/helpers/autofixture.py | 2 +- src/Python/tests/test_classes.py | 8 +- src/Python/tests/test_migration.py | 20 +- src/Python/tests/test_migration_api_rest.py | 2 +- .../tests/test_migration_api_rest_models.py | 2 +- src/Python/tests/test_migration_content.py | 45 +- .../test_migration_content_permissions.py | 18 +- .../tests/test_migration_content_schedules.py | 4 +- .../test_migration_content_schedules_cloud.py | 2 +- ...test_migration_content_schedules_server.py | 2 +- .../tests/test_migration_content_search.py | 2 +- src/Python/tests/test_migration_engine.py | 26 +- .../test_migration_engine_endpoints_search.py | 182 +- .../tests/test_migration_engine_hooks.py | 2 +- .../test_migration_engine_hooks_filters.py | 2 +- .../test_migration_engine_hooks_mappings.py | 2 +- ...test_migration_engine_hooks_postpublish.py | 2 +- ...est_migration_engine_hooks_transformers.py | 4 +- .../tests/test_migration_engine_manifest.py | 2 +- .../test_migration_engine_migrators_batch.py | 2 +- .../tests/test_migration_engine_options.py | 2 +- .../tests/test_migration_engine_services.py | 276 +++ src/Python/tests/test_migration_paging.py | 55 + src/Python/tests/test_migration_services.py | 3 +- src/Python/tests/test_other.py | 2 +- .../Config/Hints/GeneratorHints.cs | 2 +- .../Config/Hints/NamespaceHints.cs | 2 +- .../Config/Hints/TypeHints.cs | 2 +- .../Config/PythonGeneratorOptions.cs | 2 +- .../ConversionMode.cs | 2 +- .../GenerationListHelper.cs | 2 +- .../Generators/IPythonDocstringGenerator.cs | 2 +- .../Generators/IPythonEnumValueGenerator.cs | 2 +- .../Generators/IPythonGenerator.cs | 2 +- .../Generators/IPythonMethodGenerator.cs | 2 +- .../Generators/IPythonPropertyGenerator.cs | 2 +- .../Generators/IPythonTypeGenerator.cs | 2 +- .../Generators/PythonDocstringGenerator.cs | 2 +- .../Generators/PythonEnumValueGenerator.cs | 2 +- .../Generators/PythonGenerator.cs | 2 +- .../Generators/PythonMemberGenerator.cs | 4 +- .../Generators/PythonMethodGenerator.cs | 2 +- .../Generators/PythonPropertyGenerator.cs | 2 +- .../Generators/PythonTypeGenerator.cs | 2 +- .../INamedTypeSymbolExtensions.cs | 2 +- .../ITypeSymbolExtensions.cs | 2 +- .../IndentingStringBuilder.cs | 2 +- .../Keywords/Dotnet/Namespaces.cs | 2 +- .../Keywords/Dotnet/TypeAliases.cs | 2 +- .../Keywords/Dotnet/Types.cs | 2 +- .../Keywords/Python/Modules.cs | 2 +- .../Keywords/Python/Types.cs | 2 +- .../Program.cs | 2 +- .../PythonArgDocstring.cs | 2 +- .../PythonDocstring.cs | 2 +- .../PythonEnumValue.cs | 2 +- .../PythonGenerationList.cs | 3 +- .../PythonGeneratorService.cs | 2 +- .../PythonMethod.cs | 2 +- .../PythonMethodArgument.cs | 2 +- .../PythonProperty.cs | 2 +- .../PythonTestGenerationList.cs | 2 +- .../PythonType.cs | 2 +- .../PythonTypeCache.cs | 2 +- .../PythonTypeReference.cs | 2 +- .../StringExtensions.cs | 2 +- .../Tableau.Migration.PythonGenerator.csproj | 6 +- .../Writers/GeneratedPythonSegment.cs | 2 +- .../Writers/IPythonClassTestWriter.cs | 2 +- .../Writers/IPythonConstructorTestWriter.cs | 2 +- .../Writers/IPythonDocstringWriter.cs | 2 +- .../Writers/IPythonEnumValueWriter.cs | 2 +- .../Writers/IPythonMethodWriter.cs | 2 +- .../Writers/IPythonPropertyTestWriter.cs | 2 +- .../Writers/IPythonPropertyWriter.cs | 2 +- .../Writers/IPythonTestWriter.cs | 2 +- .../Writers/IPythonTypeWriter.cs | 2 +- .../Writers/IPythonWriter.cs | 2 +- .../Writers/Imports/ImportedModule.cs | 2 +- .../Writers/Imports/ImportedType.cs | 2 +- .../Writers/PythonClassTestWriter.cs | 2 +- .../Writers/PythonConstructorTestWriter.cs | 2 +- .../Writers/PythonDocstringWriter.cs | 2 +- .../Writers/PythonEnumValueWriter.cs | 2 +- .../Writers/PythonMemberWriter.cs | 2 +- .../Writers/PythonMethodWriter.cs | 2 +- .../Writers/PythonPropertyTestWriter.cs | 2 +- .../Writers/PythonPropertyWriter.cs | 19 +- .../Writers/PythonTestWriter.cs | 2 +- .../Writers/PythonTypeWriter.cs | 2 +- .../Writers/PythonWriter.cs | 2 +- .../Writers/PythonWriterBase.cs | 2 +- .../packages.lock.json | 566 +++--- src/Tableau.Migration/Api/ApiClient.cs | 2 +- src/Tableau.Migration/Api/ApiClientBase.cs | 2 +- src/Tableau.Migration/Api/ApiClientInput.cs | 2 +- .../AuthenticationConfigurationsApiClient.cs | 2 +- .../Api/AuthenticationTokenProvider.cs | 2 +- .../Api/ClientXml/Models/FailedLogin.cs | 2 +- .../Api/ClientXml/Models/SuccessfulLogin.cs | 2 +- .../Models/SuccessfulOrFailedLogin.cs | 2 +- .../Api/ConnectionManager.cs | 2 +- .../Api/ContentApiClientBase.cs | 17 +- .../Api/CustomViewsApiClient.cs | 36 +- .../Api/DataSourcesApiClient.cs | 53 +- .../EmbeddedCredentialsApiClient.cs | 2 +- .../EmbeddedCredentialsApiClientFactory.cs | 2 +- .../IEmbeddedCredentialsApiClient.cs | 2 +- .../IEmbeddedCredentialsApiClientFactory.cs | 2 +- .../IEmbeddedCredentialsContentApiClient.cs | 2 +- .../Api/FavoritesApiClient.cs | 5 +- src/Tableau.Migration/Api/FlowsApiClient.cs | 40 +- .../Api/GroupSetsApiClient.cs | 34 +- src/Tableau.Migration/Api/GroupsApiClient.cs | 40 +- .../Api/GroupsResponseExtensions.cs | 2 +- src/Tableau.Migration/Api/IApiClient.cs | 2 +- src/Tableau.Migration/Api/IApiClientInput.cs | 2 +- .../Api/IApiClientInputInitializer.cs | 2 +- src/Tableau.Migration/Api/IApiContentUrl.cs | 2 +- .../IAuthenticationConfigurationsApiClient.cs | 2 +- .../Api/IAuthenticationTokenProvider.cs | 2 +- .../Api/IBatchPublishApiClient.cs | 2 +- .../Api/ICloudSubscriptionsApiClient.cs | 6 +- .../Api/ICloudTasksApiClient.cs | 3 +- .../Api/IConnectionManager.cs | 2 +- .../Api/IConnectionsApiClient.cs | 2 +- .../Api/IContentApiClient.cs | 2 +- .../Api/IContentFileStoreExtensions.cs | 2 +- ...ContentReferenceFinderFactoryExtensions.cs | 36 +- .../Api/IContentUrlSearchApiClient.cs | 45 + .../Api/ICustomViewsApiClient.cs | 24 +- .../Api/IDataSourcesApiClient.cs | 41 +- src/Tableau.Migration/Api/IDeleteApiClient.cs | 2 +- .../Api/IFavoritesApiClient.cs | 2 +- .../Api/IFilteredPagedListApiClient.cs | 51 + src/Tableau.Migration/Api/IFlowsApiClient.cs | 15 +- .../Api/IGroupSetsApiClient.cs | 7 +- src/Tableau.Migration/Api/IGroupsApiClient.cs | 18 +- .../Api/IHttpRequestBuilderExtensions.cs | 2 +- .../Api/IHttpResponseMessageExtensions.cs | 2 +- src/Tableau.Migration/Api/IJobsApiClient.cs | 2 +- .../Api/INameSearchApiClient.cs | 51 + .../Api/IOwnershipApiClient.cs | 2 +- .../Api/IPagedListApiClient.cs | 2 +- .../Api/IProjectsApiClient.cs | 7 +- .../Api/IPublishApiClient.cs | 2 +- src/Tableau.Migration/Api/IPullApiClient.cs | 2 +- src/Tableau.Migration/Api/IReadApiClient.cs | 2 +- .../IRestRequestBuilderFactoryExtensions.cs | 2 +- .../Api/ISchedulesApiClient.cs | 2 +- .../Api/ISchedulesApiClientFactory.cs | 2 +- .../Api/IScopedApiClientFactory.cs | 2 +- .../Api/IServerSessionProvider.cs | 2 +- .../Api/IServerSubscriptionsApiClient.cs | 7 +- .../Api/IServerTasksApiClient.cs | 4 +- .../Api/IServiceCollectionExtensions.cs | 8 +- src/Tableau.Migration/Api/ISitesApiClient.cs | 16 +- .../Api/ISubscriptionsApiClient.cs | 2 +- .../Api/ITableauServerVersionProvider.cs | 2 +- src/Tableau.Migration/Api/ITasksApiClient.cs | 2 +- src/Tableau.Migration/Api/IUsersApiClient.cs | 17 +- src/Tableau.Migration/Api/IViewsApiClient.cs | 5 +- .../Api/IViewsApiClientFactory.cs | 2 +- src/Tableau.Migration/Api/IWorkbookView.cs | 64 + .../Api/IWorkbooksApiClient.cs | 35 +- src/Tableau.Migration/Api/JobsApiClient.cs | 2 +- .../Api/Labels/ILabelsApiClient.cs | 2 +- .../Api/Labels/ILabelsApiClientFactory.cs | 2 +- .../Api/Labels/ILabelsContentApiClient.cs | 2 +- .../Api/Labels/LabelsApiClient.cs | 2 +- .../Api/Labels/LabelsApiClientFactory.cs | 2 +- .../Api/Models/AddUserResult.cs | 2 +- .../Api/Models/AddUserToGroupResult.cs | 2 +- .../Api/Models/ApplyKeychainOptions.cs | 2 +- .../Cloud/CreateExtractRefreshTaskOptions.cs | 2 +- .../Models/Cloud/CreateSubscriptionOptions.cs | 2 +- .../Cloud/ICreateExtractRefreshTaskOptions.cs | 2 +- .../Cloud/ICreateSubscriptionOptions.cs | 2 +- .../Api/Models/CreateProjectOptions.cs | 2 +- .../CustomViewAsUserDefaultViewResult.cs | 2 +- .../Api/Models/DestinationSiteInfo.cs | 2 +- .../EmbeddedCredentialKeychainResult.cs | 2 +- .../Api/Models/FailedJobException.cs | 2 +- .../Api/Models/FileDownload.cs | 2 +- .../Api/Models/IAddUserResult.cs | 2 +- .../Api/Models/IAddUserToGroupResult.cs | 2 +- .../Api/Models/IApplyKeychainOptions.cs | 2 +- .../Api/Models/ICreateProjectOptions.cs | 2 +- .../ICustomViewAsUserDefaultViewResult.cs | 2 +- .../Api/Models/IDestinationSiteInfo.cs | 2 +- .../IEmbeddedCredentialKeychainResult.cs | 2 +- .../Api/Models/IImportJob.cs | 2 +- src/Tableau.Migration/Api/Models/IJob.cs | 2 +- .../Api/Models/IKeychainUserMapping.cs | 2 +- .../Api/Models/ILabelUpdateOptions.cs | 2 +- .../Api/Models/IPublishCustomViewOptions.cs | 2 +- .../Api/Models/IPublishDataSourceOptions.cs | 2 +- .../Api/Models/IPublishFileOptions.cs | 2 +- .../Api/Models/IPublishFlowOptions.cs | 2 +- .../Api/Models/IPublishWorkbookOptions.cs | 2 +- .../Api/Models/IServerInfo.cs | 2 +- .../Api/Models/ISignInResult.cs | 2 +- .../Api/Models/IStatusNote.cs | 2 +- .../Api/Models/IUpdateConnectionOptions.cs | 2 +- .../Api/Models/IUpdateDataSourceResult.cs | 2 +- .../Api/Models/IUpdateProjectResult.cs | 2 +- .../Api/Models/IUpdateUserResult.cs | 2 +- .../Api/Models/IUpdateWorkbookResult.cs | 2 +- .../Api/Models/IUserExtensions.cs | 2 +- src/Tableau.Migration/Api/Models/ImportJob.cs | 2 +- src/Tableau.Migration/Api/Models/Job.cs | 2 +- .../Api/Models/KeychainUserMapping.cs | 2 +- .../Api/Models/LabelUpdateOptions.cs | 2 +- .../Api/Models/PublishCustomViewOptions.cs | 2 +- .../Api/Models/PublishDataSourceOptions.cs | 2 +- .../Api/Models/PublishFileOptionsBase.cs | 2 +- .../Api/Models/PublishFlowOptions.cs | 2 +- .../Api/Models/PublishWorkbookOptions.cs | 2 +- .../Api/Models/ServerInfo.cs | 2 +- .../Api/Models/SignInResult.cs | 2 +- .../Api/Models/StatusNote.cs | 2 +- .../Api/Models/TimeoutJobException.cs | 2 +- .../Api/Models/UpdateConnectionOptions.cs | 2 +- .../Api/Models/UpdateDataSourceResult.cs | 2 +- .../Api/Models/UpdateProjectResult.cs | 2 +- .../Api/Models/UpdateUserResult.cs | 2 +- .../Api/Models/UpdateWorkbookResult.cs | 2 +- .../Api/Paging/ApiFilteredListPager.cs | 42 + .../Api/{ => Paging}/ApiListPager.cs | 6 +- .../Api/{ => Paging}/FavoritesApiListPager.cs | 4 +- .../Api/Paging/IApiFilteredPageAccessor.cs | 42 + .../Api/{ => Paging}/IApiPageAccessor.cs | 4 +- .../Api/Paging/ProjectFilteredListPager.cs | 76 + .../DefaultPermissionsApiClient.cs | 2 +- .../IDefaultPermissionsApiClient.cs | 2 +- .../Api/Permissions/IPermissionsApiClient.cs | 2 +- .../IPermissionsApiClientFactory.cs | 2 +- .../IPermissionsContentApiClient.cs | 2 +- .../Api/Permissions/PermissionsApiClient.cs | 34 +- .../PermissionsApiClientFactory.cs | 8 +- .../Api/ProjectsApiClient.cs | 23 +- .../Api/Publishing/CustomViewPublisher.cs | 2 +- .../Api/Publishing/DataSourcePublisher.cs | 2 +- .../Api/Publishing/FilePublisherBase.cs | 13 +- .../Api/Publishing/FlowPublisher.cs | 2 +- .../Api/Publishing/ICustomViewPublisher.cs | 2 +- .../Api/Publishing/IDataSourcePublisher.cs | 2 +- .../Api/Publishing/IFilePublisher.cs | 2 +- .../Api/Publishing/IFlowPublisher.cs | 2 +- .../Api/Publishing/IWorkbookPublisher.cs | 2 +- .../Api/Publishing/WorkbookPublisher.cs | 2 +- .../Api/RefreshAuthenticationTokenDelegate.cs | 2 +- .../Api/Rest/ContentItemUriBuilderBase.cs | 2 +- .../Api/Rest/INamedContent.cs | 2 +- .../Api/Rest/IPermissionsUriBuilder.cs | 2 +- .../Api/Rest/IProjectsResponseApiClient.cs | 2 +- .../Api/Rest/IRestIdentifiable.cs | 2 +- .../Api/Rest/Models/AdministratorLevels.cs | 2 +- .../Api/Rest/Models/ContentPermissions.cs | 2 +- .../CustomViewDefaultUsersResponsePager.cs | 2 +- .../Api/Rest/Models/Error.cs | 2 +- .../Api/Rest/Models/ExtractEncryptionModes.cs | 2 +- .../Rest/Models/GroupUsersResponsePager.cs | 2 +- .../Api/Rest/Models/IConnectionType.cs | 2 +- .../Api/Rest/Models/ICustomViewType.cs | 2 +- .../Api/Rest/Models/IDataSourceDetailsType.cs | 2 +- .../Api/Rest/Models/IDataSourceType.cs | 8 +- .../Api/Rest/Models/IFavoriteType.cs | 2 +- .../Rest/Models/IFavoriteTypeExtensions.cs | 2 +- .../Api/Rest/Models/IFlowType.cs | 2 +- .../Api/Rest/Models/IGroupSetType.cs | 2 +- .../Api/Rest/Models/ILocationType.cs | 2 +- .../Rest/Models/IProjectNamedReferenceType.cs | 2 +- .../Api/Rest/Models/IProjectReferenceType.cs | 2 +- .../Api/Rest/Models/IProjectType.cs | 2 +- .../Api/Rest/Models/IProjectTypeExtensions.cs | 2 +- .../Api/Rest/Models/IScheduleType.cs | 2 +- .../Api/Rest/Models/ISubscriptionType.cs | 2 +- .../Rest/Models/ITableauServerListResponse.cs | 2 +- .../Api/Rest/Models/ITableauServerResponse.cs | 2 +- .../ITableauServerWithParentResponse.cs | 2 +- .../Api/Rest/Models/ITagType.cs | 2 +- .../Api/Rest/Models/IUserType.cs | 2 +- .../Api/Rest/Models/IUserTypeExtensions.cs | 2 +- .../Api/Rest/Models/IViewReferenceType.cs | 2 +- .../Api/Rest/Models/IViewType.cs | 28 +- .../Models/IWithDataSourceReferenceType.cs | 2 +- .../Api/Rest/Models/IWithOwnerType.cs | 2 +- .../Models/IWithProjectNamedReferenceType.cs | 2 +- .../Rest/Models/IWithProjectReferenceType.cs | 2 +- .../Rest/Models/IWithScheduleReferenceType.cs | 2 +- .../Api/Rest/Models/IWithTagTypes.cs | 2 +- .../Models/IWithWorkbookNamedReferenceType.cs | 2 +- .../Rest/Models/IWithWorkbookReferenceType.cs | 2 +- .../Api/Rest/Models/IWorkbookDetailsType.cs | 2 +- .../Models/IWorkbookNamedReferenceType.cs | 2 +- .../Api/Rest/Models/IWorkbookReferenceType.cs | 2 +- .../Api/Rest/Models/IWorkbookType.cs | 2 +- .../Rest/Models/IWorkbookViewReferenceType.cs | 2 +- .../Api/Rest/Models/IWorkbookViewType.cs | 34 + .../Api/Rest/Models/LabelCategories.cs | 2 +- .../Api/Rest/Models/LabelContentTypes.cs | 2 +- .../Api/Rest/Models/LicenseLevels.cs | 2 +- .../Api/Rest/Models/Pagination.cs | 2 +- .../Api/Rest/Models/ParentContentTypeNames.cs | 2 +- .../Rest/Models/PermissionsCapabilityModes.cs | 2 +- .../Rest/Models/PermissionsCapabilityNames.cs | 2 +- .../Models/Requests/AddFavoriteRequest.cs | 2 +- .../Rest/Models/Requests/AddTagsRequest.cs | 2 +- .../Models/Requests/AddUserToGroupRequest.cs | 2 +- .../Models/Requests/AddUserToSiteRequest.cs | 2 +- .../Models/Requests/ApplyKeychainRequest.cs | 2 +- .../Cloud/CreateExtractRefreshTaskRequest.cs | 2 +- .../Cloud/CreateSubscriptionRequest.cs | 2 +- .../Cloud/UpdateSubscriptionRequest.cs | 2 +- .../CommitCustomViewPublishRequest.cs | 2 +- .../CommitDataSourcePublishRequest.cs | 2 +- .../Requests/CommitFlowPublishRequest.cs | 2 +- .../Requests/CommitWorkbookPublishRequest.cs | 2 +- .../Models/Requests/CreateGroupSetRequest.cs | 2 +- .../Requests/CreateLocalGroupRequest.cs | 2 +- .../Models/Requests/CreateProjectRequest.cs | 2 +- .../Rest/Models/Requests/GetLabelsRequest.cs | 2 +- .../Models/Requests/ImportGroupRequest.cs | 2 +- .../Requests/ImportUsersFromCsvRequest.cs | 2 +- .../Models/Requests/PermissionsAddRequest.cs | 2 +- .../Requests/RetrieveKeychainRequest.cs | 2 +- .../RetrieveUserSavedCredentialsRequest.cs | 2 +- .../SetCustomViewDefaultUsersRequest.cs | 2 +- .../Api/Rest/Models/Requests/SignInRequest.cs | 2 +- .../Models/Requests/TableauServerRequest.cs | 2 +- .../Requests/UpdateConnectionRequest.cs | 2 +- .../Requests/UpdateCustomViewRequest.cs | 2 +- .../Requests/UpdateDataSourceRequest.cs | 2 +- .../Models/Requests/UpdateLabelsRequest.cs | 2 +- .../Models/Requests/UpdateProjectRequest.cs | 2 +- .../Rest/Models/Requests/UpdateSiteRequest.cs | 2 +- .../Rest/Models/Requests/UpdateUserRequest.cs | 2 +- .../Models/Requests/UpdateWorkbookRequest.cs | 2 +- .../Requests/UploadSavedCredentialsRequest.cs | 2 +- .../Rest/Models/Responses/AddTagsResponse.cs | 2 +- .../Rest/Models/Responses/AddUserResponse.cs | 2 +- .../Cloud/CreateExtractRefreshTaskResponse.cs | 2 +- .../Cloud/CreateSubscriptionResponse.cs | 2 +- .../Cloud/ExtractRefreshTaskResponse.cs | 199 +++ .../Cloud/ExtractRefreshTasksResponse.cs | 2 +- .../Cloud/GetSubscriptionResponse.cs | 282 +++ .../Cloud/GetSubscriptionsResponse.cs | 2 +- .../Cloud/ICloudExtractRefreshType.cs | 2 +- .../Responses/Cloud/ICloudScheduleType.cs | 2 +- .../Cloud/UpdateSubscriptionResponse.cs | 2 +- .../Models/Responses/CollectionsResponse.cs | 2 +- .../Models/Responses/ConnectionResponse.cs | 2 +- .../Models/Responses/ConnectionsResponse.cs | 2 +- .../Models/Responses/CreateGroupResponse.cs | 2 +- .../Responses/CreateGroupSetResponse.cs | 2 +- .../Models/Responses/CreateProjectResponse.cs | 2 +- .../CustomViewAsUsersDefaultViewResponse.cs | 2 +- .../Models/Responses/CustomViewResponse.cs | 2 +- .../Models/Responses/CustomViewsResponse.cs | 2 +- .../Models/Responses/DataSourceResponse.cs | 9 +- .../Models/Responses/DataSourcesResponse.cs | 9 +- .../Responses/EmptyTableauServerResponse.cs | 2 +- .../Models/Responses/FavoritesResponse.cs | 2 +- .../Models/Responses/FileUploadResponse.cs | 2 +- .../Api/Rest/Models/Responses/FlowResponse.cs | 2 +- .../Rest/Models/Responses/FlowsResponse.cs | 2 +- .../Rest/Models/Responses/GroupResponse.cs | 2 +- .../Rest/Models/Responses/GroupSetResponse.cs | 2 +- .../Models/Responses/GroupSetsResponse.cs | 2 +- .../Rest/Models/Responses/GroupsResponse.cs | 2 +- .../Models/Responses/IExtractRefreshType.cs | 2 +- .../IExtractRefreshTypeExtensions.cs | 2 +- .../IScheduleFrequencyDetailsType.cs | 2 +- .../Models/Responses/IScheduleIntervalType.cs | 2 +- .../Responses/IScheduleReferenceType.cs | 2 +- .../Responses/ISubscriptionContentType.cs | 2 +- .../ISubscriptionContentTypeExtensions.cs | 40 + .../Models/Responses/ImportJobResponse.cs | 2 +- .../Api/Rest/Models/Responses/JobResponse.cs | 2 +- .../Rest/Models/Responses/LabelsResponse.cs | 2 +- .../Rest/Models/Responses/MetricsResponse.cs | 2 +- .../Responses/PagedTableauServerResponse.cs | 2 +- .../Models/Responses/PermissionsResponse.cs | 2 +- .../Rest/Models/Responses/ProjectsResponse.cs | 2 +- .../Responses/RetrieveKeychainResponse.cs | 2 +- .../RetrieveSavedCredentialsResponse.cs | 2 +- .../Server/ExtractRefreshTaskResponse.cs | 176 ++ .../Server/ExtractRefreshTasksResponse.cs | 2 +- .../Server/GetSubscriptionResponse.cs | 168 ++ .../Server/GetSubscriptionsResponse.cs | 8 +- .../Server/IServerExtractRefreshType.cs | 2 +- .../Responses/Server/IServerScheduleType.cs | 2 +- .../ScheduleExtractRefreshTasksResponse.cs | 2 +- .../Responses/Server/ScheduleResponse.cs | 2 +- .../Models/Responses/ServerInfoResponse.cs | 2 +- .../Models/Responses/ServerSessionResponse.cs | 2 +- .../Rest/Models/Responses/SignInResponse.cs | 2 +- .../SiteAuthConfigurationsResponse.cs | 2 +- .../Api/Rest/Models/Responses/SiteResponse.cs | 2 +- .../Rest/Models/Responses/SitesResponse.cs | 2 +- .../Responses/TableauServerListResponse.cs | 2 +- .../Models/Responses/TableauServerResponse.cs | 2 +- .../Responses/UpdateCustomViewResponse.cs | 2 +- .../Responses/UpdateDataSourceResponse.cs | 2 +- .../Models/Responses/UpdateProjectResponse.cs | 2 +- .../Models/Responses/UpdateUserResponse.cs | 2 +- .../Responses/UpdateWorkbookResponse.cs | 2 +- .../Api/Rest/Models/Responses/UserResponse.cs | 2 +- .../Rest/Models/Responses/UsersResponse.cs | 2 +- ...sersWithCustomViewAsDefaultViewResponse.cs | 2 +- .../Api/Rest/Models/Responses/ViewResponse.cs | 2 +- .../Responses/VirtualConnectionsResponse.cs | 2 +- .../Rest/Models/Responses/WorkbookResponse.cs | 2 +- .../Models/Responses/WorkbookViewsResponse.cs | 118 ++ .../Models/Responses/WorkbooksResponse.cs | 2 +- .../Api/Rest/Models/RestProjectBuilder.cs | 4 +- .../Rest/Models/RestProjectBuilderPager.cs | 2 +- .../Rest/Models/RestProjectResponsePager.cs | 2 +- ...cheduleExtractRefreshTasksResponsePager.cs | 2 +- .../Api/Rest/Models/SiteRoleMapping.cs | 2 +- .../Api/Rest/Models/SiteRoleMappingItem.cs | 2 +- .../Api/Rest/Models/SiteRoles.cs | 2 +- .../Rest/Models/Types/AuthenticationTypes.cs | 2 +- .../Api/Rest/Models/Types/CapabilityType.cs | 2 +- .../Rest/Models/Types/CustomViewFileTypes.cs | 2 +- .../Rest/Models/Types/DataSourceFileTypes.cs | 2 +- .../Rest/Models/Types/ExtractRefreshType.cs | 2 +- .../Api/Rest/Models/Types/FlowFileTypes.cs | 2 +- .../Models/Types/GranteeCapabilityType.cs | 67 +- .../Rest/Models/Types/ParentContentType.cs | 2 +- .../Types/PermissionsContentItemType.cs | 2 +- .../Api/Rest/Models/Types/PermissionsType.cs | 2 +- .../Rest/Models/Types/ScheduleFrequencies.cs | 2 +- .../Api/Rest/Models/Types/ScheduleTypes.cs | 2 +- .../Api/Rest/Models/Types/WeekDays.cs | 2 +- .../Rest/Models/Types/WorkbookFileTypes.cs | 2 +- .../Api/Rest/PermissionsUriBuilder.cs | 2 +- .../Api/Rest/RestErrorCodes.cs | 2 +- .../Api/Rest/RestException.cs | 2 +- .../Api/Rest/RestUrlKeywords.cs | 2 +- .../Api/Rest/RestUrlPrefixes.cs | 2 +- .../Api/Rest/StringExtensions.cs | 2 +- .../Api/Rest/TagsUriBuilder.cs | 2 +- .../Api/SchedulesApiClient.cs | 2 +- .../Api/SchedulesApiClientFactory.cs | 2 +- .../Api/ScopedApiClientFactory.cs | 8 +- .../Search/ApiContentReferenceCacheBase.cs | 45 + .../ApiContentReferenceFinderFactory.cs | 2 +- .../Api/Search/ApiContentReferenceStore.cs | 127 ++ ...ContentCache.cs => BulkApiContentCache.cs} | 34 +- .../Search/BulkApiContentReferenceCache.cs | 99 +- .../Api/ServerSessionProvider.cs | 2 +- .../ITableauApiSimulatorCollection.cs | 2 +- .../Simulation/ITableauApiSimulatorFactory.cs | 2 +- .../Rest/Api/AuthRestApiSimulator.cs | 2 +- .../Rest/Api/CustomViewsRestApiSimulator.cs | 2 +- .../Rest/Api/DataSourcesRestApiSimulator.cs | 2 +- ...EmbeddedCredentialsRestApiSimulatorBase.cs | 2 +- .../Rest/Api/FavoritesRestApiSimulator.cs | 2 +- .../Rest/Api/FileUploadsRestApiSimulator.cs | 2 +- .../Rest/Api/GroupSetsRestApiSimulator.cs | 2 +- .../Rest/Api/GroupsRestApiSimulator.cs | 2 +- .../Rest/Api/JobsRestApiSimulator.cs | 2 +- .../Api/PermissionsRestApiSimulatorBase.cs | 2 +- .../Rest/Api/ProjectsRestApiSimulator.cs | 2 +- .../Rest/Api/SchedulesRestApiSimulator.cs | 2 +- .../Rest/Api/SitesRestApiSimulator.cs | 2 +- .../Rest/Api/SubscriptionsRestApiSimulator.cs | 2 +- .../Rest/Api/TagsRestApiSimulatorBase.cs | 2 +- .../Rest/Api/TasksRestApiSimulator.cs | 2 +- .../Rest/Api/UsersRestApiSimulator.cs | 2 +- .../Rest/Api/ViewsRestApiSimulator.cs | 25 +- .../Rest/Api/WorkbooksRestApiSimulator.cs | 64 +- .../Rest/MethodSimulatorExtensions.cs | 2 +- .../Rest/Net/HttpStatusCodeExtensions.cs | 2 +- .../Rest/Net/Requests/FilterExtensions.cs | 2 +- .../Requests/HttpRequestMessageExtensions.cs | 2 +- .../Net/Requests/RestApiRequestMatcher.cs | 2 +- .../Rest/Net/Requests/RestUrlPatterns.cs | 2 +- .../Rest/Net/Requests/UriExtensions.cs | 2 +- .../Rest/Net/ResponseSimulatorExtensions.cs | 2 +- .../Net/Responses/BuildResponseException.cs | 2 +- .../Net/Responses/EmptyRestResponseBuilder.cs | 2 +- .../Net/Responses/IEntityResponsePager.cs | 2 +- .../Net/Responses/IRestApiResponseBuilder.cs | 2 +- .../IRestApiResponseBuilderExtensions.cs | 2 +- .../Rest/Net/Responses/IRestErrorBuilder.cs | 2 +- .../RestAddFavoriteResponseBuilder.cs | 2 +- ...stCommitCustomViewUploadResponseBuilder.cs | 2 +- ...stCommitDataSourceUploadResponseBuilder.cs | 2 +- .../RestCommitUploadResponseBuilder.cs | 2 +- ...RestCommitWorkbookUploadResponseBuilder.cs | 2 +- .../RestCreateSubscriptionResponseBuilder.cs | 2 +- ...ustomViewDefaultUsersAddResponseBuilder.cs | 2 +- ...DefaultPermissionsCreateResponseBuilder.cs | 2 +- .../RestDeleteByIdResponseBuilder.cs | 2 +- .../Responses/RestDeleteResponseBuilder.cs | 2 +- .../RestDownloadFileByIdResponseBuilder.cs | 2 +- .../RestEntityIdResponseBuilderBase.cs | 2 +- .../RestEntityListResponseBuilderBase.cs | 2 +- .../Net/Responses/RestEntityResponsePager.cs | 2 +- ...ExtractRefreshTaskCreateResponseBuilder.cs | 2 +- .../RestGetByContentUrlResponseBuilder.cs | 2 +- .../Responses/RestGetByIdResponseBuilder.cs | 2 +- .../RestGetFavoritesForUserResponseBuilder.cs | 2 +- .../Responses/RestGetSitesResponseBuilder.cs | 2 +- .../Responses/RestGroupAddResponseBuilder.cs | 2 +- .../RestGroupSetCreateResponseBuilder.cs | 2 +- .../RestInitiateFileUploadResponseBuilder.cs | 2 +- .../Net/Responses/RestListResponseBuilder.cs | 2 +- .../Responses/RestPagedListResponseBuilder.cs | 2 +- .../RestPermissionsCreateResponseBuilder.cs | 2 +- .../RestPermissionsGetResponseBuilder.cs | 2 +- .../RestPostEntityResponseBuilder.cs | 2 +- .../RestProjectCreateResponseBuilder.cs | 2 +- .../Responses/RestPutByIdResponseBuilder.cs | 2 +- .../Responses/RestRequestResponseBuilder.cs | 2 +- .../Net/Responses/RestResponseBuilderBase.cs | 2 +- .../RestSearchEntityResponseBuilderBase.cs | 2 +- .../RestSingleEntityResponseBuilder.cs | 2 +- .../RestUpdateConnectionResponseBuilder.cs | 2 +- .../RestUpdateFileUploadResponseBuilder.cs | 2 +- .../RestUpdateSubscriptionResponseBuilder.cs | 2 +- .../Responses/RestUserAddResponseBuilder.cs | 2 +- .../RestUserAddToGroupResponseBuilder.cs | 2 +- .../RestUserImportResponseBuilder.cs | 2 +- .../RestUserUpdateResponseBuilder.cs | 2 +- .../Net/Responses/StaticRestErrorBuilder.cs | 2 +- .../Responses/UnauthorizedRestErrorBuilder.cs | 2 +- .../Api/Simulation/Rest/RestApiSimulator.cs | 2 +- .../Api/Simulation/SimulatedConnection.cs | 2 +- .../SimulatedConnectionCredentials.cs | 2 +- .../Api/Simulation/SimulatedCustomViewData.cs | 2 +- .../Api/Simulation/SimulatedDataSourceData.cs | 2 +- .../SimulatedDataWithConnections.cs | 2 +- .../Api/Simulation/SimulatedWorkbookData.cs | 2 +- .../Simulation/TableauApiResponseSimulator.cs | 2 +- .../TableauApiResponseSimulatorProvider.cs | 2 +- .../Api/Simulation/TableauApiSimulator.cs | 2 +- .../TableauApiSimulatorCollection.cs | 2 +- .../Simulation/TableauApiSimulatorFactory.cs | 2 +- .../Api/Simulation/TableauData.cs | 2 +- src/Tableau.Migration/Api/SitesApiClient.cs | 10 +- .../Api/SubscriptionsApiClient.cs | 218 ++- .../Api/TableauServerVersion.cs | 2 +- .../Api/TableauServerVersionProvider.cs | 2 +- .../Api/TableauSiteConnectionConfiguration.cs | 6 +- .../Api/Tags/ITagsApiClient.cs | 2 +- .../Api/Tags/ITagsApiClientFactory.cs | 2 +- .../Api/Tags/ITagsContentApiClient.cs | 2 +- .../Api/Tags/TagsApiClient.cs | 2 +- .../Api/Tags/TagsApiClientFactory.cs | 2 +- src/Tableau.Migration/Api/TasksApiClient.cs | 51 +- src/Tableau.Migration/Api/UsersApiClient.cs | 64 +- .../Api/UsersResponseExtensions.cs | 2 +- src/Tableau.Migration/Api/ViewsApiClient.cs | 26 +- .../Api/ViewsApiClientFactory.cs | 11 +- src/Tableau.Migration/Api/WorkbookView.cs | 66 + .../Api/WorkbooksApiClient.cs | 83 +- .../AsyncDisposableResult.cs | 2 +- src/Tableau.Migration/ComparerBase.cs | 2 +- .../ConcurrentDictionaryExtensions.cs | 2 +- src/Tableau.Migration/Config/CacheOptions.cs | 2 +- src/Tableau.Migration/Config/ConfigReader.cs | 2 +- .../Config/ContentTypesOptions.cs | 18 +- .../DefaultPermissionsContentTypeOptions.cs | 2 +- src/Tableau.Migration/Config/FileOptions.cs | 2 +- src/Tableau.Migration/Config/IConfigReader.cs | 2 +- src/Tableau.Migration/Config/JobOptions.cs | 2 +- .../Config/MigrationSDKOptions.cs | 2 +- .../Config/NetworkOptions.cs | 2 +- .../Config/PreflightOptions.cs | 2 +- .../Config/ResilienceOptions.cs | 2 +- .../Config/UniqueContentTypesValidator.cs | 2 +- src/Tableau.Migration/Constants.cs | 12 +- .../Content/AuthenticationConfiguration.cs | 2 +- .../Content/CloudSubscription.cs | 24 +- .../Content/ConcurrentSet.cs | 2 +- src/Tableau.Migration/Content/Connection.cs | 2 +- .../Content/ContainerContentBase.cs | 2 +- src/Tableau.Migration/Content/ContentBase.cs | 2 +- .../Content/ContentLocationComparer.cs | 2 +- .../Content/ContentReferenceStub.cs | 2 +- src/Tableau.Migration/Content/CustomView.cs | 2 +- src/Tableau.Migration/Content/DataSource.cs | 9 +- .../Content/DataSourceDetails.cs | 2 +- src/Tableau.Migration/Content/Favorite.cs | 2 +- .../Content/FavoriteContentType.cs | 7 +- .../Content/FavoriteContentTypeExtensions.cs | 2 +- .../Content/Files/Aes256EncryptionFactory.cs | 2 +- .../Content/Files/ContentFileHandle.cs | 2 +- .../Content/Files/ContentFileStream.cs | 2 +- .../Files/ContentTypeDirectoryNames.cs | 2 +- .../Files/ContentTypeFilePathResolver.cs | 2 +- .../Content/Files/ContentTypeFilePrefixes.cs | 2 +- .../Files/DirectoryContentFileStore.cs | 2 +- .../Content/Files/EncryptedFileHandle.cs | 2 +- .../Content/Files/EncryptedFileStore.cs | 2 +- .../Content/Files/EncryptedFileStream.cs | 2 +- .../Content/Files/IContentFileHandle.cs | 2 +- .../Files/IContentFileHandleExtensions.cs | 2 +- .../Content/Files/IContentFilePathResolver.cs | 2 +- .../Content/Files/IContentFileStore.cs | 2 +- .../Content/Files/IContentFileStream.cs | 2 +- .../Files/ISymmetricEncryptionFactory.cs | 2 +- .../Content/Files/ITableauFileEditor.cs | 2 +- .../Content/Files/ITableauFileXmlStream.cs | 2 +- .../Content/Files/SeekableCryptoStream.cs | 2 +- .../Content/Files/StreamExtensions.cs | 2 +- .../Content/Files/TableauFileEditor.cs | 2 +- .../Content/Files/TableauFileXmlStream.cs | 2 +- .../TemporaryDirectoryContentFileStore.cs | 2 +- .../Content/Files/Xml/XContainerExtensions.cs | 2 +- .../Content/Files/Xml/XElementExtensions.cs | 2 +- .../Content/Files/Xml/XFeatureFlagName.cs | 2 +- .../Content/Files/Xml/XNameExtensions.cs | 2 +- src/Tableau.Migration/Content/Flow.cs | 2 +- src/Tableau.Migration/Content/Group.cs | 2 +- src/Tableau.Migration/Content/GroupSet.cs | 2 +- src/Tableau.Migration/Content/GroupUser.cs | 2 +- .../Content/IAuthenticationConfiguration.cs | 2 +- .../Content/IChildPermissionsContent.cs | 2 +- .../Content/ICloudSubscription.cs | 2 +- src/Tableau.Migration/Content/IConnection.cs | 2 +- .../Content/IConnectionsContent.cs | 2 +- .../Content/IContainerContent.cs | 2 +- .../Content/IContentReferenceExtensions.cs | 2 +- src/Tableau.Migration/Content/ICustomView.cs | 2 +- src/Tableau.Migration/Content/IDataSource.cs | 3 +- .../Content/IDataSourceDetails.cs | 2 +- src/Tableau.Migration/Content/IDelible.cs | 2 +- .../Content/IDescriptionContent.cs | 2 +- .../Content/IExtractContent.cs | 2 +- src/Tableau.Migration/Content/IFavorite.cs | 4 +- src/Tableau.Migration/Content/IFileContent.cs | 2 +- src/Tableau.Migration/Content/IFlow.cs | 2 +- src/Tableau.Migration/Content/IGroup.cs | 2 +- src/Tableau.Migration/Content/IGroupSet.cs | 2 +- src/Tableau.Migration/Content/IGroupUser.cs | 2 +- src/Tableau.Migration/Content/ILabel.cs | 2 +- .../Content/IMappableContainerContent.cs | 2 +- .../Content/IMappableContent.cs | 2 +- .../Content/IPermissionsContent.cs | 2 +- src/Tableau.Migration/Content/IProject.cs | 2 +- .../Content/IPublishableCustomView.cs | 2 +- .../Content/IPublishableDataSource.cs | 2 +- .../Content/IPublishableFlow.cs | 2 +- .../Content/IPublishableGroup.cs | 2 +- .../Content/IPublishableGroupSet.cs | 2 +- .../Content/IPublishableWorkbook.cs | 2 +- .../Content/IPublishedContent.cs | 2 +- .../IRequiresEmbeddedCredentialMigration.cs | 2 +- .../Content/IRequiresLabelUpdate.cs | 2 +- .../Content/IRequiresOwnerUpdate.cs | 2 +- .../Content/IServerSession.cs | 2 +- .../Content/IServerSubscription.cs | 2 +- src/Tableau.Migration/Content/ISite.cs | 2 +- .../Content/ISiteSettings.cs | 2 +- .../Content/ISiteSettingsUpdate.cs | 2 +- .../ISizeContent.cs} | 17 +- .../Content/ISubscription.cs | 2 +- .../Content/ISubscriptionContent.cs | 18 +- .../Content/ITableauCollection.cs | 2 +- src/Tableau.Migration/Content/ITag.cs | 2 +- .../Content/ITagExtensions.cs | 2 +- src/Tableau.Migration/Content/IUser.cs | 2 +- .../Content/IUsernameContent.cs | 2 +- src/Tableau.Migration/Content/IView.cs | 5 +- .../Content/IWithConnections.cs | 2 +- src/Tableau.Migration/Content/IWithDomain.cs | 2 +- .../Content/IWithEmbeddedCredentials.cs | 2 +- src/Tableau.Migration/Content/IWithLabels.cs | 2 +- src/Tableau.Migration/Content/IWithOwner.cs | 2 +- src/Tableau.Migration/Content/IWithTags.cs | 2 +- .../Content/IWithWorkbook.cs | 2 +- src/Tableau.Migration/Content/IWorkbook.cs | 8 +- .../Content/IWorkbookDetails.cs | 2 +- src/Tableau.Migration/Content/Label.cs | 2 +- .../Content/MappableContainerContentBase.cs | 2 +- .../Content/MappableContentBase.cs | 2 +- .../Content/Permissions/Capability.cs | 2 +- ...efaultPermissionsContentTypeUrlSegments.cs | 2 +- .../Content/Permissions/GranteeCapability.cs | 20 +- .../Content/Permissions/GranteeType.cs | 9 +- .../Permissions/GranteeTypeExtensions.cs | 3 +- .../Content/Permissions/ICapability.cs | 2 +- .../Permissions/ICapabilityComparer.cs | 2 +- .../Content/Permissions/IGranteeCapability.cs | 13 +- .../IGranteeCapabilityExtensions.cs | 3 +- .../Content/Permissions/IPermissionSet.cs | 2 +- .../Content/Permissions/IPermissions.cs | 2 +- .../Content/Permissions/Permissions.cs | 15 +- src/Tableau.Migration/Content/Project.cs | 2 +- .../Content/PublishableCustomView.cs | 2 +- .../Content/PublishableDataSource.cs | 2 +- .../Content/PublishableFlow.cs | 2 +- .../Content/PublishableGroup.cs | 2 +- .../Content/PublishableGroupSet.cs | 2 +- .../Content/PublishableWorkbook.cs | 2 +- .../Cloud/CloudExtractRefreshTask.cs | 16 +- .../Content/Schedules/Cloud/CloudSchedule.cs | 2 +- .../Schedules/Cloud/CloudScheduleValidator.cs | 2 +- .../Cloud/ICloudExtractRefreshTask.cs | 2 +- .../Content/Schedules/Cloud/ICloudSchedule.cs | 2 +- .../Schedules/ExtractRefreshContentType.cs | 2 +- .../Schedules/ExtractRefreshTaskBase.cs | 2 +- .../Content/Schedules/FrequencyDetails.cs | 2 +- .../Content/Schedules/IExtractRefreshTask.cs | 2 +- .../Content/Schedules/IFrequencyDetails.cs | 2 +- .../Content/Schedules/IFrequencyExtensions.cs | 2 +- .../Content/Schedules/IInterval.cs | 2 +- .../Content/Schedules/ISchedule.cs | 2 +- .../Content/Schedules/IScheduleValidator.cs | 2 +- .../Content/Schedules/IWithSchedule.cs | 2 +- .../Content/Schedules/Interval.cs | 2 +- .../Content/Schedules/IntervalComparer.cs | 2 +- .../Content/Schedules/IntervalValues.cs | 2 +- .../Schedules/InvalidScheduleException.cs | 2 +- .../Content/Schedules/ScheduleBase.cs | 2 +- .../Content/Schedules/ScheduleComparers.cs | 2 +- .../Server/IScheduleExtractRefreshTask.cs | 2 +- .../Server/IScheduleExtractRefreshTasks.cs | 2 +- .../Server/IServerExtractRefreshTask.cs | 2 +- .../Schedules/Server/IServerSchedule.cs | 2 +- .../Server/ScheduleExtractRefreshTask.cs | 2 +- .../Server/ScheduleExtractRefreshTasks.cs | 2 +- .../Server/ServerExtractRefreshTask.cs | 16 +- .../Schedules/Server/ServerSchedule.cs | 2 +- .../Server/ServerScheduleValidator.cs | 2 +- .../Content/Schedules/VolatileCache.cs | 2 +- .../BulkContentReferenceCacheLoadStrategy.cs | 46 + .../Search/CachedContentReferenceFinder.cs | 2 +- .../Content/Search/ContentCacheFactory.cs | 2 +- .../Search/ContentReferenceCacheBase.cs | 196 ++- .../ContentReferenceCacheLoadAttempt.cs | 51 + .../Search/ContentReferenceLoadResult.cs | 50 + .../Content/Search/IContentCache.cs | 2 +- .../Content/Search/IContentCacheFactory.cs | 2 +- .../Content/Search/IContentReferenceCache.cs | 10 +- .../IContentReferenceCacheLoadAttempt.cs | 51 + .../IContentReferenceCacheLoadStrategy.cs | 40 + .../Content/Search/IContentReferenceFinder.cs | 2 +- .../Search/IContentReferenceFinderFactory.cs | 23 +- .../Content/Search/IContentReferenceStore.cs | 63 + .../LazyContentReferenceCacheLoadStrategy.cs | 45 + .../MissingContentReferenceExtensions.cs | 135 ++ .../Content/ServerSession.cs | 2 +- .../Content/ServerSessionSettings.cs | 2 +- .../Content/ServerSubscription.cs | 62 +- src/Tableau.Migration/Content/Site.cs | 2 +- .../Content/SiteSettingsUpdate.cs | 2 +- .../Content/SubscriptionBase.cs | 39 +- .../Content/SubscriptionContent.cs | 29 +- .../Content/SubscriptionContentType.cs | 40 + src/Tableau.Migration/Content/Tag.cs | 2 +- .../Content/TagLabelComparer.cs | 2 +- src/Tableau.Migration/Content/User.cs | 2 +- .../Content/UserAuthenticationType.cs | 2 +- .../Content/UsernameContentBase.cs | 2 +- src/Tableau.Migration/Content/View.cs | 2 +- src/Tableau.Migration/Content/Workbook.cs | 2 +- .../Content/WorkbookDetails.cs | 2 +- src/Tableau.Migration/ContentLocation.cs | 91 +- src/Tableau.Migration/CsvExtensions.cs | 2 +- src/Tableau.Migration/DateTimeExtensions.cs | 2 +- .../Engine/Actions/IMigrateContentAction.cs | 2 +- .../Engine/Actions/IMigrationAction.cs | 8 +- .../Engine/Actions/IMigrationActionResult.cs | 2 +- .../Engine/Actions/MigrateContentAction.cs | 5 +- .../Engine/Actions/MigrationActionResult.cs | 2 +- .../Engine/Actions/PreflightAction.cs | 5 +- .../Caching/ConfigurableMigrationCacheBase.cs | 2 +- .../Engine/Caching/IMigrationCache.cs | 2 +- .../Engine/ContentMigrationItem.cs | 2 +- .../Conversion/DirectContentItemConverter.cs | 2 +- .../ExtractRefreshTaskConverterBase.cs | 2 +- .../IExtractRefreshTaskConverter.cs | 2 +- ...erverToCloudExtractRefreshTaskConverter.cs | 2 +- .../Conversion/IContentItemConverter.cs | 2 +- .../Schedules/IScheduleConverter.cs | 2 +- .../ServerToCloudScheduleConverter.cs | 2 +- .../Subscriptions/ISubscriptionConverter.cs | 2 +- .../ServerToCloudSubscriptionConverter.cs | 2 +- .../SubscriptionConverterBase.cs | 2 +- ...ulkApiAuthenticationConfigurationsCache.cs | 4 +- ...ntentReferenceCacheLoadStrategyProvider.cs | 39 + .../Endpoints/Caching/DestinationCache.cs | 107 ++ .../DestinationProjectCache.cs} | 35 +- ...ntentReferenceCacheLoadStrategyProvider.cs | 46 + ...nationAuthenticationConfigurationsCache.cs | 4 +- .../Endpoints/Caching/IEndpointViewCache.cs | 2 +- .../Caching/IEndpointWorkbookViewsCache.cs | 2 +- .../ILockedProjectCache.cs | 4 +- ...nifestUpdateSourceContentReferenceCache.cs | 57 + .../IUserSavedCredentialsCache.cs | 4 +- ...ntentReferenceCacheLoadStrategyProvider.cs | 39 + .../Engine/Endpoints/Caching/SourceCache.cs | 145 ++ .../Caching/TableauApiEndpointViewCache.cs | 2 +- .../TableauApiEndpointWorkbookViewsCache.cs | 4 +- .../UserSavedCredentialsCache.cs | 4 +- .../ContentClients/ContentClientBase.cs | 2 +- .../ContentClients/FavoritesContentClient.cs | 2 +- .../ContentClients/IContentClient.cs | 2 +- .../ContentClients/IFavoritesContentClient.cs | 2 +- .../ContentClients/IViewsContentClient.cs | 15 +- .../ContentClients/IWorkbooksContentClient.cs | 2 +- .../ContentClients/ViewsContentClient.cs | 25 +- .../ContentClients/WorkbooksContentClient.cs | 2 +- .../Endpoints/EmptyMigrationContentLoader.cs | 32 + .../Endpoints/IDestinationApiEndpoint.cs | 2 +- .../Engine/Endpoints/IDestinationEndpoint.cs | 2 +- .../Engine/Endpoints/IMigrationApiEndpoint.cs | 2 +- .../Endpoints/IMigrationContentLoader.cs | 36 + .../Engine/Endpoints/IMigrationEndpoint.cs | 2 +- .../Endpoints/IMigrationEndpointFactory.cs | 2 +- .../IMigrationPlanEndpointBuilder.cs | 37 + .../IMigrationPlanEndpointConfiguration.cs | 11 +- .../Engine/Endpoints/ISourceApiEndpoint.cs | 2 +- .../Engine/Endpoints/ISourceEndpoint.cs | 2 +- .../ITableauApiEndpointConfiguration.cs | 2 +- .../Endpoints/MigrationEndpointFactory.cs | 2 +- .../Endpoints/MigrationPlanEndpointBuilder.cs | 37 + .../Endpoints/Search/BulkDestinationCache.cs | 94 - .../Endpoints/Search/BulkSourceCache.cs | 43 - ...stinationContentReferenceFinderFactory.cs} | 30 +- .../Search/DestinationViewReferenceFinder.cs | 2 +- .../IDestinationContentReferenceFinder.cs | 46 +- ...estinationContentReferenceFinderFactory.cs | 4 +- .../Search/IDestinationViewReferenceFinder.cs | 2 + .../Search/IMappedContentReferenceFinder.cs | 67 + .../Search/ISourceContentReferenceFinder.cs | 2 +- .../ISourceContentReferenceFinderFactory.cs | 2 +- ...nifestDestinationContentReferenceFinder.cs | 55 +- .../ManifestSourceContentReferenceFinder.cs | 2 +- ...=> SourceContentReferenceFinderFactory.cs} | 31 +- .../SourceEndpointMigrationContentLoader.cs | 43 + .../TableauApiDestinationEndpoint.cs | 2 +- .../Endpoints/TableauApiEndpointBase.cs | 2 +- .../TableauApiEndpointConfiguration.cs | 9 +- .../Endpoints/TableauApiSourceEndpoint.cs | 2 +- .../Engine/Hooks/CallbackHookWrapper.cs | 2 +- .../Hooks/ContentTypeHookBuilderBase.cs | 2 +- .../Hooks/Filters/AsyncContentFilterBase.cs | 2 +- .../Engine/Hooks/Filters/ContentFilterBase.cs | 2 +- .../Hooks/Filters/ContentFilterBuilder.cs | 2 +- .../Hooks/Filters/ContentFilterRunner.cs | 2 +- .../Filters/ContentLocationInPathFilter.cs | 2 +- .../Hooks/Filters/Default/FavoriteFilter.cs | 18 +- .../Filters/Default/GroupAllUsersFilter.cs | 2 +- .../Default/GroupAllUsersFilterOptions.cs | 2 +- .../Filters/Default/LargeContentFilter.cs | 69 + .../Default/PreviouslyMigratedFilter.cs | 2 +- .../PreviouslyMigratedFilterOptions.cs | 2 +- .../Default/ServerSubscriptionFilter.cs | 74 + .../Hooks/Filters/Default/SkipAllFilter.cs | 42 + .../Filters/Default/SystemOwnershipFilter.cs | 2 +- .../Default/UserSiteRoleSupportUserFilter.cs | 2 +- .../Engine/Hooks/Filters/IContentFilter.cs | 2 +- .../Hooks/Filters/IContentFilterBuilder.cs | 2 +- .../Hooks/Filters/IContentFilterRunner.cs | 2 +- .../Hooks/Filters/RootContentFilterBase.cs | 2 +- .../IContentBatchMigrationCompletedHook.cs | 2 +- .../Engine/Hooks/IContentTypeHookBuilder.cs | 2 +- .../Hooks/IMigrationActionCompletedHook.cs | 2 +- .../Engine/Hooks/IMigrationHook.cs | 2 +- .../Engine/Hooks/IMigrationHookBuilder.cs | 2 +- .../Engine/Hooks/IMigrationHookFactory.cs | 2 +- .../Hooks/IMigrationHookFactoryCollection.cs | 2 +- .../Engine/Hooks/IMigrationHookRunner.cs | 2 +- .../EmbeddedCredentialsCapabilityManager.cs | 2 +- .../EndpointSettingCapabilityManagerBase.cs | 2 +- .../GroupSetsCapabilityManager.cs | 2 +- .../IMigrationCapabilityManager.cs | 2 +- .../MigrationCapabilityManagerBase.cs | 2 +- .../SubscriptionsCapabilityManager.cs | 2 +- .../Default/InitializeCapabilitiesHook.cs | 2 +- .../EndpointPreflightContext.cs | 2 +- .../IEndpointPreflightContext.cs | 2 +- .../IInitializeMigrationContext.cs | 2 +- .../IInitializeMigrationHook.cs | 2 +- .../IInitializeMigrationHookResult.cs | 2 +- .../InitializeMigrationHookResult.cs | 2 +- .../Hooks/Mappings/ContentMappingBase.cs | 2 +- .../Hooks/Mappings/ContentMappingBuilder.cs | 2 +- .../Hooks/Mappings/ContentMappingContext.cs | 2 +- .../Hooks/Mappings/ContentMappingRunner.cs | 2 +- .../AuthenticationTypeDomainMapping.cs | 2 +- .../AuthenticationTypeDomainMappingBase.cs | 2 +- .../AuthenticationTypeDomainMappingOptions.cs | 2 +- ...CallbackAuthenticationTypeDomainMapping.cs | 4 +- .../Hooks/Mappings/Default/FavoriteMapping.cs | 2 +- .../IAuthenticationTypeDomainMapping.cs | 2 +- .../Default/ITableauCloudUsernameMapping.cs | 2 +- .../Default/TableauCloudUsernameMapping.cs | 2 +- .../TableauCloudUsernameMappingOptions.cs | 2 +- .../Engine/Hooks/Mappings/IContentMapping.cs | 2 +- .../Hooks/Mappings/IContentMappingBuilder.cs | 2 +- .../Hooks/Mappings/IContentMappingRunner.cs | 2 +- .../Engine/Hooks/MigrationHookBuilder.cs | 2 +- .../Engine/Hooks/MigrationHookBuilderBase.cs | 2 +- .../Engine/Hooks/MigrationHookFactory.cs | 2 +- .../Hooks/MigrationHookFactoryCollection.cs | 2 +- .../Engine/Hooks/MigrationHookRunner.cs | 2 +- .../Engine/Hooks/MigrationHookRunnerBase.cs | 2 +- .../PostPublish/BulkPostPublishContext.cs | 2 +- .../PostPublish/BulkPostPublishHookBase.cs | 2 +- .../ContentItemPostPublishContext.cs | 2 +- .../ContentItemPostPublishHookBase.cs | 2 +- .../ChildItemsPermissionsPostPublishHook.cs | 2 +- .../Default/CleanupViewsPostPublishHook.cs | 151 ++ .../CustomViewDefaultUsersPostPublishHook.cs | 2 +- .../DeleteUserFavoritesPostPublishHook.cs | 2 +- .../EmbeddedCredentialsItemPostPublishHook.cs | 3 +- .../Default/OwnerItemPostPublishHook.cs | 2 +- .../Default/PermissionPostPublishHookBase.cs | 2 +- .../Default/PermissionsItemPostPublishHook.cs | 2 +- .../PopulateViewCachePostPublishHook.cs | 2 +- .../Default/ProjectPostPublishHook.cs | 2 +- .../Default/TagItemPostPublishHook.cs | 2 +- .../Hooks/PostPublish/IBulkPostPublishHook.cs | 2 +- .../IContentItemPostPublishHook.cs | 2 +- .../Transformers/ContentTransformerBase.cs | 2 +- .../Transformers/ContentTransformerBuilder.cs | 2 +- .../Transformers/ContentTransformerRunner.cs | 2 +- ...tomViewDefaultUserReferencesTransformer.cs | 43 +- .../Default/EncryptExtractTransformer.cs | 6 +- .../Default/FavoriteTransformer.cs | 18 +- .../Default/GroupSetGroupsTransformer.cs | 19 +- .../Default/GroupUsersTransformer.cs | 38 +- .../Default/IContentReferenceExtensions.cs | 44 - .../Default/IPermissionsTransformer.cs | 2 +- .../Default/IUserReferenceTransformer.cs | 2 +- ...dReferenceExtractRefreshTaskTransformer.cs | 45 +- .../Default/MappedUserTransformer.cs | 72 - .../Default/OwnershipTransformer.cs | 39 +- .../Default/PermissionGranteeGroup.cs | 31 + .../PermissionGranteeGroupEqualityComparer.cs | 35 + .../Default/PermissionsTransformer.cs | 23 +- .../Default/SubscriptionTransformer.cs | 30 +- .../TableauServerConnectionUrlTransformer.cs | 40 +- .../UserAuthenticationTypeTransformer.cs | 8 +- ...serAuthenticationTypeTransformerOptions.cs | 2 +- .../UserTableauCloudSiteRoleTransformer.cs | 2 +- .../Default/WorkbookReferenceTransformer.cs | 18 +- .../Hooks/Transformers/IContentTransformer.cs | 2 +- .../IContentTransformerBuilder.cs | 2 +- .../Transformers/IContentTransformerRunner.cs | 2 +- .../Transformers/IXmlContentTransformer.cs | 2 +- .../Transformers/XmlContentTransformerBase.cs | 2 +- src/Tableau.Migration/Engine/IMigration.cs | 2 +- .../Engine/IMigrationExtensions.cs | 2 +- .../Engine/IMigrationInput.cs | 2 +- .../Engine/IMigrationInputInitializer.cs | 2 +- .../Engine/IServiceCollectionExtensions.cs | 30 +- .../IMigrationManifestContentTypePartition.cs | 2 +- ...ationManifestContentTypePartitionEditor.cs | 2 +- .../Manifest/IMigrationManifestEditor.cs | 2 +- .../Manifest/IMigrationManifestEntry.cs | 2 +- .../IMigrationManifestEntryBuilder.cs | 2 +- .../IMigrationManifestEntryCollection.cs | 2 +- ...IMigrationManifestEntryCollectionEditor.cs | 2 +- .../Manifest/IMigrationManifestEntryEditor.cs | 2 +- .../Manifest/IMigrationManifestFactory.cs | 2 +- .../Logging/LoggingMigrationManifest.cs | 19 +- ...ngMigrationManifestContentTypePartition.cs | 5 +- ...LoggingMigrationManifestEntryCollection.cs | 2 +- .../Engine/Manifest/MigrationManifest.cs | 35 +- .../MigrationManifestContentTypePartition.cs | 2 +- .../Engine/Manifest/MigrationManifestEntry.cs | 2 +- .../MigrationManifestEntryCollection.cs | 2 +- .../Manifest/MigrationManifestEntryStatus.cs | 2 +- .../Manifest/MigrationManifestFactory.cs | 2 +- .../Manifest/MigrationManifestSerializer.cs | 2 +- src/Tableau.Migration/Engine/Migration.cs | 16 +- .../MigrationDirectoryContentFileStore.cs | 2 +- .../Engine/MigrationInput.cs | 2 +- src/Tableau.Migration/Engine/MigrationPlan.cs | 7 +- .../Engine/MigrationPlanBuilder.cs | 80 +- .../Engine/MigrationPlanBuilderFactory.cs | 2 +- .../Batch/BulkPublishContentBatchMigrator.cs | 2 +- .../Batch/ContentBatchMigrationResult.cs | 2 +- .../Batch/ContentBatchMigratorBase.cs | 2 +- .../Migrators/Batch/ContentMigrationBatch.cs | 2 +- .../Batch/IContentBatchMigrationResult.cs | 2 +- .../Migrators/Batch/IContentBatchMigrator.cs | 2 +- .../Batch/ItemPublishContentBatchMigrator.cs | 2 +- .../Batch/ParallelContentBatchMigratorBase.cs | 2 +- .../Migrators/ContentItemMigrationResult.cs | 2 +- .../Engine/Migrators/ContentMigrator.cs | 15 +- .../Migrators/IContentItemMigrationResult.cs | 2 +- .../Engine/Migrators/IContentMigrator.cs | 2 +- .../Engine/Migrators/Migrator.cs | 2 +- .../Options/IMigrationPlanOptionsBuilder.cs | 2 +- .../IMigrationPlanOptionsCollection.cs | 2 +- .../Options/IMigrationPlanOptionsProvider.cs | 2 +- .../Options/MigrationPlanOptionsBuilder.cs | 2 +- .../Options/MigrationPlanOptionsCollection.cs | 2 +- .../Options/MigrationPlanOptionsProvider.cs | 2 +- .../CloudToCloudMigrationPipeline.cs | 7 +- .../CustomMigrationPipelineFactory.cs | 2 +- .../Engine/Pipelines/IMigrationPipeline.cs | 43 +- .../Pipelines/IMigrationPipelineFactory.cs | 2 +- .../Pipelines/IMigrationPipelineRunner.cs | 2 +- .../Engine/Pipelines/MigrationPipelineBase.cs | 52 +- .../Pipelines/MigrationPipelineContentType.cs | 2 +- .../MigrationPipelineContentTypeExtensions.cs | 2 +- .../Pipelines/MigrationPipelineFactory.cs | 2 +- .../Pipelines/MigrationPipelineRunner.cs | 2 +- .../ServerToCloudMigrationPipeline.cs | 7 +- .../ServerToServerMigrationPipeline.cs | 7 +- .../Pipelines/TableauMigrationPipelineBase.cs | 2 +- .../Preparation/ContentItemPreparerBase.cs | 2 +- .../EndpointContentItemPreparer.cs | 2 +- ...ExtractRefreshTaskServerToCloudPreparer.cs | 2 +- .../Preparation/IContentItemPreparer.cs | 2 +- .../Preparation/SourceContentItemPreparer.cs | 2 +- .../ServerToCloudMigrationPlanBuilder.cs | 108 +- .../Services/IMigrationServiceBuilder.cs | 63 + .../IMigrationServiceBuilderFactory.cs | 35 + .../IMigrationServiceFactoryCollection.cs | 50 + .../Services/MigrationServiceBuilder.cs | 100 ++ .../MigrationServiceBuilderFactory.cs | 32 + .../Services/MigrationServiceFactory.cs | 26 + .../MigrationServiceFactoryContext.cs | 29 + .../Engine/Services/MigrationServices.cs | 50 + src/Tableau.Migration/EquatableException.cs | 2 +- src/Tableau.Migration/ExceptionComparer.cs | 2 +- src/Tableau.Migration/ExceptionExtensions.cs | 2 +- src/Tableau.Migration/FilePath.cs | 2 +- src/Tableau.Migration/Guard.cs | 2 +- src/Tableau.Migration/HttpHeaderExtensions.cs | 2 +- .../IAsyncDisposableResult.cs | 2 +- src/Tableau.Migration/IContentReference.cs | 2 +- .../IContentReferenceExtensions.cs | 2 +- .../IDictionaryExtensions.cs | 2 +- .../IEmptyIdContentReference.cs | 2 +- .../IEnumerableExtensions.cs | 2 +- src/Tableau.Migration/IMemoryStreamManager.cs | 2 +- .../IMigrationCapabilities.cs | 2 +- .../IMigrationCapabilitiesEditor.cs | 2 +- src/Tableau.Migration/IMigrationManifest.cs | 2 +- src/Tableau.Migration/IMigrationPlan.cs | 8 +- .../IMigrationPlanBuilder.cs | 73 +- .../IMigrationPlanBuilderFactory.cs | 2 +- src/Tableau.Migration/IMigrationSdk.cs | 2 +- src/Tableau.Migration/IMigrator.cs | 2 +- src/Tableau.Migration/IResult.cs | 23 +- .../IServerToCloudMigrationPlanBuilder.cs | 6 +- .../IServiceCollectionExtensions.cs | 2 +- src/Tableau.Migration/ISetExtensions.cs | 2 +- src/Tableau.Migration/ITaskDelayer.cs | 2 +- .../InheritedTypeComparer.cs | 2 +- ...ISyncContentBatchMigrationCompletedHook.cs | 2 +- .../Hooks/ISyncInitializeMigrationHook.cs | 2 +- .../ISyncMigrationActionCompletedHook.cs | 2 +- .../Interop/Hooks/ISyncMigrationHook.cs | 2 +- .../Interop/IServiceCollectionExtensions.cs | 41 +- .../Interop/InteropHelper.cs | 2 +- .../Interop/Logging/INonGenericLogger.cs | 2 +- .../Interop/Logging/NonGenericLoggerBase.cs | 2 +- .../Logging/NonGenericLoggerProvider.cs | 12 +- .../BuildResponseExceptionJsonConverter.cs | 2 +- .../JsonConverters/Constants.cs | 2 +- .../JsonConverters/ExceptionJsonConverter.cs | 2 +- .../ExceptionJsonConverterFactory.cs | 2 +- .../Exceptions/MismatchException.cs | 2 +- .../Exceptions/UnknownException.cs | 2 +- .../FailedJobExceptionJsonConverter.cs | 2 +- .../JsonConverters/JobJsonConverter.cs | 2 +- .../JsonConverters/JsonReaderUtils.cs | 2 +- .../JsonConverters/JsonWriterUtils.cs | 2 +- .../PythonExceptionConverter.cs | 2 +- .../RestExceptionJsonConverter.cs | 2 +- .../SerializableContentLocation.cs | 2 +- .../SerializableContentReference.cs | 2 +- .../SerializableEntryCollection.cs | 2 +- .../SerializableException.cs | 2 +- .../SerializableManifestEntry.cs | 2 +- .../SerializableMigrationManifest.cs | 2 +- .../SerializedExceptionJsonConverter.cs | 2 +- ...eTypeNotSupportedExceptionJsonConverter.cs | 2 +- .../TimeoutJobExceptionJsonConverter.cs | 2 +- src/Tableau.Migration/MemoryStreamManager.cs | 2 +- .../MigrationCapabilities.cs | 2 +- .../MigrationCompletionStatus.cs | 2 +- src/Tableau.Migration/MigrationResult.cs | 2 +- src/Tableau.Migration/MigrationSdk.cs | 2 +- src/Tableau.Migration/NameOf.cs | 2 +- .../Net/DefaultHttpClient.cs | 2 +- .../Net/DefaultHttpResponseMessage.cs | 2 +- .../Net/Handlers/AuthenticationHttpHandler.cs | 2 +- .../Net/Handlers/LoggingHttpHandler.cs | 2 +- .../RequestCorrelationIdHeaderHttpHandler.cs | 2 +- .../Handlers/UserAgentHeaderHttpHandler.cs | 2 +- .../Net/HttpContentExtensions.cs | 2 +- .../Net/HttpContentRequestBuilder.cs | 2 +- .../Net/HttpContentSerializer.cs | 2 +- .../Net/HttpDeleteRequestBuilder.cs | 2 +- .../Net/HttpGetRequestBuilder.cs | 2 +- .../Net/HttpPatchRequestBuilder.cs | 2 +- .../Net/HttpPostRequestBuilder.cs | 2 +- .../Net/HttpPutRequestBuilder.cs | 2 +- .../Net/HttpRequestBuilder.cs | 2 +- .../Net/HttpRequestBuilderFactory.cs | 2 +- .../Net/HttpStreamProcessor.cs | 2 +- src/Tableau.Migration/Net/IHttpClient.cs | 2 +- .../Net/IHttpContentRequestBuilder.cs | 2 +- .../Net/IHttpContentSerializer.cs | 2 +- .../Net/IHttpDeleteRequestBuilder.cs | 2 +- .../Net/IHttpGetRequestBuilder.cs | 2 +- .../Net/IHttpPatchRequestBuilder.cs | 2 +- .../Net/IHttpPostRequestBuilder.cs | 2 +- .../Net/IHttpPutRequestBuilder.cs | 2 +- .../Net/IHttpRequestBuilder.cs | 2 +- .../Net/IHttpRequestBuilderFactory.cs | 2 +- .../Net/IHttpResponseMessage.cs | 2 +- .../Net/IHttpStreamProcessor.cs | 2 +- .../Net/IQueryStringBuilder.cs | 2 +- src/Tableau.Migration/Net/IRequestBuilder.cs | 2 +- .../Net/IRequestBuilderFactory.cs | 2 +- .../Net/IRequestBuilderFactoryInput.cs | 2 +- .../IRequestBuilderFactoryInputInitializer.cs | 2 +- .../Net/IServiceCollectionExtensions.cs | 11 +- .../Net/ITableauSerializer.cs | 2 +- .../Net/IUserAgentProvider.cs | 2 +- src/Tableau.Migration/Net/JsonOptions.cs | 2 +- .../Net/Logging/HttpActivityDetailsBuilder.cs | 2 +- .../Net/Logging/HttpActivityLogger.cs | 22 +- .../Net/Logging/HttpContentRedactor.cs | 2 +- .../Net/Logging/IHttpActivityLogger.cs | 2 +- .../Net/Logging/IHttpContentRedactor.cs | 2 +- .../Net/MediaTypeHeaderValueExtensions.cs | 2 +- src/Tableau.Migration/Net/MediaTypes.cs | 2 +- src/Tableau.Migration/Net/ObjectExtensions.cs | 2 +- .../Net/QueryStringBuilder.cs | 2 +- src/Tableau.Migration/Net/RequestBuilder.cs | 2 +- .../Net/RequestBuilderBase.cs | 2 +- .../Net/RequestBuilderFactory.cs | 2 +- .../Net/RequestBuilderFactoryInput.cs | 2 +- .../ClientThrottleStrategyBuilder.cs | 2 +- .../Resilience/IResilienceStrategyBuilder.cs | 2 +- .../MaxConcurrencyStrategyBuilder.cs | 2 +- .../RequestTimeoutStrategyBuilder.cs | 2 +- .../Resilience/ResilienceContextExtensions.cs | 2 +- .../Net/Resilience/RetryStrategyBuilder.cs | 18 +- .../ServerThrottleStrategyBuilder.cs | 42 +- .../Net/Rest/Fields/Field.cs | 2 +- .../Net/Rest/Fields/FieldBuilder.cs | 2 +- .../Net/Rest/Fields/IFieldBuilder.cs | 2 +- .../Net/Rest/Filtering/Filter.cs | 2 +- .../Net/Rest/Filtering/FilterBuilder.cs | 2 +- .../Net/Rest/Filtering/FilterOperator.cs | 2 +- .../Net/Rest/Filtering/IFilterBuilder.cs | 2 +- .../Net/Rest/GuidExtensions.cs | 2 +- .../Net/Rest/HttpRequestMessageExtensions.cs | 2 +- .../Net/Rest/IRestRequestBuilder.cs | 2 +- .../Net/Rest/IRestRequestBuilderFactory.cs | 2 +- .../Rest/IRestRequestBuilderFactoryInput.cs | 31 + ...stRequestBuilderFactoryInputInitializer.cs | 39 + .../Net/Rest/ListSortDirectionExtensions.cs | 2 +- .../Net/Rest/Paging/IPageBuilder.cs | 2 +- src/Tableau.Migration/Net/Rest/Paging/Page.cs | 2 +- .../Net/Rest/Paging/PageBuilder.cs | 2 +- src/Tableau.Migration/Net/Rest/RestHeaders.cs | 2 +- .../Net/Rest/RestQueryBuilderBase.cs | 2 +- .../Net/Rest/RestRequestBuilder.cs | 2 +- .../Net/Rest/RestRequestBuilderFactory.cs | 8 +- .../Rest/RestRequestBuilderFactoryInput.cs | 35 + .../Net/Rest/Sorting/ISortBuilder.cs | 2 +- .../Net/Rest/Sorting/Sort.cs | 2 +- .../Net/Rest/Sorting/SortBuilder.cs | 2 +- .../Net/Rest/UriExtensions.cs | 2 +- .../Net/Simulation/BaseUrlComparer.cs | 2 +- .../Net/Simulation/IResponseSimulator.cs | 2 +- .../Simulation/IResponseSimulatorProvider.cs | 2 +- .../Net/Simulation/MethodSimulator.cs | 2 +- .../NullResponseSimulatorProvider.cs | 2 +- .../Requests/IPathRequestMatcher.cs | 2 +- .../Simulation/Requests/IRequestMatcher.cs | 2 +- .../Simulation/Requests/PathRequestMatcher.cs | 2 +- .../Responses/EmptyResponseBuilder.cs | 2 +- .../Simulation/Responses/IResponseBuilder.cs | 2 +- .../Responses/StaticStringResponseBuilder.cs | 2 +- .../TooManyRequestsResponseBuilder.cs | 2 +- .../Net/Simulation/SimulationHttpHandler.cs | 2 +- .../Net/Simulation/UriExtensions.cs | 2 +- src/Tableau.Migration/Net/StringExtensions.cs | 2 +- .../Net/TableauSerializer.cs | 2 +- .../Net/UserAgentProvider.cs | 2 +- src/Tableau.Migration/ObjectExtensions.cs | 2 +- .../Paging/BreadthFirstPathHierarchyPager.cs | 2 +- src/Tableau.Migration/Paging/CallbackPager.cs | 2 +- src/Tableau.Migration/Paging/IPageInfo.cs | 2 +- src/Tableau.Migration/Paging/IPagedResult.cs | 19 +- src/Tableau.Migration/Paging/IPager.cs | 2 +- .../Paging/IndexedPagerBase.cs | 2 +- src/Tableau.Migration/Paging/MemoryPager.cs | 19 +- .../Paging/MemoryPagerBase.cs | 18 +- src/Tableau.Migration/Paging/PagedResult.cs | 2 +- src/Tableau.Migration/PipelineProfile.cs | 2 +- .../Properties/AssemblyInfo.cs | 2 +- .../Resources/AllUsersTranslations.cs | 2 +- ...efaultExternalAssetsProjectTranslations.cs | 2 +- .../Resources/ISharedResourcesLocalizer.cs | 2 +- .../Resources/SharedResourceKeys.cs | 237 ++- .../Resources/SharedResources.resx | 99 +- .../Resources/SharedResourcesLocalizer.cs | 2 +- src/Tableau.Migration/Result.cs | 2 +- src/Tableau.Migration/ResultBuilder.cs | 2 +- src/Tableau.Migration/StreamExtensions.cs | 2 +- src/Tableau.Migration/StreamProcessorBase.cs | 2 +- src/Tableau.Migration/StringEnum.cs | 2 +- .../Tableau.Migration.csproj | 18 +- src/Tableau.Migration/TableauInstanceType.cs | 2 +- .../TableauInstanceTypeExtensions.cs | 2 +- ...ableauInstanceTypeNotSupportedException.cs | 2 +- src/Tableau.Migration/TaskDelayer.cs | 2 +- src/Tableau.Migration/TaskExtensions.cs | 2 +- src/Tableau.Migration/TypeExtensions.cs | 2 +- src/Tableau.Migration/ValidationExtensions.cs | 2 +- src/Tableau.Migration/packages.lock.json | 645 +++---- .../pyproject.toml | 16 +- .../requirements.txt | 20 +- .../tests/__init__.py | 7 +- .../tests/helpers/autofixture.py | 2 +- .../tests/test_default_project_filter.py | 2 +- .../tests/test_log_migration_batches_hook.py | 2 +- tests/Python.TestApplication/build.py | 2 +- tests/Python.TestApplication/helper.py | 2 +- tests/Python.TestApplication/main.py | 2 +- .../migration_testcomponents_filters.py | 2 +- .../migration_testcomponents_hooks.py | 2 +- .../migration_testcomponents_mappings.py | 8 +- .../migration_testcomponents_transformers.py | 2 +- tests/Python.TestApplication/pyproject.toml | 10 +- tests/Python.TestApplication/requirements.txt | 6 +- .../packages.lock.json | 1516 +++++++++++++++++ .../ActivityEnricher.cs | 2 +- .../Config/DomainOptions.cs | 2 +- .../Config/EndpointOptions.cs | 4 +- .../Config/LogOptions.cs | 2 +- .../Config/SkipIdsOptions.cs | 2 +- .../Config/SpecialUsersOptions.cs | 2 +- .../Config/TestApplicationOptions.cs | 2 +- .../TimeLoggerAfterActionHook.cs | 8 +- .../LogMigrationBatchSummaryHook.cs | 2 +- ...anifestAfterBatchMigrationCompletedHook.cs | 2 +- .../Hooks/Filters/NonDomainUserFilter.cs | 2 +- .../Filters/SkipByParentLocationFilter.cs | 2 +- .../Hooks/Filters/SkipIdsFilter.cs | 2 +- .../Hooks/Filters/SpecialUserFilter.cs | 2 +- .../Hooks/Filters/UnlicensedUserFilter.cs | 2 +- .../ContentWithinSkippedLocationMapping.cs | 2 +- .../Hooks/Mappings/SpecialUserMapping.cs | 2 +- .../TestTableauCloudUsernameMapping.cs | 2 +- .../TestTableauCloudUsernameOptions.cs | 2 +- .../Hooks/Mappings/UnlicensedUserMapping.cs | 2 +- ...ngDestinationUsersFromGroupsTransformer.cs | 2 +- .../Transformers/ViewerOwnerTransformer.cs | 2 +- .../IServiceCollectionExtensions.cs | 3 +- .../LogFileHelper.cs | 2 +- .../MigrationSummaryBuilder.cs | 2 +- .../Program.cs | 2 +- .../SerilogExtensions.cs | 2 +- .../Tableau.Migration.TestApplication.csproj | 16 +- .../TestApplication.cs | 14 +- .../appsettings.json | 3 +- .../packages.lock.json | 616 +++---- .../AutoFixtureTestBase.cs | 2 +- .../AutoFixtureTestBaseTests.cs | 2 +- .../BaseUriComparer.cs | 2 +- .../CultureNameTestDataAttribute.cs | 2 +- tests/Tableau.Migration.Tests/CultureSilo.cs | 2 +- .../EnumDataAttribute.cs | 2 +- .../ExceptionComparerTests.cs | 2 +- .../Tableau.Migration.Tests/FixtureFactory.cs | 3 +- .../HttpContentExtensions.cs | 2 +- .../HttpMessageHandlerExtensions.cs | 2 +- .../HttpRequestMessageExtensions.cs | 2 +- .../HttpStatusCodeExtensions.cs | 2 +- .../IContainerContentExtensions.cs | 2 +- .../IDataSourceExtensions.cs | 2 +- .../IEnumerableExtensions.cs | 2 +- .../IEnumeratorExtensions.cs | 2 +- .../IHttpResponseMessageExtensions.cs | 2 +- tests/Tableau.Migration.Tests/IResultTests.cs | 38 +- .../IServiceCollectionExtensions.cs | 2 +- .../IServiceCollectionExtensionsTestBase.cs | 2 +- .../ITagTypeComparer.cs | 2 +- .../IViewReferenceTypeComparer.cs | 2 +- .../IWorkbookConnectionComparer.cs | 2 +- .../IWorkbookExtensions.cs | 2 +- .../ImmutableCollectionSpecimenBuilder.cs | 2 +- .../Tableau.Migration.Tests/JsonExtensions.cs | 2 +- .../LoggerSpecimenBuilder.cs | 4 +- .../Tableau.Migration.Tests/MockExtensions.cs | 2 +- .../Tableau.Migration.Tests/MockHttpClient.cs | 2 +- .../MockServiceProvider.cs | 2 +- .../MockSharedResourcesLocalizer.cs | 2 +- .../NullEmptyWhiteSpaceDataAttribute.cs | 2 +- .../NullableGuidParseDataAttribute.cs | 2 +- .../ObjectExtensions.cs | 2 +- .../PageInfoSpecimenBuilder.cs | 2 +- .../Reflection/ObjectReflectionWrapper.cs | 2 +- .../Reflection/SeekableCryptoStreamWrapper.cs | 2 +- .../Reflection/TypeReflectionWrapper.cs | 2 +- .../ReflectionExtensions.cs | 2 +- .../RestExceptionExtensions.cs | 2 +- .../ResultExtensions.cs | 2 +- .../SimulatedConnectionComparer.cs | 2 +- .../DataPreparation/CommonDataPreparation.cs | 2 +- .../CustomViewsDataPreparation.cs | 2 +- .../DataSourcesDataPreparation.cs | 2 +- .../ExtractRefreshTasksDataPreparation.cs | 2 +- .../FavoritesDataPreparation.cs | 2 +- .../GroupSetsDataPreparation.cs | 2 +- .../DataPreparation/GroupsDataPreparation.cs | 2 +- .../ProjectsDataPreparation.cs | 2 +- .../SchedulesDataPreparation.cs | 2 +- .../SubscriptionsDataPreparation.cs | 2 +- .../DataPreparation/UsersDataPreparation.cs | 2 +- .../WorkbooksDataPreparation.cs | 2 +- .../MultiDestinationSimulationTestBase.cs | 7 +- .../ServerToCloudSimulationTestBase.cs | 91 +- .../ServerToServerSimulationTestBase.cs | 7 +- .../Simulation/SimulationTestBase.cs | 3 +- .../SingleServerSimulationTestBase.cs | 5 +- .../Simulation/TableauDataExtensions.cs | 16 +- .../Simulation/Tests/Api/ApiClientTestBase.cs | 2 +- .../Simulation/Tests/Api/ApiClientTests.cs | 2 +- .../Tests/Api/CustomViewsApiClientTests.cs | 16 +- .../Tests/Api/DataSourcesApiClientTests.cs | 65 +- .../Tests/Api/FavoritesApiClientTests.cs | 2 +- .../Tests/Api/GroupSetsApiClientTests.cs | 2 +- .../Tests/Api/GroupsApiClientTests.cs | 38 +- .../Tests/Api/JobsApiClientTests.cs | 2 +- .../PermissionsContentApiClientTestBase.cs | 46 +- .../Tests/Api/ProjectsApiClientTests.cs | 23 +- .../Tests/Api/SchedulesApiClientTests.cs | 2 +- .../Tests/Api/SitesApiClientTests.cs | 2 +- .../Tests/Api/SubscriptionsApiClientTests.cs | 23 +- .../Tests/Api/TasksApiClientTests.cs | 2 +- .../Tests/Api/UsersApiClientTests.cs | 26 +- .../Tests/Api/ViewsApiClientTests.cs | 161 ++ .../Tests/Api/WorkbooksApiClientTests.cs | 158 +- .../Tests/CustomViewsMigrationTests.cs | 2 +- .../Tests/DataSourceMigrationTests.cs | 2 +- .../Simulation/Tests/ErrorHandlingTests.cs | 2 +- .../Tests/ExtractRefreshTaskMigrationTests.cs | 2 +- .../Tests/FavoritesMigrationTests.cs | 2 +- .../Simulation/Tests/GroupMigrationTests.cs | 2 +- .../Tests/GroupSetMigrationTests.cs | 2 +- .../Simulation/Tests/HookTests.cs | 4 +- .../Tests/IncrementalMigrationTests.cs | 2 +- .../Simulation/Tests/MigratorTests.cs | 5 +- .../Simulation/Tests/ProjectMigrationTests.cs | 2 +- .../Simulation/Tests/SimulatorFactoryTests.cs | 2 +- .../Tests/SubscriptionMigrationTests.cs | 2 +- .../Simulation/Tests/UserMigrationTests.cs | 2 +- .../Tests/WorkbookMigrationTests.cs | 14 +- .../Tableau.Migration.Tests/StreamFactory.cs | 2 +- .../StreamFactoryOptions.cs | 2 +- .../StringEnumDataAttribute.cs | 2 +- .../StringEnumGenerator.cs | 2 +- .../Tableau.Migration.Tests.csproj | 14 +- .../Tableau.Migration.Tests/TagExtensions.cs | 2 +- .../Tableau.Migration.Tests/TestConfigFile.cs | 2 +- .../Tableau.Migration.Tests/TestConstants.cs | 2 +- .../TestContentType.cs | 2 +- .../TestFileContentType.cs | 2 +- .../TestHttpStreamProcessor.cs | 2 +- tests/Tableau.Migration.Tests/TestLogger.cs | 2 +- .../TestLoggerFactory.cs | 2 +- .../TestLoggerMessage.cs | 2 +- .../TestPagedTableauServerResponse.cs | 2 +- .../TestPlanOptions.cs | 2 +- .../TestPublishType.cs | 2 +- .../TestSharedResourcesLocalizer.cs | 2 +- .../TestTableauServerResponse.cs | 2 +- .../TypeExtensionTests.cs | 2 +- .../Unit/Api/ApiClientTestBase.cs | 2 +- .../Unit/Api/ApiClientTestDependencies.cs | 21 +- .../Unit/Api/ApiClientTests.cs | 2 +- .../Api/ApiFilteredPageAccessorTestBase.cs | 92 + .../Unit/Api/ApiPageAccessorTestBase.cs | 7 +- .../Unit/Api/ApiTestBase.cs | 4 +- ...henticationConfigurationsApiClientTests.cs | 2 +- .../Api/AuthenticationTokenProviderTests.cs | 2 +- .../Unit/Api/CustomViewsApiClientTests.cs | 23 +- .../Unit/Api/DataSourcesApiClientTests.cs | 34 +- ...mbeddedCredentialsApiClientFactoryTests.cs | 2 +- .../EmbeddedCredentialsApiClientTests.cs | 2 +- .../Unit/Api/FavoritesApiClientTests.cs | 3 +- .../Unit/Api/FavoritesApiListPagerTests.cs | 3 +- .../Api/FilteredPagedListApiClientTestBase.cs | 69 + .../Unit/Api/FlowsApiClientTests.cs | 6 +- .../Unit/Api/GroupSetsApiClientTests.cs | 6 +- .../Unit/Api/GroupsApiClientTests.cs | 44 +- .../Unit/Api/IApiClientTestDependencies.cs | 4 +- .../Api/IContentCacheFactoryExtensions.cs | 2 +- .../Api/IContentFileStoreExtensionsTests.cs | 2 +- ...ntReferenceFinderFactoryExtensionsTests.cs | 6 +- .../Api/IHttpRequestBuilderExtensionsTests.cs | 2 +- .../IHttpResponseMessageExtensionsTests.cs | 2 +- .../Api/IServiceCollectionExtensionsTests.cs | 31 +- .../Unit/Api/JobsApiClientTests.cs | 2 +- .../Unit/Api/Labels/LabelsApiClientTests.cs | 2 +- .../Unit/Api/MockExtensions.cs | 2 +- .../Api/Models/ApplyKeychainOptionsTests.cs | 2 +- .../Cloud/CreateSubscriptionOptionsTests.cs | 2 +- .../Api/Models/CreateProjectOptionsTests.cs | 2 +- .../Api/Models/DestinationSiteInfoTests.cs | 2 +- .../Api/Models/FailedJobExceptionTests.cs | 2 +- .../Unit/Api/Models/FileDownloadTests.cs | 2 +- .../Unit/Api/Models/IUserExtensionsTests.cs | 2 +- .../Unit/Api/Models/ImportJobTests.cs | 2 +- .../Api/Models/KeychainUserMappingTests.cs | 2 +- .../Models/PagedTableauServerResponseTests.cs | 2 +- .../Models/PublishCustomViewOptionsTests.cs | 2 +- .../Models/PublishDataSourceOptionsTests.cs | 2 +- .../Api/Models/PublishFlowOptionsTests.cs | 2 +- .../Api/Models/PublishWorkbookOptionsTests.cs | 2 +- .../Unit/Api/Models/SignInRequestTests.cs | 2 +- .../Unit/Api/Models/SignInResultTests.cs | 2 +- .../Api/Models/TimeoutJobExceptionTests.cs | 2 +- .../Api/Models/UpdateProjectResultTests.cs | 2 +- .../Unit/Api/NameSearchApiClientTestBase.cs | 57 + .../Unit/Api/PagedListApiClientTestBase.cs | 5 +- .../Api/Paging/ApiFilteredListPagerTests.cs | 65 + .../Api/{ => Paging}/ApiListPagerTests.cs | 10 +- .../Paging/ProjectFilteredListPagerTests.cs | 93 + .../DefaultPermissionsApiClientTests.cs | 2 +- .../PermissionsApiClientFactoryTests.cs | 5 +- .../Permissions/PermissionsApiClientTests.cs | 31 +- .../PermissionsContentApiClientTestBase.cs | 2 +- .../Unit/Api/ProjectsApiClientTests.cs | 60 +- .../Publishing/CustomViewPublisherTests.cs | 2 +- .../Publishing/DataSourcePublisherTests.cs | 2 +- .../Api/Publishing/FilePublisherBaseTests.cs | 2 +- .../Api/Publishing/FilePublisherTestBase.cs | 2 +- .../Unit/Api/Publishing/FlowPublisherTests.cs | 2 +- .../Api/Publishing/WorkbookPublisherTests.cs | 2 +- .../Rest/ContentItemUriBuilderBaseTests.cs | 2 +- .../Api/Rest/Models/AddUserResultTests.cs | 2 +- .../Rest/Models/CreateProjectRequestTests.cs | 2 +- .../Rest/Models/CreateProjectResponseTests.cs | 2 +- .../Rest/Models/CustomViewResponseTests.cs | 2 +- .../Rest/Models/CustomViewsResponseTests.cs | 2 +- .../Unit/Api/Rest/Models/ErrorTests.cs | 2 +- .../Models/IFavoriteTypeExtensionsTests.cs | 2 +- .../Models/IProjectTypeExtensionsTests.cs | 2 +- .../Unit/Api/Rest/Models/ITagTypeComparer.cs | 2 +- .../Rest/Models/IUserTypeExtensionsTests.cs | 2 +- .../Models/ImportUsersFromCsvRequestTests.cs | 2 +- .../Api/Rest/Models/LabelContentTypesTests.cs | 2 +- .../Unit/Api/Rest/Models/ModelTests.cs | 2 +- .../Models/PagedTableauServerResponseTests.cs | 2 +- .../Rest/Models/PublishFlowOptionsTests.cs | 2 +- .../Requests/AddFavoriteRequestTests.cs | 2 +- .../Models/Requests/AddTagsRequestTests.cs | 2 +- .../Requests/AddUserToSiteRequestTests.cs | 2 +- .../Requests/ApplyKeychainRequestTests.cs | 2 +- .../Cloud/CreateSubscriptionRequestTests.cs | 2 +- .../Cloud/UpdateSubscriptionRequestTests.cs | 2 +- .../CommitDataSourcePublishRequestTests.cs | 2 +- .../Requests/CommitFlowPublishRequestTests.cs | 2 +- .../CommitWorkbookPublishRequestTests.cs | 2 +- .../Requests/CreateGroupSetRequestTests.cs | 2 +- .../Requests/RetrieveKeychainRequestTests.cs | 2 +- ...etrieveUserSavedCredentialsRequestTests.cs | 2 +- .../Requests/UpdateConnectionRequestTests.cs | 2 +- .../Requests/UpdateCustomViewRequestTests.cs | 2 +- .../Requests/UpdateProjectRequestTests.cs | 2 +- .../Models/Requests/UpdateSiteRequestTests.cs | 2 +- .../Models/Requests/UpdateUserRequestTests.cs | 2 +- .../UploadUserSavedCredentialsRequestTests.cs | 2 +- .../Cloud/CreateSubscriptionResponseTests.cs | 2 +- .../Cloud/ExtractRefreshTasksResponseTests.cs | 2 +- .../Cloud/GetSubscriptionsResponseTests.cs | 2 +- .../Cloud/UpdateSubscriptionResponseTests.cs | 2 +- ...ustomViewAsUsersDefaultViewResponseTest.cs | 2 +- .../Responses/DataSourceResponseTests.cs | 129 ++ .../Responses/DataSourcesResponseTests.cs | 154 ++ .../Models/Responses/GroupSetResponseTests.cs | 2 +- .../Responses/GroupSetsResponseTests.cs | 2 +- .../RetrieveKeychainResponseTests.cs | 2 +- .../ExtractRefreshTasksResponseTests.cs | 2 +- .../Server/GetSubscriptionsResponseTests.cs | 2 +- ...cheduleExtractRefreshTasksResponseTests.cs | 2 +- .../SiteAuthConfigurationResponseTests.cs | 2 +- .../Models/RestProjectBuilderPagerTests.cs | 2 +- .../Rest/Models/RestProjectBuilderTests.cs | 2 +- .../Models/RestProjectResponsePagerTests.cs | 2 +- ...trieveUserSavedCredentialsResponseTests.cs | 2 +- .../Rest/Models/ServerInfoResponseTests.cs | 2 +- .../Api/Rest/Models/SignInRequestTests.cs | 2 +- .../Api/Rest/Models/SignInResponseTests.cs | 2 +- .../Unit/Api/Rest/Models/SiteResponseTests.cs | 2 +- .../Api/Rest/Models/SiteRoleMappingTests.cs | 2 +- .../Rest/Models/TableauServerResponseTests.cs | 2 +- .../Types/GranteeCapabilityTypeTests.cs | 122 ++ .../Models/UpdateCustomViewResponseTests.cs | 2 +- .../Api/Rest/Models/UpdateUserResultTests.cs | 2 +- ...ithCustomViewAsDefaultViewResponseTests.cs | 2 +- .../Api/Rest/Models/WorkbookResponseTests.cs | 2 +- .../Rest/Models/WorkbookViewsResponseTests.cs | 138 ++ .../Api/Rest/Models/WorkbooksResponseTests.cs | 2 +- .../Api/Rest/PermissionsUriBuilderTests.cs | 2 +- .../Unit/Api/Rest/RestExceptionTests.cs | 2 +- .../Unit/Api/Rest/RestUrlKeywordsTests.cs | 2 +- .../Unit/Api/Rest/RestUrlPrefixesTests.cs | 2 +- .../Unit/Api/Rest/TagsUriBuilderTests.cs | 2 +- .../Unit/Api/SchedulesApiClientTests.cs | 2 +- .../Unit/Api/ScopedApiClientFactoryTests.cs | 9 +- .../ApiContentReferenceFinderFactoryTests.cs | 2 +- .../ApiContentReferenceStoreTestBase.cs | 90 + .../Search/ApiContentReferenceStoreTests.cs | 146 ++ ...heTests.cs => BulkApiContentCacheTests.cs} | 34 +- .../BulkApiContentReferenceCacheTests.cs | 21 +- .../Unit/Api/SerializationTestBase.cs | 2 +- .../Unit/Api/ServerSessionProviderTests.cs | 2 +- .../Rest/Net/Requests/RestUrlPatternsTests.cs | 2 +- .../Rest/Net/Requests/UriExtensionsTests.cs | 2 +- .../Net/Responses/ResponseBuilderTestBase.cs | 2 +- .../RestGetByIdResponseBuilderTests.cs | 2 +- .../RestPagedListResponseBuilderTests.cs | 2 +- ...stPermissionsCreateResponseBuilderTests.cs | 7 +- .../RestPostEntityResponseBuilderTests.cs | 2 +- .../TableauApiSimulatorFactoryTests.cs | 2 +- .../Unit/Api/SiteApiTestBase.cs | 2 +- .../Unit/Api/SitesApiClientTests.cs | 2 +- .../Unit/Api/SubscriptionsApiClientTests.cs | 54 +- .../Api/TableauServerVersionProviderTests.cs | 2 +- ...TableauSiteConnectionConfigurationTests.cs | 3 +- .../Api/Tags/TagsApiClientFactoryTests.cs | 2 +- .../Unit/Api/Tags/TagsApiClientTests.cs | 2 +- .../Unit/Api/TasksApiClientTests.cs | 2 +- .../Unit/Api/UsersApiClientTests.cs | 34 +- .../Unit/Api/ViewsApiClientFactoryTests.cs | 2 +- ...piClientTest.cs => ViewsApiClientTests.cs} | 81 +- .../Unit/Api/WorkbookViewTests.cs | 92 + .../Unit/Api/WorkbooksApiClientTests.cs | 140 +- .../Unit/AsyncDisposableResultTests.cs | 2 +- .../Unit/AutoFixtureExtensions.cs | 2 +- .../ConcurrentDictionaryExtensionsTests.cs | 2 +- .../Unit/Config/ConfigReaderTests.cs | 2 +- .../Unit/Config/ConfigurationTestContext.cs | 2 +- .../Unit/Config/ConfigurationTests.cs | 2 +- ...faultPermissionsContentTypeOptionsTests.cs | 2 +- .../Unit/Config/FileOptionsTests.cs | 3 +- .../Unit/Config/MigrationSdkOptionsTests.cs | 2 +- .../Unit/Config/PreflightOptionsTests.cs | 2 +- .../UniqueContentTypesValidatorTests.cs | 2 +- .../AuthenticationConfigurationTests.cs | 2 +- .../Unit/Content/ContentBaseTests.cs | 2 +- .../Content/ContentLocationComparerTests.cs | 2 +- .../Unit/Content/ContentReferenceStubTests.cs | 2 +- .../Unit/Content/CustomViewTests.cs | 2 +- .../Unit/Content/DataSourceDetailsTests.cs | 2 +- .../Unit/Content/DataSourceTests.cs | 3 +- .../EmbeddedCredentialKeychainResultTests.cs | 2 +- .../FavoriteContentTypeExtensionsTests.cs | 2 +- .../Unit/Content/FavoriteTests.cs | 2 +- .../Files/Aes256EncryptionFactoryTests.cs | 2 +- .../Content/Files/ContentFileHandleTests.cs | 2 +- .../Content/Files/ContentFileStoreTestBase.cs | 2 +- .../Content/Files/ContentFileStreamTests.cs | 2 +- .../Files/ContentTypeDirectoryNamesTests.cs | 2 +- .../Files/ContentTypeFilePathResolverTests.cs | 2 +- .../Files/ContentTypeFilePrefixesTests.cs | 2 +- .../DirectoryContentFileStoreTestBase.cs | 2 +- .../Files/DirectoryContentFileStoreTests.cs | 2 +- .../Content/Files/EncryptedFileHandleTests.cs | 2 +- .../Content/Files/EncryptedFileStoreTests.cs | 8 +- .../Content/Files/EncryptedFileStreamTests.cs | 2 +- .../Content/Files/IContentFileStoreTests.cs | 2 +- .../Content/Files/MemoryContentFileStore.cs | 2 +- .../Unit/Content/Files/MockXmlFileHandle.cs | 10 +- .../Files/SeekableCryptoStreamTests.cs | 2 +- .../Content/Files/TableauFileEditorTests.cs | 2 +- .../Files/TableauFileXmlStreamTests.cs | 2 +- ...TemporaryDirectoryContentFileStoreTests.cs | 2 +- .../Files/WritableMemoryContentFileStream.cs | 2 +- .../Files/Xml/XContainerExtensionsTests.cs | 2 +- .../Files/Xml/XElementExtensionsTests.cs | 2 +- .../Files/Xml/XFeatureFlagNameTests.cs | 2 +- .../Content/Files/Xml/XNameExtensionsTests.cs | 2 +- .../Unit/Content/FlowTests.cs | 2 +- .../Unit/Content/GroupSetTests.cs | 2 +- .../Unit/Content/GroupTests.cs | 2 +- .../Unit/Content/IConnectionsContentTests.cs | 2 +- .../Unit/Content/IUserTests.cs | 2 +- .../MappableContainerContentBaseTests.cs | 2 +- .../Unit/Content/MappableContentBaseTests.cs | 2 +- .../Permissions/GranteeCapabilityTests.cs | 12 +- ...sions.cs => GranteeTypeExtensionsTests.cs} | 29 +- .../Permissions/IGranteeCapabilityComparer.cs | 6 +- .../Permissions/IPermissionsComparer.cs | 5 +- .../Unit/Content/ProjectTests.cs | 2 +- .../Content/PublishableCustomViewTests.cs | 2 +- .../Unit/Content/PublishableFlowTests.cs | 2 +- .../Unit/Content/PublishableGroupSetTests.cs | 2 +- .../Cloud/CloudExtractRefreshTaskTests.cs | 2 +- .../Cloud/CloudScheduleValidatorTests.cs | 6 +- .../Schedules/ExtractRefreshTaskTestBase.cs | 2 +- .../Schedules/ExtractRefreshTestCaches.cs | 2 +- .../Schedules/IFrequencyExtensionsTests.cs | 2 +- .../Schedules/IntervalComparerTests.cs | 2 +- .../Content/Schedules/ScheduleTestBase.cs | 2 +- .../Server/ScheduleExtractRefreshTaskTests.cs | 2 +- .../ScheduleExtractRefreshTasksTests.cs | 2 +- .../Server/ServerExtractRefreshTaskTests.cs | 2 +- .../Server/ServerScheduleValidatorTests.cs | 6 +- .../Content/Schedules/VolatileCacheTests.cs | 2 +- ...kContentReferenceCacheLoadStrategyTests.cs | 62 + .../CachedContentReferenceFinderTests.cs | 2 +- .../Search/ContentReferenceCacheBaseTests.cs | 404 +++-- .../IContentReferenceFinderFactoryTests.cs | 2 +- ...yContentReferenceCacheLoadStrategyTests.cs | 76 + .../Content/ServerSessionSettingsTests.cs | 2 +- .../Unit/Content/ServerSessionTests.cs | 2 +- .../Unit/Content/SiteSettingUpdateTests.cs | 2 +- .../Unit/Content/SiteTests.cs | 2 +- .../Unit/Content/TagLabelComparerTests.cs | 2 +- .../Unit/Content/TagTests.cs | 2 +- .../Content/UserAuthenticationTypeTests.cs | 2 +- .../Unit/Content/UserTests.cs | 2 +- .../Unit/Content/UsernameContentBaseTests.cs | 2 +- .../Unit/Content/WorkbookDetailsTests.cs | 2 +- .../Unit/ContentLocationTests.cs | 158 +- .../Unit/ContentUrlSearchApiClientTestBase.cs | 58 + .../Unit/CsvExtensionsTests.cs | 2 +- .../Unit/DateTimeExtensionsTests.cs | 2 +- .../Actions/MigrateContentActionTests.cs | 6 +- .../Actions/MigrationActionResultTests.cs | 2 +- .../Engine/Actions/PreflightActionTests.cs | 2 +- .../ConfigurableMigrationCacheBaseTests.cs | 2 +- .../DirectContentItemConverterTests.cs | 2 +- ...ToCloudExtractRefreshTaskConverterTests.cs | 2 +- .../ServerToCloudScheduleConverterTests.cs | 10 +- ...ServerToCloudSubscriptionConverterTests.cs | 2 +- .../ApiContentReferenceCacheBaseTest.cs | 39 + ...iAuthenticationConfigurationsCacheTests.cs | 6 +- ...ReferenceCacheLoadStrategyProviderTests.cs | 48 + .../DestinationCacheTest.cs} | 20 +- .../DestinationCacheTests.cs} | 34 +- .../DestinationProjectCacheTests.cs} | 12 +- ...ReferenceCacheLoadStrategyProviderTests.cs | 48 + .../Endpoints/Caching/SourceCacheTests.cs | 264 +++ .../TableauApiEndpointViewCacheTests.cs | 2 +- ...bleauApiEndpointWorkbookViewsCacheTests.cs | 10 +- .../UserSavedCredentialsCacheTests.cs | 5 +- .../FavoritesContentClientTests.cs | 8 +- .../ContentClients/ViewsContentClientTests.cs | 2 +- .../WorkbooksContentClientTests.cs | 2 +- .../EmptyMigrationContentLoaderTests.cs | 48 + .../Endpoints/IMigrationEndpointTests.cs | 2 +- .../MigrationEndpointFactoryTests.cs | 6 +- .../MigrationPlanEndpointBuilderTests.cs | 41 + .../Engine/Endpoints/Search/BulkCacheTest.cs | 68 - ...tionContentReferenceFinderFactoryTests.cs} | 11 +- .../DestinationViewReferenceFinderTests.cs | 2 +- ...ationContentReferenceFinderFactoryTests.cs | 2 +- ...tDestinationContentReferenceFinderTests.cs | 128 +- ...nifestSourceContentReferenceFinderTests.cs | 2 +- ...urceContentReferenceFinderFactoryTests.cs} | 11 +- ...urceEndpointMigrationContentLoaderTests.cs | 41 + .../TableauApiDestinationEndpointTests.cs | 4 +- .../Endpoints/TableauApiEndpointBaseTests.cs | 2 +- .../TableauApiEndpointConfigurationTests.cs | 7 +- .../Endpoints/TableauApiEndpointTestBase.cs | 2 +- .../TableauApiSourceEndpointTests.cs | 4 +- .../Engine/Hooks/CallbackHookWrapperTests.cs | 2 +- .../Hooks/ContentTypeHookBuilderBaseTests.cs | 2 +- .../Filters/AsyncContentFilterBaseTests.cs | 9 +- .../Hooks/Filters/ContentFilterBaseTests.cs | 9 +- .../Filters/ContentFilterBuilderTests.cs | 20 +- .../Hooks/Filters/ContentFilterRunnerTests.cs | 9 +- .../ContentLocationInPathCriterionTests.cs | 15 +- .../Filters/Default/FavoriteFilterTests.cs | 55 +- .../GroupAllUsersFilterOptionsTests.cs | 2 +- .../Default/GroupAllUsersFilterTests.cs | 9 +- .../Default/LargeContentFilterTests.cs | 176 ++ .../Default/PreviouslyMigratedFilterTests.cs | 2 +- .../ProjectSystemOwnershipFilterTests.cs | 8 +- .../Default/ServerSubscriptionFilterTests.cs | 205 +++ .../Filters/Default/SkipAllFilterTests.cs} | 28 +- .../UserSiteRoleSupportUserFilterTests.cs | 10 +- ...beddedCredentialsCapabilityManagerTests.cs | 5 +- ...dpointSettingCapabilityManagerBaseTests.cs | 2 +- .../GroupSetsCapabilityManagerTests.cs | 2 +- .../SubscriptionsCapabilityManagerTests.cs | 9 +- .../InitializeCapabilitiesHookTests.cs | 2 +- .../InitializeMigrationHookResultTests.cs | 2 +- .../Hooks/Mappings/ContentMappingBaseTests.cs | 7 +- .../Mappings/ContentMappingBuilderTests.cs | 20 +- .../Mappings/ContentMappingContextTests.cs | 2 +- .../Mappings/ContentMappingRunnerTests.cs | 8 +- ...uthenticationTypeDomainMappingBaseTests.cs | 2 +- .../AuthenticationTypeDomainMappingTests.cs | 15 +- ...ackAuthenticationTypeDomainMappingTests.cs | 16 +- .../Mappings/Default/FavoriteMappingTests.cs | 2 +- .../TableauCloudUsernameMappingTests.cs | 16 +- .../Hooks/MigrationHookBuilderBaseTests.cs | 2 +- .../Engine/Hooks/MigrationHookBuilderTests.cs | 2 +- .../MigrationHookFactoryCollectionTests.cs | 2 +- .../Engine/Hooks/MigrationHookFactoryTests.cs | 2 +- .../Engine/Hooks/MigrationHookRunnerTests.cs | 2 +- .../BulkPostPublishContextTests.cs | 2 +- .../ContentItemPostPublishContextTests.cs | 2 +- ...ildItemsPermissionsPostPublishHookTests.cs | 4 +- .../CleanupViewsPostPublishHookTests.cs | 338 ++++ ...ddedCredentialsItemPostPublishHookTests.cs | 9 +- .../Default/OwnerItemPostPublishHookTests.cs | 2 +- .../PermissionPostPublishHookBaseTests.cs | 4 +- .../PermissionsItemPostPublishHookTests.cs | 4 +- .../PopulateViewCachePostPublishHookTests.cs | 2 +- .../Default/ProjectPostPublishHookTests.cs | 4 +- .../Default/TagItemPostPublishHookTests.cs | 2 +- .../ContentTransformerBuilderTests.cs | 19 +- .../ContentTransformerRunnerTests.cs | 26 +- ...ewDefaultUserReferencesTransformerTests.cs | 59 +- .../Default/EncryptExtractTransformerTests.cs | 9 +- .../Default/FavoriteTransformerTests.cs | 14 +- .../Default/GroupSetGroupsTransformerTests.cs | 6 +- .../Default/GroupUsersTransformerTests.cs | 41 +- .../IContentReferenceExtensionsTests.cs | 62 +- ...renceExtractRefreshTaskTransformerTests.cs | 20 +- .../Default/MappedUserTransformerTests.cs | 71 - .../Default/OwnershipTransformerTests.cs | 14 +- .../Default/PermissionsTransformerTests.cs | 85 +- ...leauServerConnectionUrlTransformerTests.cs | 13 +- ...CloudAuthenticationTypeTransformerTests.cs | 4 +- ...serTableauCloudSiteRoleTransformerTests.cs | 8 +- .../WorkbookReferenceTransformerTests.cs | 17 +- .../IXmlContentTransformerTests.cs | 2 +- .../XmlContentTransformerBaseTests.cs | 2 +- .../Unit/Engine/IMigrationExtensionsTests.cs | 2 +- .../IServiceCollectionExtensionsTests.cs | 70 +- .../Manifest/IMigrationManifestEditorTests.cs | 2 +- .../Manifest/LoggingMigrationManifestTests.cs | 2 +- ...rationManifestContentTypePartitionTests.cs | 2 +- .../MigrationManifestEntryCollectionTests.cs | 2 +- .../Manifest/MigrationManifestEntryTests.cs | 2 +- .../Manifest/MigrationManifestFactoryTests.cs | 2 +- .../MigrationManifestSerializerTests.cs | 10 +- .../Engine/Manifest/MigrationManifestTests.cs | 28 +- ...MigrationDirectoryContentFileStoreTests.cs | 2 +- .../Unit/Engine/MigrationInputTests.cs | 2 +- .../MigrationPlanBuilderFactoryTests.cs | 2 +- .../Unit/Engine/MigrationPlanBuilderTests.cs | 129 +- .../Unit/Engine/MigrationTests.cs | 52 +- .../BulkPublishContentBatchMigratorTests.cs | 2 +- .../Batch/ContentBatchMigrationResultTests.cs | 2 +- .../Batch/ContentBatchMigratorBaseTests.cs | 2 +- .../Batch/ContentBatchMigratorTestBase.cs | 2 +- .../Batch/ContentMigrationBatchTests.cs | 2 +- .../ItemPublishContentBatchMigratorTests.cs | 2 +- ...allelContentBatchMigratorBatchBaseTests.cs | 2 +- ...rallelContentBatchMigratorBatchTestBase.cs | 2 +- .../ContentItemMigrationResultTests.cs | 2 +- .../Engine/Migrators/ContentMigratorTests.cs | 17 +- .../Unit/Engine/Migrators/MigratorTests.cs | 10 +- .../MigrationPlanOptionsBuilderTests.cs | 2 +- .../MigrationPlanOptionsCollectionTests.cs | 2 +- .../MigrationPlanOptionsProviderTests.cs | 2 +- .../CustomMigrationPipelineFactoryTests.cs | 2 +- .../Pipelines/MigrationPipelineBaseTests.cs | 137 +- ...ationPipelineContentTypeExtensionsTests.cs | 2 +- .../MigrationPipelineContentTypeTests.cs | 2 +- .../MigrationPipelineFactoryTests.cs | 2 +- .../Pipelines/MigrationPipelineRunnerTests.cs | 2 +- .../Pipelines/MigrationPipelineTestBase.cs | 2 +- .../ServerToCloudMigrationPipelineTests.cs | 2 +- .../Unit/Engine/Pipelines/TestAction.cs | 4 +- .../Unit/Engine/Pipelines/TestPipeline.cs | 2 +- .../ContentItemPreparerBaseTests.cs | 2 +- .../ContentItemPreparerTestBase.cs | 2 +- .../EndpointContentItemPreparerTests.cs | 2 +- .../SourceContentItemPreparerTests.cs | 2 +- .../ServerToCloudMigrationPlanBuilderTests.cs | 80 +- .../MigrationServiceBuilderFactoryTests.cs | 42 + .../Services/MigrationServiceBuilderTests.cs | 203 +++ .../Engine/Services/MigrationServicesTests.cs | 38 + .../Unit/ExceptionExtensionsTests.cs | 2 +- .../Unit/FilePathTests.cs | 2 +- .../Unit/GuardTests.cs | 2 +- .../Unit/HttpClientExtensions.cs | 2 +- ...ContentReferenceFinderFactoryExtensions.cs | 2 +- .../Unit/IEnumerableExtensionsTests.cs | 2 +- .../Unit/IHttpClientExtensions.cs | 2 +- .../Unit/ILoggerTests.cs | 2 +- .../Unit/IResultTests.cs | 2 +- .../Unit/IServiceCollectionExtensionsTests.cs | 2 +- .../Unit/InheritedTypeComparerTests.cs | 2 +- ...ContentBatchMigrationCompletedHookTests.cs | 2 +- .../ISyncMigrationActionCompletedHookTests.cs | 2 +- .../Interop/Hooks/ISyncMigrationHookTests.cs | 2 +- .../IServiceCollectionExtensionsTests.cs | 2 +- .../TestSerializableContentLocation.cs | 2 +- .../TestSerializableContentReference.cs | 2 +- .../TestSerializableManifestEntry.cs | 2 +- .../SerializedExceptionJsonConverterTests.cs | 2 +- ...LoggingServiceCollectionExtensionsTests.cs | 2 +- .../Unit/MigrationCapabilitiesTests.cs | 2 +- .../Unit/MigrationSdkTests.cs | 2 +- .../Unit/MockHttpResponseMessage.cs | 2 +- .../Unit/MockHttpResponseMessageExtensions.cs | 2 +- .../Unit/MockIHttpClientExtensions.cs | 2 +- .../Unit/NameOfTests.cs | 2 +- .../Unit/Net/DefaultHttpClientTests.cs | 2 +- .../AuthenticationHttpHandlerTests.cs | 2 +- .../Net/Handlers/LoggingHttpHandlerTests.cs | 2 +- .../Net/Handlers/MockDelegatingHandler.cs | 2 +- .../UserAgentHeaderHttpHandlerTests.cs | 2 +- .../Unit/Net/HttpContentExtensionsTests.cs | 2 +- .../Net/HttpContentRequestBuilderTests.cs | 2 +- .../Unit/Net/HttpContentSerializerTests.cs | 2 +- .../Unit/Net/HttpDeleteRequestBuilderTests.cs | 2 +- .../Unit/Net/HttpGetRequestBuilderTests.cs | 2 +- .../Unit/Net/HttpPatchRequestBuilderTests.cs | 2 +- .../Unit/Net/HttpPostRequestBuilderTests.cs | 2 +- .../Unit/Net/HttpPutRequestBuilderTests.cs | 2 +- .../Net/HttpRequestBuilderFactoryTests.cs | 2 +- .../Unit/Net/HttpRequestBuilderTests.cs | 2 +- .../Unit/Net/HttpStreamProcessorTests.cs | 2 +- .../Net/IServiceCollectionExtensionsTests.cs | 10 +- .../HttpActivityDetailsBuilderTests.cs | 2 +- .../Net/Logging/HttpActivityLoggerTests.cs | 62 +- .../Net/Logging/HttpContentRedactorTests.cs | 2 +- .../MediaTypeHeaderValueExtensionsTests.cs | 2 +- .../Unit/Net/QueryStringBuilderTests.cs | 2 +- .../Unit/Net/RequestBuilderTests.cs | 2 +- .../ClientThrottleStrategyBuilderTests.cs | 2 +- .../MaxConcurrentStrategyBuilderTests.cs | 2 +- .../RequestTimeoutStrategyBuilderTests.cs | 2 +- .../Resilience/ResilienceContextExtensions.cs | 2 +- .../Resilience/ResilienceStrategyTestBase.cs | 2 +- .../Resilience/RetryStrategyBuilderTests.cs | 2 +- .../ServerThrottleStrategyBuilderTests.cs | 168 +- .../Unit/Net/Rest/Fields/FieldBuilderTests.cs | 2 +- .../Unit/Net/Rest/Fields/FieldTests.cs | 2 +- .../Net/Rest/Filtering/FilterBuilderTests.cs | 2 +- .../Net/Rest/Filtering/FilterOperatorTests.cs | 2 +- .../Unit/Net/Rest/Filtering/FilterTests.cs | 2 +- .../Unit/Net/Rest/GuidExtensionsTests.cs | 2 +- .../Rest/HttpRequestMessageExtensionsTests.cs | 2 +- .../Unit/Net/Rest/IRestRequestBuilderTests.cs | 2 +- .../Unit/Net/Rest/Paging/PageBuilderTests.cs | 2 +- .../Unit/Net/Rest/Paging/PageTests.cs | 2 +- .../RestRequestBuilderFactoryInputTests.cs | 44 + .../Rest/RestRequestBuilderFactoryTests.cs | 26 +- .../Unit/Net/Rest/RestRequestBuilderTests.cs | 2 +- .../Unit/Net/Rest/Sorting/SortBuilderTests.cs | 2 +- .../Unit/Net/Rest/Sorting/SortTests.cs | 2 +- .../Unit/Net/TableauSerializerTests.cs | 2 +- .../Unit/Net/UriExtensionsTests.cs | 2 +- .../Unit/Net/UserAgentProviderTests.cs | 2 +- .../Unit/ObjectExtensionsTests.cs | 2 +- .../Unit/OptionsHookTestBase.cs | 2 +- .../BreadthFirstPathHierarchyPagerTests.cs | 2 +- .../Unit/Paging/CallbackPagerTests.cs | 2 +- .../Unit/Paging/IPagedResultTests.cs | 48 + .../Unit/Paging/IPagerTests.cs | 2 +- .../Unit/Paging/IndexedPagerBaseTests.cs | 2 +- .../Unit/Paging/MemoryPagerTests.cs | 2 +- .../Unit/Paging/PagedResultTests.cs | 2 +- .../Resources/AllUsersTranslationsTests.cs | 2 +- .../ISharedResourcesLocalizerTests.cs | 2 +- .../Unit/ResultBuilderTests.cs | 2 +- .../Unit/ResultTests.cs | 2 +- .../Unit/StreamExtensionsTests.cs | 2 +- .../Unit/StringEnumTests.cs | 2 +- .../Unit/TaskExtensionsTests.cs | 2 +- .../Unit/TypeExtensionsTests.cs | 2 +- .../Unit/ValidationExtensionsTests.cs | 2 +- .../ValuesAttribute.cs | 2 +- .../packages.lock.json | 876 +++++----- .../GlobalSuppressions.cs | 2 +- .../Tableau.Migration.CleanServer/Program.cs | 2 +- .../Tableau.Migration.CleanSite.csproj | 6 +- .../packages.lock.json | 395 +++-- .../ExceptionComparer.cs | 2 +- .../HtmlTemplate.cs | 2 +- .../ManifestAnalyzer.cs | 2 +- .../ManifestAnalyzerOptions.cs | 2 +- .../Program.cs | 2 +- .../Tableau.Migration.ManifestAnalyzer.csproj | 2 +- .../packages.lock.json | 526 +++--- .../Program.cs | 2 +- .../Program.cs | 2 +- .../packages.lock.json | 905 +++++----- .../App.axaml.cs | 2 +- .../Converters/InverseBooleanConverter.cs | 2 +- .../DesignExceptionListDialogViewModel.cs | 2 +- .../ViewModels/DesignMainViewModel.cs | 2 +- .../ViewModels/DesignManifestViewModel.cs | 2 +- .../ExceptionListDialogViewModel.cs | 2 +- .../IShowExceptionListDialogViewModel.cs | 2 +- .../ViewModels/MainViewModel.cs | 2 +- .../ViewModels/ManifestEntryPageViewModel.cs | 2 +- .../ViewModels/ManifestEntryViewModel.cs | 2 +- .../ViewModels/ManifestPartitionViewModel.cs | 2 +- .../ViewModels/ManifestViewModel.cs | 2 +- .../ViewModels/ViewModelBase.cs | 2 +- .../Views/ExceptionListDialog.axaml.cs | 2 +- .../Views/MainView.axaml.cs | 2 +- .../Views/MainWindow.axaml.cs | 2 +- .../Views/ManifestView.axaml.cs | 2 +- .../packages.lock.json | 797 ++++----- 2021 files changed, 21615 insertions(+), 8378 deletions(-) create mode 100644 .github/.secrets.default create mode 100644 .github/.vars.default create mode 100644 examples/Csharp.ExampleApplication/Services/MigrationContentLoader/EmptyMigrationContentLoader.cs create mode 100644 examples/Python.ExampleApplication/services/migration_content_loader/empty_migration_content_loader.py create mode 100644 src/Documentation/articles/configuration/data_loading.md rename src/Documentation/articles/{configuration.md => configuration/index.md} (92%) create mode 100644 src/Documentation/articles/configuration/skip_content_type.md create mode 100644 src/Documentation/articles/content-type-api-ver.md rename src/Documentation/articles/{dependency_injection.md => dependency_injection/index.md} (77%) create mode 100644 src/Documentation/articles/dependency_injection/migration_services.md create mode 100644 src/Documentation/includes/content_types_api_mapping.html create mode 100644 src/Documentation/scripts/table-sorter.js create mode 100644 src/Documentation/templates/tableau/partials/scripts.tmpl.partial create mode 100644 src/Python/src/tableau_migration/migration_engine_endpoints_caching.py create mode 100644 src/Python/src/tableau_migration/migration_engine_services.py create mode 100644 src/Python/src/tableau_migration/migration_interop.py create mode 100644 src/Python/src/tableau_migration/migration_paging.py create mode 100644 src/Python/tests/test_migration_engine_services.py create mode 100644 src/Python/tests/test_migration_paging.py create mode 100644 src/Tableau.Migration/Api/IContentUrlSearchApiClient.cs create mode 100644 src/Tableau.Migration/Api/IFilteredPagedListApiClient.cs create mode 100644 src/Tableau.Migration/Api/INameSearchApiClient.cs create mode 100644 src/Tableau.Migration/Api/IWorkbookView.cs create mode 100644 src/Tableau.Migration/Api/Paging/ApiFilteredListPager.cs rename src/Tableau.Migration/Api/{ => Paging}/ApiListPager.cs (88%) rename src/Tableau.Migration/Api/{ => Paging}/FavoritesApiListPager.cs (97%) create mode 100644 src/Tableau.Migration/Api/Paging/IApiFilteredPageAccessor.cs rename src/Tableau.Migration/Api/{ => Paging}/IApiPageAccessor.cs (95%) create mode 100644 src/Tableau.Migration/Api/Paging/ProjectFilteredListPager.cs create mode 100644 src/Tableau.Migration/Api/Rest/Models/IWorkbookViewType.cs create mode 100644 src/Tableau.Migration/Api/Rest/Models/Responses/Cloud/ExtractRefreshTaskResponse.cs create mode 100644 src/Tableau.Migration/Api/Rest/Models/Responses/Cloud/GetSubscriptionResponse.cs create mode 100644 src/Tableau.Migration/Api/Rest/Models/Responses/ISubscriptionContentTypeExtensions.cs create mode 100644 src/Tableau.Migration/Api/Rest/Models/Responses/Server/ExtractRefreshTaskResponse.cs create mode 100644 src/Tableau.Migration/Api/Rest/Models/Responses/Server/GetSubscriptionResponse.cs create mode 100644 src/Tableau.Migration/Api/Rest/Models/Responses/WorkbookViewsResponse.cs create mode 100644 src/Tableau.Migration/Api/Search/ApiContentReferenceCacheBase.cs create mode 100644 src/Tableau.Migration/Api/Search/ApiContentReferenceStore.cs rename src/Tableau.Migration/Api/Search/{ApiContentCache.cs => BulkApiContentCache.cs} (71%) create mode 100644 src/Tableau.Migration/Api/WorkbookView.cs rename src/Tableau.Migration/{Engine/Hooks/Transformers/Default/IMappedUserTransformer.cs => Content/ISizeContent.cs} (69%) create mode 100644 src/Tableau.Migration/Content/Search/BulkContentReferenceCacheLoadStrategy.cs create mode 100644 src/Tableau.Migration/Content/Search/ContentReferenceCacheLoadAttempt.cs create mode 100644 src/Tableau.Migration/Content/Search/ContentReferenceLoadResult.cs create mode 100644 src/Tableau.Migration/Content/Search/IContentReferenceCacheLoadAttempt.cs create mode 100644 src/Tableau.Migration/Content/Search/IContentReferenceCacheLoadStrategy.cs create mode 100644 src/Tableau.Migration/Content/Search/IContentReferenceStore.cs create mode 100644 src/Tableau.Migration/Content/Search/LazyContentReferenceCacheLoadStrategy.cs create mode 100644 src/Tableau.Migration/Content/Search/MissingContentReferenceExtensions.cs create mode 100644 src/Tableau.Migration/Content/SubscriptionContentType.cs rename src/Tableau.Migration/Engine/Endpoints/{Search => Caching}/BulkApiAuthenticationConfigurationsCache.cs (96%) create mode 100644 src/Tableau.Migration/Engine/Endpoints/Caching/BulkContentReferenceCacheLoadStrategyProvider.cs create mode 100644 src/Tableau.Migration/Engine/Endpoints/Caching/DestinationCache.cs rename src/Tableau.Migration/Engine/Endpoints/{Search/BulkDestinationProjectCache.cs => Caching/DestinationProjectCache.cs} (66%) create mode 100644 src/Tableau.Migration/Engine/Endpoints/Caching/IContentReferenceCacheLoadStrategyProvider.cs rename src/Tableau.Migration/Engine/Endpoints/{Search => Caching}/IDestinationAuthenticationConfigurationsCache.cs (94%) rename src/Tableau.Migration/Engine/Endpoints/{Search => Caching}/ILockedProjectCache.cs (95%) create mode 100644 src/Tableau.Migration/Engine/Endpoints/Caching/IManifestUpdateSourceContentReferenceCache.cs rename src/Tableau.Migration/Engine/Endpoints/{Search => Caching}/IUserSavedCredentialsCache.cs (94%) create mode 100644 src/Tableau.Migration/Engine/Endpoints/Caching/LazyContentReferenceCacheLoadStrategyProvider.cs create mode 100644 src/Tableau.Migration/Engine/Endpoints/Caching/SourceCache.cs rename src/Tableau.Migration/Engine/Endpoints/{Search => Caching}/UserSavedCredentialsCache.cs (93%) create mode 100644 src/Tableau.Migration/Engine/Endpoints/EmptyMigrationContentLoader.cs create mode 100644 src/Tableau.Migration/Engine/Endpoints/IMigrationContentLoader.cs create mode 100644 src/Tableau.Migration/Engine/Endpoints/IMigrationPlanEndpointBuilder.cs create mode 100644 src/Tableau.Migration/Engine/Endpoints/MigrationPlanEndpointBuilder.cs delete mode 100644 src/Tableau.Migration/Engine/Endpoints/Search/BulkDestinationCache.cs delete mode 100644 src/Tableau.Migration/Engine/Endpoints/Search/BulkSourceCache.cs rename src/Tableau.Migration/Engine/Endpoints/Search/{ManifestDestinationContentReferenceFinderFactory.cs => DestinationContentReferenceFinderFactory.cs} (62%) create mode 100644 src/Tableau.Migration/Engine/Endpoints/Search/IMappedContentReferenceFinder.cs rename src/Tableau.Migration/Engine/Endpoints/Search/{ManifestSourceContentReferenceFinderFactory.cs => SourceContentReferenceFinderFactory.cs} (58%) create mode 100644 src/Tableau.Migration/Engine/Endpoints/SourceEndpointMigrationContentLoader.cs create mode 100644 src/Tableau.Migration/Engine/Hooks/Filters/Default/LargeContentFilter.cs create mode 100644 src/Tableau.Migration/Engine/Hooks/Filters/Default/ServerSubscriptionFilter.cs create mode 100644 src/Tableau.Migration/Engine/Hooks/Filters/Default/SkipAllFilter.cs create mode 100644 src/Tableau.Migration/Engine/Hooks/PostPublish/Default/CleanupViewsPostPublishHook.cs delete mode 100644 src/Tableau.Migration/Engine/Hooks/Transformers/Default/IContentReferenceExtensions.cs delete mode 100644 src/Tableau.Migration/Engine/Hooks/Transformers/Default/MappedUserTransformer.cs create mode 100644 src/Tableau.Migration/Engine/Hooks/Transformers/Default/PermissionGranteeGroup.cs create mode 100644 src/Tableau.Migration/Engine/Hooks/Transformers/Default/PermissionGranteeGroupEqualityComparer.cs create mode 100644 src/Tableau.Migration/Engine/Services/IMigrationServiceBuilder.cs create mode 100644 src/Tableau.Migration/Engine/Services/IMigrationServiceBuilderFactory.cs create mode 100644 src/Tableau.Migration/Engine/Services/IMigrationServiceFactoryCollection.cs create mode 100644 src/Tableau.Migration/Engine/Services/MigrationServiceBuilder.cs create mode 100644 src/Tableau.Migration/Engine/Services/MigrationServiceBuilderFactory.cs create mode 100644 src/Tableau.Migration/Engine/Services/MigrationServiceFactory.cs create mode 100644 src/Tableau.Migration/Engine/Services/MigrationServiceFactoryContext.cs create mode 100644 src/Tableau.Migration/Engine/Services/MigrationServices.cs create mode 100644 src/Tableau.Migration/Net/Rest/IRestRequestBuilderFactoryInput.cs create mode 100644 src/Tableau.Migration/Net/Rest/IRestRequestBuilderFactoryInputInitializer.cs create mode 100644 src/Tableau.Migration/Net/Rest/RestRequestBuilderFactoryInput.cs create mode 100644 tests/Tableau.Migration.TestApplication.Tests/packages.lock.json create mode 100644 tests/Tableau.Migration.Tests/Simulation/Tests/Api/ViewsApiClientTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/ApiFilteredPageAccessorTestBase.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/FilteredPagedListApiClientTestBase.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/NameSearchApiClientTestBase.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/Paging/ApiFilteredListPagerTests.cs rename tests/Tableau.Migration.Tests/Unit/Api/{ => Paging}/ApiListPagerTests.cs (90%) create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/Paging/ProjectFilteredListPagerTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/Rest/Models/Responses/DataSourceResponseTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/Rest/Models/Responses/DataSourcesResponseTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/Rest/Models/Types/GranteeCapabilityTypeTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/Rest/Models/WorkbookViewsResponseTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/Search/ApiContentReferenceStoreTestBase.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/Search/ApiContentReferenceStoreTests.cs rename tests/Tableau.Migration.Tests/Unit/Api/Search/{ApiContentCacheTests.cs => BulkApiContentCacheTests.cs} (76%) rename tests/Tableau.Migration.Tests/Unit/Api/{ViewsApiClientTest.cs => ViewsApiClientTests.cs} (69%) create mode 100644 tests/Tableau.Migration.Tests/Unit/Api/WorkbookViewTests.cs rename tests/Tableau.Migration.Tests/Unit/Content/Permissions/{GranteeCapabilityTypeExtensions.cs => GranteeTypeExtensionsTests.cs} (53%) create mode 100644 tests/Tableau.Migration.Tests/Unit/Content/Search/BulkContentReferenceCacheLoadStrategyTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Content/Search/LazyContentReferenceCacheLoadStrategyTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/ContentUrlSearchApiClientTestBase.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/Caching/ApiContentReferenceCacheBaseTest.cs rename tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/{Search => Caching}/BulkApiAuthenticationConfigurationsCacheTests.cs (95%) create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/Caching/BulkContentReferenceCacheLoadStrategyProviderTests.cs rename tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/{Search/BulkDestinationCacheTest.cs => Caching/DestinationCacheTest.cs} (78%) rename tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/{Search/BulkDestinationCacheTests.cs => Caching/DestinationCacheTests.cs} (71%) rename tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/{Search/BulkDestinationProjectCacheTests.cs => Caching/DestinationProjectCacheTests.cs} (91%) create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/Caching/LazyContentReferenceCacheLoadStrategyProviderTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/Caching/SourceCacheTests.cs rename tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/{Search => Caching}/UserSavedCredentialsCacheTests.cs (94%) create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/EmptyMigrationContentLoaderTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/MigrationPlanEndpointBuilderTests.cs delete mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/Search/BulkCacheTest.cs rename tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/Search/{ManifestDestinationContentReferenceFinderFactoryTests.cs => DestinationContentReferenceFinderFactoryTests.cs} (75%) rename tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/Search/{ManifestSourceContentReferenceFinderFactoryTests.cs => SourceContentReferenceFinderFactoryTests.cs} (75%) create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Endpoints/SourceEndpointMigrationContentLoaderTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Hooks/Filters/Default/LargeContentFilterTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Hooks/Filters/Default/ServerSubscriptionFilterTests.cs rename tests/{Tableau.Migration.TestApplication/Hooks/Filters/SkipFilter.cs => Tableau.Migration.Tests/Unit/Engine/Hooks/Filters/Default/SkipAllFilterTests.cs} (51%) create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Hooks/PostPublish/Default/CleanupViewsPostPublishHookTests.cs delete mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Hooks/Transformers/Default/MappedUserTransformerTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Services/MigrationServiceBuilderFactoryTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Services/MigrationServiceBuilderTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Engine/Services/MigrationServicesTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Net/Rest/RestRequestBuilderFactoryInputTests.cs create mode 100644 tests/Tableau.Migration.Tests/Unit/Paging/IPagedResultTests.cs diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 63784e39..7c678403 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,14 +3,14 @@ "isRoot": true, "tools": { "docfx": { - "version": "2.78.3", + "version": "2.78.4", "commands": [ "docfx" ], "rollForward": false }, "dotnet-reportgenerator-globaltool": { - "version": "5.4.8", + "version": "5.5.1", "commands": [ "reportgenerator" ], diff --git a/.editorconfig b/.editorconfig index 8d9f7541..281847bd 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,7 +7,7 @@ ] # File header -file_header_template = \n Copyright (c) 2025, Salesforce, Inc.\n SPDX-License-Identifier: Apache-2\n \n Licensed under the Apache License, Version 2.0 (the "License") \n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n +file_header_template = \n Copyright (c) 2026, Salesforce, Inc.\n SPDX-License-Identifier: Apache-2\n \n Licensed under the Apache License, Version 2.0 (the "License") \n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an "AS IS" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n #### Naming styles #### diff --git a/.github/.secrets.default b/.github/.secrets.default new file mode 100644 index 00000000..a667d75d --- /dev/null +++ b/.github/.secrets.default @@ -0,0 +1,6 @@ +# This file is used to test github actions locally using act (https://github.com/nektos/act?tab=readme-ov-file) +# Copy/Paste and rename to .secrets and fill in the values +# Then use it via act cli or VSCode extension https://sanjulaganepola.github.io/github-local-actions-docs/ + +NUGET_PUBLISH_API_KEY= +PYPI_PUBLISH_USER_PASS= \ No newline at end of file diff --git a/.github/.vars.default b/.github/.vars.default new file mode 100644 index 00000000..c08725df --- /dev/null +++ b/.github/.vars.default @@ -0,0 +1,38 @@ +# This file is used to test github actions locally using act (https://github.com/nektos/act?tab=readme-ov-file) + +# Github repository scoped variables. +ACT="true" # Used to let actions know they're being run locally. +BUILD_CONFIGURATIONS="[\"Release\"]" +BASE_OS="ubuntu-latest" +BUILD_OS="[\"ubuntu-latest\"]" +BUILD_PROJECT="./src/Tableau.Migration/Tableau.Migration.csproj" +NUGET_PACKAGE_FOLDER="Tableau.Migration" +PUBLISH_OS="ubuntu-latest" +DOCS_OS="ubuntu-latest" +PYTHON_NETPACKAGE_FRAMEWORK="net8.0" +PYTHON_PUBLISH_DOCS_VERSION="3.11" +PUBLISH_CONFIGURATION="Release" +PUBLISH_PACKAGE_OS="ubuntu-latest" + +# These are github environment scoped variables. +# Development +NUGET_PACKAGE_REPOSITORY="https://artifactory.dev.tableautools.com/artifactory/api/nuget/pqt-tuk/Tableau.Migration" +PYPI_PUBLISH_USER="svc_cmt" +NUGET_PUBLISH_USER="svc_cmt" +PYPI_PACKAGE_REPOSITORY="https://artifactory.dev.tableautools.com/artifactory/api/pypi/tab-pypi-local-tuk/" + +# Staging +#NUGET_PACKAGE_REPOSITORY="https://artifactory.prod.tableautools.com/artifactory/api/nuget/power-tools-nuget-local/Tableau.Migration" +#PYPI_PUBLISH_USER="svc_cmt" +NUGET_PUBLISH_USER="svc_cmt" +#PYPI_PACKAGE_REPOSITORY="https://artifactory.prod.tableautools.com/artifactory/api/pypi/tabpypi" + +# Public Test +# NUGET_PACKAGE_REPOSITORY="https://apiint.nugettest.org/v3/index.json" +# PYPI_PACKAGE_REPOSITORY="https://test.pypi.org/legacy/" +# PYPI_PUBLISH_USER="__token__" + +# Public Prod +# NUGET_PACKAGE_REPOSITORY="https://api.nuget.org/v3/index.json" +# PYPI_PACKAGE_REPOSITORY="https://upload.pypi.org/legacy/" +# PYPI_PUBLISH_USER="__token__" \ No newline at end of file diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index d819110a..49f8a0fa 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -19,7 +19,7 @@ jobs: name: Build Docs (.NET ${{ inputs.dotnet-sdk-version }}) # Updated name steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup .NET environment - name: Setup .NET ${{ inputs.dotnet-sdk-version }} @@ -29,7 +29,7 @@ jobs: # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ inputs.python-version }} @@ -41,7 +41,7 @@ jobs: # Upload Docs Artifact - name: Upload Docs Artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: docs path: ./docs diff --git a/.github/workflows/build-dotnet.yml b/.github/workflows/build-dotnet.yml index cee9adda..a623f5f2 100644 --- a/.github/workflows/build-dotnet.yml +++ b/.github/workflows/build-dotnet.yml @@ -35,7 +35,7 @@ jobs: ## SETUP # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup .NET environment - name: Setup .NET ${{ inputs.dotnet-sdk-version }} @@ -45,7 +45,7 @@ jobs: # Cache NuGet packages based on the lock file and .NET version - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ inputs.dotnet-sdk-version }}-${{ hashFiles('**/packages.lock.json') }} @@ -109,17 +109,16 @@ jobs: # Upload product artifacts - name: Upload product artifacts for python library if: ${{ env.SHOULD_PUBLISH == 'true' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: product-${{ matrix.config }}-net${{ inputs.dotnet-sdk-version }} path: "./src/Python/src/tableau_migration/bin/**" retention-days: 15 # This is not required to stick around very long as it's not pushed to production. # Upload test artifacts - # TODO: [W-18497981: CI/CD Improvements: Python tests should test final package | Work](https://gus.lightning.force.com/lightning/r/ADM_Work__c/a07EE00002EIUwKYAX/view) - name: Upload Tests Artifacts if: ${{ env.SHOULD_PUBLISH == 'true' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: tests-${{ matrix.config }}-net${{ inputs.dotnet-sdk-version }} path: "./dist/tests/**" @@ -128,7 +127,7 @@ jobs: # Upload NuGet package artifact - name: Upload NuGet Artifact if: ${{ env.SHOULD_PUBLISH == 'true' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: nuget-package-${{ matrix.config }}-net${{ inputs.dotnet-sdk-version }} path: "./src/${{ vars.NUGET_PACKAGE_FOLDER }}/bin/${{ matrix.config }}/*.nupkg" @@ -137,7 +136,7 @@ jobs: # Upload build output for tests - name: Upload Build Output if: ${{ env.SHOULD_PUBLISH == 'true' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: build-output-${{ matrix.config }}-net${{ inputs.dotnet-sdk-version }} path: | diff --git a/.github/workflows/build-python-package.yml b/.github/workflows/build-python-package.yml index 9e8be609..1f6500db 100644 --- a/.github/workflows/build-python-package.yml +++ b/.github/workflows/build-python-package.yml @@ -30,11 +30,11 @@ jobs: name: Build Python Package with ${{ inputs.build-config }} configuration steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ vars.PYTHON_TEST_VERSIONS }} cache: "pip" # caching pip dependencies @@ -44,11 +44,11 @@ jobs: shell: pwsh run: | python -m pip install --upgrade pip - python -m pip install hatch + python -m pip install hatch click==8.2 # Cache Hatch environments - name: Cache Hatch environments - uses: actions/cache@v4 + uses: actions/cache@v5 with: # Default Hatch env location relative to working-directory. path: ./.hatch @@ -58,7 +58,7 @@ jobs: ${{ runner.os }}-py${{ vars.PYTHON_TEST_VERSIONS }}-hatch- # Download the product artifact - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: product-${{ inputs.build-config }}-net${{ inputs.dotnet-build-version }} path: ./src/Python/src/tableau_migration/bin/ @@ -82,7 +82,7 @@ jobs: # Upload PyPI artifact - name: Upload Pypi Artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: pypi-package-bundle path: ${{ env.WORKING_DIRECTORY }}/tableau_migration-pypi.zip @@ -90,7 +90,7 @@ jobs: # Upload PyPI artifact - name: Upload Pypi Artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: pypi-package path: ${{ env.WORKING_DIRECTORY }}/dist/* diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 10db3618..c71bfb62 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -24,6 +24,10 @@ on: description: "The github environment that has the variables and secrets" required: true type: string + dotnet-build-version: + description: "The .NET version used for building" + required: true + type: string jobs: create-release: @@ -34,7 +38,7 @@ jobs: # Create Release - name: Create Release id: create-release - uses: actions/github-script@v7 + uses: actions/github-script@v8 env: RELEASE_VERSION: ${{ inputs.release-version }} with: @@ -67,31 +71,31 @@ jobs: # Download Docs - name: Download Docs - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: docs # Download NuGet Package - name: Download NuGet Package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: - name: nuget-package + name: nuget-package-Release-net${{ inputs.dotnet-build-version }} # Download PyPI Package - name: Download PyPI Package - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: pypi-package-bundle # Generate Bundle - name: Generate Bundle run: | - zip -r bundle.zip ./Tableau.Migration.${{ inputs.release-version }}.nupkg docs.zip tableau_migration-pypi.zip + zip -r bundle.zip Tableau.Migration.${{ inputs.release-version }}.nupkg docs.zip tableau_migration-pypi.zip # Attach Release Artifacts - name: Attach Artifacts to Github Release id: upload-docs - uses: actions/github-script@v7 + uses: actions/github-script@v8 env: RELEASE_VERSION: ${{ inputs.release-version }} RELEASE_ID: ${{ steps.create-release.outputs.result }} diff --git a/.github/workflows/deploy-all.yml b/.github/workflows/deploy-all.yml index dcdb1c18..4e458f0d 100644 --- a/.github/workflows/deploy-all.yml +++ b/.github/workflows/deploy-all.yml @@ -91,6 +91,7 @@ jobs: runs-on-config: ${{ vars.PUBLISH_OS }} release-version: ${{ inputs.release-version }} publish-environment: ${{ inputs.publish-environment }} + dotnet-build-version: ${{ inputs.dotnet-build-version }} deploy-docs: name: Deploy Docs diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index b8e1a53f..9dfed6f5 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -32,7 +32,7 @@ jobs: steps: # Download Docs - name: Download Docs - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: docs path: ./docs @@ -43,7 +43,7 @@ jobs: # Upload to GitHub Pages - name: Upload Github Pages - uses: actions/upload-pages-artifact@v3.0.1 + uses: actions/upload-pages-artifact@v4.0.0 with: path: "./docs" diff --git a/.github/workflows/deploy-dotnet.yml b/.github/workflows/deploy-dotnet.yml index 6758ff12..7fc7edf4 100644 --- a/.github/workflows/deploy-dotnet.yml +++ b/.github/workflows/deploy-dotnet.yml @@ -53,7 +53,7 @@ jobs: } # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup .NET environment - name: Setup .NET @@ -65,7 +65,7 @@ jobs: uses: ./.github/actions/setup-dotnet # Download the NuGet package artifact - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: nuget-package-Release-net${{ inputs.dotnet-build-version }} @@ -80,21 +80,15 @@ jobs: if ("${{ vars.NUGET_PUBLISH_USER }}" -ne "") { Write-Host "Using username and API key authentication for environment: $publishEnv" - # Use unique source name based on GitHub run ID - $uniqueSourceName = "$publishEnv-${{ github.run_id }}" - - # Add the NuGet source configuration + # Add the NuGet source configuration (ignore if already exists) dotnet nuget add source ${{ env.NUGET_PACKAGE_REPOSITORY }} ` - --name $uniqueSourceName ` + --name $publishEnv ` --username ${{ vars.NUGET_PUBLISH_USER }} ` --password ${{ secrets.NUGET_PUBLISH_API_KEY }} ` - --store-password-in-clear-text - - # Push the package - dotnet nuget push Tableau.Migration.*.nupkg -s $uniqueSourceName + --store-password-in-clear-text 2>$null - # Clean up temporary source - dotnet nuget remove source $uniqueSourceName + # Push the package using the configured source + dotnet nuget push Tableau.Migration.*.nupkg -s $publishEnv } else { Write-Host "Using API key only authentication for environment: $publishEnv" diff --git a/.github/workflows/deploy-python.yml b/.github/workflows/deploy-python.yml index 75700502..73473b65 100644 --- a/.github/workflows/deploy-python.yml +++ b/.github/workflows/deploy-python.yml @@ -55,11 +55,11 @@ jobs: } # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 # Only setup python if the runs-on-config is not self-hosted. # Self-hosted runners already have python installed. # This workflow needs to run in github on self-hosted runners to have access to artifactory. @@ -70,22 +70,22 @@ jobs: cache: "pip" # caching pip dependencies # Install dependencies - # TODO: [W-18497996: CI/CD Improvements: deploy-python should run via ...pdated more easily | Work](https://gus.lightning.force.com/lightning/r/ADM_Work__c/a07EE00002EIZBPYA5/view) - name: Install dependencies shell: pwsh run: | - python -m pip install --upgrade pip - python -m pip install hatch twine>=6.1.0 + python -m pip install --upgrade pip hatch # Download python package artifact - name: Download Python Package Artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: pypi-package path: ./dist # Publish Python package - name: Deploy Python Package + shell: pwsh + working-directory: ./src/Python env: # Twine uses env variables to set the username, password, and repository url. TWINE_USERNAME: ${{ env.PYPI_PUBLISH_USER }} @@ -94,4 +94,4 @@ jobs: TWINE_REPOSITORY_URL: ${{ env.PYPI_PACKAGE_REPOSITORY }} run: | - python -m twine upload dist/* + hatch run deploy:twine upload ../../dist/* diff --git a/.github/workflows/lint-python.yml b/.github/workflows/lint-python.yml index b4508328..d30b5a25 100644 --- a/.github/workflows/lint-python.yml +++ b/.github/workflows/lint-python.yml @@ -27,18 +27,18 @@ jobs: name: Lint Python in ${{ inputs.working-directory }} on ${{ matrix.os }} steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ vars.PYTHON_TEST_VERSIONS }} cache: "pip" # caching pip dependencies # Cache Hatch environments - name: Cache Hatch environments - uses: actions/cache@v4 + uses: actions/cache@v5 with: # Default Hatch env location relative to working-directory. path: ${{ inputs.working-directory }}/.hatch @@ -51,7 +51,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install hatch + python -m pip install hatch click==8.2 # Lint with ruff - name: Lint with ruff diff --git a/.github/workflows/sdk-workflow.yml b/.github/workflows/sdk-workflow.yml index 82695dfc..1e11daa0 100644 --- a/.github/workflows/sdk-workflow.yml +++ b/.github/workflows/sdk-workflow.yml @@ -51,7 +51,7 @@ on: env: DOTNET_NOLOGO: "true" # Centralized .NET version for building and deploying - DOTNET_BUILD_VERSION: '9.0.x' + DOTNET_BUILD_VERSION: '10.0.x' jobs: # Define version job @@ -64,7 +64,7 @@ jobs: dotnet-build-version: ${{ steps.set-versions.outputs.dotnet-build-version }} if: github.event.pull_request.draft == false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Get Beta Version id: get-beta-version shell: bash diff --git a/.github/workflows/test-dotnet.yml b/.github/workflows/test-dotnet.yml index e9a8c4a1..c6ba8df9 100644 --- a/.github/workflows/test-dotnet.yml +++ b/.github/workflows/test-dotnet.yml @@ -28,7 +28,7 @@ jobs: name: Test .NET (${{ matrix.os }}, ${{ matrix.config }}, .NET ${{ matrix.dotnet-version }}) steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Clean all existing .NET installations - name: Clean existing .NET installations @@ -40,15 +40,15 @@ jobs: with: dotnet-version: ${{ matrix.dotnet-version }} - # Setup .NET 9 SDK (Needed to run dotnet test in any matrix) - - name: Setup .NET 9 SDK (for build compatibility) - uses: actions/setup-dotnet@v4 + # Setup .NET global.json SDK (Needed to run dotnet test in any matrix) + - name: Setup .NET ${{ inputs.dotnet-build-version }} SDK (for build compatibility) + uses: actions/setup-dotnet@v5 with: - dotnet-version: '9.0.x' + dotnet-version: ${{ inputs.dotnet-build-version }} # Use the input for .NET version # Cache NuGet packages based on the lock file and .NET version - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ matrix.dotnet-version }}-${{ hashFiles('**/packages.lock.json') }} @@ -68,7 +68,7 @@ jobs: # Download built binaries - name: Download Build Output - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: build-output-${{ matrix.config }}-net${{ inputs.dotnet-build-version }} path: ./ @@ -101,7 +101,7 @@ jobs: # Upload test results - name: Upload Test Results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: dotnet-results-${{ matrix.os }}-${{ matrix.config }}-net${{ matrix.dotnet-version }} path: TestResults-${{ matrix.os }}-${{ matrix.config }}-net${{ matrix.dotnet-version }} diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index b519674f..011c83ce 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -34,7 +34,7 @@ jobs: name: Test Python ${{ inputs.test-name }} (${{ matrix.os }}, ${{ matrix.config }}, .NET ${{ matrix.dotnet-version }}) steps: # Checkout the repository - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # Clean all existing .NET installations - name: Clean existing .NET installations @@ -46,6 +46,18 @@ jobs: with: dotnet-version: ${{ matrix.dotnet-version }} # Pass the .NET version from the matrix + # Setup global.json .NET environment + - name: Setup global.json .NET ${{ inputs.dotnet-build-version }} + uses: ./.github/actions/setup-dotnet + with: + dotnet-version: ${{ inputs.dotnet-build-version }} # Use the input for .NET version + + # Setup .NET global.json SDK (Needed to run dotnet test in any matrix) + - name: Setup .NET ${{ inputs.dotnet-build-version }} SDK (for build compatibility) + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ inputs.dotnet-build-version }} # Use the input for .NET version + # Restore Tools (i.e. report generator) - skip for .NET 8 # Code coverage report generation is only supported on the latest .NET version - name: Restore .NET Tools @@ -54,14 +66,14 @@ jobs: # Setup Python environment - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ vars.PYTHON_TEST_VERSIONS }} cache: "pip" # caching pip dependencies # Cache Hatch environments - name: Cache Hatch environments - uses: actions/cache@v4 + uses: actions/cache@v5 with: # Default Hatch env location relative to working-directory. path: ./.hatch @@ -74,17 +86,22 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install hatch + python -m pip install hatch click==8.2 - # Download the published test artifacts - # This step is only needed when builing the main python project, but it left in this - # reuseable workflow for simplicity. - # TODO: [W-18497981: CI/CD Improvements: Python tests should test final package | Work](https://gus.lightning.force.com/lightning/r/ADM_Work__c/a07EE00002EIUwKYAX/view) - - uses: actions/download-artifact@v4 + # Download the product binaries + - name: Download product binaries + uses: actions/download-artifact@v7 with: - name: tests-${{ matrix.config }}-net${{ inputs.dotnet-build-version }} + name: product-${{ matrix.config }}-net${{ inputs.dotnet-build-version }} path: ./src/Python/src/tableau_migration/bin/ + # Download the test binaries + - name: Download test binaries + uses: actions/download-artifact@v7 + with: + name: tests-${{ matrix.config }}-net${{ inputs.dotnet-build-version }} + path: ./dist/tests/ + # Test with pytest - name: Test with pytest run: python -m hatch --data-dir=.hatch --cache-dir=.hatch_cache run test:testcov @@ -103,7 +120,7 @@ jobs: # Upload test results - name: Upload Test Results if: ${{ !(matrix.dotnet-version == '8.0.x') }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: ${{ inputs.test-name }}-results-${{ matrix.os }}-${{ matrix.config }}-net${{ matrix.dotnet-version }} path: ${{ inputs.working-directory }}/TestResults diff --git a/Directory.Build.props b/Directory.Build.props index a808b66a..26b8702f 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,12 +4,12 @@ enable true true - 5.3.1 + 6.0.0 Salesforce, Inc. Salesforce, Inc. - Copyright (c) 2025, Salesforce, Inc. and its licensors + Copyright (c) 2026, Salesforce, Inc. and its licensors Apache-2.0 - 11.3.2 + 11.3.9