openmetadata-ingestion 1.7.4.2__py3-none-any.whl → 1.8.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmetadata-ingestion might be problematic. Click here for more details.
- _openmetadata_testutils/helpers/login_user.py +22 -0
- metadata/__init__.py +31 -0
- metadata/automations/runner.py +24 -14
- metadata/data_quality/processor/test_case_runner.py +2 -11
- metadata/data_quality/source/test_suite.py +3 -1
- metadata/data_quality/validations/table/pandas/tableRowInsertedCountToBeBetween.py +17 -2
- metadata/examples/workflows/tableau.yaml +1 -0
- metadata/generated/schema/analytics/__init__.py +1 -1
- metadata/generated/schema/analytics/basic.py +1 -1
- metadata/generated/schema/analytics/reportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
- metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
- metadata/generated/schema/api/__init__.py +1 -1
- metadata/generated/schema/api/addGlossaryToAssetsRequest.py +3 -16
- metadata/generated/schema/api/addTagToAssetsRequest.py +1 -10
- metadata/generated/schema/api/analytics/__init__.py +1 -1
- metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
- metadata/generated/schema/api/automations/__init__.py +1 -1
- metadata/generated/schema/api/automations/createWorkflow.py +1 -1
- metadata/generated/schema/api/bulkAssets.py +1 -1
- metadata/generated/schema/api/classification/__init__.py +1 -1
- metadata/generated/schema/api/classification/createClassification.py +6 -2
- metadata/generated/schema/api/classification/createTag.py +6 -2
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +1 -1
- metadata/generated/schema/api/createEventPublisherJob.py +1 -1
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createAPICollection.py +1 -1
- metadata/generated/schema/api/data/createAPIEndpoint.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +1 -1
- metadata/generated/schema/api/data/createCustomProperty.py +1 -1
- metadata/generated/schema/api/data/createDashboard.py +1 -1
- metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
- metadata/generated/schema/api/data/createDataContract.py +66 -0
- metadata/generated/schema/api/data/createDatabase.py +1 -1
- metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
- metadata/generated/schema/api/data/createGlossary.py +1 -1
- metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
- metadata/generated/schema/api/data/createMetric.py +1 -1
- metadata/generated/schema/api/data/createMlModel.py +1 -1
- metadata/generated/schema/api/data/createPipeline.py +1 -1
- metadata/generated/schema/api/data/createQuery.py +1 -1
- metadata/generated/schema/api/data/createQueryCostRecord.py +1 -1
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
- metadata/generated/schema/api/data/createTable.py +1 -1
- metadata/generated/schema/api/data/createTableProfile.py +1 -1
- metadata/generated/schema/api/data/createTopic.py +1 -1
- metadata/generated/schema/api/data/loadGlossary.py +1 -1
- metadata/generated/schema/api/data/restoreEntity.py +1 -1
- metadata/generated/schema/api/data/updateColumn.py +49 -0
- metadata/generated/schema/api/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +1 -1
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +1 -1
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/feed/__init__.py +1 -1
- metadata/generated/schema/api/feed/closeTask.py +1 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +1 -1
- metadata/generated/schema/api/feed/createThread.py +1 -1
- metadata/generated/schema/api/feed/resolveTask.py +1 -1
- metadata/generated/schema/api/feed/threadCount.py +1 -1
- metadata/generated/schema/api/governance/__init__.py +1 -1
- metadata/generated/schema/api/governance/createWorkflowDefinition.py +1 -1
- metadata/generated/schema/api/governance/createWorkflowInstanceState.py +1 -1
- metadata/generated/schema/api/lineage/__init__.py +1 -1
- metadata/generated/schema/api/lineage/addLineage.py +1 -1
- metadata/generated/schema/api/lineage/esLineageData.py +1 -1
- metadata/generated/schema/api/lineage/lineageDirection.py +1 -1
- metadata/generated/schema/api/lineage/nodeInformation.py +1 -1
- metadata/generated/schema/api/lineage/searchLineageRequest.py +1 -1
- metadata/generated/schema/api/lineage/searchLineageResult.py +1 -1
- metadata/generated/schema/api/mcp/__init__.py +3 -0
- metadata/generated/schema/api/mcp/mcpToolDefinition.py +54 -0
- metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
- metadata/generated/schema/api/policies/__init__.py +1 -1
- metadata/generated/schema/api/policies/createPolicy.py +1 -1
- metadata/generated/schema/api/scim/__init__.py +3 -0
- metadata/generated/schema/api/scim/scimGroup.py +52 -0
- metadata/generated/schema/api/scim/scimPatchOp.py +32 -0
- metadata/generated/schema/api/scim/scimUser.py +83 -0
- metadata/generated/schema/api/search/__init__.py +1 -1
- metadata/generated/schema/api/search/previewSearchRequest.py +1 -1
- metadata/generated/schema/api/services/__init__.py +1 -1
- metadata/generated/schema/api/services/createApiService.py +1 -1
- metadata/generated/schema/api/services/createDashboardService.py +1 -1
- metadata/generated/schema/api/services/createDatabaseService.py +1 -1
- metadata/generated/schema/api/services/createMessagingService.py +1 -1
- metadata/generated/schema/api/services/createMetadataService.py +1 -1
- metadata/generated/schema/api/services/createMlModelService.py +1 -1
- metadata/generated/schema/api/services/createPipelineService.py +1 -1
- metadata/generated/schema/api/services/createSearchService.py +1 -1
- metadata/generated/schema/api/services/createStorageService.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
- metadata/generated/schema/api/setOwner.py +1 -1
- metadata/generated/schema/api/teams/__init__.py +1 -1
- metadata/generated/schema/api/teams/createPersona.py +1 -1
- metadata/generated/schema/api/teams/createRole.py +1 -1
- metadata/generated/schema/api/teams/createTeam.py +8 -1
- metadata/generated/schema/api/teams/createUser.py +11 -1
- metadata/generated/schema/api/tests/__init__.py +1 -1
- metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
- metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
- metadata/generated/schema/api/tests/createTestCase.py +9 -6
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
- metadata/generated/schema/api/tests/createTestCaseResult.py +1 -1
- metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- metadata/generated/schema/api/validateGlossaryTagsRequest.py +31 -0
- metadata/generated/schema/api/voteRequest.py +1 -1
- metadata/generated/schema/auth/__init__.py +1 -1
- metadata/generated/schema/auth/basicAuth.py +1 -1
- metadata/generated/schema/auth/basicLoginRequest.py +1 -1
- metadata/generated/schema/auth/changePasswordRequest.py +1 -1
- metadata/generated/schema/auth/createPersonalToken.py +1 -1
- metadata/generated/schema/auth/emailRequest.py +1 -1
- metadata/generated/schema/auth/emailVerificationToken.py +2 -1
- metadata/generated/schema/auth/generateToken.py +1 -1
- metadata/generated/schema/auth/jwtAuth.py +1 -1
- metadata/generated/schema/auth/loginRequest.py +1 -1
- metadata/generated/schema/auth/logoutRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetRequest.py +1 -1
- metadata/generated/schema/auth/passwordResetToken.py +1 -1
- metadata/generated/schema/auth/personalAccessToken.py +1 -1
- metadata/generated/schema/auth/refreshToken.py +1 -1
- metadata/generated/schema/auth/registrationRequest.py +1 -1
- metadata/generated/schema/auth/revokePersonalToken.py +1 -1
- metadata/generated/schema/auth/revokeToken.py +1 -1
- metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
- metadata/generated/schema/auth/ssoAuth.py +1 -1
- metadata/generated/schema/auth/supportToken.py +35 -0
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
- metadata/generated/schema/configuration/assetCertificationSettings.py +1 -1
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
- metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
- metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
- metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
- metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
- metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
- metadata/generated/schema/configuration/limitsConfiguration.py +1 -1
- metadata/generated/schema/configuration/lineageSettings.py +1 -1
- metadata/generated/schema/configuration/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/openMetadataBaseUrlConfiguration.py +1 -1
- metadata/generated/schema/configuration/opertionalConfiguration.py +1 -1
- metadata/generated/schema/configuration/opsConfig.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
- metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
- metadata/generated/schema/configuration/searchSettings.py +1 -1
- metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
- metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
- metadata/generated/schema/configuration/themeConfiguration.py +1 -1
- metadata/generated/schema/configuration/uiThemePreference.py +1 -1
- metadata/generated/schema/configuration/workflowSettings.py +1 -1
- metadata/generated/schema/dataInsight/__init__.py +1 -1
- metadata/generated/schema/dataInsight/custom/__init__.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +1 -1
- metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
- metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
- metadata/generated/schema/dataInsight/custom/lineChart.py +1 -1
- metadata/generated/schema/dataInsight/custom/summaryCard.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
- metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
- metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
- metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
- metadata/generated/schema/dataInsight/type/__init__.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
- metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
- metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
- metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
- metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
- metadata/generated/schema/email/__init__.py +1 -1
- metadata/generated/schema/email/emailRequest.py +1 -1
- metadata/generated/schema/email/emailTemplate.py +1 -1
- metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
- metadata/generated/schema/email/smtpSettings.py +1 -1
- metadata/generated/schema/email/templateValidationReponse.py +1 -1
- metadata/generated/schema/entity/__init__.py +1 -1
- metadata/generated/schema/entity/applications/__init__.py +1 -1
- metadata/generated/schema/entity/applications/app.py +3 -2
- metadata/generated/schema/entity/applications/appExtension.py +1 -1
- metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addCustomProperties.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDataProductAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTestCaseAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDataProductAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTestCaseAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/collateAIAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/slackAppTokenConfiguration.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/autoPilotAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/collateAIQualityAgentAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/collateAITierAgentAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/dataRetentionConfiguration.py +9 -1
- metadata/generated/schema/entity/applications/configuration/internal/helloPipelinesConfiguration.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +9 -1
- metadata/generated/schema/entity/applications/configuration/private/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/external/collateAIAppPrivateConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/internal/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/internal/collateAITierAgentAppPrivateConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/private/limits.py +1 -1
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +1 -1
- metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
- metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
- metadata/generated/schema/entity/automations/__init__.py +1 -1
- metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +1 -1
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +7 -4
- metadata/generated/schema/entity/classification/tag.py +6 -3
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/apiCollection.py +1 -1
- metadata/generated/schema/entity/data/apiEndpoint.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +1 -1
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/dataContract.py +180 -0
- metadata/generated/schema/entity/data/database.py +1 -1
- metadata/generated/schema/entity/data/databaseSchema.py +1 -1
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
- metadata/generated/schema/entity/data/metric.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +1 -1
- metadata/generated/schema/entity/data/pipeline.py +1 -1
- metadata/generated/schema/entity/data/query.py +1 -1
- metadata/generated/schema/entity/data/queryCostRecord.py +1 -1
- metadata/generated/schema/entity/data/queryCostSearchResult.py +1 -1
- metadata/generated/schema/entity/data/report.py +1 -1
- metadata/generated/schema/entity/data/searchIndex.py +1 -1
- metadata/generated/schema/entity/data/storedProcedure.py +1 -1
- metadata/generated/schema/entity/data/table.py +5 -1
- metadata/generated/schema/entity/data/topic.py +1 -1
- metadata/generated/schema/entity/docStore/__init__.py +1 -1
- metadata/generated/schema/entity/docStore/document.py +1 -1
- metadata/generated/schema/entity/domains/__init__.py +1 -1
- metadata/generated/schema/entity/domains/dataProduct.py +5 -1
- metadata/generated/schema/entity/domains/domain.py +5 -1
- metadata/generated/schema/entity/events/__init__.py +1 -1
- metadata/generated/schema/entity/events/webhook.py +7 -1
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/assets.py +1 -1
- metadata/generated/schema/entity/feed/customProperty.py +1 -1
- metadata/generated/schema/entity/feed/description.py +1 -1
- metadata/generated/schema/entity/feed/domain.py +1 -1
- metadata/generated/schema/entity/feed/entityInfo.py +1 -1
- metadata/generated/schema/entity/feed/owner.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +1 -1
- metadata/generated/schema/entity/feed/tag.py +1 -1
- metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
- metadata/generated/schema/entity/feed/thread.py +1 -1
- metadata/generated/schema/entity/policies/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +6 -1
- metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
- metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
- metadata/generated/schema/entity/policies/filters.py +1 -1
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/apiService.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/api/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/api/restConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
- metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/microStrategyConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerBIReportServerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/sigmaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +9 -1
- metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +5 -1
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/cassandra/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/cassandra/cloudConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/cassandraConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/cockroachConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/noConfigAuthenticationTypes.py +1 -1
- metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
- metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/exasolConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
- metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapErpConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/teradataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +9 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/vertexaiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/datafactoryConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillion/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillion/matillionETL.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifi/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifi/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/ssisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/stitchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/wherescapeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +1 -1
- metadata/generated/schema/entity/services/databaseService.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/reverseIngestionResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
- metadata/generated/schema/entity/services/messagingService.py +1 -1
- metadata/generated/schema/entity/services/metadataService.py +1 -1
- metadata/generated/schema/entity/services/mlmodelService.py +1 -1
- metadata/generated/schema/entity/services/pipelineService.py +1 -1
- metadata/generated/schema/entity/services/searchService.py +1 -1
- metadata/generated/schema/entity/services/serviceType.py +1 -1
- metadata/generated/schema/entity/services/storageService.py +1 -1
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +1 -1
- metadata/generated/schema/entity/teams/role.py +1 -1
- metadata/generated/schema/entity/teams/team.py +8 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +11 -1
- metadata/generated/schema/entity/type.py +1 -1
- metadata/generated/schema/entity/utils/__init__.py +1 -1
- metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
- metadata/generated/schema/entity/utils/servicesCount.py +1 -1
- metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
- metadata/generated/schema/events/__init__.py +1 -1
- metadata/generated/schema/events/alertMetrics.py +1 -1
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +1 -1
- metadata/generated/schema/events/api/eventSubscriptionDiagnosticInfo.py +1 -1
- metadata/generated/schema/events/api/eventsRecord.py +1 -1
- metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -1
- metadata/generated/schema/events/api/typedEvent.py +1 -1
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +1 -1
- metadata/generated/schema/events/eventSubscription.py +1 -1
- metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
- metadata/generated/schema/events/failedEvent.py +1 -1
- metadata/generated/schema/events/failedEventResponse.py +1 -1
- metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
- metadata/generated/schema/events/statusContext.py +1 -1
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
- metadata/generated/schema/events/subscriptionStatus.py +1 -1
- metadata/generated/schema/events/testDestinationStatus.py +1 -1
- metadata/generated/schema/governance/workflows/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/edge.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodeSubType.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodeType.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/createAndRunIngestionPipelineTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/runAppTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/endEvent/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/endEvent/endEvent.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/gateway/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/gateway/parallelGateway.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/startEvent/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/startEvent/startEvent.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/userTask/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/__init__.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/noOpTrigger.py +1 -1
- metadata/generated/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.py +1 -1
- metadata/generated/schema/governance/workflows/workflowDefinition.py +1 -1
- metadata/generated/schema/governance/workflows/workflowInstance.py +1 -1
- metadata/generated/schema/governance/workflows/workflowInstanceState.py +1 -1
- metadata/generated/schema/jobs/__init__.py +1 -1
- metadata/generated/schema/jobs/backgroundJob.py +12 -3
- metadata/generated/schema/jobs/enumCleanupArgs.py +1 -1
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/apiServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +1 -1
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/reverseIngestionPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/reverseingestionconfig/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/reverseingestionconfig/descriptionConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/reverseingestionconfig/ownerConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/reverseingestionconfig/tagsConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
- metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
- metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/workflow.py +1 -1
- metadata/generated/schema/monitoring/__init__.py +1 -1
- metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
- metadata/generated/schema/scim/__init__.py +3 -0
- metadata/generated/schema/scim/scimConfiguration.py +32 -0
- metadata/generated/schema/search/__init__.py +1 -1
- metadata/generated/schema/search/aggregationRequest.py +1 -1
- metadata/generated/schema/search/searchRequest.py +8 -1
- metadata/generated/schema/security/__init__.py +1 -1
- metadata/generated/schema/security/client/__init__.py +1 -1
- metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/oidcClientConfig.py +1 -1
- metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
- metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
- metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
- metadata/generated/schema/security/credentials/__init__.py +1 -1
- metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
- metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
- metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
- metadata/generated/schema/security/credentials/basicAuth.py +1 -1
- metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
- metadata/generated/schema/security/credentials/gcpValues.py +1 -1
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
- metadata/generated/schema/security/credentials/gitlabCredentials.py +1 -1
- metadata/generated/schema/security/sasl/__init__.py +1 -1
- metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
- metadata/generated/schema/security/secrets/__init__.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
- metadata/generated/schema/security/securityConfiguration.py +1 -1
- metadata/generated/schema/security/ssl/__init__.py +1 -1
- metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
- metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +2 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +8 -1
- metadata/generated/schema/system/indexingError.py +1 -1
- metadata/generated/schema/system/limitsResponse.py +1 -1
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/navigationItem.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/ui/tab.py +1 -1
- metadata/generated/schema/system/ui/uiCustomization.py +1 -1
- metadata/generated/schema/system/validationResponse.py +1 -1
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +1 -1
- metadata/generated/schema/tests/basic.py +1 -1
- metadata/generated/schema/tests/customMetric.py +1 -1
- metadata/generated/schema/tests/dataQualityReport.py +1 -1
- metadata/generated/schema/tests/resolved.py +1 -1
- metadata/generated/schema/tests/testCase.py +1 -1
- metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +1 -1
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/apiSchema.py +1 -1
- metadata/generated/schema/type/assetCertification.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +1 -1
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +1 -1
- metadata/generated/schema/type/changeEventType.py +1 -1
- metadata/generated/schema/type/changeSummaryMap.py +1 -1
- metadata/generated/schema/type/collectionDescriptor.py +1 -1
- metadata/generated/schema/type/csvDocumentation.py +1 -1
- metadata/generated/schema/type/csvErrorType.py +1 -1
- metadata/generated/schema/type/csvFile.py +1 -1
- metadata/generated/schema/type/csvImportResult.py +1 -1
- metadata/generated/schema/type/customProperties/__init__.py +1 -1
- metadata/generated/schema/type/customProperties/complexTypes.py +1 -1
- metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
- metadata/generated/schema/type/customProperties/tableConfig.py +1 -1
- metadata/generated/schema/type/customProperty.py +1 -1
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHierarchy.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +1 -1
- metadata/generated/schema/type/entityReference.py +1 -1
- metadata/generated/schema/type/entityReferenceList.py +1 -1
- metadata/generated/schema/type/entityRelationship.py +1 -1
- metadata/generated/schema/type/entityUsage.py +1 -1
- metadata/generated/schema/type/filterPattern.py +1 -1
- metadata/generated/schema/type/function.py +1 -1
- metadata/generated/schema/type/include.py +1 -1
- metadata/generated/schema/type/jdbcConnection.py +1 -1
- metadata/generated/schema/type/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/profile.py +1 -1
- metadata/generated/schema/type/queryParserData.py +1 -1
- metadata/generated/schema/type/reaction.py +1 -1
- metadata/generated/schema/type/schedule.py +1 -1
- metadata/generated/schema/type/schema.py +1 -1
- metadata/generated/schema/type/tableQuery.py +1 -1
- metadata/generated/schema/type/tableUsageCount.py +1 -1
- metadata/generated/schema/type/tagLabel.py +1 -1
- metadata/generated/schema/type/usageDetails.py +1 -1
- metadata/generated/schema/type/usageRequest.py +1 -1
- metadata/generated/schema/type/votes.py +1 -1
- metadata/great_expectations/action.py +4 -8
- metadata/great_expectations/action1xx.py +395 -0
- metadata/ingestion/connections/builders.py +14 -4
- metadata/ingestion/connections/connection.py +63 -0
- metadata/ingestion/connections/query_logger.py +115 -0
- metadata/ingestion/connections/test_connections.py +1 -1
- metadata/ingestion/ometa/mixins/tests_mixin.py +3 -5
- metadata/ingestion/ometa/routes.py +2 -0
- metadata/ingestion/sink/metadata_rest.py +54 -11
- metadata/ingestion/source/api/api_service.py +2 -7
- metadata/ingestion/source/connections.py +80 -14
- metadata/ingestion/source/connections_utils.py +32 -0
- metadata/ingestion/source/dashboard/dashboard_service.py +26 -15
- metadata/ingestion/source/dashboard/powerbi/metadata.py +32 -20
- metadata/ingestion/source/dashboard/superset/connection.py +8 -8
- metadata/ingestion/source/dashboard/superset/queries.py +1 -1
- metadata/ingestion/source/dashboard/tableau/metadata.py +12 -2
- metadata/ingestion/source/dashboard/tableau/models.py +12 -2
- metadata/ingestion/source/database/bigquery/connection.py +13 -9
- metadata/ingestion/source/database/bigquery/helper.py +11 -9
- metadata/ingestion/source/database/bigquery/metadata.py +102 -13
- metadata/ingestion/source/database/bigquery/queries.py +15 -3
- metadata/ingestion/source/database/common_db_source.py +2 -4
- metadata/ingestion/source/database/database_service.py +2 -7
- metadata/ingestion/source/database/datalake/metadata.py +1 -1
- metadata/ingestion/source/database/dbt/metadata.py +0 -5
- metadata/ingestion/source/database/mysql/connection.py +52 -45
- metadata/ingestion/source/database/mysql/service_spec.py +2 -0
- metadata/ingestion/source/database/query_parser_source.py +2 -7
- metadata/ingestion/source/database/redshift/connection.py +1 -1
- metadata/ingestion/source/database/sample_data.py +1 -1
- metadata/ingestion/source/database/saphana/lineage.py +2 -7
- metadata/ingestion/source/database/sas/metadata.py +2 -7
- metadata/ingestion/source/database/snowflake/metadata.py +1 -2
- metadata/ingestion/source/database/snowflake/utils.py +0 -4
- metadata/ingestion/source/database/trino/profiler/system_tables_profiler.py +26 -17
- metadata/ingestion/source/database/unitycatalog/connection.py +33 -0
- metadata/ingestion/source/database/unitycatalog/lineage.py +2 -7
- metadata/ingestion/source/database/unitycatalog/metadata.py +126 -13
- metadata/ingestion/source/database/unitycatalog/queries.py +19 -0
- metadata/ingestion/source/messaging/messaging_service.py +2 -7
- metadata/ingestion/source/metadata/alationsink/metadata.py +2 -7
- metadata/ingestion/source/metadata/amundsen/metadata.py +2 -7
- metadata/ingestion/source/metadata/atlas/metadata.py +2 -7
- metadata/ingestion/source/mlmodel/mlmodel_service.py +2 -7
- metadata/ingestion/source/pipeline/airflow/connection.py +4 -6
- metadata/ingestion/source/pipeline/nifi/metadata.py +133 -3
- metadata/ingestion/source/pipeline/pipeline_service.py +20 -7
- metadata/ingestion/source/search/search_service.py +2 -7
- metadata/ingestion/source/storage/storage_service.py +2 -7
- metadata/profiler/interface/sqlalchemy/bigquery/profiler_interface.py +3 -3
- metadata/profiler/metrics/static/not_regexp_match_count.py +4 -3
- metadata/profiler/metrics/static/regexp_match_count.py +3 -2
- metadata/profiler/orm/functions/length.py +1 -0
- metadata/profiler/orm/functions/md5.py +9 -0
- metadata/profiler/orm/functions/modulo.py +1 -0
- metadata/profiler/orm/functions/random_num.py +4 -0
- metadata/profiler/orm/functions/regexp.py +40 -0
- metadata/profiler/orm/functions/table_metric_computer.py +34 -8
- metadata/profiler/orm/registry.py +1 -0
- metadata/profiler/processor/core.py +2 -2
- metadata/profiler/processor/default.py +29 -28
- metadata/profiler/processor/metric_filter.py +16 -3
- metadata/profiler/processor/models.py +14 -4
- metadata/profiler/source/database/base/profiler_resolver.py +35 -0
- metadata/profiler/source/database/base/profiler_source.py +45 -30
- metadata/profiler/source/profiler_source_interface.py +8 -13
- metadata/sampler/sampler_interface.py +15 -10
- metadata/sampler/sqlalchemy/bigquery/sampler.py +7 -0
- metadata/utils/dependency_injector/dependency_injector.py +403 -0
- metadata/utils/service_spec/service_spec.py +66 -10
- metadata/workflow/profiler.py +2 -7
- {openmetadata_ingestion-1.7.4.2.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/METADATA +516 -505
- {openmetadata_ingestion-1.7.4.2.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/RECORD +790 -767
- {openmetadata_ingestion-1.7.4.2.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.7.4.2.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.7.4.2.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.7.4.2.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/top_level.txt +0 -0
|
@@ -79,7 +79,7 @@ from metadata.ingestion.models.tests_data import (
|
|
|
79
79
|
OMetaTestSuiteSample,
|
|
80
80
|
)
|
|
81
81
|
from metadata.ingestion.models.user import OMetaUserProfile
|
|
82
|
-
from metadata.ingestion.ometa.client import APIError
|
|
82
|
+
from metadata.ingestion.ometa.client import APIError, LimitsException
|
|
83
83
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
84
84
|
from metadata.ingestion.source.dashboard.dashboard_service import DashboardUsage
|
|
85
85
|
from metadata.ingestion.source.database.database_service import DataModelLink
|
|
@@ -118,6 +118,7 @@ class MetadataRestSink(Sink): # pylint: disable=too-many-public-methods
|
|
|
118
118
|
self.metadata = metadata
|
|
119
119
|
self.role_entities = {}
|
|
120
120
|
self.team_entities = {}
|
|
121
|
+
self.limit_reached = set()
|
|
121
122
|
|
|
122
123
|
@classmethod
|
|
123
124
|
def create(
|
|
@@ -166,16 +167,30 @@ class MetadataRestSink(Sink): # pylint: disable=too-many-public-methods
|
|
|
166
167
|
Send to OM the request creation received as is.
|
|
167
168
|
:param entity_request: Create Entity request
|
|
168
169
|
"""
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
if type(entity_request).__name__ in self.limit_reached:
|
|
171
|
+
# If the limit has been reached, we don't need to try to ingest the entity
|
|
172
|
+
# Note: We use PatchRequest to update the entity, so updating is not affected by the limit
|
|
173
|
+
return None
|
|
174
|
+
try:
|
|
175
|
+
created = self.metadata.create_or_update(entity_request)
|
|
176
|
+
if created:
|
|
177
|
+
return Either(right=created)
|
|
172
178
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
179
|
+
error = f"Failed to ingest {type(entity_request).__name__}"
|
|
180
|
+
return Either(
|
|
181
|
+
left=StackTraceError(
|
|
182
|
+
name=type(entity_request).__name__, error=error, stackTrace=None
|
|
183
|
+
)
|
|
184
|
+
)
|
|
185
|
+
except LimitsException as _:
|
|
186
|
+
self.limit_reached.add(type(entity_request).__name__)
|
|
187
|
+
return Either(
|
|
188
|
+
left=StackTraceError(
|
|
189
|
+
name=type(entity_request).__name__,
|
|
190
|
+
error=f"Limit reached for {type(entity_request).__name__}",
|
|
191
|
+
stackTrace=None,
|
|
192
|
+
)
|
|
177
193
|
)
|
|
178
|
-
)
|
|
179
194
|
|
|
180
195
|
@_run_dispatch.register
|
|
181
196
|
def patch_entity(self, record: PatchRequest) -> Either[Entity]:
|
|
@@ -329,12 +344,26 @@ class MetadataRestSink(Sink): # pylint: disable=too-many-public-methods
|
|
|
329
344
|
team = self.metadata.create_or_update(create_team)
|
|
330
345
|
self.team_entities[team.name.root] = str(team.id.root)
|
|
331
346
|
return team
|
|
347
|
+
except LimitsException as _:
|
|
348
|
+
if type(create_team).__name__ in self.limit_reached:
|
|
349
|
+
# Note: We do not have a way to patch the team,
|
|
350
|
+
# so we try to put and handle exception
|
|
351
|
+
return None
|
|
352
|
+
self.limit_reached.add(type(create_team).__name__)
|
|
353
|
+
return Either(
|
|
354
|
+
left=StackTraceError(
|
|
355
|
+
name=type(create_team).__name__,
|
|
356
|
+
error=f"Limit reached for {type(create_team).__name__}",
|
|
357
|
+
stackTrace=None,
|
|
358
|
+
)
|
|
359
|
+
)
|
|
332
360
|
except Exception as exc:
|
|
333
361
|
logger.debug(traceback.format_exc())
|
|
334
362
|
logger.error(f"Unexpected error creating team [{create_team}]: {exc}")
|
|
335
363
|
|
|
336
364
|
return None
|
|
337
365
|
|
|
366
|
+
# pylint: disable=too-many-branches
|
|
338
367
|
@_run_dispatch.register
|
|
339
368
|
def write_users(self, record: OMetaUserProfile) -> Either[User]:
|
|
340
369
|
"""
|
|
@@ -388,8 +417,22 @@ class MetadataRestSink(Sink): # pylint: disable=too-many-public-methods
|
|
|
388
417
|
metadata_user = CreateUserRequest(**user_profile)
|
|
389
418
|
|
|
390
419
|
# Create user
|
|
391
|
-
|
|
392
|
-
|
|
420
|
+
try:
|
|
421
|
+
user = self.metadata.create_or_update(metadata_user)
|
|
422
|
+
return Either(right=user)
|
|
423
|
+
except LimitsException as _:
|
|
424
|
+
if type(metadata_user).__name__ in self.limit_reached:
|
|
425
|
+
# Note: We do not have a way to patch the user,
|
|
426
|
+
# so we try to put and handle exception
|
|
427
|
+
return None
|
|
428
|
+
self.limit_reached.add(type(metadata_user).__name__)
|
|
429
|
+
return Either(
|
|
430
|
+
left=StackTraceError(
|
|
431
|
+
name=type(metadata_user).__name__,
|
|
432
|
+
error=f"Limit reached for {type(metadata_user).__name__}",
|
|
433
|
+
stackTrace=None,
|
|
434
|
+
)
|
|
435
|
+
)
|
|
393
436
|
|
|
394
437
|
@_run_dispatch.register
|
|
395
438
|
def delete_entity(self, record: DeleteEntity) -> Either[Entity]:
|
|
@@ -39,9 +39,6 @@ from metadata.ingestion.api.delete import delete_entity_from_source
|
|
|
39
39
|
from metadata.ingestion.api.models import Either
|
|
40
40
|
from metadata.ingestion.api.steps import Source
|
|
41
41
|
from metadata.ingestion.api.topology_runner import TopologyRunnerMixin
|
|
42
|
-
from metadata.ingestion.connections.test_connections import (
|
|
43
|
-
raise_test_connection_exception,
|
|
44
|
-
)
|
|
45
42
|
from metadata.ingestion.models.delete_entity import DeleteEntity
|
|
46
43
|
from metadata.ingestion.models.topology import (
|
|
47
44
|
NodeStage,
|
|
@@ -50,7 +47,7 @@ from metadata.ingestion.models.topology import (
|
|
|
50
47
|
TopologyNode,
|
|
51
48
|
)
|
|
52
49
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
53
|
-
from metadata.ingestion.source.connections import get_connection,
|
|
50
|
+
from metadata.ingestion.source.connections import get_connection, test_connection_common
|
|
54
51
|
from metadata.utils import fqn
|
|
55
52
|
from metadata.utils.logger import ingestion_logger
|
|
56
53
|
|
|
@@ -177,11 +174,9 @@ class ApiServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
177
174
|
"""By default, nothing to close"""
|
|
178
175
|
|
|
179
176
|
def test_connection(self) -> None:
|
|
180
|
-
|
|
181
|
-
result = test_connection_fn(
|
|
177
|
+
test_connection_common(
|
|
182
178
|
self.metadata, self.connection_obj, self.service_connection
|
|
183
179
|
)
|
|
184
|
-
raise_test_connection_exception(result)
|
|
185
180
|
|
|
186
181
|
def mark_api_collections_as_deleted(self) -> Iterable[Either[DeleteEntity]]:
|
|
187
182
|
"""Method to mark the api collection as deleted"""
|
|
@@ -14,11 +14,16 @@ Main entrypoints to create and test connections
|
|
|
14
14
|
for any source.
|
|
15
15
|
"""
|
|
16
16
|
import traceback
|
|
17
|
-
from typing import Any, Callable
|
|
17
|
+
from typing import Any, Callable, Optional, Type
|
|
18
18
|
|
|
19
19
|
from pydantic import BaseModel
|
|
20
|
-
from sqlalchemy.engine import Engine
|
|
21
20
|
|
|
21
|
+
from metadata.ingestion.connections.connection import BaseConnection
|
|
22
|
+
from metadata.ingestion.connections.test_connections import (
|
|
23
|
+
raise_test_connection_exception,
|
|
24
|
+
)
|
|
25
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
26
|
+
from metadata.utils.class_helper import get_service_type_from_source_type
|
|
22
27
|
from metadata.utils.importer import import_connection_fn
|
|
23
28
|
from metadata.utils.logger import cli_logger
|
|
24
29
|
|
|
@@ -28,10 +33,71 @@ GET_CONNECTION_FN_NAME = "get_connection"
|
|
|
28
33
|
TEST_CONNECTION_FN_NAME = "test_connection"
|
|
29
34
|
|
|
30
35
|
|
|
36
|
+
# TODO: This is a temporary solution to get the connection class from the service spec.
|
|
37
|
+
# Once we migrate all connectors we shouldn't need this.
|
|
38
|
+
def _get_connection_class_from_spec(
|
|
39
|
+
connection: BaseModel,
|
|
40
|
+
) -> Optional[Type[BaseConnection]]:
|
|
41
|
+
"""
|
|
42
|
+
Helper method to get the connection class from the connection spec.
|
|
43
|
+
Returns the connection class if successful, None otherwise.
|
|
44
|
+
"""
|
|
45
|
+
from metadata.utils.service_spec.service_spec import ( # pylint: disable=import-outside-toplevel
|
|
46
|
+
BaseSpec,
|
|
47
|
+
import_connection_class,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
connection_type = getattr(connection, "type", None)
|
|
51
|
+
if connection_type:
|
|
52
|
+
service_type = get_service_type_from_source_type(connection_type.value)
|
|
53
|
+
try:
|
|
54
|
+
spec = BaseSpec.get_for_source(service_type, connection_type.value.lower())
|
|
55
|
+
if getattr(spec, "connection_class", None):
|
|
56
|
+
connection_class = import_connection_class(
|
|
57
|
+
service_type, connection_type.value.lower()
|
|
58
|
+
)
|
|
59
|
+
return connection_class
|
|
60
|
+
except Exception:
|
|
61
|
+
logger.error(
|
|
62
|
+
f"Error importing connection class for {connection_type.value}"
|
|
63
|
+
)
|
|
64
|
+
logger.debug(traceback.format_exc())
|
|
65
|
+
return None
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def _get_connection_fn_from_service_spec(connection: BaseModel) -> Optional[Callable]:
|
|
69
|
+
"""
|
|
70
|
+
Import the get_connection function from the source, or use ServiceSpec connection_class if defined.
|
|
71
|
+
"""
|
|
72
|
+
connection_class = _get_connection_class_from_spec(connection)
|
|
73
|
+
if connection_class:
|
|
74
|
+
|
|
75
|
+
def _get_client(conn):
|
|
76
|
+
return connection_class(conn).get_client()
|
|
77
|
+
|
|
78
|
+
return _get_client
|
|
79
|
+
return None
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _get_test_fn_from_service_spec(connection: BaseModel) -> Optional[Callable]:
|
|
83
|
+
"""
|
|
84
|
+
Import the get_connection function from the source, or use ServiceSpec connection_class if defined.
|
|
85
|
+
"""
|
|
86
|
+
connection_class = _get_connection_class_from_spec(connection)
|
|
87
|
+
if connection_class:
|
|
88
|
+
return connection_class(connection).test_connection
|
|
89
|
+
return None
|
|
90
|
+
|
|
91
|
+
|
|
31
92
|
def get_connection_fn(connection: BaseModel) -> Callable:
|
|
32
93
|
"""
|
|
33
|
-
Import the get_connection function from the source
|
|
94
|
+
Import the get_connection function from the source, or use ServiceSpec connection_class if defined.
|
|
34
95
|
"""
|
|
96
|
+
# Try ServiceSpec path first
|
|
97
|
+
connection_fn = _get_connection_fn_from_service_spec(connection)
|
|
98
|
+
if connection_fn:
|
|
99
|
+
return connection_fn
|
|
100
|
+
# Fallback to default
|
|
35
101
|
return import_connection_fn(
|
|
36
102
|
connection=connection, function_name=GET_CONNECTION_FN_NAME
|
|
37
103
|
)
|
|
@@ -41,6 +107,10 @@ def get_test_connection_fn(connection: BaseModel) -> Callable:
|
|
|
41
107
|
"""
|
|
42
108
|
Import the test_connection function from the source
|
|
43
109
|
"""
|
|
110
|
+
test_fn = _get_test_fn_from_service_spec(connection)
|
|
111
|
+
if test_fn:
|
|
112
|
+
return test_fn
|
|
113
|
+
# Fallback to default
|
|
44
114
|
return import_connection_fn(
|
|
45
115
|
connection=connection, function_name=TEST_CONNECTION_FN_NAME
|
|
46
116
|
)
|
|
@@ -54,15 +124,11 @@ def get_connection(connection: BaseModel) -> Any:
|
|
|
54
124
|
return get_connection_fn(connection)(connection)
|
|
55
125
|
|
|
56
126
|
|
|
57
|
-
def
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
as well as idle connections in the engine
|
|
61
|
-
"""
|
|
127
|
+
def test_connection_common(metadata: OpenMetadata, connection_obj, service_connection):
|
|
128
|
+
test_connection_fn = get_test_connection_fn(service_connection)
|
|
129
|
+
# TODO: Remove this once we migrate all connectors to use the new test connection function
|
|
62
130
|
try:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
logger.warning(f"Error Killing the active connections {exc}")
|
|
68
|
-
logger.debug(traceback.format_exc())
|
|
131
|
+
result = test_connection_fn(metadata)
|
|
132
|
+
except TypeError:
|
|
133
|
+
result = test_connection_fn(metadata, connection_obj, service_connection)
|
|
134
|
+
raise_test_connection_exception(result)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Copyright 2025 Collate
|
|
2
|
+
# Licensed under the Collate Community License, Version 1.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# https://github.com/open-metadata/OpenMetadata/blob/main/ingestion/LICENSE
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
|
|
12
|
+
import traceback
|
|
13
|
+
|
|
14
|
+
from sqlalchemy.engine import Engine
|
|
15
|
+
|
|
16
|
+
from metadata.utils.logger import cli_logger
|
|
17
|
+
|
|
18
|
+
logger = cli_logger()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def kill_active_connections(engine: Engine):
|
|
22
|
+
"""
|
|
23
|
+
Method to kill the active connections
|
|
24
|
+
as well as idle connections in the engine
|
|
25
|
+
"""
|
|
26
|
+
try:
|
|
27
|
+
active_conn = engine.pool.checkedout() + engine.pool.checkedin()
|
|
28
|
+
if active_conn:
|
|
29
|
+
engine.dispose()
|
|
30
|
+
except Exception as exc:
|
|
31
|
+
logger.warning(f"Error Killing the active connections {exc}")
|
|
32
|
+
logger.debug(traceback.format_exc())
|
|
@@ -55,9 +55,6 @@ from metadata.ingestion.api.delete import delete_entity_from_source
|
|
|
55
55
|
from metadata.ingestion.api.models import Either, Entity
|
|
56
56
|
from metadata.ingestion.api.steps import Source
|
|
57
57
|
from metadata.ingestion.api.topology_runner import C, TopologyRunnerMixin
|
|
58
|
-
from metadata.ingestion.connections.test_connections import (
|
|
59
|
-
raise_test_connection_exception,
|
|
60
|
-
)
|
|
61
58
|
from metadata.ingestion.lineage.sql_lineage import get_column_fqn
|
|
62
59
|
from metadata.ingestion.models.delete_entity import DeleteEntity
|
|
63
60
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
@@ -70,7 +67,7 @@ from metadata.ingestion.models.topology import (
|
|
|
70
67
|
TopologyNode,
|
|
71
68
|
)
|
|
72
69
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
73
|
-
from metadata.ingestion.source.connections import get_connection,
|
|
70
|
+
from metadata.ingestion.source.connections import get_connection, test_connection_common
|
|
74
71
|
from metadata.utils import fqn
|
|
75
72
|
from metadata.utils.filters import filter_by_dashboard, filter_by_project
|
|
76
73
|
from metadata.utils.logger import ingestion_logger
|
|
@@ -362,7 +359,31 @@ class DashboardServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
362
359
|
We will look for the data in all the services
|
|
363
360
|
we have informed.
|
|
364
361
|
"""
|
|
362
|
+
# yield datamodel dashboard lineage
|
|
365
363
|
for lineage in self.yield_datamodel_dashboard_lineage() or []:
|
|
364
|
+
yield from self.yield_lineage_request(lineage)
|
|
365
|
+
|
|
366
|
+
# yield datamodel lineage with tables from db services
|
|
367
|
+
db_service_names = self.get_db_service_names()
|
|
368
|
+
if not db_service_names:
|
|
369
|
+
for lineage in (
|
|
370
|
+
self.yield_dashboard_lineage_details(dashboard_details) or []
|
|
371
|
+
):
|
|
372
|
+
yield from self.yield_lineage_request(lineage)
|
|
373
|
+
for db_service_name in db_service_names or []:
|
|
374
|
+
for lineage in (
|
|
375
|
+
self.yield_dashboard_lineage_details(dashboard_details, db_service_name)
|
|
376
|
+
or []
|
|
377
|
+
):
|
|
378
|
+
yield from self.yield_lineage_request(lineage)
|
|
379
|
+
|
|
380
|
+
def yield_lineage_request(
|
|
381
|
+
self, lineage: Optional[Either[AddLineageRequest]] = None
|
|
382
|
+
) -> Iterable[Either[OMetaLineageRequest]]:
|
|
383
|
+
"""
|
|
384
|
+
Method to yield lineage request
|
|
385
|
+
"""
|
|
386
|
+
if lineage:
|
|
366
387
|
if lineage.right is not None:
|
|
367
388
|
yield Either(
|
|
368
389
|
right=OMetaLineageRequest(
|
|
@@ -373,14 +394,6 @@ class DashboardServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
373
394
|
else:
|
|
374
395
|
yield lineage
|
|
375
396
|
|
|
376
|
-
db_service_names = self.get_db_service_names()
|
|
377
|
-
if not db_service_names:
|
|
378
|
-
yield from self.yield_dashboard_lineage_details(dashboard_details) or []
|
|
379
|
-
for db_service_name in db_service_names or []:
|
|
380
|
-
yield from self.yield_dashboard_lineage_details(
|
|
381
|
-
dashboard_details, db_service_name
|
|
382
|
-
) or []
|
|
383
|
-
|
|
384
397
|
def yield_bulk_tags(
|
|
385
398
|
self, *args, **kwargs
|
|
386
399
|
) -> Iterable[Either[OMetaTagAndClassification]]:
|
|
@@ -579,11 +592,9 @@ class DashboardServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
579
592
|
yield dashboard_details
|
|
580
593
|
|
|
581
594
|
def test_connection(self) -> None:
|
|
582
|
-
|
|
583
|
-
result = test_connection_fn(
|
|
595
|
+
test_connection_common(
|
|
584
596
|
self.metadata, self.connection_obj, self.service_connection
|
|
585
597
|
)
|
|
586
|
-
raise_test_connection_exception(result)
|
|
587
598
|
|
|
588
599
|
def prepare(self):
|
|
589
600
|
"""By default, nothing to prepare"""
|
|
@@ -455,7 +455,7 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
455
455
|
measures.append(Column(**parsed_measure.model_dump()))
|
|
456
456
|
except Exception as err:
|
|
457
457
|
logger.debug(traceback.format_exc())
|
|
458
|
-
logger.
|
|
458
|
+
logger.debug(f"Error processing datamodel nested measure: {err}")
|
|
459
459
|
return measures
|
|
460
460
|
|
|
461
461
|
def _get_child_columns(self, table: PowerBiTable) -> List[Column]:
|
|
@@ -631,20 +631,26 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
631
631
|
entity=Dashboard,
|
|
632
632
|
fqn=report_fqn,
|
|
633
633
|
)
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
634
|
+
if dashboard_details.datasetId:
|
|
635
|
+
datamodel_fqn = fqn.build(
|
|
636
|
+
self.metadata,
|
|
637
|
+
entity_type=DashboardDataModel,
|
|
638
|
+
service_name=self.context.get().dashboard_service,
|
|
639
|
+
data_model_name=dashboard_details.datasetId,
|
|
640
|
+
)
|
|
641
|
+
datamodel_entity = self.metadata.get_by_name(
|
|
642
|
+
entity=DashboardDataModel,
|
|
643
|
+
fqn=datamodel_fqn,
|
|
644
|
+
)
|
|
644
645
|
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
646
|
+
if datamodel_entity and report_entity:
|
|
647
|
+
yield self._get_add_lineage_request(
|
|
648
|
+
to_entity=report_entity, from_entity=datamodel_entity
|
|
649
|
+
)
|
|
650
|
+
else:
|
|
651
|
+
logger.debug(
|
|
652
|
+
f"Skipping datamodel and report lineage for"
|
|
653
|
+
f" {dashboard_details.id} as datasetId is not found"
|
|
648
654
|
)
|
|
649
655
|
|
|
650
656
|
except Exception as exc: # pylint: disable=broad-except
|
|
@@ -1184,6 +1190,12 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
1184
1190
|
Method to process the dashboard owners
|
|
1185
1191
|
"""
|
|
1186
1192
|
try:
|
|
1193
|
+
if not self.source_config.includeOwners:
|
|
1194
|
+
logger.debug(
|
|
1195
|
+
f"Skipping owner processing for {dashboard_details.id} "
|
|
1196
|
+
f"as includeOwners is False"
|
|
1197
|
+
)
|
|
1198
|
+
return None
|
|
1187
1199
|
owner_ref_list = [] # to assign multiple owners to entity if they exist
|
|
1188
1200
|
for owner in dashboard_details.users or []:
|
|
1189
1201
|
owner_ref = None
|
|
@@ -1198,7 +1210,7 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
1198
1210
|
access_right = owner.dashboardUserAccessRight
|
|
1199
1211
|
|
|
1200
1212
|
if owner.userType != "Member":
|
|
1201
|
-
logger.
|
|
1213
|
+
logger.debug(
|
|
1202
1214
|
f"User is not a member of {dashboard_details.id}:"
|
|
1203
1215
|
f" ({owner.displayName}, {owner.email})"
|
|
1204
1216
|
)
|
|
@@ -1211,7 +1223,7 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
1211
1223
|
try:
|
|
1212
1224
|
owner_email = EmailStr._validate(owner.email)
|
|
1213
1225
|
except PydanticCustomError:
|
|
1214
|
-
logger.
|
|
1226
|
+
logger.debug(f"Invalid email for owner: {owner.email}")
|
|
1215
1227
|
owner_email = None
|
|
1216
1228
|
if owner_email:
|
|
1217
1229
|
try:
|
|
@@ -1219,7 +1231,7 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
1219
1231
|
owner_email.lower()
|
|
1220
1232
|
)
|
|
1221
1233
|
except Exception as err:
|
|
1222
|
-
logger.
|
|
1234
|
+
logger.debug(
|
|
1223
1235
|
f"Could not process owner data with email"
|
|
1224
1236
|
f" {owner.email} in {dashboard_details.id}: {err}"
|
|
1225
1237
|
)
|
|
@@ -1229,14 +1241,14 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
1229
1241
|
name=owner.displayName
|
|
1230
1242
|
)
|
|
1231
1243
|
except Exception as err:
|
|
1232
|
-
logger.
|
|
1244
|
+
logger.debug(
|
|
1233
1245
|
f"Could not process owner data with name"
|
|
1234
1246
|
f" {owner.displayName} in {dashboard_details.id}: {err}"
|
|
1235
1247
|
)
|
|
1236
1248
|
if owner_ref:
|
|
1237
1249
|
owner_ref_list.append(owner_ref.root[0])
|
|
1238
1250
|
else:
|
|
1239
|
-
logger.
|
|
1251
|
+
logger.debug(
|
|
1240
1252
|
f"User does not have owner, admin or write access to"
|
|
1241
1253
|
f" {dashboard_details.id}: ({owner.displayName}, {owner.email})"
|
|
1242
1254
|
)
|
|
@@ -1254,7 +1266,7 @@ class PowerbiSource(DashboardServiceSource):
|
|
|
1254
1266
|
if owner_ref and owner_ref.root[0] not in owner_ref_list:
|
|
1255
1267
|
owner_ref_list.append(owner_ref.root[0])
|
|
1256
1268
|
except Exception as err:
|
|
1257
|
-
logger.
|
|
1269
|
+
logger.debug(f"Could not fetch current active user due to {err}")
|
|
1258
1270
|
if len(owner_ref_list) > 0:
|
|
1259
1271
|
logger.debug(
|
|
1260
1272
|
f"Successfully fetched owners data for {dashboard_details.id}"
|
|
@@ -24,7 +24,7 @@ from metadata.generated.schema.entity.services.connections.dashboard.supersetCon
|
|
|
24
24
|
SupersetConnection,
|
|
25
25
|
)
|
|
26
26
|
from metadata.generated.schema.entity.services.connections.database.mysqlConnection import (
|
|
27
|
-
MysqlConnection,
|
|
27
|
+
MysqlConnection as MysqlConnectionConfig,
|
|
28
28
|
)
|
|
29
29
|
from metadata.generated.schema.entity.services.connections.database.postgresConnection import (
|
|
30
30
|
PostgresConnection,
|
|
@@ -46,16 +46,16 @@ from metadata.ingestion.source.dashboard.superset.queries import (
|
|
|
46
46
|
FETCH_ALL_CHARTS_TEST,
|
|
47
47
|
FETCH_DASHBOARDS_TEST,
|
|
48
48
|
)
|
|
49
|
-
from metadata.ingestion.source.database.mysql.connection import
|
|
50
|
-
get_connection as mysql_get_connection,
|
|
51
|
-
)
|
|
49
|
+
from metadata.ingestion.source.database.mysql.connection import MySQLConnection
|
|
52
50
|
from metadata.ingestion.source.database.postgres.connection import (
|
|
53
51
|
get_connection as pg_get_connection,
|
|
54
52
|
)
|
|
55
53
|
from metadata.utils.constants import THREE_MIN
|
|
56
54
|
|
|
57
55
|
|
|
58
|
-
def get_connection(
|
|
56
|
+
def get_connection(
|
|
57
|
+
connection: SupersetConnection,
|
|
58
|
+
) -> Union[SupersetAPIClient, Engine, None]:
|
|
59
59
|
"""
|
|
60
60
|
Create connection
|
|
61
61
|
"""
|
|
@@ -63,8 +63,8 @@ def get_connection(connection: SupersetConnection) -> SupersetAPIClient:
|
|
|
63
63
|
return SupersetAPIClient(connection)
|
|
64
64
|
if isinstance(connection.connection, PostgresConnection):
|
|
65
65
|
return pg_get_connection(connection=connection.connection)
|
|
66
|
-
if isinstance(connection.connection,
|
|
67
|
-
return
|
|
66
|
+
if isinstance(connection.connection, MysqlConnectionConfig):
|
|
67
|
+
return MySQLConnection(connection.connection).get_client()
|
|
68
68
|
return None
|
|
69
69
|
|
|
70
70
|
|
|
@@ -89,7 +89,7 @@ def test_connection(
|
|
|
89
89
|
else:
|
|
90
90
|
test_fn["CheckAccess"] = partial(test_connection_engine_step, client)
|
|
91
91
|
test_fn["GetDashboards"] = partial(test_query, client, FETCH_DASHBOARDS_TEST)
|
|
92
|
-
if isinstance(service_connection.connection,
|
|
92
|
+
if isinstance(service_connection.connection, MysqlConnectionConfig):
|
|
93
93
|
test_fn["GetCharts"] = partial(
|
|
94
94
|
test_query, client, FETCH_ALL_CHARTS_TEST.replace('"', "`")
|
|
95
95
|
)
|
|
@@ -299,8 +299,9 @@ class TableauSource(DashboardServiceSource):
|
|
|
299
299
|
topology. And they are cleared after processing each Dashboard because of the 'clear_cache' option.
|
|
300
300
|
"""
|
|
301
301
|
try:
|
|
302
|
+
base_url = self.get_base_url()
|
|
302
303
|
dashboard_url = (
|
|
303
|
-
f"{clean_uri(str(
|
|
304
|
+
f"{clean_uri(str(base_url))}"
|
|
304
305
|
f"/#{urlparse(dashboard_details.webpageUrl).fragment}/views"
|
|
305
306
|
)
|
|
306
307
|
dashboard_request = CreateDashboardRequest(
|
|
@@ -731,8 +732,9 @@ class TableauSource(DashboardServiceSource):
|
|
|
731
732
|
)
|
|
732
733
|
workbook_chart_name = ChartUrl(chart.contentUrl)
|
|
733
734
|
|
|
735
|
+
base_url = self.get_base_url()
|
|
734
736
|
chart_url = (
|
|
735
|
-
f"{clean_uri(
|
|
737
|
+
f"{clean_uri(str(base_url))}"
|
|
736
738
|
f"#{site_url}"
|
|
737
739
|
f"views/{workbook_chart_name.workbook_name}"
|
|
738
740
|
f"/{workbook_chart_name.chart_url_name}"
|
|
@@ -1084,3 +1086,11 @@ class TableauSource(DashboardServiceSource):
|
|
|
1084
1086
|
stackTrace=traceback.format_exc(),
|
|
1085
1087
|
)
|
|
1086
1088
|
)
|
|
1089
|
+
|
|
1090
|
+
def get_base_url(self) -> str:
|
|
1091
|
+
"""
|
|
1092
|
+
Get the proxy url for the tableau server
|
|
1093
|
+
"""
|
|
1094
|
+
if self.config.serviceConnection.root.config.proxyURL:
|
|
1095
|
+
return str(self.config.serviceConnection.root.config.proxyURL)
|
|
1096
|
+
return str(self.config.serviceConnection.root.config.hostPort)
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
Tableau Source Model module
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
+
import uuid
|
|
16
17
|
from typing import Dict, List, Optional, Set, Union
|
|
17
18
|
|
|
18
19
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
@@ -28,9 +29,18 @@ class TableauBaseModel(BaseModel):
|
|
|
28
29
|
|
|
29
30
|
model_config = ConfigDict(extra="allow")
|
|
30
31
|
|
|
31
|
-
id
|
|
32
|
+
# in case of personal space workbooks, the project id is returned as a UUID
|
|
33
|
+
id: Union[str, uuid.UUID]
|
|
32
34
|
name: Optional[str] = None
|
|
33
35
|
|
|
36
|
+
# pylint: disable=no-self-argument
|
|
37
|
+
@field_validator("id", mode="before")
|
|
38
|
+
def coerce_uuid_to_string(cls, value):
|
|
39
|
+
"""Ensure id is always stored as a string internally"""
|
|
40
|
+
if isinstance(value, uuid.UUID):
|
|
41
|
+
return str(value)
|
|
42
|
+
return value
|
|
43
|
+
|
|
34
44
|
def __hash__(self):
|
|
35
45
|
return hash(self.id)
|
|
36
46
|
|
|
@@ -187,7 +197,7 @@ class TableauDashboard(TableauBaseModel):
|
|
|
187
197
|
tags: Optional[Set] = []
|
|
188
198
|
webpageUrl: Optional[str] = None
|
|
189
199
|
charts: Optional[List[TableauChart]] = None
|
|
190
|
-
dataModels: List[DataSource] = []
|
|
200
|
+
dataModels: Optional[List[DataSource]] = []
|
|
191
201
|
custom_sql_queries: Optional[List[str]] = None
|
|
192
202
|
user_views: Optional[int] = None
|
|
193
203
|
|
|
@@ -68,21 +68,25 @@ def get_connection_url(connection: BigQueryConnection) -> str:
|
|
|
68
68
|
connection.credentials.gcpConfig.projectId, SingleProjectId
|
|
69
69
|
):
|
|
70
70
|
if not connection.credentials.gcpConfig.projectId.root:
|
|
71
|
-
return f"{connection.scheme.value}://{connection.credentials.gcpConfig.projectId or ''}"
|
|
71
|
+
return f"{connection.scheme.value}://{connection.billingProjectId or connection.credentials.gcpConfig.projectId.root or ''}"
|
|
72
72
|
if (
|
|
73
73
|
not connection.credentials.gcpConfig.privateKey
|
|
74
74
|
and connection.credentials.gcpConfig.projectId.root
|
|
75
75
|
):
|
|
76
76
|
project_id = connection.credentials.gcpConfig.projectId.root
|
|
77
|
-
os.environ["GOOGLE_CLOUD_PROJECT"] =
|
|
78
|
-
|
|
77
|
+
os.environ["GOOGLE_CLOUD_PROJECT"] = (
|
|
78
|
+
connection.billingProjectId or project_id
|
|
79
|
+
)
|
|
80
|
+
return f"{connection.scheme.value}://{connection.billingProjectId or connection.credentials.gcpConfig.projectId.root}"
|
|
79
81
|
elif isinstance(connection.credentials.gcpConfig.projectId, MultipleProjectId):
|
|
80
82
|
for project_id in connection.credentials.gcpConfig.projectId.root:
|
|
81
83
|
if not connection.credentials.gcpConfig.privateKey and project_id:
|
|
82
84
|
# Setting environment variable based on project id given by user / set in ADC
|
|
83
|
-
os.environ["GOOGLE_CLOUD_PROJECT"] =
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
os.environ["GOOGLE_CLOUD_PROJECT"] = (
|
|
86
|
+
connection.billingProjectId or project_id
|
|
87
|
+
)
|
|
88
|
+
return f"{connection.scheme.value}://{connection.billingProjectId or project_id}"
|
|
89
|
+
return f"{connection.scheme.value}://{connection.billingProjectId or ''}"
|
|
86
90
|
|
|
87
91
|
# If gcpConfig is the JSON key path and projectId is defined, we use it by default
|
|
88
92
|
elif (
|
|
@@ -92,13 +96,13 @@ def get_connection_url(connection: BigQueryConnection) -> str:
|
|
|
92
96
|
if isinstance( # pylint: disable=no-else-return
|
|
93
97
|
connection.credentials.gcpConfig.projectId, SingleProjectId
|
|
94
98
|
):
|
|
95
|
-
return f"{connection.scheme.value}://{connection.credentials.gcpConfig.projectId.root}"
|
|
99
|
+
return f"{connection.scheme.value}://{connection.billingProjectId or connection.credentials.gcpConfig.projectId.root}"
|
|
96
100
|
|
|
97
101
|
elif isinstance(connection.credentials.gcpConfig.projectId, MultipleProjectId):
|
|
98
102
|
for project_id in connection.credentials.gcpConfig.projectId.root:
|
|
99
|
-
return f"{connection.scheme.value}://{project_id}"
|
|
103
|
+
return f"{connection.scheme.value}://{connection.billingProjectId or project_id}"
|
|
100
104
|
|
|
101
|
-
return f"{connection.scheme.value}://"
|
|
105
|
+
return f"{connection.scheme.value}://{connection.billingProjectId or ''}"
|
|
102
106
|
|
|
103
107
|
|
|
104
108
|
def get_connection(connection: BigQueryConnection) -> Engine:
|