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
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
# Copyright 2022 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
|
+
Great Expectations subpackage to send expectation results to
|
|
13
|
+
Open Metadata table quality.
|
|
14
|
+
|
|
15
|
+
This subpackage needs to be used in Great Expectations
|
|
16
|
+
checkpoints actions.
|
|
17
|
+
"""
|
|
18
|
+
import logging
|
|
19
|
+
import traceback
|
|
20
|
+
from datetime import datetime
|
|
21
|
+
from typing import Dict, List, Literal, Optional, Union, cast
|
|
22
|
+
|
|
23
|
+
from great_expectations.checkpoint import (
|
|
24
|
+
ActionContext,
|
|
25
|
+
CheckpointResult,
|
|
26
|
+
ValidationAction,
|
|
27
|
+
)
|
|
28
|
+
from great_expectations.core.batch import Batch
|
|
29
|
+
from great_expectations.core.expectation_validation_result import (
|
|
30
|
+
ExpectationSuiteValidationResultMeta,
|
|
31
|
+
)
|
|
32
|
+
from great_expectations.datasource.fluent import DataAsset
|
|
33
|
+
from great_expectations.validator.validator import Validator
|
|
34
|
+
from sqlalchemy.engine.base import Connection, Engine
|
|
35
|
+
from sqlalchemy.engine.url import URL
|
|
36
|
+
|
|
37
|
+
from metadata.generated.schema.api.tests.createTestSuite import CreateTestSuiteRequest
|
|
38
|
+
from metadata.generated.schema.entity.data.table import Table
|
|
39
|
+
from metadata.generated.schema.tests.basic import (
|
|
40
|
+
TestCaseResult,
|
|
41
|
+
TestCaseStatus,
|
|
42
|
+
TestResultValue,
|
|
43
|
+
)
|
|
44
|
+
from metadata.generated.schema.tests.testCase import TestCase, TestCaseParameterValue
|
|
45
|
+
from metadata.generated.schema.tests.testDefinition import (
|
|
46
|
+
EntityType,
|
|
47
|
+
TestCaseParameterDefinition,
|
|
48
|
+
TestPlatform,
|
|
49
|
+
)
|
|
50
|
+
from metadata.generated.schema.tests.testSuite import TestSuite
|
|
51
|
+
from metadata.generated.schema.type.basic import Timestamp
|
|
52
|
+
from metadata.great_expectations.utils.ometa_config_handler import (
|
|
53
|
+
create_jinja_environment,
|
|
54
|
+
create_ometa_connection_obj,
|
|
55
|
+
render_template,
|
|
56
|
+
)
|
|
57
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
58
|
+
from metadata.utils import fqn
|
|
59
|
+
from metadata.utils.entity_link import get_entity_link
|
|
60
|
+
|
|
61
|
+
logger = logging.getLogger(
|
|
62
|
+
"great_expectations.validation_operators.validation_operators.openmetadata"
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class OpenMetadataValidationAction1xx(ValidationAction):
|
|
67
|
+
"""Open Metdata validation action for GE 1.x.x It inherits from
|
|
68
|
+
great expection validation action class and implements the
|
|
69
|
+
`run` method.
|
|
70
|
+
|
|
71
|
+
Attributes:
|
|
72
|
+
data_context: great expectation data context
|
|
73
|
+
database_service_name: name of the service for the table
|
|
74
|
+
api_version: default to v1
|
|
75
|
+
config_file_path: path to the open metdata config path
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
type: Literal["open_metadata_validation_action"] = "open_metadata_validation_action"
|
|
79
|
+
name: str = "OpenMetadataValidationAction"
|
|
80
|
+
config_file_path: Optional[str] = None
|
|
81
|
+
database_service_name: Optional[str] = None
|
|
82
|
+
schema_name: Optional[str] = "default"
|
|
83
|
+
database_name: str
|
|
84
|
+
table_name: Optional[str] = None
|
|
85
|
+
# Using Optional to make this field not part of the serialized model
|
|
86
|
+
# This will be initialized in the run method
|
|
87
|
+
ometa_conn: Optional[OpenMetadata] = None
|
|
88
|
+
|
|
89
|
+
def run( # pylint: disable=unused-argument, arguments-differ
|
|
90
|
+
self,
|
|
91
|
+
checkpoint_result: CheckpointResult,
|
|
92
|
+
action_context: Union[ActionContext, None],
|
|
93
|
+
):
|
|
94
|
+
"""main function to implement great expectation hook
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
validation_result_suite: result suite returned when checkpoint is ran
|
|
98
|
+
validation_result_suite_identifier: type of result suite
|
|
99
|
+
data_asset:
|
|
100
|
+
expectation_suite_identifier: type of expectation suite
|
|
101
|
+
checkpoint_identifier: identifier for the checkpoint
|
|
102
|
+
"""
|
|
103
|
+
self.ometa_conn = self._create_ometa_connection()
|
|
104
|
+
for _, v in checkpoint_result.run_results.items():
|
|
105
|
+
meta = v.meta
|
|
106
|
+
if meta:
|
|
107
|
+
check_point_spec = self._get_checkpoint_batch_spec(meta)
|
|
108
|
+
table_entity = self._get_table_entity(
|
|
109
|
+
self.database_name,
|
|
110
|
+
check_point_spec.get("schema_name", self.schema_name),
|
|
111
|
+
check_point_spec.get("table_name"),
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
else:
|
|
115
|
+
table_entity = self._get_table_entity(
|
|
116
|
+
self.database_name,
|
|
117
|
+
self.schema_name,
|
|
118
|
+
self.table_name,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
if table_entity:
|
|
122
|
+
for result in v.results:
|
|
123
|
+
self._handle_test_case(result, table_entity)
|
|
124
|
+
|
|
125
|
+
@staticmethod
|
|
126
|
+
def _get_checkpoint_batch_spec(
|
|
127
|
+
meta: Union[ExpectationSuiteValidationResultMeta, dict]
|
|
128
|
+
):
|
|
129
|
+
"""Return run meta and check instance of data_asset
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
data_asset: data assets of the checkpoint run
|
|
133
|
+
Returns:
|
|
134
|
+
SqlAlchemyDatasourceBatchSpec
|
|
135
|
+
Raises:
|
|
136
|
+
ValueError: if datasource not SqlAlchemyDatasourceBatchSpec raise
|
|
137
|
+
"""
|
|
138
|
+
return meta.get("batch_spec")
|
|
139
|
+
|
|
140
|
+
def _get_table_entity(
|
|
141
|
+
self,
|
|
142
|
+
database: Optional[str],
|
|
143
|
+
schema_name: Optional[str],
|
|
144
|
+
table_name: Optional[str],
|
|
145
|
+
) -> Optional[Table]:
|
|
146
|
+
"""Return the table entity for the test. If service name is defined
|
|
147
|
+
in GE checkpoint entity will be fetch using the FQN. If not provided
|
|
148
|
+
iterative search will be perform among all the entities. If 2 entities
|
|
149
|
+
are found with the same `database`.`schema`.`table` the method will
|
|
150
|
+
raise an error.
|
|
151
|
+
|
|
152
|
+
Args:
|
|
153
|
+
database: database name
|
|
154
|
+
schema_name: schema name
|
|
155
|
+
table_name: table name
|
|
156
|
+
|
|
157
|
+
Return:
|
|
158
|
+
Optional[Table]
|
|
159
|
+
|
|
160
|
+
Raises:
|
|
161
|
+
ValueError: if 2 entities with the same
|
|
162
|
+
`database`.`schema`.`table` are found
|
|
163
|
+
"""
|
|
164
|
+
if not all([schema_name, table_name]):
|
|
165
|
+
raise ValueError(
|
|
166
|
+
"No Schema or Table name provided. Can't fetch table entity from OpenMetadata."
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
if self.database_service_name:
|
|
170
|
+
return self.ometa_conn.get_by_name(
|
|
171
|
+
entity=Table,
|
|
172
|
+
fqn=f"{self.database_service_name}.{database}.{schema_name}.{table_name}",
|
|
173
|
+
fields=["testSuite"],
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
table_entity = [
|
|
177
|
+
entity
|
|
178
|
+
for entity in self.ometa_conn.list_entities(
|
|
179
|
+
entity=Table, fields=["testSuite"]
|
|
180
|
+
).entities
|
|
181
|
+
if f"{database}.{schema_name}.{table_name}"
|
|
182
|
+
in entity.fullyQualifiedName.root
|
|
183
|
+
]
|
|
184
|
+
|
|
185
|
+
if len(table_entity) > 1:
|
|
186
|
+
raise ValueError(
|
|
187
|
+
f"Non unique `database`.`schema`.`table` found: {table_entity}."
|
|
188
|
+
"Please specify an `database_service_name` in you checkpoint.yml file.",
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
if table_entity:
|
|
192
|
+
return table_entity[0]
|
|
193
|
+
|
|
194
|
+
logger.warning(
|
|
195
|
+
"No entity found for %s.%s.%s", database, schema_name, table_name
|
|
196
|
+
)
|
|
197
|
+
return None
|
|
198
|
+
|
|
199
|
+
def _check_or_create_test_suite(self, table_entity: Table) -> TestSuite:
|
|
200
|
+
"""Check if test suite already exists for a given table entity. If not
|
|
201
|
+
create a new one.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
table_entity: table entity object
|
|
205
|
+
Returns:
|
|
206
|
+
TestSuite
|
|
207
|
+
"""
|
|
208
|
+
|
|
209
|
+
if table_entity.testSuite:
|
|
210
|
+
test_suite = self.ometa_conn.get_by_name(
|
|
211
|
+
TestSuite, table_entity.testSuite.fullyQualifiedName
|
|
212
|
+
)
|
|
213
|
+
test_suite = cast(TestSuite, test_suite)
|
|
214
|
+
return test_suite
|
|
215
|
+
|
|
216
|
+
create_test_suite = CreateTestSuiteRequest(
|
|
217
|
+
name=f"{table_entity.fullyQualifiedName.root}.TestSuite",
|
|
218
|
+
basicEntityReference=table_entity.fullyQualifiedName.root,
|
|
219
|
+
) # type: ignore
|
|
220
|
+
test_suite = self.ometa_conn.create_or_update_executable_test_suite(
|
|
221
|
+
create_test_suite
|
|
222
|
+
)
|
|
223
|
+
return test_suite
|
|
224
|
+
|
|
225
|
+
@staticmethod
|
|
226
|
+
def _get_execution_engine_url(
|
|
227
|
+
data_asset: Union[Validator, DataAsset, Batch]
|
|
228
|
+
) -> URL:
|
|
229
|
+
"""Get execution engine used to run the expectation
|
|
230
|
+
|
|
231
|
+
Args:
|
|
232
|
+
data_asset: data assets of the checkpoint run
|
|
233
|
+
Returns:
|
|
234
|
+
URL
|
|
235
|
+
Raises:
|
|
236
|
+
ValueError: if expectation is not ran against DB
|
|
237
|
+
"""
|
|
238
|
+
if isinstance(data_asset.execution_engine.engine, Engine):
|
|
239
|
+
return data_asset.execution_engine.engine.url
|
|
240
|
+
if isinstance(data_asset.execution_engine.engine, Connection):
|
|
241
|
+
return data_asset.execution_engine.engine.engine.url
|
|
242
|
+
raise ValueError(
|
|
243
|
+
"Type is not supported. Make sur you ran your"
|
|
244
|
+
" expectations against a relational database"
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
def _create_ometa_connection(self) -> OpenMetadata:
|
|
248
|
+
"""Create OpenMetadata API connection"""
|
|
249
|
+
environment = create_jinja_environment(self.config_file_path)
|
|
250
|
+
rendered_config = render_template(environment)
|
|
251
|
+
|
|
252
|
+
return OpenMetadata(create_ometa_connection_obj(rendered_config))
|
|
253
|
+
|
|
254
|
+
def _build_test_case_fqn(self, table_fqn: str, result: Dict) -> str:
|
|
255
|
+
"""build test case fqn from table entity and GE test results
|
|
256
|
+
|
|
257
|
+
Args:
|
|
258
|
+
table_fqn (str): table fully qualified name
|
|
259
|
+
result (Dict): result from great expectation tests
|
|
260
|
+
"""
|
|
261
|
+
split_table_fqn = table_fqn.split(".")
|
|
262
|
+
fqn_ = fqn.build(
|
|
263
|
+
self.ometa_conn,
|
|
264
|
+
entity_type=TestCase,
|
|
265
|
+
service_name=split_table_fqn[0],
|
|
266
|
+
database_name=split_table_fqn[1],
|
|
267
|
+
schema_name=split_table_fqn[2],
|
|
268
|
+
table_name=split_table_fqn[3],
|
|
269
|
+
column_name=result["expectation_config"]["kwargs"].get("column"),
|
|
270
|
+
test_case_name=result["expectation_config"]["type"],
|
|
271
|
+
)
|
|
272
|
+
fqn_ = cast(str, fqn_)
|
|
273
|
+
return fqn_
|
|
274
|
+
|
|
275
|
+
def _get_test_case_params_value(self, result: dict) -> List[TestCaseParameterValue]:
|
|
276
|
+
"""Build test case parameter value from GE test result"""
|
|
277
|
+
if "observed_value" not in result["result"]:
|
|
278
|
+
return [
|
|
279
|
+
TestCaseParameterValue(
|
|
280
|
+
name="unexpected_percentage_total",
|
|
281
|
+
value=str(0.0),
|
|
282
|
+
)
|
|
283
|
+
]
|
|
284
|
+
|
|
285
|
+
return [
|
|
286
|
+
TestCaseParameterValue(
|
|
287
|
+
name=key,
|
|
288
|
+
value=str(value),
|
|
289
|
+
)
|
|
290
|
+
for key, value in result["expectation_config"]["kwargs"].items()
|
|
291
|
+
if key not in {"column", "batch_id"}
|
|
292
|
+
]
|
|
293
|
+
|
|
294
|
+
def _get_test_case_params_definition(
|
|
295
|
+
self, result: dict
|
|
296
|
+
) -> List[TestCaseParameterDefinition]:
|
|
297
|
+
"""Build test case parameter definition from GE test result"""
|
|
298
|
+
if "observed_value" not in result["result"]:
|
|
299
|
+
return [
|
|
300
|
+
TestCaseParameterDefinition(
|
|
301
|
+
name="unexpected_percentage_total",
|
|
302
|
+
) # type: ignore
|
|
303
|
+
]
|
|
304
|
+
|
|
305
|
+
return [
|
|
306
|
+
TestCaseParameterDefinition(
|
|
307
|
+
name=key,
|
|
308
|
+
) # type: ignore
|
|
309
|
+
for key, _ in result["expectation_config"]["kwargs"].items()
|
|
310
|
+
if key not in {"column", "batch_id"}
|
|
311
|
+
]
|
|
312
|
+
|
|
313
|
+
def _get_test_result_value(self, result: dict) -> List[TestResultValue]:
|
|
314
|
+
"""Get test result value from GE test result
|
|
315
|
+
|
|
316
|
+
Args:
|
|
317
|
+
result (dict): result
|
|
318
|
+
|
|
319
|
+
Returns:
|
|
320
|
+
TestCaseResult: a test case result object
|
|
321
|
+
"""
|
|
322
|
+
try:
|
|
323
|
+
test_result_value = TestResultValue(
|
|
324
|
+
name="observed_value",
|
|
325
|
+
value=str(result["result"]["observed_value"]),
|
|
326
|
+
)
|
|
327
|
+
except KeyError:
|
|
328
|
+
unexpected_percent_total = result["result"].get("unexpected_percent_total")
|
|
329
|
+
test_result_value = TestResultValue(
|
|
330
|
+
name="unexpected_percentage_total",
|
|
331
|
+
value=str(unexpected_percent_total),
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
return [test_result_value]
|
|
335
|
+
|
|
336
|
+
def _handle_test_case(self, result: Dict, table_entity: Table):
|
|
337
|
+
"""Handle adding test to table entity based on the test case.
|
|
338
|
+
Test Definitions will be created on the fly from the results of the
|
|
339
|
+
great expectations run. We will then write the test case results to the
|
|
340
|
+
specific test case.
|
|
341
|
+
|
|
342
|
+
Args:
|
|
343
|
+
result: GE test result
|
|
344
|
+
table_entity: table entity object
|
|
345
|
+
"""
|
|
346
|
+
|
|
347
|
+
try:
|
|
348
|
+
test_definition = self.ometa_conn.get_or_create_test_definition(
|
|
349
|
+
test_definition_fqn=result["expectation_config"]["type"],
|
|
350
|
+
test_definition_description=result["expectation_config"][
|
|
351
|
+
"type"
|
|
352
|
+
].replace("_", " "),
|
|
353
|
+
entity_type=EntityType.COLUMN
|
|
354
|
+
if "column" in result["expectation_config"]["kwargs"]
|
|
355
|
+
else EntityType.TABLE,
|
|
356
|
+
test_platforms=[TestPlatform.GreatExpectations],
|
|
357
|
+
test_case_parameter_definition=self._get_test_case_params_definition(
|
|
358
|
+
result
|
|
359
|
+
),
|
|
360
|
+
)
|
|
361
|
+
|
|
362
|
+
test_case_fqn = self._build_test_case_fqn(
|
|
363
|
+
table_entity.fullyQualifiedName.root,
|
|
364
|
+
result,
|
|
365
|
+
)
|
|
366
|
+
|
|
367
|
+
test_case = self.ometa_conn.get_or_create_test_case(
|
|
368
|
+
test_case_fqn,
|
|
369
|
+
entity_link=get_entity_link(
|
|
370
|
+
Table,
|
|
371
|
+
fqn=table_entity.fullyQualifiedName.root,
|
|
372
|
+
column_name=fqn.split_test_case_fqn(test_case_fqn).column,
|
|
373
|
+
),
|
|
374
|
+
test_definition_fqn=test_definition.fullyQualifiedName.root,
|
|
375
|
+
test_case_parameter_values=self._get_test_case_params_value(result),
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
self.ometa_conn.add_test_case_results(
|
|
379
|
+
test_results=TestCaseResult(
|
|
380
|
+
timestamp=Timestamp(int(datetime.now().timestamp() * 1000)),
|
|
381
|
+
testCaseStatus=TestCaseStatus.Success
|
|
382
|
+
if result["success"]
|
|
383
|
+
else TestCaseStatus.Failed,
|
|
384
|
+
testResultValue=self._get_test_result_value(result),
|
|
385
|
+
), # type: ignore
|
|
386
|
+
test_case_fqn=test_case.fullyQualifiedName.root,
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
logger.debug(
|
|
390
|
+
f"Test case result for {test_case.fullyQualifiedName.root} successfully ingested"
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
except Exception as exc:
|
|
394
|
+
logger.debug(traceback.format_exc())
|
|
395
|
+
logger.warning(exc)
|
|
@@ -31,6 +31,7 @@ from metadata.generated.schema.entity.services.connections.database.common.iamAu
|
|
|
31
31
|
IamAuthConfigurationSource,
|
|
32
32
|
)
|
|
33
33
|
from metadata.ingestion.connections.headers import inject_query_header_by_conn
|
|
34
|
+
from metadata.ingestion.connections.query_logger import attach_query_tracker
|
|
34
35
|
from metadata.ingestion.connections.secrets import connection_with_options_secrets
|
|
35
36
|
from metadata.utils.constants import BUILDER_PASSWORD_ATTR
|
|
36
37
|
from metadata.utils.logger import cli_logger
|
|
@@ -76,6 +77,8 @@ def create_generic_db_connection(
|
|
|
76
77
|
max_overflow=-1,
|
|
77
78
|
)
|
|
78
79
|
|
|
80
|
+
attach_query_tracker(engine)
|
|
81
|
+
|
|
79
82
|
if hasattr(connection, "supportsQueryComment"):
|
|
80
83
|
listen(
|
|
81
84
|
engine,
|
|
@@ -125,11 +128,10 @@ def init_empty_connection_options() -> ConnectionOptions:
|
|
|
125
128
|
return ConnectionOptions(root={})
|
|
126
129
|
|
|
127
130
|
|
|
128
|
-
def
|
|
131
|
+
def get_password_secret(connection) -> SecretStr:
|
|
129
132
|
"""
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
and adding to url.
|
|
133
|
+
Helper to extract the password secret from the connection object.
|
|
134
|
+
Handles BasicAuth, IamAuth, and falls back to empty SecretStr if not found.
|
|
133
135
|
"""
|
|
134
136
|
password = getattr(connection, BUILDER_PASSWORD_ATTR, None)
|
|
135
137
|
|
|
@@ -158,6 +160,14 @@ def _add_password(url: str, connection) -> str:
|
|
|
158
160
|
if not password:
|
|
159
161
|
logger.warning("No password has been provided in connection")
|
|
160
162
|
password = SecretStr("")
|
|
163
|
+
return password
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def _add_password(url: str, connection) -> str:
|
|
167
|
+
"""
|
|
168
|
+
A helper function that adds the password to the url if it exists.
|
|
169
|
+
"""
|
|
170
|
+
password = get_password_secret(connection)
|
|
161
171
|
url += f":{quote_plus(password.get_secret_value())}"
|
|
162
172
|
return url
|
|
163
173
|
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
"""
|
|
13
|
+
BaseConnection abstract class for database connectors.
|
|
14
|
+
|
|
15
|
+
This module defines the BaseConnection abstract base class,
|
|
16
|
+
which provides a common, type-safe interface for all database connection implementations.
|
|
17
|
+
Each connector subclass should inherit from BaseConnection and implement the required abstract methods
|
|
18
|
+
to provide a unified way to instantiate and interact with different data sources.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from abc import ABC, abstractmethod
|
|
22
|
+
from typing import Generic, Optional, TypeVar
|
|
23
|
+
|
|
24
|
+
from metadata.generated.schema.entity.automations.workflow import (
|
|
25
|
+
Workflow as AutomationWorkflow,
|
|
26
|
+
)
|
|
27
|
+
from metadata.generated.schema.entity.services.connections.testConnectionResult import (
|
|
28
|
+
TestConnectionResult,
|
|
29
|
+
)
|
|
30
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
31
|
+
from metadata.utils.constants import THREE_MIN
|
|
32
|
+
|
|
33
|
+
S = TypeVar("S") # ServiceConnection Type
|
|
34
|
+
C = TypeVar("C") # Client Type
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class BaseConnection(ABC, Generic[S, C]):
|
|
38
|
+
"""
|
|
39
|
+
Abstract base class for database connections, providing a unified interface
|
|
40
|
+
for service connection and client/engine access across different data sources.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
service_connection: S
|
|
44
|
+
|
|
45
|
+
def __init__(self, service_connection: S) -> None:
|
|
46
|
+
self.service_connection = service_connection
|
|
47
|
+
|
|
48
|
+
@abstractmethod
|
|
49
|
+
def get_client(self) -> C:
|
|
50
|
+
"""
|
|
51
|
+
Return the main client/engine/connection object for this service.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
@abstractmethod
|
|
55
|
+
def test_connection(
|
|
56
|
+
self,
|
|
57
|
+
metadata: OpenMetadata,
|
|
58
|
+
automation_workflow: Optional[AutomationWorkflow] = None,
|
|
59
|
+
timeout_seconds: Optional[int] = THREE_MIN,
|
|
60
|
+
) -> TestConnectionResult:
|
|
61
|
+
"""
|
|
62
|
+
Test the connection to the service.
|
|
63
|
+
"""
|
|
@@ -0,0 +1,115 @@
|
|
|
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
|
+
# pylint: disable=W0613
|
|
12
|
+
|
|
13
|
+
"""
|
|
14
|
+
Query tracking implementation using SQLAlchemy event listeners
|
|
15
|
+
"""
|
|
16
|
+
from datetime import datetime, timezone
|
|
17
|
+
from typing import Any, Dict, Optional, Tuple, Union
|
|
18
|
+
|
|
19
|
+
from pydantic import BaseModel, ConfigDict
|
|
20
|
+
from sqlalchemy.event import listen
|
|
21
|
+
from sqlalchemy.sql.elements import TextClause
|
|
22
|
+
|
|
23
|
+
from metadata.utils.logger import ingestion_logger
|
|
24
|
+
|
|
25
|
+
logger = ingestion_logger()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class QueryInfo(BaseModel):
|
|
29
|
+
"""Class to store information about a query execution"""
|
|
30
|
+
|
|
31
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
32
|
+
|
|
33
|
+
statement: Union[str, TextClause]
|
|
34
|
+
parameters: Optional[Union[Dict[str, Any], Tuple[Any, ...]]]
|
|
35
|
+
start_time: datetime
|
|
36
|
+
end_time: Optional[datetime] = None
|
|
37
|
+
duration_ms: Optional[float] = None
|
|
38
|
+
error: Optional[Exception] = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class QueryLogger:
|
|
42
|
+
"""Class to track SQL query execution using SQLAlchemy event listeners"""
|
|
43
|
+
|
|
44
|
+
def __init__(self):
|
|
45
|
+
self._current_query: Optional[QueryInfo] = None
|
|
46
|
+
|
|
47
|
+
def before_cursor_execute(
|
|
48
|
+
self,
|
|
49
|
+
conn: Any,
|
|
50
|
+
cursor: Any,
|
|
51
|
+
statement: Union[str, TextClause],
|
|
52
|
+
parameters: Optional[Dict[str, Any]],
|
|
53
|
+
context: Any,
|
|
54
|
+
executemany: bool,
|
|
55
|
+
) -> Tuple[Union[str, TextClause], Optional[Dict[str, Any]]]:
|
|
56
|
+
"""Event listener for before cursor execute"""
|
|
57
|
+
self._current_query = QueryInfo(
|
|
58
|
+
statement=statement,
|
|
59
|
+
parameters=parameters,
|
|
60
|
+
start_time=datetime.now(timezone.utc),
|
|
61
|
+
)
|
|
62
|
+
return statement, parameters
|
|
63
|
+
|
|
64
|
+
def after_cursor_execute(
|
|
65
|
+
self,
|
|
66
|
+
conn: Any,
|
|
67
|
+
cursor: Any,
|
|
68
|
+
statement: Union[str, TextClause],
|
|
69
|
+
parameters: Optional[Dict[str, Any]],
|
|
70
|
+
context: Any,
|
|
71
|
+
executemany: bool,
|
|
72
|
+
) -> None:
|
|
73
|
+
"""Event listener for after cursor execute"""
|
|
74
|
+
if self._current_query:
|
|
75
|
+
query = self._current_query
|
|
76
|
+
query.end_time = datetime.now(timezone.utc)
|
|
77
|
+
query.duration_ms = (
|
|
78
|
+
query.end_time - query.start_time
|
|
79
|
+
).total_seconds() * 1000
|
|
80
|
+
|
|
81
|
+
logger.debug(
|
|
82
|
+
"Query execution details:\n"
|
|
83
|
+
f" Start Time: {query.start_time}\n"
|
|
84
|
+
f" End Time: {query.end_time}\n"
|
|
85
|
+
f" Duration: {query.duration_ms:.2f} ms\n"
|
|
86
|
+
f" Query: {query.statement}\n"
|
|
87
|
+
f" Parameters: {query.parameters}"
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
self._current_query = None
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def attach_query_tracker(engine: Any):
|
|
94
|
+
"""
|
|
95
|
+
Attach query tracking event listeners to a SQLAlchemy engine
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
engine: SQLAlchemy engine to attach listeners to
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
QueryLogger instance that can be used to access query execution data
|
|
102
|
+
"""
|
|
103
|
+
tracker = QueryLogger()
|
|
104
|
+
|
|
105
|
+
listen(
|
|
106
|
+
engine,
|
|
107
|
+
"before_cursor_execute",
|
|
108
|
+
tracker.before_cursor_execute,
|
|
109
|
+
retval=True,
|
|
110
|
+
)
|
|
111
|
+
listen(
|
|
112
|
+
engine,
|
|
113
|
+
"after_cursor_execute",
|
|
114
|
+
tracker.after_cursor_execute,
|
|
115
|
+
)
|
|
@@ -38,7 +38,7 @@ from metadata.generated.schema.entity.services.connections.testConnectionResult
|
|
|
38
38
|
)
|
|
39
39
|
from metadata.generated.schema.type.basic import Timestamp
|
|
40
40
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
41
|
-
from metadata.ingestion.source.
|
|
41
|
+
from metadata.ingestion.source.connections_utils import kill_active_connections
|
|
42
42
|
from metadata.profiler.orm.functions.conn_test import ConnTestFn
|
|
43
43
|
from metadata.utils.constants import THREE_MIN
|
|
44
44
|
from metadata.utils.logger import cli_logger
|
|
@@ -74,8 +74,8 @@ class OMetaTestsMixin:
|
|
|
74
74
|
Returns:
|
|
75
75
|
_type_: _description_
|
|
76
76
|
"""
|
|
77
|
-
resp = self.client.
|
|
78
|
-
f"{self.get_suffix(
|
|
77
|
+
resp = self.client.post(
|
|
78
|
+
f"{self.get_suffix(TestCaseResult)}/{quote(test_case_fqn)}",
|
|
79
79
|
test_results.model_dump_json(),
|
|
80
80
|
)
|
|
81
81
|
|
|
@@ -167,7 +167,6 @@ class OMetaTestsMixin:
|
|
|
167
167
|
self,
|
|
168
168
|
test_case_fqn: str,
|
|
169
169
|
entity_link: Optional[str] = None,
|
|
170
|
-
test_suite_fqn: Optional[str] = None,
|
|
171
170
|
test_definition_fqn: Optional[str] = None,
|
|
172
171
|
test_case_parameter_values: Optional[List[TestCaseParameterValue]] = None,
|
|
173
172
|
):
|
|
@@ -196,7 +195,6 @@ class OMetaTestsMixin:
|
|
|
196
195
|
CreateTestCaseRequest(
|
|
197
196
|
name=test_case_fqn.split(".")[-1],
|
|
198
197
|
entityLink=entity_link,
|
|
199
|
-
testSuite=test_suite_fqn,
|
|
200
198
|
testDefinition=test_definition_fqn,
|
|
201
199
|
parameterValues=test_case_parameter_values,
|
|
202
200
|
) # type: ignore
|
|
@@ -253,7 +251,7 @@ class OMetaTestsMixin:
|
|
|
253
251
|
}
|
|
254
252
|
|
|
255
253
|
resp = self.client.get(
|
|
256
|
-
f"/
|
|
254
|
+
f"{self.get_suffix(TestCaseResult)}/{test_case_fqn}",
|
|
257
255
|
params,
|
|
258
256
|
)
|
|
259
257
|
|
|
@@ -167,6 +167,7 @@ from metadata.generated.schema.entity.teams.role import Role
|
|
|
167
167
|
from metadata.generated.schema.entity.teams.team import Team
|
|
168
168
|
from metadata.generated.schema.entity.teams.user import AuthenticationMechanism, User
|
|
169
169
|
from metadata.generated.schema.settings.settings import Settings
|
|
170
|
+
from metadata.generated.schema.tests.basic import TestCaseResult
|
|
170
171
|
from metadata.generated.schema.tests.testCase import TestCase
|
|
171
172
|
from metadata.generated.schema.tests.testDefinition import TestDefinition
|
|
172
173
|
from metadata.generated.schema.tests.testSuite import TestSuite
|
|
@@ -264,6 +265,7 @@ ROUTES = {
|
|
|
264
265
|
TestSuite.__name__: "/dataQuality/testSuites",
|
|
265
266
|
CreateTestSuiteRequest.__name__: "/dataQuality/testSuites",
|
|
266
267
|
TestCase.__name__: "/dataQuality/testCases",
|
|
268
|
+
TestCaseResult.__name__: "/dataQuality/testCases/testCaseResults",
|
|
267
269
|
CreateTestCaseRequest.__name__: "/dataQuality/testCases",
|
|
268
270
|
# Analytics
|
|
269
271
|
WebAnalyticEventData.__name__: "/analytics/web/events/collect",
|