openmetadata-ingestion 1.7.5.0__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/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 +1 -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 +2 -7
- 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/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/profiler/system.py +1 -1
- 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/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/interface/sqlalchemy/profiler_interface.py +1 -0
- 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.5.0.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/METADATA +513 -502
- {openmetadata_ingestion-1.7.5.0.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/RECORD +788 -765
- {openmetadata_ingestion-1.7.5.0.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.7.5.0.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.7.5.0.dist-info → openmetadata_ingestion-1.8.0.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.7.5.0.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
|
|
@@ -595,11 +592,9 @@ class DashboardServiceSource(TopologyRunnerMixin, Source, ABC):
|
|
|
595
592
|
yield dashboard_details
|
|
596
593
|
|
|
597
594
|
def test_connection(self) -> None:
|
|
598
|
-
|
|
599
|
-
result = test_connection_fn(
|
|
595
|
+
test_connection_common(
|
|
600
596
|
self.metadata, self.connection_obj, self.service_connection
|
|
601
597
|
)
|
|
602
|
-
raise_test_connection_exception(result)
|
|
603
598
|
|
|
604
599
|
def prepare(self):
|
|
605
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
|
)
|
|
@@ -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:
|
|
@@ -72,7 +72,9 @@ def get_inspector_details(
|
|
|
72
72
|
"lifetime"
|
|
73
73
|
] = new_service_connection.credentials.gcpImpersonateServiceAccount.lifetime
|
|
74
74
|
|
|
75
|
-
client = get_bigquery_client(
|
|
75
|
+
client = get_bigquery_client(
|
|
76
|
+
project_id=new_service_connection.billingProjectId or database_name, **kwargs
|
|
77
|
+
)
|
|
76
78
|
engine = get_connection(new_service_connection)
|
|
77
79
|
inspector = inspect(engine)
|
|
78
80
|
|
|
@@ -86,15 +88,15 @@ def get_pk_constraint(
|
|
|
86
88
|
This function overrides to get primary key constraint
|
|
87
89
|
"""
|
|
88
90
|
try:
|
|
89
|
-
|
|
91
|
+
project, schema = schema.split(".")
|
|
92
|
+
constraints = PK_CACHE.get(f"{project}.{schema}")
|
|
90
93
|
if constraints is None:
|
|
91
94
|
constraints = connection.engine.execute(
|
|
92
95
|
BIGQUERY_TABLE_CONSTRAINTS.format(
|
|
93
|
-
project_id=
|
|
94
|
-
schema_name=schema,
|
|
96
|
+
project_id=project, schema_name=schema
|
|
95
97
|
)
|
|
96
98
|
)
|
|
97
|
-
PK_CACHE[f"{
|
|
99
|
+
PK_CACHE[f"{project}.{schema}"] = constraints.fetchall()
|
|
98
100
|
|
|
99
101
|
col_name = []
|
|
100
102
|
table_constraints = [row for row in constraints if row.table_name == table_name]
|
|
@@ -116,15 +118,15 @@ def get_foreign_keys(
|
|
|
116
118
|
This function overrides to get foreign key constraint
|
|
117
119
|
"""
|
|
118
120
|
try:
|
|
119
|
-
|
|
121
|
+
project, schema = schema.split(".")
|
|
122
|
+
constraints = FK_CACHE.get(f"{project}.{schema}")
|
|
120
123
|
if constraints is None:
|
|
121
124
|
constraints = connection.engine.execute(
|
|
122
125
|
BIGQUERY_FOREIGN_CONSTRAINTS.format(
|
|
123
|
-
project_id=
|
|
124
|
-
schema_name=schema,
|
|
126
|
+
project_id=project, schema_name=schema
|
|
125
127
|
)
|
|
126
128
|
)
|
|
127
|
-
FK_CACHE[f"{
|
|
129
|
+
FK_CACHE[f"{project}.{schema}"] = constraints.fetchall()
|
|
128
130
|
|
|
129
131
|
col_name = []
|
|
130
132
|
table_constraints = [row for row in constraints if row.table_name == table_name]
|