openmetadata-ingestion 1.7.5.3__py3-none-any.whl → 1.8.1.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/cli/ingest_dbt.py +1 -1
- metadata/data_quality/processor/test_case_runner.py +2 -11
- metadata/data_quality/source/test_suite.py +3 -1
- metadata/data_quality/validations/models.py +2 -2
- metadata/data_quality/validations/runtime_param_setter/base_diff_params_setter.py +3 -30
- metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +5 -11
- metadata/data_quality/validations/table/pandas/tableRowInsertedCountToBeBetween.py +17 -2
- metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +1 -4
- 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 +2 -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 +5 -2
- 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 +10 -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 +9 -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/api/rest/metadata.py +0 -1
- 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/qlikcloud/client.py +34 -2
- metadata/ingestion/source/dashboard/qlikcloud/constants.py +6 -0
- metadata/ingestion/source/dashboard/qlikcloud/models.py +8 -0
- metadata/ingestion/source/dashboard/superset/connection.py +8 -8
- metadata/ingestion/source/dashboard/superset/queries.py +1 -1
- metadata/ingestion/source/dashboard/tableau/client.py +4 -4
- metadata/ingestion/source/dashboard/tableau/metadata.py +0 -1
- 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/databricks/client.py +149 -14
- metadata/ingestion/source/database/databricks/queries.py +26 -0
- 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/postgres/metadata.py +16 -4
- metadata/ingestion/source/database/postgres/models.py +1 -0
- metadata/ingestion/source/database/postgres/queries.py +7 -4
- 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/connection.py +10 -79
- 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/databrickspipeline/connection.py +26 -2
- metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +175 -13
- 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.3.dist-info → openmetadata_ingestion-1.8.1.0.dist-info}/METADATA +523 -516
- {openmetadata_ingestion-1.7.5.3.dist-info → openmetadata_ingestion-1.8.1.0.dist-info}/RECORD +805 -782
- {openmetadata_ingestion-1.7.5.3.dist-info → openmetadata_ingestion-1.8.1.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.7.5.3.dist-info → openmetadata_ingestion-1.8.1.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.7.5.3.dist-info → openmetadata_ingestion-1.8.1.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.7.5.3.dist-info → openmetadata_ingestion-1.8.1.0.dist-info}/top_level.txt +0 -0
|
@@ -14,7 +14,7 @@ Base source for the profiler used to instantiate a profiler runner with
|
|
|
14
14
|
its interface
|
|
15
15
|
"""
|
|
16
16
|
from copy import deepcopy
|
|
17
|
-
from typing import Optional, cast
|
|
17
|
+
from typing import Optional, Type, cast
|
|
18
18
|
|
|
19
19
|
from metadata.generated.schema.configuration.profilerConfiguration import (
|
|
20
20
|
ProfilerConfiguration,
|
|
@@ -22,10 +22,7 @@ from metadata.generated.schema.configuration.profilerConfiguration import (
|
|
|
22
22
|
from metadata.generated.schema.entity.data.database import Database
|
|
23
23
|
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
|
|
24
24
|
from metadata.generated.schema.entity.data.table import Table
|
|
25
|
-
from metadata.generated.schema.entity.services.databaseService import
|
|
26
|
-
DatabaseConnection,
|
|
27
|
-
DatabaseService,
|
|
28
|
-
)
|
|
25
|
+
from metadata.generated.schema.entity.services.databaseService import DatabaseConnection
|
|
29
26
|
from metadata.generated.schema.entity.services.serviceType import ServiceType
|
|
30
27
|
from metadata.generated.schema.metadataIngestion.databaseServiceProfilerPipeline import (
|
|
31
28
|
DatabaseServiceProfilerPipeline,
|
|
@@ -36,9 +33,10 @@ from metadata.generated.schema.metadataIngestion.workflow import (
|
|
|
36
33
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
37
34
|
from metadata.profiler.api.models import ProfilerProcessorConfig, TableConfig
|
|
38
35
|
from metadata.profiler.interface.profiler_interface import ProfilerInterface
|
|
39
|
-
from metadata.profiler.metrics.registry import Metrics
|
|
40
36
|
from metadata.profiler.processor.core import Profiler
|
|
41
37
|
from metadata.profiler.processor.default import DefaultProfiler, get_default_metrics
|
|
38
|
+
from metadata.profiler.registry import MetricRegistry
|
|
39
|
+
from metadata.profiler.source.database.base.profiler_resolver import ProfilerResolver
|
|
42
40
|
from metadata.profiler.source.profiler_source_interface import ProfilerSourceInterface
|
|
43
41
|
from metadata.sampler.config import (
|
|
44
42
|
get_config_for_table,
|
|
@@ -47,12 +45,13 @@ from metadata.sampler.config import (
|
|
|
47
45
|
)
|
|
48
46
|
from metadata.sampler.models import SampleConfig
|
|
49
47
|
from metadata.sampler.sampler_interface import SamplerInterface
|
|
48
|
+
from metadata.utils.dependency_injector.dependency_injector import (
|
|
49
|
+
DependencyNotFoundError,
|
|
50
|
+
Inject,
|
|
51
|
+
inject,
|
|
52
|
+
)
|
|
50
53
|
from metadata.utils.logger import profiler_logger
|
|
51
54
|
from metadata.utils.profiler_utils import get_context_entities
|
|
52
|
-
from metadata.utils.service_spec.service_spec import (
|
|
53
|
-
import_profiler_class,
|
|
54
|
-
import_sampler_class,
|
|
55
|
-
)
|
|
56
55
|
|
|
57
56
|
logger = profiler_logger()
|
|
58
57
|
|
|
@@ -77,8 +76,7 @@ class ProfilerSource(ProfilerSourceInterface):
|
|
|
77
76
|
self.ometa_client = ometa_client
|
|
78
77
|
self._interface_type: str = config.source.type.lower()
|
|
79
78
|
self._interface = None
|
|
80
|
-
|
|
81
|
-
# this method for the sampler, which does not have a DatabaseServiceProfilerPipeline
|
|
79
|
+
|
|
82
80
|
self.source_config = None
|
|
83
81
|
self.global_profiler_configuration = global_profiler_configuration
|
|
84
82
|
|
|
@@ -122,25 +120,34 @@ class ProfilerSource(ProfilerSourceInterface):
|
|
|
122
120
|
|
|
123
121
|
return config_copy
|
|
124
122
|
|
|
123
|
+
@inject
|
|
125
124
|
def create_profiler_interface(
|
|
126
125
|
self,
|
|
127
126
|
entity: Table,
|
|
128
127
|
config: Optional[TableConfig],
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
db_service: Optional[DatabaseService],
|
|
128
|
+
schema_entity: DatabaseSchema,
|
|
129
|
+
database_entity: Database,
|
|
130
|
+
profiler_resolver: Inject[Type[ProfilerResolver]] = None,
|
|
133
131
|
) -> ProfilerInterface:
|
|
134
|
-
"""Create
|
|
132
|
+
"""Create the appropriate profiler interface based on processing engine."""
|
|
133
|
+
if profiler_resolver is None:
|
|
134
|
+
raise DependencyNotFoundError(
|
|
135
|
+
"ProfilerResolver dependency not found. Please ensure the ProfilerResolver is properly registered."
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
# NOTE: For some reason I do not understand, if we instantiate this on the __init__ method, we break the
|
|
139
|
+
# autoclassification workflow. This should be fixed. There should not be an impact on AutoClassification.
|
|
140
|
+
# We have an issue to track this here: https://github.com/open-metadata/OpenMetadata/issues/21790
|
|
135
141
|
self.source_config = DatabaseServiceProfilerPipeline.model_validate(
|
|
136
142
|
self.config.source.sourceConfig.config
|
|
137
143
|
)
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
144
|
+
|
|
145
|
+
sampler_class, profiler_class = profiler_resolver.resolve(
|
|
146
|
+
processing_engine=self.get_processing_engine(self.source_config),
|
|
147
|
+
service_type=ServiceType.Database,
|
|
148
|
+
source_type=self._interface_type,
|
|
143
149
|
)
|
|
150
|
+
|
|
144
151
|
# This is shared between the sampler and profiler interfaces
|
|
145
152
|
sampler_interface: SamplerInterface = sampler_class.create(
|
|
146
153
|
service_connection_config=self.service_conn_config,
|
|
@@ -155,6 +162,8 @@ class ProfilerSource(ProfilerSourceInterface):
|
|
|
155
162
|
samplingMethodType=self.source_config.samplingMethodType,
|
|
156
163
|
randomizedSample=self.source_config.randomizedSample,
|
|
157
164
|
),
|
|
165
|
+
# TODO: Change this when we have the processing engine configuration implemented. Right now it does nothing.
|
|
166
|
+
processing_engine=self.get_processing_engine(self.source_config),
|
|
158
167
|
)
|
|
159
168
|
|
|
160
169
|
profiler_interface: ProfilerInterface = profiler_class.create(
|
|
@@ -168,28 +177,33 @@ class ProfilerSource(ProfilerSourceInterface):
|
|
|
168
177
|
self.interface = profiler_interface
|
|
169
178
|
return self.interface
|
|
170
179
|
|
|
180
|
+
@inject
|
|
171
181
|
def get_profiler_runner(
|
|
172
|
-
self,
|
|
182
|
+
self,
|
|
183
|
+
entity: Table,
|
|
184
|
+
profiler_config: ProfilerProcessorConfig,
|
|
185
|
+
metrics_registry: Inject[Type[MetricRegistry]] = None,
|
|
173
186
|
) -> Profiler:
|
|
174
187
|
"""
|
|
175
188
|
Returns the runner for the profiler
|
|
176
189
|
"""
|
|
190
|
+
if metrics_registry is None:
|
|
191
|
+
raise DependencyNotFoundError(
|
|
192
|
+
"MetricRegistry dependency not found. Please ensure the MetricRegistry is properly registered."
|
|
193
|
+
)
|
|
194
|
+
|
|
177
195
|
table_config = get_config_for_table(entity, profiler_config)
|
|
178
196
|
schema_entity, database_entity, db_service = get_context_entities(
|
|
179
197
|
entity=entity, metadata=self.ometa_client
|
|
180
198
|
)
|
|
181
199
|
profiler_interface = self.create_profiler_interface(
|
|
182
|
-
entity,
|
|
183
|
-
table_config,
|
|
184
|
-
profiler_config,
|
|
185
|
-
schema_entity,
|
|
186
|
-
database_entity,
|
|
187
|
-
db_service,
|
|
200
|
+
entity, table_config, schema_entity, database_entity
|
|
188
201
|
)
|
|
189
202
|
|
|
190
203
|
if not profiler_config.profiler:
|
|
191
204
|
return DefaultProfiler(
|
|
192
205
|
profiler_interface=profiler_interface,
|
|
206
|
+
metrics_registry=metrics_registry,
|
|
193
207
|
include_columns=get_include_columns(entity, table_config),
|
|
194
208
|
exclude_columns=get_exclude_columns(entity, table_config),
|
|
195
209
|
global_profiler_configuration=self.global_profiler_configuration,
|
|
@@ -197,9 +211,10 @@ class ProfilerSource(ProfilerSourceInterface):
|
|
|
197
211
|
)
|
|
198
212
|
|
|
199
213
|
metrics = (
|
|
200
|
-
[
|
|
214
|
+
[metrics_registry.get(name) for name in profiler_config.profiler.metrics]
|
|
201
215
|
if profiler_config.profiler.metrics
|
|
202
216
|
else get_default_metrics(
|
|
217
|
+
metrics_registry=metrics_registry,
|
|
203
218
|
table=profiler_interface.table,
|
|
204
219
|
ometa_client=self.ometa_client,
|
|
205
220
|
db_service=db_service,
|
|
@@ -16,6 +16,9 @@ Class defining the interface for the profiler source
|
|
|
16
16
|
from abc import ABC, abstractmethod
|
|
17
17
|
from typing import Optional
|
|
18
18
|
|
|
19
|
+
from metadata.generated.schema.metadataIngestion.databaseServiceProfilerPipeline import (
|
|
20
|
+
DatabaseServiceProfilerPipeline,
|
|
21
|
+
)
|
|
19
22
|
from metadata.profiler.interface.profiler_interface import ProfilerInterface
|
|
20
23
|
|
|
21
24
|
|
|
@@ -34,20 +37,12 @@ class ProfilerSourceInterface(ABC):
|
|
|
34
37
|
"""Set the interface"""
|
|
35
38
|
raise NotImplementedError
|
|
36
39
|
|
|
37
|
-
@abstractmethod
|
|
38
|
-
def create_profiler_interface(
|
|
39
|
-
self,
|
|
40
|
-
entity,
|
|
41
|
-
config,
|
|
42
|
-
profiler_config,
|
|
43
|
-
schema_entity,
|
|
44
|
-
database_entity,
|
|
45
|
-
db_service,
|
|
46
|
-
) -> ProfilerInterface:
|
|
47
|
-
"""Create the profiler interface"""
|
|
48
|
-
raise NotImplementedError
|
|
49
|
-
|
|
50
40
|
@abstractmethod
|
|
51
41
|
def get_profiler_runner(self, entity, profiler_config):
|
|
52
42
|
"""Get the profiler runner"""
|
|
53
43
|
raise NotImplementedError
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
def get_processing_engine(config: DatabaseServiceProfilerPipeline):
|
|
47
|
+
"""Get the processing engine based on the configuration."""
|
|
48
|
+
return "Native"
|
|
@@ -13,12 +13,13 @@ Interface for sampler
|
|
|
13
13
|
"""
|
|
14
14
|
import traceback
|
|
15
15
|
from abc import ABC, abstractmethod
|
|
16
|
-
from typing import
|
|
16
|
+
from typing import List, Optional, Set, Union
|
|
17
17
|
|
|
18
18
|
from metadata.generated.schema.entity.data.database import Database
|
|
19
19
|
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
|
|
20
20
|
from metadata.generated.schema.entity.data.table import (
|
|
21
21
|
ColumnProfilerConfig,
|
|
22
|
+
PartitionProfilerConfig,
|
|
22
23
|
Table,
|
|
23
24
|
TableData,
|
|
24
25
|
)
|
|
@@ -65,20 +66,20 @@ class SamplerInterface(ABC):
|
|
|
65
66
|
include_columns: Optional[List[ColumnProfilerConfig]] = None,
|
|
66
67
|
exclude_columns: Optional[List[str]] = None,
|
|
67
68
|
sample_config: SampleConfig = SampleConfig(),
|
|
68
|
-
partition_details: Optional[
|
|
69
|
+
partition_details: Optional[PartitionProfilerConfig] = None,
|
|
69
70
|
sample_query: Optional[str] = None,
|
|
70
|
-
storage_config: DataStorageConfig = None,
|
|
71
|
+
storage_config: Optional[DataStorageConfig] = None,
|
|
71
72
|
sample_data_count: Optional[int] = SAMPLE_DATA_DEFAULT_COUNT,
|
|
72
73
|
**__,
|
|
73
74
|
):
|
|
74
75
|
self.ometa_client = ometa_client
|
|
75
76
|
self._sample = None
|
|
76
|
-
self._columns:
|
|
77
|
+
self._columns: List[SQALikeColumn] = []
|
|
77
78
|
self.sample_config = sample_config
|
|
78
79
|
|
|
79
80
|
self.entity = entity
|
|
80
|
-
self.include_columns = include_columns
|
|
81
|
-
self.exclude_columns = exclude_columns
|
|
81
|
+
self.include_columns = include_columns or []
|
|
82
|
+
self.exclude_columns = exclude_columns or []
|
|
82
83
|
self.sample_query = sample_query
|
|
83
84
|
self.sample_limit = sample_data_count
|
|
84
85
|
self.partition_details = partition_details
|
|
@@ -99,7 +100,7 @@ class SamplerInterface(ABC):
|
|
|
99
100
|
table_config: Optional[TableConfig] = None,
|
|
100
101
|
storage_config: Optional[DataStorageConfig] = None,
|
|
101
102
|
default_sample_config: Optional[SampleConfig] = None,
|
|
102
|
-
default_sample_data_count:
|
|
103
|
+
default_sample_data_count: int = SAMPLE_DATA_DEFAULT_COUNT,
|
|
103
104
|
**kwargs,
|
|
104
105
|
) -> "SamplerInterface":
|
|
105
106
|
"""Create sampler"""
|
|
@@ -165,16 +166,20 @@ class SamplerInterface(ABC):
|
|
|
165
166
|
|
|
166
167
|
return self._columns
|
|
167
168
|
|
|
168
|
-
def _get_excluded_columns(self) ->
|
|
169
|
+
def _get_excluded_columns(self) -> Set[str]:
|
|
169
170
|
"""Get excluded columns for table being profiled"""
|
|
170
171
|
if self.exclude_columns:
|
|
171
172
|
return set(self.exclude_columns)
|
|
172
173
|
return set()
|
|
173
174
|
|
|
174
|
-
def _get_included_columns(self) ->
|
|
175
|
+
def _get_included_columns(self) -> Set[str]:
|
|
175
176
|
"""Get include columns for table being profiled"""
|
|
176
177
|
if self.include_columns:
|
|
177
|
-
return {
|
|
178
|
+
return {
|
|
179
|
+
include_col.columnName
|
|
180
|
+
for include_col in self.include_columns
|
|
181
|
+
if include_col.columnName
|
|
182
|
+
}
|
|
178
183
|
return set()
|
|
179
184
|
|
|
180
185
|
@property
|
|
@@ -73,6 +73,13 @@ class BigQuerySampler(SQASampler):
|
|
|
73
73
|
**kwargs,
|
|
74
74
|
)
|
|
75
75
|
self.raw_dataset_type: Optional[TableType] = entity.tableType
|
|
76
|
+
if self._table.__table__.schema and self.entity.database.name:
|
|
77
|
+
self._table.__table__.schema = (
|
|
78
|
+
f"{self.entity.database.name}.{self._table.__table__.schema}"
|
|
79
|
+
)
|
|
80
|
+
self._table.__table_args__[
|
|
81
|
+
"schema"
|
|
82
|
+
] = f"{self.entity.database.name}.{self._table.__table_args__['schema']}"
|
|
76
83
|
|
|
77
84
|
def set_tablesample(self, selectable: SqaTable):
|
|
78
85
|
"""Set the TABLESAMPLE clause for BigQuery
|
|
@@ -0,0 +1,403 @@
|
|
|
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
|
+
Dependency injection utilities for OpenMetadata.
|
|
13
|
+
|
|
14
|
+
This module provides a type-safe dependency injection system that uses Python's type hints
|
|
15
|
+
to automatically inject dependencies into functions and methods.
|
|
16
|
+
|
|
17
|
+
Example:
|
|
18
|
+
```python
|
|
19
|
+
from typing import Annotated
|
|
20
|
+
from metadata.utils.dependency_injector import Inject, inject, DependencyContainer
|
|
21
|
+
|
|
22
|
+
class Database:
|
|
23
|
+
def __init__(self, connection_string: str):
|
|
24
|
+
self.connection_string = connection_string
|
|
25
|
+
|
|
26
|
+
# Register a dependency
|
|
27
|
+
container = DependencyContainer[Callable]()
|
|
28
|
+
container.register(Database, lambda: Database("postgresql://localhost:5432"))
|
|
29
|
+
|
|
30
|
+
# Use dependency injection
|
|
31
|
+
@inject
|
|
32
|
+
def get_user(user_id: int, db: Inject[Database]) -> dict:
|
|
33
|
+
return db.query(f"SELECT * FROM users WHERE id = {user_id}")
|
|
34
|
+
```
|
|
35
|
+
"""
|
|
36
|
+
from functools import wraps
|
|
37
|
+
from threading import RLock
|
|
38
|
+
from typing import (
|
|
39
|
+
TYPE_CHECKING,
|
|
40
|
+
Annotated,
|
|
41
|
+
Any,
|
|
42
|
+
Callable,
|
|
43
|
+
Dict,
|
|
44
|
+
Generic,
|
|
45
|
+
Optional,
|
|
46
|
+
Type,
|
|
47
|
+
TypeVar,
|
|
48
|
+
Union,
|
|
49
|
+
get_args,
|
|
50
|
+
get_origin,
|
|
51
|
+
get_type_hints,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
from metadata.utils.logger import utils_logger
|
|
55
|
+
|
|
56
|
+
logger = utils_logger()
|
|
57
|
+
|
|
58
|
+
T = TypeVar("T")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class DependencyInjectionError(Exception):
|
|
62
|
+
"""Base exception for dependency injection errors."""
|
|
63
|
+
|
|
64
|
+
pass
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class DependencyNotFoundError(DependencyInjectionError):
|
|
68
|
+
"""Raised when a required dependency is not found in the container."""
|
|
69
|
+
|
|
70
|
+
pass
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class InvalidInjectionTypeError(DependencyInjectionError):
|
|
74
|
+
"""Raised when an invalid injection type is used."""
|
|
75
|
+
|
|
76
|
+
pass
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
if TYPE_CHECKING:
|
|
80
|
+
Inject = Annotated[Union[T, None], "Inject Marker"]
|
|
81
|
+
else:
|
|
82
|
+
|
|
83
|
+
class Inject(Generic[T]):
|
|
84
|
+
"""
|
|
85
|
+
Type for dependency injection that uses types as keys.
|
|
86
|
+
|
|
87
|
+
This type is used to mark parameters that should be automatically injected
|
|
88
|
+
by the dependency container. Injection is always treated as Optioonal. It can be overriden.
|
|
89
|
+
|
|
90
|
+
Type Parameters:
|
|
91
|
+
T: The type of the dependency to inject
|
|
92
|
+
|
|
93
|
+
Example:
|
|
94
|
+
```python
|
|
95
|
+
@inject
|
|
96
|
+
def my_function(db: Inject[Database]):
|
|
97
|
+
# db will be automatically injected
|
|
98
|
+
pass
|
|
99
|
+
```
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class DependencyContainer:
|
|
104
|
+
"""
|
|
105
|
+
Thread-safe singleton container for managing dependencies.
|
|
106
|
+
|
|
107
|
+
This container uses RLock to support reentrant locking, allowing the same thread
|
|
108
|
+
to acquire the lock multiple times. It maintains two dictionaries:
|
|
109
|
+
- _dependencies: The original registered dependencies
|
|
110
|
+
- _overrides: Temporary overrides that take precedence over original dependencies
|
|
111
|
+
|
|
112
|
+
Type Parameters:
|
|
113
|
+
T: The base type for all dependencies in this container
|
|
114
|
+
|
|
115
|
+
Example:
|
|
116
|
+
```python
|
|
117
|
+
container = DependencyContainer[Callable]()
|
|
118
|
+
container.register(Database, lambda: Database("postgresql://localhost:5432"))
|
|
119
|
+
container.override(Database, lambda: Database("postgresql://test:5432"))
|
|
120
|
+
```
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
_instance: Optional["DependencyContainer"] = None
|
|
124
|
+
_lock = RLock()
|
|
125
|
+
_dependencies: Dict[str, Callable[[], Any]] = {}
|
|
126
|
+
_overrides: Dict[str, Callable[[], Any]] = {}
|
|
127
|
+
|
|
128
|
+
def __new__(cls) -> "DependencyContainer":
|
|
129
|
+
if cls._instance is None:
|
|
130
|
+
with cls._lock:
|
|
131
|
+
if cls._instance is None:
|
|
132
|
+
cls._instance = super().__new__(cls)
|
|
133
|
+
return cls._instance
|
|
134
|
+
|
|
135
|
+
def get_key(self, dependency_type: Type[Any]) -> str:
|
|
136
|
+
"""
|
|
137
|
+
Get the key for a dependency.
|
|
138
|
+
"""
|
|
139
|
+
if get_origin(dependency_type) is type:
|
|
140
|
+
inner_type = get_args(dependency_type)[0]
|
|
141
|
+
return f"Type[{inner_type.__name__}]"
|
|
142
|
+
return dependency_type.__name__
|
|
143
|
+
|
|
144
|
+
def register(
|
|
145
|
+
self, dependency_type: Type[Any], dependency: Callable[[], Any]
|
|
146
|
+
) -> None:
|
|
147
|
+
"""
|
|
148
|
+
Register a dependency with the container.
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
dependency_type: The type of the dependency to register
|
|
152
|
+
dependency: The dependency to register (usually a factory function)
|
|
153
|
+
|
|
154
|
+
Example:
|
|
155
|
+
```python
|
|
156
|
+
container.register(Database, lambda: Database("postgresql://localhost:5432"))
|
|
157
|
+
container.register(Type[Metrics], lambda: Metrics) # For registering types themselves
|
|
158
|
+
```
|
|
159
|
+
"""
|
|
160
|
+
with self._lock:
|
|
161
|
+
self._dependencies[self.get_key(dependency_type)] = dependency
|
|
162
|
+
|
|
163
|
+
def override(
|
|
164
|
+
self, dependency_type: Type[Any], dependency: Callable[[], Any]
|
|
165
|
+
) -> None:
|
|
166
|
+
"""
|
|
167
|
+
Override a dependency with a new implementation.
|
|
168
|
+
|
|
169
|
+
The override takes precedence over the original dependency and is useful
|
|
170
|
+
for testing or temporary changes.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
dependency_type: The type of the dependency to override
|
|
174
|
+
dependency: The new dependency implementation
|
|
175
|
+
|
|
176
|
+
Example:
|
|
177
|
+
```python
|
|
178
|
+
container.override(Database, lambda: Database("postgresql://test:5432"))
|
|
179
|
+
```
|
|
180
|
+
"""
|
|
181
|
+
with self._lock:
|
|
182
|
+
self._overrides[self.get_key(dependency_type)] = dependency
|
|
183
|
+
|
|
184
|
+
def remove_override(self, dependency_type: Type[T]) -> None:
|
|
185
|
+
"""
|
|
186
|
+
Remove an override for a dependency.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
dependency_type: The type of the dependency override to remove
|
|
190
|
+
|
|
191
|
+
Example:
|
|
192
|
+
```python
|
|
193
|
+
container.remove_override(Database)
|
|
194
|
+
```
|
|
195
|
+
"""
|
|
196
|
+
with self._lock:
|
|
197
|
+
self._overrides.pop(self.get_key(dependency_type), None)
|
|
198
|
+
|
|
199
|
+
def get(self, dependency_type: Type[Any]) -> Optional[Any]:
|
|
200
|
+
"""
|
|
201
|
+
Get a dependency from the container.
|
|
202
|
+
|
|
203
|
+
Checks overrides first, then falls back to original dependencies.
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
dependency_type: The type of the dependency to retrieve
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
The dependency if found, None otherwise
|
|
210
|
+
|
|
211
|
+
Example:
|
|
212
|
+
```python
|
|
213
|
+
db_factory = container.get(Database)
|
|
214
|
+
if db_factory:
|
|
215
|
+
db = db_factory()
|
|
216
|
+
```
|
|
217
|
+
"""
|
|
218
|
+
with self._lock:
|
|
219
|
+
factory = self._overrides.get(
|
|
220
|
+
self.get_key(dependency_type)
|
|
221
|
+
) or self._dependencies.get(self.get_key(dependency_type))
|
|
222
|
+
if factory is None:
|
|
223
|
+
return None
|
|
224
|
+
return factory()
|
|
225
|
+
|
|
226
|
+
def clear(self) -> None:
|
|
227
|
+
"""
|
|
228
|
+
Clear all dependencies and overrides.
|
|
229
|
+
|
|
230
|
+
Example:
|
|
231
|
+
```python
|
|
232
|
+
container.clear() # Remove all registered dependencies and overrides
|
|
233
|
+
```
|
|
234
|
+
"""
|
|
235
|
+
with self._lock:
|
|
236
|
+
self._dependencies.clear()
|
|
237
|
+
self._overrides.clear()
|
|
238
|
+
|
|
239
|
+
def has(self, dependency_type: Type[T]) -> bool:
|
|
240
|
+
"""
|
|
241
|
+
Check if a dependency exists in the container.
|
|
242
|
+
|
|
243
|
+
Args:
|
|
244
|
+
dependency_type: The type to check
|
|
245
|
+
|
|
246
|
+
Returns:
|
|
247
|
+
True if the dependency exists, False otherwise
|
|
248
|
+
|
|
249
|
+
Example:
|
|
250
|
+
```python
|
|
251
|
+
if container.has(Database):
|
|
252
|
+
print("Database dependency is registered")
|
|
253
|
+
```"""
|
|
254
|
+
with self._lock:
|
|
255
|
+
return (
|
|
256
|
+
self.get_key(dependency_type) in self._overrides
|
|
257
|
+
or self.get_key(dependency_type) in self._dependencies
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def inject(func: Callable[..., Any]) -> Callable[..., Any]:
|
|
262
|
+
"""
|
|
263
|
+
Decorator to inject dependencies based on type hints.
|
|
264
|
+
|
|
265
|
+
This decorator automatically injects dependencies into function parameters
|
|
266
|
+
based on their type hints. It uses types as keys for dependency lookup and
|
|
267
|
+
allows explicit injection by passing dependencies as keyword arguments.
|
|
268
|
+
|
|
269
|
+
Args:
|
|
270
|
+
func: The function to inject dependencies into
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
A function with dependencies injected
|
|
274
|
+
|
|
275
|
+
Example:
|
|
276
|
+
```python
|
|
277
|
+
@inject
|
|
278
|
+
def get_user(user_id: int, db: Inject[Database]) -> dict:
|
|
279
|
+
return db.query(f"SELECT * FROM users WHERE id = {user_id}")
|
|
280
|
+
|
|
281
|
+
# Dependencies can also be passed explicitly
|
|
282
|
+
get_user(user_id=1, db=Database("postgresql://localhost:5432"))
|
|
283
|
+
```
|
|
284
|
+
"""
|
|
285
|
+
|
|
286
|
+
@wraps(func)
|
|
287
|
+
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
288
|
+
container = DependencyContainer()
|
|
289
|
+
type_hints = get_type_hints(func, include_extras=True)
|
|
290
|
+
|
|
291
|
+
for param_name, param_type in type_hints.items():
|
|
292
|
+
# Skip if parameter is already provided explicitly
|
|
293
|
+
if param_name in kwargs:
|
|
294
|
+
continue
|
|
295
|
+
|
|
296
|
+
# Check if it's an Inject type
|
|
297
|
+
if is_inject_type(param_type):
|
|
298
|
+
dependency_type = extract_inject_arg(param_type)
|
|
299
|
+
dependency = container.get(dependency_type)
|
|
300
|
+
if dependency is None:
|
|
301
|
+
raise DependencyNotFoundError(
|
|
302
|
+
f"Dependency of type {dependency_type} not found in container. "
|
|
303
|
+
f"Make sure to register it using container.register({dependency_type.__name__}, ...)"
|
|
304
|
+
)
|
|
305
|
+
kwargs[param_name] = dependency
|
|
306
|
+
|
|
307
|
+
return func(*args, **kwargs)
|
|
308
|
+
|
|
309
|
+
return wrapper
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
def is_inject_type(tp: Any) -> bool:
|
|
313
|
+
"""
|
|
314
|
+
Check if a type is an Inject type or Optional[Inject].
|
|
315
|
+
|
|
316
|
+
Args:
|
|
317
|
+
tp: The type to check
|
|
318
|
+
|
|
319
|
+
Returns:
|
|
320
|
+
True if the type is Inject or Optional[Inject], False otherwise
|
|
321
|
+
"""
|
|
322
|
+
origin = get_origin(tp)
|
|
323
|
+
if origin is Inject:
|
|
324
|
+
return True
|
|
325
|
+
if origin is Union:
|
|
326
|
+
args = get_args(tp)
|
|
327
|
+
return any(get_origin(arg) is Inject for arg in args)
|
|
328
|
+
return False
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
def extract_inject_arg(tp: Any) -> Any:
|
|
332
|
+
"""
|
|
333
|
+
Extract the type argument from an Inject type.
|
|
334
|
+
|
|
335
|
+
Args:
|
|
336
|
+
tp: The type to extract from
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
The type argument from the Inject type
|
|
340
|
+
|
|
341
|
+
Raises:
|
|
342
|
+
InvalidInjectionTypeError: If the type is not Inject or Optional[Inject]
|
|
343
|
+
"""
|
|
344
|
+
origin = get_origin(tp)
|
|
345
|
+
if origin is Inject:
|
|
346
|
+
return get_args(tp)[0]
|
|
347
|
+
if origin is Union:
|
|
348
|
+
for arg in get_args(tp):
|
|
349
|
+
if get_origin(arg) is Inject:
|
|
350
|
+
return get_args(arg)[0]
|
|
351
|
+
raise InvalidInjectionTypeError(
|
|
352
|
+
f"Type {tp} is not Inject or Optional[Inject]. "
|
|
353
|
+
f"Use Annotated[YourType, 'Inject'] to mark a parameter for injection."
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def inject_class_attributes(cls: Type[Any]) -> Type[Any]:
|
|
358
|
+
"""
|
|
359
|
+
Decorator to inject dependencies into class-level (static) attributes based on type hints.
|
|
360
|
+
|
|
361
|
+
This decorator automatically injects dependencies into class attributes
|
|
362
|
+
based on their type hints. The dependencies are shared across all instances
|
|
363
|
+
of the class.
|
|
364
|
+
|
|
365
|
+
Args:
|
|
366
|
+
cls: The class to inject dependencies into
|
|
367
|
+
|
|
368
|
+
Returns:
|
|
369
|
+
A class with dependencies injected into its class-level attributes
|
|
370
|
+
|
|
371
|
+
Example:
|
|
372
|
+
```python
|
|
373
|
+
@inject_class_attributes
|
|
374
|
+
class UserService:
|
|
375
|
+
db: ClassVar[Inject[Database]]
|
|
376
|
+
cache: ClassVar[Inject[Cache]]
|
|
377
|
+
|
|
378
|
+
@classmethod
|
|
379
|
+
def get_user(cls, user_id: int) -> dict:
|
|
380
|
+
return cls.db.query(f"SELECT * FROM users WHERE id = {user_id}")
|
|
381
|
+
```
|
|
382
|
+
"""
|
|
383
|
+
container = DependencyContainer()
|
|
384
|
+
type_hints = get_type_hints(cls, include_extras=True)
|
|
385
|
+
|
|
386
|
+
# Inject dependencies into class attributes
|
|
387
|
+
for attr_name, attr_type in type_hints.items():
|
|
388
|
+
# Skip if attribute is already set
|
|
389
|
+
if hasattr(cls, attr_name):
|
|
390
|
+
continue
|
|
391
|
+
|
|
392
|
+
# Check if it's an Inject type
|
|
393
|
+
if is_inject_type(attr_type):
|
|
394
|
+
dependency_type = extract_inject_arg(attr_type)
|
|
395
|
+
dependency = container.get(dependency_type)
|
|
396
|
+
if dependency is None:
|
|
397
|
+
raise DependencyNotFoundError(
|
|
398
|
+
f"Dependency of type {dependency_type} not found in container. "
|
|
399
|
+
f"Make sure to register it using container.register({dependency_type.__name__}, ...)"
|
|
400
|
+
)
|
|
401
|
+
setattr(cls, attr_name, dependency)
|
|
402
|
+
|
|
403
|
+
return cls
|