openmetadata-ingestion 1.2.4.0__py3-none-any.whl → 1.3.2.0rc1__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.
- airflow_provider_openmetadata/lineage/runner.py +44 -5
- airflow_provider_openmetadata/lineage/status.py +1 -1
- metadata/antlr/split_listener.py +1 -4
- metadata/applications/auto_tagger.py +212 -0
- metadata/cli/app.py +47 -0
- metadata/cli/db_dump.py +7 -3
- metadata/clients/aws_client.py +4 -0
- metadata/clients/azure_client.py +85 -0
- metadata/clients/domo_client.py +0 -2
- metadata/cmd.py +24 -13
- metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +40 -48
- metadata/data_insight/processor/reports/data_processor.py +1 -0
- metadata/data_insight/processor/reports/entity_report_data_processor.py +8 -2
- metadata/data_insight/processor/reports/web_analytic_report_data_processor.py +4 -0
- metadata/data_insight/producer/cost_analysis_producer.py +78 -14
- metadata/data_insight/producer/entity_producer.py +1 -1
- metadata/data_insight/producer/producer_interface.py +1 -1
- metadata/data_insight/producer/web_analytics_producer.py +1 -1
- metadata/data_insight/source/metadata.py +21 -5
- metadata/data_quality/interface/sqlalchemy/databricks/test_suite_interface.py +29 -0
- metadata/data_quality/interface/sqlalchemy/snowflake/test_suite_interface.py +29 -0
- metadata/data_quality/interface/sqlalchemy/sqa_test_suite_interface.py +6 -6
- metadata/data_quality/interface/sqlalchemy/unity_catalog/test_suite_interface.py +35 -0
- metadata/data_quality/interface/test_suite_interface_factory.py +40 -0
- metadata/data_quality/processor/test_case_runner.py +17 -8
- metadata/data_quality/source/test_suite.py +10 -4
- metadata/data_quality/validations/base_test_handler.py +21 -17
- metadata/data_quality/validations/column/base/columnValueLengthsToBeBetween.py +38 -1
- metadata/data_quality/validations/column/base/columnValuesToBeBetween.py +36 -1
- metadata/data_quality/validations/column/base/columnValuesToBeInSet.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeNotInSet.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeNotNull.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToBeUnique.py +15 -0
- metadata/data_quality/validations/column/base/columnValuesToMatchRegex.py +27 -0
- metadata/data_quality/validations/column/base/columnValuesToNotMatchRegex.py +27 -0
- metadata/data_quality/validations/column/pandas/columnValueLengthsToBeBetween.py +23 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeBetween.py +23 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeInSet.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeNotInSet.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToBeNotNull.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToMatchRegex.py +11 -0
- metadata/data_quality/validations/column/pandas/columnValuesToNotMatchRegex.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +27 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +23 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeInSet.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotInSet.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeNotNull.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToMatchRegex.py +11 -0
- metadata/data_quality/validations/column/sqlalchemy/columnValuesToNotMatchRegex.py +11 -0
- metadata/data_quality/validations/mixins/pandas_validator_mixin.py +13 -2
- metadata/data_quality/validations/mixins/sqa_validator_mixin.py +40 -0
- metadata/data_quality/validations/table/base/tableColumnToMatchSet.py +2 -1
- metadata/data_quality/validations/table/pandas/tableColumnToMatchSet.py +2 -1
- metadata/data_quality/validations/table/sqlalchemy/tableColumnToMatchSet.py +7 -2
- metadata/examples/workflows/bigtable.yaml +32 -0
- metadata/examples/workflows/databricks.yaml +0 -1
- metadata/examples/workflows/datalake_azure_default.yaml +29 -0
- metadata/examples/workflows/mongodb.yaml +4 -2
- metadata/examples/workflows/mstr.yaml +24 -0
- metadata/examples/workflows/sas.yaml +28 -0
- metadata/examples/workflows/unity_catalog.yaml +27 -0
- metadata/examples/workflows/unity_catalog_lineage.yaml +18 -0
- metadata/examples/workflows/unity_catalog_usage.yaml +35 -0
- metadata/generated/antlr/EntityLinkLexer.py +425 -292
- metadata/generated/antlr/EntityLinkListener.py +12 -12
- metadata/generated/antlr/EntityLinkParser.py +228 -103
- 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 +1 -1
- 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 +1 -1
- metadata/generated/schema/api/classification/createTag.py +1 -1
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +2 -3
- metadata/generated/schema/api/createEventPublisherJob.py +2 -2
- metadata/generated/schema/api/createType.py +1 -1
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createChart.py +1 -1
- metadata/generated/schema/api/data/createContainer.py +2 -2
- metadata/generated/schema/api/data/createCustomProperty.py +7 -12
- metadata/generated/schema/api/data/createDashboard.py +1 -1
- metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
- metadata/generated/schema/api/data/createDatabase.py +2 -3
- metadata/generated/schema/api/data/createDatabaseSchema.py +2 -3
- metadata/generated/schema/api/data/createGlossary.py +2 -3
- metadata/generated/schema/api/data/createGlossaryTerm.py +2 -3
- metadata/generated/schema/api/data/createMlModel.py +1 -1
- metadata/generated/schema/api/data/createPipeline.py +2 -2
- metadata/generated/schema/api/data/createQuery.py +2 -2
- metadata/generated/schema/api/data/createSearchIndex.py +1 -1
- metadata/generated/schema/api/data/createStoredProcedure.py +2 -4
- metadata/generated/schema/api/data/createTable.py +2 -2
- 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/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.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 +8 -1
- metadata/generated/schema/api/feed/createPost.py +1 -1
- metadata/generated/schema/api/feed/createSuggestion.py +30 -0
- metadata/generated/schema/api/feed/createThread.py +5 -1
- metadata/generated/schema/api/feed/resolveTask.py +12 -1
- metadata/generated/schema/api/feed/threadCount.py +18 -14
- metadata/generated/schema/api/lineage/__init__.py +1 -1
- metadata/generated/schema/api/lineage/addLineage.py +1 -1
- 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/services/__init__.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 +2 -3
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +2 -2
- metadata/generated/schema/api/tests/__init__.py +1 -1
- metadata/generated/schema/api/tests/createCustomMetric.py +4 -2
- metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
- metadata/generated/schema/api/tests/createTestCase.py +4 -1
- metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +31 -0
- metadata/generated/schema/api/tests/createTestDefinition.py +2 -1
- metadata/generated/schema/api/tests/createTestSuite.py +1 -1
- 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 +1 -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 +3 -3
- 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 +2 -2
- 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/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/appsPrivateConfiguration.py +32 -0
- metadata/generated/schema/configuration/authConfig.py +1 -1
- metadata/generated/schema/configuration/authenticationConfiguration.py +13 -2
- metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +16 -0
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +7 -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 +28 -2
- 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/loginConfiguration.py +1 -1
- metadata/generated/schema/configuration/logoConfiguration.py +1 -1
- metadata/generated/schema/configuration/pipelineServiceClientConfiguration.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/dataInsight/__init__.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/percentageOfEntitiesWithDescriptionByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
- metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
- metadata/generated/schema/dataInsight/type/totalEntitiesByType.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/smtpSettings.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 +24 -5
- metadata/generated/schema/entity/applications/appRunRecord.py +2 -7
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +30 -0
- metadata/generated/schema/entity/{services/connections/database/mongoDB → applications/configuration/external}/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +28 -0
- metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +46 -0
- metadata/generated/schema/entity/applications/configuration/internal/__init__.py +3 -0
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +14 -0
- metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +27 -0
- metadata/generated/schema/entity/applications/configuration/{searchIndexingApp.py → internal/searchIndexingAppConfig.py} +14 -4
- metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +3 -0
- metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +26 -0
- metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
- metadata/generated/schema/entity/applications/jobStatus.py +3 -3
- 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 +12 -3
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +12 -3
- 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 +2 -2
- metadata/generated/schema/entity/automations/workflow.py +1 -1
- metadata/generated/schema/entity/bot.py +2 -3
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +1 -1
- metadata/generated/schema/entity/classification/tag.py +2 -2
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/chart.py +1 -1
- metadata/generated/schema/entity/data/container.py +4 -9
- metadata/generated/schema/entity/data/dashboard.py +1 -1
- metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
- metadata/generated/schema/entity/data/database.py +4 -8
- metadata/generated/schema/entity/data/databaseSchema.py +2 -8
- metadata/generated/schema/entity/data/glossary.py +1 -1
- metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
- metadata/generated/schema/entity/data/metrics.py +1 -1
- metadata/generated/schema/entity/data/mlmodel.py +2 -2
- metadata/generated/schema/entity/data/pipeline.py +6 -9
- metadata/generated/schema/entity/data/query.py +2 -2
- 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 +3 -9
- metadata/generated/schema/entity/data/table.py +18 -12
- 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 +1 -1
- metadata/generated/schema/entity/domains/domain.py +1 -1
- metadata/generated/schema/entity/events/__init__.py +1 -1
- metadata/generated/schema/entity/events/webhook.py +6 -3
- metadata/generated/schema/entity/feed/__init__.py +1 -1
- metadata/generated/schema/entity/feed/suggestion.py +61 -0
- metadata/generated/schema/entity/feed/thread.py +17 -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 +1 -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 +2 -5
- metadata/generated/schema/entity/policies/policy.py +1 -1
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/__init__.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/modeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +46 -0
- metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +2 -2
- 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/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 +2 -2
- metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +35 -2
- metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +41 -0
- metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +20 -0
- 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/couchbaseConnection.py +6 -1
- metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/databricksConnection.py +2 -7
- 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 +2 -2
- metadata/generated/schema/entity/services/connections/database/db2Connection.py +3 -2
- metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/dorisConnection.py +86 -0
- metadata/generated/schema/entity/services/connections/database/druidConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/hiveConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +17 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +16 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +23 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +43 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +20 -0
- metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +69 -0
- metadata/generated/schema/entity/services/connections/database/icebergConnection.py +35 -0
- metadata/generated/schema/entity/services/connections/database/impalaConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +24 -14
- metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +5 -2
- metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +8 -4
- metadata/generated/schema/entity/services/connections/database/oracleConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +9 -7
- metadata/generated/schema/entity/services/connections/database/postgresConnection.py +8 -4
- metadata/generated/schema/entity/services/connections/database/prestoConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +20 -0
- metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +36 -0
- metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +7 -41
- metadata/generated/schema/entity/services/connections/database/sasConnection.py +48 -0
- metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/trinoConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +90 -0
- metadata/generated/schema/entity/services/connections/database/verticaConnection.py +2 -2
- 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 +14 -2
- 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 +14 -2
- 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/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +2 -2
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +5 -20
- 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/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 +2 -8
- 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/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +23 -0
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.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/{adlsConection.py → adlsConnection.py} +2 -2
- 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 +4 -1
- metadata/generated/schema/entity/services/databaseService.py +16 -1
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +27 -22
- metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/status.py +56 -0
- 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 +4 -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 +10 -3
- 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 +2 -6
- metadata/generated/schema/entity/teams/team.py +1 -1
- metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
- metadata/generated/schema/entity/teams/user.py +3 -10
- metadata/generated/schema/entity/type.py +4 -19
- 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 +27 -0
- metadata/generated/schema/events/api/__init__.py +1 -1
- metadata/generated/schema/events/api/createEventSubscription.py +14 -12
- metadata/generated/schema/events/emailAlertConfig.py +1 -1
- metadata/generated/schema/events/eventFilterRule.py +13 -2
- metadata/generated/schema/events/eventSubscription.py +91 -49
- metadata/generated/schema/events/eventSubscriptionOffset.py +21 -0
- metadata/generated/schema/events/failedEvent.py +26 -0
- metadata/generated/schema/events/filterResourceDescriptor.py +27 -0
- metadata/generated/schema/events/subscriptionResourceDescriptor.py +11 -10
- metadata/generated/schema/metadataIngestion/__init__.py +1 -1
- metadata/generated/schema/metadataIngestion/application.py +40 -0
- metadata/generated/schema/metadataIngestion/applicationPipeline.py +15 -6
- metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
- metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +6 -1
- metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +11 -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 +6 -3
- 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 +6 -3
- 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 +6 -3
- 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/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 +2 -2
- metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +24 -0
- 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 +8 -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/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 +46 -0
- 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 +21 -9
- 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 +7 -3
- metadata/generated/schema/security/credentials/gcpExternalAccount.py +37 -0
- metadata/generated/schema/security/credentials/gcpValues.py +2 -2
- metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
- metadata/generated/schema/security/credentials/githubCredentials.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 +14 -4
- metadata/generated/schema/security/secrets/secretsManagerProvider.py +4 -2
- 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 +4 -1
- metadata/generated/schema/settings/__init__.py +1 -1
- metadata/generated/schema/settings/settings.py +1 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +17 -0
- metadata/generated/schema/system/eventPublisherJob.py +5 -19
- metadata/generated/schema/system/indexingError.py +34 -0
- metadata/generated/schema/system/ui/__init__.py +1 -1
- metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
- metadata/generated/schema/system/ui/page.py +1 -1
- metadata/generated/schema/system/validationResponse.py +43 -0
- metadata/generated/schema/tests/__init__.py +1 -1
- metadata/generated/schema/tests/assigned.py +18 -0
- metadata/generated/schema/tests/basic.py +17 -39
- metadata/generated/schema/tests/customMetric.py +4 -2
- metadata/generated/schema/tests/resolved.py +35 -0
- metadata/generated/schema/tests/testCase.py +11 -2
- metadata/generated/schema/tests/testCaseResolutionStatus.py +63 -0
- metadata/generated/schema/tests/testDefinition.py +6 -1
- metadata/generated/schema/tests/testSuite.py +1 -1
- metadata/generated/schema/type/__init__.py +1 -1
- metadata/generated/schema/type/auditLog.py +1 -1
- metadata/generated/schema/type/basic.py +10 -6
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +5 -75
- metadata/generated/schema/type/changeEventType.py +29 -0
- 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 +3 -0
- metadata/generated/schema/type/customProperties/enumConfig.py +17 -0
- metadata/generated/schema/type/customProperty.py +52 -0
- metadata/generated/schema/type/dailyCount.py +1 -1
- metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
- metadata/generated/schema/type/entityHistory.py +1 -1
- metadata/generated/schema/type/entityLineage.py +2 -1
- metadata/generated/schema/type/entityReference.py +5 -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 +7 -6
- 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 +2 -2
- 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 +2 -2
- 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 +12 -20
- metadata/ingestion/api/delete.py +5 -2
- metadata/ingestion/api/models.py +4 -10
- metadata/ingestion/api/parser.py +3 -37
- metadata/ingestion/api/status.py +15 -4
- metadata/ingestion/api/step.py +39 -6
- metadata/ingestion/api/steps.py +34 -1
- metadata/ingestion/api/topology_runner.py +117 -168
- metadata/ingestion/bulksink/metadata_usage.py +11 -5
- metadata/ingestion/lineage/models.py +4 -0
- metadata/ingestion/lineage/parser.py +28 -12
- metadata/ingestion/lineage/sql_lineage.py +9 -17
- metadata/ingestion/models/custom_properties.py +0 -1
- metadata/ingestion/models/custom_pydantic.py +4 -2
- metadata/ingestion/models/lf_tags_model.py +33 -0
- metadata/ingestion/models/patch_request.py +160 -2
- metadata/ingestion/models/tests_data.py +9 -0
- metadata/ingestion/models/topology.py +177 -60
- metadata/ingestion/ometa/auth_provider.py +0 -349
- metadata/ingestion/ometa/client.py +12 -3
- metadata/ingestion/ometa/mixins/custom_property_mixin.py +11 -11
- metadata/ingestion/ometa/mixins/es_mixin.py +17 -0
- metadata/ingestion/ometa/mixins/patch_mixin.py +21 -72
- metadata/ingestion/ometa/mixins/suggestions_mixin.py +41 -0
- metadata/ingestion/ometa/mixins/table_mixin.py +18 -0
- metadata/ingestion/ometa/mixins/tests_mixin.py +24 -3
- metadata/ingestion/ometa/mixins/user_mixin.py +117 -22
- metadata/ingestion/ometa/ometa_api.py +19 -26
- metadata/ingestion/ometa/routes.py +7 -0
- metadata/ingestion/processor/query_parser.py +9 -2
- metadata/ingestion/sink/metadata_rest.py +29 -8
- metadata/ingestion/source/dashboard/dashboard_service.py +38 -61
- metadata/ingestion/source/dashboard/domodashboard/metadata.py +13 -14
- metadata/ingestion/source/dashboard/lightdash/metadata.py +2 -1
- metadata/ingestion/source/dashboard/looker/metadata.py +41 -29
- metadata/ingestion/source/dashboard/looker/utils.py +4 -2
- metadata/ingestion/source/dashboard/metabase/client.py +4 -0
- metadata/ingestion/source/dashboard/metabase/metadata.py +28 -10
- metadata/ingestion/source/dashboard/metabase/models.py +2 -2
- metadata/ingestion/source/dashboard/mode/client.py +10 -23
- metadata/ingestion/source/dashboard/mode/connection.py +6 -1
- metadata/ingestion/source/dashboard/mode/metadata.py +8 -4
- metadata/ingestion/source/dashboard/mstr/client.py +208 -0
- metadata/ingestion/source/dashboard/mstr/connection.py +53 -0
- metadata/ingestion/source/dashboard/mstr/metadata.py +182 -0
- metadata/ingestion/source/dashboard/mstr/models.py +144 -0
- metadata/ingestion/source/dashboard/powerbi/client.py +4 -1
- metadata/ingestion/source/dashboard/powerbi/metadata.py +15 -10
- metadata/ingestion/source/dashboard/qliksense/metadata.py +11 -7
- metadata/ingestion/source/dashboard/quicksight/metadata.py +9 -5
- metadata/ingestion/source/dashboard/redash/metadata.py +23 -14
- metadata/ingestion/source/dashboard/superset/api_source.py +11 -8
- metadata/ingestion/source/dashboard/superset/client.py +16 -9
- metadata/ingestion/source/dashboard/superset/connection.py +3 -3
- metadata/ingestion/source/dashboard/superset/db_source.py +14 -11
- metadata/ingestion/source/dashboard/superset/mixin.py +22 -18
- metadata/ingestion/source/dashboard/superset/queries.py +1 -1
- metadata/ingestion/source/dashboard/tableau/client.py +91 -11
- metadata/ingestion/source/dashboard/tableau/connection.py +10 -1
- metadata/ingestion/source/dashboard/tableau/metadata.py +76 -70
- metadata/ingestion/source/dashboard/tableau/models.py +0 -8
- metadata/ingestion/source/dashboard/tableau/queries.py +5 -5
- metadata/ingestion/source/database/athena/client.py +80 -0
- metadata/ingestion/source/database/athena/connection.py +7 -0
- metadata/ingestion/source/database/athena/metadata.py +161 -19
- metadata/ingestion/source/database/azuresql/connection.py +21 -3
- metadata/ingestion/source/database/azuresql/metadata.py +0 -1
- metadata/ingestion/source/database/bigquery/connection.py +24 -3
- metadata/ingestion/source/database/bigquery/helper.py +68 -1
- metadata/ingestion/source/database/bigquery/metadata.py +49 -28
- metadata/ingestion/source/database/bigquery/queries.py +33 -4
- metadata/ingestion/source/database/bigquery/query_parser.py +13 -0
- metadata/ingestion/source/database/bigquery/usage.py +1 -3
- metadata/ingestion/source/database/bigtable/client.py +62 -0
- metadata/ingestion/source/database/bigtable/connection.py +116 -0
- metadata/ingestion/source/database/bigtable/metadata.py +224 -0
- metadata/ingestion/source/database/bigtable/models.py +60 -0
- metadata/ingestion/source/database/column_helpers.py +0 -10
- metadata/ingestion/source/database/column_type_parser.py +11 -5
- metadata/ingestion/source/database/common_db_source.py +33 -8
- metadata/ingestion/source/database/common_nosql_source.py +27 -6
- metadata/ingestion/source/database/database_service.py +89 -7
- metadata/ingestion/source/database/databricks/client.py +55 -103
- metadata/ingestion/source/database/databricks/connection.py +16 -55
- metadata/ingestion/source/database/databricks/lineage.py +29 -26
- metadata/ingestion/source/database/databricks/metadata.py +534 -11
- metadata/ingestion/source/database/databricks/queries.py +27 -0
- metadata/ingestion/source/database/databricks/query_parser.py +5 -1
- metadata/ingestion/source/database/databricks/usage.py +3 -3
- metadata/ingestion/source/database/datalake/connection.py +33 -18
- metadata/ingestion/source/database/datalake/metadata.py +113 -27
- metadata/ingestion/source/database/dbt/dbt_config.py +7 -14
- metadata/ingestion/source/database/dbt/dbt_service.py +10 -14
- metadata/ingestion/source/database/dbt/dbt_utils.py +3 -1
- metadata/ingestion/source/database/dbt/metadata.py +27 -53
- metadata/ingestion/source/database/deltalake/metadata.py +6 -3
- metadata/ingestion/source/database/domodatabase/metadata.py +7 -6
- metadata/ingestion/source/database/doris/connection.py +72 -0
- metadata/ingestion/source/database/doris/metadata.py +315 -0
- metadata/ingestion/source/database/doris/queries.py +54 -0
- metadata/ingestion/source/database/doris/utils.py +64 -0
- metadata/ingestion/source/database/extended_sample_data.py +532 -0
- metadata/ingestion/source/database/glue/metadata.py +8 -5
- metadata/ingestion/source/database/hive/connection.py +0 -2
- metadata/ingestion/source/database/hive/utils.py +3 -0
- metadata/ingestion/source/database/iceberg/catalog/__init__.py +65 -0
- metadata/ingestion/source/database/iceberg/catalog/base.py +40 -0
- metadata/ingestion/source/database/iceberg/catalog/dynamodb.py +102 -0
- metadata/ingestion/source/database/iceberg/catalog/glue.py +88 -0
- metadata/ingestion/source/database/iceberg/catalog/hive.py +51 -0
- metadata/ingestion/source/database/iceberg/catalog/rest.py +84 -0
- metadata/ingestion/source/database/iceberg/connection.py +68 -0
- metadata/ingestion/source/database/iceberg/fs/__init__.py +52 -0
- metadata/ingestion/source/database/iceberg/fs/azure.py +44 -0
- metadata/ingestion/source/database/iceberg/fs/base.py +30 -0
- metadata/ingestion/source/database/iceberg/fs/s3.py +77 -0
- metadata/ingestion/source/database/iceberg/helper.py +124 -0
- metadata/ingestion/source/database/iceberg/metadata.py +311 -0
- metadata/ingestion/source/database/iceberg/models.py +66 -0
- metadata/ingestion/source/database/life_cycle_query_mixin.py +72 -3
- metadata/ingestion/source/database/mongodb/connection.py +1 -5
- metadata/ingestion/source/database/mssql/lineage.py +3 -0
- metadata/ingestion/source/database/mssql/metadata.py +108 -4
- metadata/ingestion/source/database/mssql/models.py +30 -0
- metadata/ingestion/source/database/mssql/queries.py +178 -1
- metadata/ingestion/source/database/mssql/usage.py +5 -1
- metadata/ingestion/source/database/mssql/utils.py +207 -4
- metadata/ingestion/source/database/mysql/connection.py +14 -0
- metadata/ingestion/source/database/mysql/metadata.py +0 -2
- metadata/ingestion/source/database/oracle/metadata.py +108 -2
- metadata/ingestion/source/database/oracle/models.py +30 -0
- metadata/ingestion/source/database/oracle/queries.py +99 -18
- metadata/ingestion/source/database/oracle/utils.py +0 -1
- metadata/ingestion/source/database/postgres/connection.py +15 -0
- metadata/ingestion/source/database/postgres/lineage.py +32 -14
- metadata/ingestion/source/database/postgres/metadata.py +15 -7
- metadata/ingestion/source/database/postgres/pgspider/lineage.py +0 -1
- metadata/ingestion/source/database/postgres/queries.py +4 -2
- metadata/ingestion/source/database/postgres/query_parser.py +4 -72
- metadata/ingestion/source/database/postgres/usage.py +41 -0
- metadata/ingestion/source/database/postgres/utils.py +34 -0
- metadata/ingestion/source/database/query_parser_source.py +8 -2
- metadata/ingestion/source/database/redshift/metadata.py +14 -4
- metadata/ingestion/source/database/redshift/queries.py +10 -4
- metadata/ingestion/source/database/redshift/query_parser.py +16 -0
- metadata/ingestion/source/database/redshift/usage.py +0 -2
- metadata/ingestion/source/database/salesforce/metadata.py +32 -3
- metadata/ingestion/source/database/sample_data.py +120 -6
- metadata/ingestion/source/database/sas/client.py +184 -0
- metadata/ingestion/source/database/sas/connection.py +47 -0
- metadata/ingestion/source/database/sas/extension_attr.py +103 -0
- metadata/ingestion/source/database/sas/metadata.py +914 -0
- metadata/ingestion/source/database/snowflake/metadata.py +34 -48
- metadata/ingestion/source/database/snowflake/models.py +6 -1
- metadata/ingestion/source/database/snowflake/queries.py +6 -4
- metadata/ingestion/source/database/snowflake/query_parser.py +5 -20
- metadata/ingestion/source/database/snowflake/utils.py +23 -8
- metadata/ingestion/source/database/stored_procedures_mixin.py +12 -8
- metadata/ingestion/source/database/unitycatalog/__init__.py +0 -0
- metadata/ingestion/source/database/unitycatalog/client.py +87 -0
- metadata/ingestion/source/database/unitycatalog/connection.py +97 -0
- metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/lineage.py +11 -11
- metadata/ingestion/source/database/{databricks/unity_catalog → unitycatalog}/metadata.py +42 -49
- metadata/ingestion/source/database/unitycatalog/query_parser.py +60 -0
- metadata/ingestion/source/database/unitycatalog/usage.py +31 -0
- metadata/ingestion/source/database/usage_source.py +3 -2
- metadata/ingestion/source/messaging/common_broker_source.py +15 -11
- metadata/ingestion/source/messaging/kafka/connection.py +45 -4
- metadata/ingestion/source/messaging/kinesis/metadata.py +6 -3
- metadata/ingestion/source/messaging/messaging_service.py +6 -2
- metadata/ingestion/source/metadata/amundsen/metadata.py +10 -7
- metadata/ingestion/source/metadata/atlas/metadata.py +5 -5
- metadata/ingestion/source/mlmodel/mlflow/metadata.py +5 -2
- metadata/ingestion/source/mlmodel/mlmodel_service.py +6 -2
- metadata/ingestion/source/mlmodel/sagemaker/metadata.py +20 -8
- metadata/ingestion/source/pipeline/airflow/connection.py +0 -12
- metadata/ingestion/source/pipeline/airflow/lineage_parser.py +12 -6
- metadata/ingestion/source/pipeline/airflow/metadata.py +63 -34
- metadata/ingestion/source/pipeline/airflow/models.py +5 -4
- metadata/ingestion/source/pipeline/dagster/metadata.py +7 -4
- metadata/ingestion/source/pipeline/databrickspipeline/connection.py +1 -5
- metadata/ingestion/source/pipeline/databrickspipeline/metadata.py +14 -11
- metadata/ingestion/source/pipeline/domopipeline/metadata.py +7 -4
- metadata/ingestion/source/pipeline/gluepipeline/metadata.py +5 -2
- metadata/ingestion/source/pipeline/pipeline_service.py +6 -2
- metadata/ingestion/source/pipeline/spline/metadata.py +0 -1
- metadata/ingestion/source/search/elasticsearch/connection.py +4 -1
- metadata/ingestion/source/search/elasticsearch/metadata.py +1 -2
- metadata/ingestion/source/search/search_service.py +6 -2
- metadata/ingestion/source/storage/s3/metadata.py +22 -17
- metadata/ingestion/source/storage/storage_service.py +53 -11
- metadata/ingestion/stage/table_usage.py +9 -2
- metadata/mixins/sqalchemy/sqa_mixin.py +14 -7
- metadata/parsers/protobuf_parser.py +29 -11
- metadata/pii/processor.py +9 -2
- metadata/pii/scanners/ner_scanner.py +5 -3
- metadata/profiler/api/models.py +19 -1
- metadata/profiler/interface/pandas/profiler_interface.py +59 -18
- metadata/profiler/interface/profiler_interface.py +14 -4
- metadata/profiler/interface/profiler_interface_factory.py +49 -14
- metadata/profiler/interface/sqlalchemy/bigquery/profiler_interface.py +3 -0
- metadata/profiler/interface/sqlalchemy/databricks/profiler_interface.py +26 -0
- metadata/profiler/interface/sqlalchemy/db2/__init__.py +0 -0
- metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +38 -0
- metadata/profiler/interface/sqlalchemy/mariadb/profiler_interface.py +85 -0
- metadata/profiler/interface/sqlalchemy/profiler_interface.py +77 -34
- metadata/profiler/interface/sqlalchemy/single_store/profiler_interface.py +2 -2
- metadata/profiler/interface/sqlalchemy/snowflake/profiler_interface.py +7 -0
- metadata/profiler/interface/sqlalchemy/trino/profiler_interface.py +2 -2
- metadata/profiler/interface/sqlalchemy/unity_catalog/profiler_interface.py +33 -0
- metadata/profiler/metrics/composed/null_ratio.py +1 -1
- metadata/profiler/metrics/hybrid/histogram.py +1 -0
- metadata/profiler/metrics/static/max.py +4 -1
- metadata/profiler/metrics/static/min.py +4 -1
- metadata/profiler/metrics/system/queries/snowflake.py +89 -17
- metadata/profiler/metrics/system/system.py +62 -20
- metadata/profiler/orm/functions/conn_test.py +1 -0
- metadata/profiler/orm/functions/length.py +1 -0
- metadata/profiler/orm/functions/median.py +9 -1
- metadata/profiler/orm/functions/sum.py +1 -0
- metadata/profiler/orm/functions/table_metric_computer.py +462 -0
- metadata/profiler/orm/registry.py +2 -0
- metadata/profiler/processor/core.py +129 -62
- metadata/profiler/processor/default.py +14 -3
- metadata/profiler/processor/handle_partition.py +2 -2
- metadata/profiler/processor/processor.py +10 -7
- metadata/profiler/processor/sample_data_handler.py +6 -2
- metadata/profiler/processor/sampler/sqlalchemy/bigquery/sampler.py +31 -3
- metadata/profiler/processor/sampler/sqlalchemy/sampler.py +29 -6
- metadata/profiler/processor/sampler/sqlalchemy/trino/sampler.py +10 -4
- metadata/profiler/source/base/profiler_source.py +5 -2
- metadata/profiler/source/bigquery/type_mapper.py +0 -1
- metadata/profiler/source/databricks/profiler_source.py +36 -0
- metadata/profiler/source/mariadb/functions/median.py +20 -0
- metadata/profiler/source/mariadb/metrics/window/first_quartile.py +10 -0
- metadata/profiler/source/mariadb/metrics/window/median.py +10 -0
- metadata/profiler/source/mariadb/metrics/window/third_quartile.py +10 -0
- metadata/profiler/source/metadata.py +49 -10
- metadata/profiler/source/metadata_ext.py +16 -50
- metadata/profiler/source/profiler_source_factory.py +8 -0
- metadata/py.typed +0 -0
- metadata/readers/dataframe/json.py +5 -4
- metadata/readers/file/api_reader.py +0 -1
- metadata/utils/constants.py +5 -0
- metadata/utils/credentials.py +36 -19
- metadata/utils/datalake/datalake_utils.py +369 -129
- metadata/utils/entity_link.py +26 -6
- metadata/utils/execution_time_tracker.py +199 -0
- metadata/utils/filters.py +4 -0
- metadata/utils/fqn.py +20 -0
- metadata/utils/helpers.py +34 -39
- metadata/utils/importer.py +2 -3
- metadata/utils/life_cycle_utils.py +4 -4
- metadata/utils/logger.py +13 -2
- metadata/utils/partition.py +10 -5
- metadata/utils/secrets/aws_based_secrets_manager.py +67 -4
- metadata/utils/secrets/aws_secrets_manager.py +7 -2
- metadata/utils/secrets/aws_ssm_secrets_manager.py +7 -2
- metadata/utils/secrets/azure_kv_secrets_manager.py +132 -0
- metadata/utils/secrets/{noop_secrets_manager.py → db_secrets_manager.py} +4 -3
- metadata/utils/secrets/external_secrets_manager.py +25 -3
- metadata/utils/secrets/secrets_manager_factory.py +15 -33
- metadata/utils/{source_hash_utils.py → source_hash.py} +10 -1
- metadata/utils/sqlalchemy_utils.py +21 -0
- metadata/utils/storage_metadata_config.py +42 -14
- metadata/utils/tag_utils.py +5 -2
- metadata/workflow/application.py +154 -0
- metadata/workflow/application_output_handler.py +34 -0
- metadata/workflow/base.py +88 -153
- metadata/workflow/data_insight.py +8 -7
- metadata/workflow/data_quality.py +3 -2
- metadata/workflow/ingestion.py +203 -0
- metadata/workflow/metadata.py +2 -3
- metadata/workflow/output_handler.py +226 -0
- metadata/workflow/profiler.py +2 -2
- metadata/workflow/usage.py +3 -4
- metadata/workflow/workflow_output_handler.py +15 -255
- metadata/workflow/workflow_status_mixin.py +44 -52
- openmetadata_ingestion-1.3.2.0rc1.dist-info/METADATA +758 -0
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/RECORD +870 -762
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/WHEEL +1 -1
- metadata/generated/schema/entity/applications/appConfig.py +0 -21
- metadata/generated/schema/entity/applications/configuration/dataInsightsApp.py +0 -17
- metadata/generated/schema/entity/applications/configuration/externalAppIngestionConfig.py +0 -38
- metadata/generated/schema/entity/services/connections/database/mongoDB/mongoDBValues.py +0 -44
- metadata/generated/schema/events/dataInsightAlertConfig.py +0 -17
- metadata/generated/schema/events/entitySpelFilters.py +0 -19
- metadata/ingestion/models/es_documents.py +0 -339
- metadata/ingestion/ometa/mixins/glossary_mixin.py +0 -501
- metadata/ingestion/ometa/provider_registry.py +0 -144
- metadata/ingestion/source/database/databricks/legacy/lineage.py +0 -51
- metadata/ingestion/source/database/databricks/legacy/metadata.py +0 -339
- metadata/ingestion/source/metadata/metadata_elasticsearch/metadata.py +0 -144
- metadata/profiler/orm/functions/table_metric_construct.py +0 -365
- metadata/utils/secrets/client/loader.py +0 -78
- openmetadata_ingestion-1.2.4.0.dist-info/METADATA +0 -429
- /metadata/examples/workflows/{datalake_azure.yaml → datalake_azure_client_secret.yaml} +0 -0
- /metadata/ingestion/source/{database/databricks/legacy → dashboard/mstr}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks/unity_catalog → bigtable}/__init__.py +0 -0
- /metadata/ingestion/source/{metadata/metadata_elasticsearch → database/doris}/__init__.py +0 -0
- /metadata/{utils/secrets/client → ingestion/source/database/sas}/__init__.py +0 -0
- /metadata/ingestion/source/database/{databricks → unitycatalog}/models.py +0 -0
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.2.4.0.dist-info → openmetadata_ingestion-1.3.2.0rc1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Copyright 2022 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.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
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
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
|
+
Abstract class for AWS based secrets manager implementations
|
|
14
|
+
"""
|
|
15
|
+
import os
|
|
16
|
+
import traceback
|
|
17
|
+
from abc import ABC
|
|
18
|
+
from typing import Optional
|
|
19
|
+
|
|
20
|
+
from azure.keyvault.secrets import KeyVaultSecret
|
|
21
|
+
|
|
22
|
+
from metadata.clients.azure_client import AzureClient
|
|
23
|
+
from metadata.generated.schema.security.secrets.secretsManagerClientLoader import (
|
|
24
|
+
SecretsManagerClientLoader,
|
|
25
|
+
)
|
|
26
|
+
from metadata.generated.schema.security.secrets.secretsManagerProvider import (
|
|
27
|
+
SecretsManagerProvider,
|
|
28
|
+
)
|
|
29
|
+
from metadata.utils.dispatch import enum_register
|
|
30
|
+
from metadata.utils.logger import utils_logger
|
|
31
|
+
from metadata.utils.secrets.external_secrets_manager import (
|
|
32
|
+
SECRET_MANAGER_AIRFLOW_CONF,
|
|
33
|
+
ExternalSecretsManager,
|
|
34
|
+
SecretsManagerConfigException,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
logger = utils_logger()
|
|
38
|
+
|
|
39
|
+
secrets_manager_client_loader = enum_register()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# pylint: disable=import-outside-toplevel
|
|
43
|
+
@secrets_manager_client_loader.add(SecretsManagerClientLoader.noop.value)
|
|
44
|
+
def _() -> None:
|
|
45
|
+
return None
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@secrets_manager_client_loader.add(SecretsManagerClientLoader.airflow.value)
|
|
49
|
+
def _() -> Optional["AzureCredentials"]:
|
|
50
|
+
from airflow.configuration import conf
|
|
51
|
+
|
|
52
|
+
from metadata.generated.schema.security.credentials.azureCredentials import (
|
|
53
|
+
AzureCredentials,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
key_vault_name = conf.get(
|
|
57
|
+
SECRET_MANAGER_AIRFLOW_CONF, "azure_key_vault_name", fallback=None
|
|
58
|
+
)
|
|
59
|
+
if not key_vault_name:
|
|
60
|
+
raise ValueError(
|
|
61
|
+
"Missing `azure_key_vault_name` config for Azure Key Vault Secrets Manager Provider."
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
tenant_id = conf.get(SECRET_MANAGER_AIRFLOW_CONF, "azure_tenant_id", fallback=None)
|
|
65
|
+
client_id = conf.get(SECRET_MANAGER_AIRFLOW_CONF, "azure_client_id", fallback=None)
|
|
66
|
+
client_secret = conf.get(
|
|
67
|
+
SECRET_MANAGER_AIRFLOW_CONF, "azure_client_secret", fallback=None
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
return AzureCredentials(
|
|
71
|
+
clientId=client_id,
|
|
72
|
+
clientSecret=client_secret,
|
|
73
|
+
tenantId=tenant_id,
|
|
74
|
+
vaultName=key_vault_name,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@secrets_manager_client_loader.add(SecretsManagerClientLoader.env.value)
|
|
79
|
+
def _() -> Optional["AzureCredentials"]:
|
|
80
|
+
from metadata.generated.schema.security.credentials.azureCredentials import (
|
|
81
|
+
AzureCredentials,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
# Load only the AZURE_KEY_VAULT_NAME (required) variable and use the
|
|
85
|
+
# Default Auth chain
|
|
86
|
+
# https://learn.microsoft.com/en-us/python/api/overview/azure/identity-readme?view=azure-python#defaultazurecredential
|
|
87
|
+
key_vault_name = os.getenv("AZURE_KEY_VAULT_NAME")
|
|
88
|
+
|
|
89
|
+
if not key_vault_name:
|
|
90
|
+
raise ValueError(
|
|
91
|
+
"Missing `azure_key_vault_name` config for Azure Key Vault Secrets Manager Provider."
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
return AzureCredentials(vaultName=key_vault_name)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class AzureKVSecretsManager(ExternalSecretsManager, ABC):
|
|
98
|
+
"""
|
|
99
|
+
Azure Key Vault Secrets Manager class
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
def __init__(
|
|
103
|
+
self,
|
|
104
|
+
loader: SecretsManagerClientLoader,
|
|
105
|
+
):
|
|
106
|
+
super().__init__(provider=SecretsManagerProvider.azure_kv, loader=loader)
|
|
107
|
+
|
|
108
|
+
self.client = AzureClient(self.credentials).create_secret_client()
|
|
109
|
+
|
|
110
|
+
def get_string_value(self, secret_id: str) -> str:
|
|
111
|
+
"""
|
|
112
|
+
:param secret_id: The secret id to retrieve
|
|
113
|
+
:return: The value of the secret
|
|
114
|
+
"""
|
|
115
|
+
try:
|
|
116
|
+
secret: KeyVaultSecret = self.client.get_secret(secret_id)
|
|
117
|
+
logger.debug(f"Got value for secret {secret_id}")
|
|
118
|
+
return secret.value
|
|
119
|
+
except Exception as exc:
|
|
120
|
+
logger.debug(traceback.format_exc())
|
|
121
|
+
logger.error(
|
|
122
|
+
f"Could not get the secret value of {secret_id} due to [{exc}]"
|
|
123
|
+
)
|
|
124
|
+
raise exc
|
|
125
|
+
|
|
126
|
+
def load_credentials(self) -> Optional["AzureCredentials"]:
|
|
127
|
+
"""Load the provider credentials based on the loader type"""
|
|
128
|
+
try:
|
|
129
|
+
loader_fn = secrets_manager_client_loader.registry.get(self.loader.value)
|
|
130
|
+
return loader_fn()
|
|
131
|
+
except Exception as err:
|
|
132
|
+
raise SecretsManagerConfigException(f"Error loading credentials - [{err}]")
|
|
@@ -18,12 +18,13 @@ from metadata.generated.schema.security.secrets.secretsManagerProvider import (
|
|
|
18
18
|
from metadata.utils.secrets.secrets_manager import SecretsManager
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
class
|
|
21
|
+
class DBSecretsManager(SecretsManager):
|
|
22
22
|
"""
|
|
23
|
-
|
|
23
|
+
Will return the string as received. The client does not need to pick
|
|
24
|
+
it up from any external resource.
|
|
24
25
|
"""
|
|
25
26
|
|
|
26
|
-
provider: str = SecretsManagerProvider.
|
|
27
|
+
provider: str = SecretsManagerProvider.db.name
|
|
27
28
|
|
|
28
29
|
def get_string_value(self, secret_id: str) -> str:
|
|
29
30
|
return secret_id
|
|
@@ -12,18 +12,40 @@
|
|
|
12
12
|
"""
|
|
13
13
|
Abstract class for third party secrets' manager implementations
|
|
14
14
|
"""
|
|
15
|
-
from abc import ABC
|
|
15
|
+
from abc import ABC, abstractmethod
|
|
16
|
+
from typing import Any
|
|
16
17
|
|
|
18
|
+
from metadata.generated.schema.security.secrets.secretsManagerClientLoader import (
|
|
19
|
+
SecretsManagerClientLoader,
|
|
20
|
+
)
|
|
17
21
|
from metadata.generated.schema.security.secrets.secretsManagerProvider import (
|
|
18
22
|
SecretsManagerProvider,
|
|
19
23
|
)
|
|
20
24
|
from metadata.utils.secrets.secrets_manager import SecretsManager
|
|
21
25
|
|
|
26
|
+
SECRET_MANAGER_AIRFLOW_CONF = "openmetadata_secrets_manager"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class SecretsManagerConfigException(Exception):
|
|
30
|
+
"""
|
|
31
|
+
Invalid config that does not allow us to create
|
|
32
|
+
the SecretsManagerFactory
|
|
33
|
+
"""
|
|
34
|
+
|
|
22
35
|
|
|
23
36
|
class ExternalSecretsManager(SecretsManager, ABC):
|
|
24
37
|
"""
|
|
25
38
|
Abstract class for third party secrets' manager implementations
|
|
26
39
|
"""
|
|
27
40
|
|
|
28
|
-
def __init__(
|
|
29
|
-
self
|
|
41
|
+
def __init__(
|
|
42
|
+
self, provider: SecretsManagerProvider, loader: SecretsManagerClientLoader
|
|
43
|
+
):
|
|
44
|
+
self.provider = provider
|
|
45
|
+
self.loader = loader
|
|
46
|
+
|
|
47
|
+
self.credentials = self.load_credentials()
|
|
48
|
+
|
|
49
|
+
@abstractmethod
|
|
50
|
+
def load_credentials(self) -> Any:
|
|
51
|
+
"""Load the provider credentials based on the loader type"""
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"""
|
|
13
13
|
Secrets manager factory module
|
|
14
14
|
"""
|
|
15
|
-
from typing import
|
|
15
|
+
from typing import Optional
|
|
16
16
|
|
|
17
17
|
from metadata.generated.schema.security.secrets.secretsManagerClientLoader import (
|
|
18
18
|
SecretsManagerClientLoader,
|
|
@@ -22,19 +22,12 @@ from metadata.generated.schema.security.secrets.secretsManagerProvider import (
|
|
|
22
22
|
)
|
|
23
23
|
from metadata.utils.secrets.aws_secrets_manager import AWSSecretsManager
|
|
24
24
|
from metadata.utils.secrets.aws_ssm_secrets_manager import AWSSSMSecretsManager
|
|
25
|
-
from metadata.utils.secrets.
|
|
26
|
-
from metadata.utils.secrets.
|
|
25
|
+
from metadata.utils.secrets.azure_kv_secrets_manager import AzureKVSecretsManager
|
|
26
|
+
from metadata.utils.secrets.db_secrets_manager import DBSecretsManager
|
|
27
27
|
from metadata.utils.secrets.secrets_manager import SecretsManager
|
|
28
28
|
from metadata.utils.singleton import Singleton
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
class SecretsManagerConfigException(Exception):
|
|
32
|
-
"""
|
|
33
|
-
Invalid config that does not allow us to create
|
|
34
|
-
the SecretsManagerFactory
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
|
|
38
31
|
class SecretsManagerFactory(metaclass=Singleton):
|
|
39
32
|
"""
|
|
40
33
|
Singleton factory to initialize a secret manager. It will return always the same secret manager instance.
|
|
@@ -56,11 +49,9 @@ class SecretsManagerFactory(metaclass=Singleton):
|
|
|
56
49
|
self._secrets_manager_provider = secrets_manager_provider
|
|
57
50
|
self._secrets_manager_loader = secrets_manager_loader
|
|
58
51
|
|
|
59
|
-
credentials = self._load_secrets_manager_credentials()
|
|
60
|
-
|
|
61
52
|
self.secrets_manager = self._get_secrets_manager(
|
|
62
53
|
secrets_manager_provider,
|
|
63
|
-
|
|
54
|
+
secrets_manager_loader,
|
|
64
55
|
)
|
|
65
56
|
|
|
66
57
|
@property
|
|
@@ -74,44 +65,35 @@ class SecretsManagerFactory(metaclass=Singleton):
|
|
|
74
65
|
def _get_secrets_manager(
|
|
75
66
|
self,
|
|
76
67
|
secrets_manager_provider: SecretsManagerProvider,
|
|
77
|
-
|
|
68
|
+
secrets_manager_loader: SecretsManagerClientLoader,
|
|
78
69
|
) -> SecretsManager:
|
|
79
70
|
"""
|
|
80
71
|
Method to get the secrets manager based on the arguments passed
|
|
81
72
|
:param secrets_manager_provider: the secrets' manager provider
|
|
82
|
-
:param
|
|
83
|
-
implementations
|
|
73
|
+
:param secrets_manager_loader: how to retrieve the secrets manager keys from the environment
|
|
84
74
|
:return: a secrets manager
|
|
85
75
|
"""
|
|
86
76
|
if (
|
|
87
77
|
secrets_manager_provider is None
|
|
88
|
-
or secrets_manager_provider == SecretsManagerProvider.
|
|
78
|
+
or secrets_manager_provider == SecretsManagerProvider.db
|
|
89
79
|
):
|
|
90
|
-
return
|
|
80
|
+
return DBSecretsManager()
|
|
91
81
|
if secrets_manager_provider in (
|
|
92
82
|
SecretsManagerProvider.aws,
|
|
93
83
|
SecretsManagerProvider.managed_aws,
|
|
94
84
|
):
|
|
95
|
-
return AWSSecretsManager(
|
|
85
|
+
return AWSSecretsManager(secrets_manager_loader)
|
|
96
86
|
if secrets_manager_provider in (
|
|
97
87
|
SecretsManagerProvider.aws_ssm,
|
|
98
88
|
SecretsManagerProvider.managed_aws_ssm,
|
|
99
89
|
):
|
|
100
|
-
return AWSSSMSecretsManager(
|
|
90
|
+
return AWSSSMSecretsManager(secrets_manager_loader)
|
|
91
|
+
if secrets_manager_provider in (
|
|
92
|
+
SecretsManagerProvider.azure_kv,
|
|
93
|
+
SecretsManagerProvider.managed_azure_kv,
|
|
94
|
+
):
|
|
95
|
+
return AzureKVSecretsManager(secrets_manager_loader)
|
|
101
96
|
raise NotImplementedError(f"[{secrets_manager_provider}] is not implemented.")
|
|
102
97
|
|
|
103
98
|
def get_secrets_manager(self):
|
|
104
99
|
return self.secrets_manager
|
|
105
|
-
|
|
106
|
-
def _load_secrets_manager_credentials(self) -> Optional["AWSCredentials"]:
|
|
107
|
-
|
|
108
|
-
if not self.secrets_manager_loader:
|
|
109
|
-
return None
|
|
110
|
-
|
|
111
|
-
try:
|
|
112
|
-
loader_fn = secrets_manager_client_loader.registry.get(
|
|
113
|
-
self.secrets_manager_loader.value
|
|
114
|
-
)
|
|
115
|
-
return loader_fn(self.secrets_manager_provider)
|
|
116
|
-
except Exception as err:
|
|
117
|
-
raise SecretsManagerConfigException(f"Error loading credentials - [{err}]")
|
|
@@ -23,11 +23,20 @@ SOURCE_HASH_EXCLUDE_FIELDS = {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def generate_source_hash(
|
|
26
|
+
def generate_source_hash(
|
|
27
|
+
create_request: C, exclude_fields: Optional[Dict] = None
|
|
28
|
+
) -> str:
|
|
27
29
|
"""
|
|
28
30
|
Given a create_request model convert it to json string and generate a hash value
|
|
29
31
|
"""
|
|
30
32
|
|
|
33
|
+
# We always want to exclude the sourceHash when generating the fingerprint
|
|
34
|
+
exclude_fields = (
|
|
35
|
+
SOURCE_HASH_EXCLUDE_FIELDS.update(exclude_fields)
|
|
36
|
+
if exclude_fields
|
|
37
|
+
else SOURCE_HASH_EXCLUDE_FIELDS
|
|
38
|
+
)
|
|
39
|
+
|
|
31
40
|
create_request_json = create_request.json(exclude=exclude_fields)
|
|
32
41
|
|
|
33
42
|
json_bytes = create_request_json.encode("utf-8")
|
|
@@ -39,6 +39,27 @@ def get_table_comment_wrapper(self, connection, query, table_name, schema=None):
|
|
|
39
39
|
return {"text": self.all_table_comments.get((table_name, schema))}
|
|
40
40
|
|
|
41
41
|
|
|
42
|
+
@reflection.cache
|
|
43
|
+
def get_all_table_owners(
|
|
44
|
+
self, connection, query, schema_name, **kw
|
|
45
|
+
): # pylint: disable=unused-argument
|
|
46
|
+
"""
|
|
47
|
+
Method to fetch owners of all available tables
|
|
48
|
+
"""
|
|
49
|
+
self.all_table_owners: Dict[Tuple[str, str], str] = {}
|
|
50
|
+
result = connection.execute(query)
|
|
51
|
+
for table in result:
|
|
52
|
+
self.all_table_owners[(table[0], table[1])] = table[2]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def get_table_owner_wrapper(
|
|
56
|
+
self, connection, query, table_name, schema=None, **kw
|
|
57
|
+
): # pylint: disable=unused-argument
|
|
58
|
+
if not hasattr(self, "all_table_owners"):
|
|
59
|
+
self.get_all_table_owners(connection, query, schema)
|
|
60
|
+
return self.all_table_owners.get((schema, table_name), "")
|
|
61
|
+
|
|
62
|
+
|
|
42
63
|
@reflection.cache
|
|
43
64
|
def get_all_view_definitions(self, connection, query):
|
|
44
65
|
"""
|
|
@@ -17,9 +17,13 @@ from functools import singledispatch
|
|
|
17
17
|
|
|
18
18
|
import requests
|
|
19
19
|
|
|
20
|
+
from metadata.clients.azure_client import AzureClient
|
|
20
21
|
from metadata.generated.schema.entity.services.connections.database.datalake.azureConfig import (
|
|
21
22
|
AzureConfig,
|
|
22
23
|
)
|
|
24
|
+
from metadata.generated.schema.entity.services.connections.database.datalake.gcsConfig import (
|
|
25
|
+
GCSConfig,
|
|
26
|
+
)
|
|
23
27
|
from metadata.generated.schema.entity.services.connections.database.datalake.s3Config import (
|
|
24
28
|
S3Config,
|
|
25
29
|
)
|
|
@@ -29,6 +33,9 @@ from metadata.generated.schema.metadataIngestion.storage.manifestMetadataConfig
|
|
|
29
33
|
from metadata.generated.schema.metadataIngestion.storage.storageMetadataADLSConfig import (
|
|
30
34
|
StorageMetadataAdlsConfig,
|
|
31
35
|
)
|
|
36
|
+
from metadata.generated.schema.metadataIngestion.storage.storageMetadataGCSConfig import (
|
|
37
|
+
StorageMetadataGcsConfig,
|
|
38
|
+
)
|
|
32
39
|
from metadata.generated.schema.metadataIngestion.storage.storageMetadataHttpConfig import (
|
|
33
40
|
StorageMetadataHttpConfig,
|
|
34
41
|
)
|
|
@@ -39,6 +46,7 @@ from metadata.generated.schema.metadataIngestion.storage.storageMetadataS3Config
|
|
|
39
46
|
StorageMetadataS3Config,
|
|
40
47
|
)
|
|
41
48
|
from metadata.readers.file.config_source_factory import get_reader
|
|
49
|
+
from metadata.utils.credentials import set_google_credentials
|
|
42
50
|
from metadata.utils.logger import ometa_logger
|
|
43
51
|
|
|
44
52
|
logger = ometa_logger()
|
|
@@ -146,25 +154,45 @@ def _(config: StorageMetadataAdlsConfig) -> ManifestMetadataConfig:
|
|
|
146
154
|
else STORAGE_METADATA_MANIFEST_FILE_NAME
|
|
147
155
|
)
|
|
148
156
|
|
|
149
|
-
|
|
150
|
-
|
|
157
|
+
blob_client = AzureClient(config.securityConfig).create_blob_client()
|
|
158
|
+
|
|
159
|
+
reader = get_reader(
|
|
160
|
+
config_source=AzureConfig(securityConfig=config.securityConfig),
|
|
161
|
+
client=blob_client,
|
|
151
162
|
)
|
|
152
|
-
|
|
153
|
-
|
|
163
|
+
|
|
164
|
+
manifest = reader.read(path=path, bucket_name=bucket_name)
|
|
165
|
+
return ManifestMetadataConfig.parse_obj(json.loads(manifest))
|
|
166
|
+
except Exception as exc:
|
|
167
|
+
logger.debug(traceback.format_exc())
|
|
168
|
+
raise StorageMetadataConfigException(
|
|
169
|
+
f"Error fetching manifest file from adls: {exc}"
|
|
154
170
|
)
|
|
155
171
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
172
|
+
|
|
173
|
+
@get_manifest.register
|
|
174
|
+
def _(config: StorageMetadataGcsConfig) -> ManifestMetadataConfig:
|
|
175
|
+
try:
|
|
176
|
+
bucket_name, prefix = (
|
|
177
|
+
config.prefixConfig.containerName,
|
|
178
|
+
config.prefixConfig.objectPrefix,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
path = (
|
|
182
|
+
f"{prefix}/{STORAGE_METADATA_MANIFEST_FILE_NAME}"
|
|
183
|
+
if prefix
|
|
184
|
+
else STORAGE_METADATA_MANIFEST_FILE_NAME
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
from google.cloud.storage import ( # pylint: disable=import-outside-toplevel
|
|
188
|
+
Client,
|
|
163
189
|
)
|
|
164
190
|
|
|
191
|
+
set_google_credentials(gcp_credentials=config.securityConfig)
|
|
192
|
+
gcs_client = Client()
|
|
165
193
|
reader = get_reader(
|
|
166
|
-
config_source=
|
|
167
|
-
client=
|
|
194
|
+
config_source=GCSConfig(securityConfig=config.securityConfig),
|
|
195
|
+
client=gcs_client,
|
|
168
196
|
)
|
|
169
197
|
|
|
170
198
|
manifest = reader.read(path=path, bucket_name=bucket_name)
|
|
@@ -172,5 +200,5 @@ def _(config: StorageMetadataAdlsConfig) -> ManifestMetadataConfig:
|
|
|
172
200
|
except Exception as exc:
|
|
173
201
|
logger.debug(traceback.format_exc())
|
|
174
202
|
raise StorageMetadataConfigException(
|
|
175
|
-
f"Error fetching manifest file from
|
|
203
|
+
f"Error fetching manifest file from gcs: {exc}"
|
|
176
204
|
)
|
metadata/utils/tag_utils.py
CHANGED
|
@@ -21,6 +21,9 @@ from metadata.generated.schema.api.classification.createClassification import (
|
|
|
21
21
|
)
|
|
22
22
|
from metadata.generated.schema.api.classification.createTag import CreateTagRequest
|
|
23
23
|
from metadata.generated.schema.entity.classification.tag import Tag
|
|
24
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
25
|
+
StackTraceError,
|
|
26
|
+
)
|
|
24
27
|
from metadata.generated.schema.type.basic import FullyQualifiedEntityName
|
|
25
28
|
from metadata.generated.schema.type.tagLabel import (
|
|
26
29
|
LabelType,
|
|
@@ -28,7 +31,7 @@ from metadata.generated.schema.type.tagLabel import (
|
|
|
28
31
|
TagLabel,
|
|
29
32
|
TagSource,
|
|
30
33
|
)
|
|
31
|
-
from metadata.ingestion.api.models import Either
|
|
34
|
+
from metadata.ingestion.api.models import Either
|
|
32
35
|
from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
|
|
33
36
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
34
37
|
from metadata.utils import fqn
|
|
@@ -72,7 +75,7 @@ def get_ometa_tag_and_classification(
|
|
|
72
75
|
left=StackTraceError(
|
|
73
76
|
name=tag,
|
|
74
77
|
error=f"Error yielding tag [{tag}]: [{err}]",
|
|
75
|
-
|
|
78
|
+
stackTrace=traceback.format_exc(),
|
|
76
79
|
)
|
|
77
80
|
)
|
|
78
81
|
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.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
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
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
|
+
Generic Workflow entrypoint to execute Applications
|
|
13
|
+
"""
|
|
14
|
+
from abc import ABC, abstractmethod
|
|
15
|
+
from typing import List, Optional
|
|
16
|
+
|
|
17
|
+
from metadata.config.common import WorkflowExecutionError
|
|
18
|
+
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
|
|
19
|
+
OpenMetadataConnection,
|
|
20
|
+
)
|
|
21
|
+
from metadata.generated.schema.entity.services.ingestionPipelines.status import (
|
|
22
|
+
StackTraceError,
|
|
23
|
+
)
|
|
24
|
+
from metadata.generated.schema.entity.services.serviceType import ServiceType
|
|
25
|
+
from metadata.generated.schema.metadataIngestion.application import (
|
|
26
|
+
OpenMetadataApplicationConfig,
|
|
27
|
+
)
|
|
28
|
+
from metadata.generated.schema.metadataIngestion.workflow import LogLevels
|
|
29
|
+
from metadata.ingestion.api.step import Step, Summary
|
|
30
|
+
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
31
|
+
from metadata.utils.importer import import_from_module
|
|
32
|
+
from metadata.utils.logger import ingestion_logger
|
|
33
|
+
from metadata.workflow.base import BaseWorkflow
|
|
34
|
+
from metadata.workflow.workflow_status_mixin import SUCCESS_THRESHOLD_VALUE
|
|
35
|
+
|
|
36
|
+
logger = ingestion_logger()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class InvalidAppConfiguration(Exception):
|
|
40
|
+
"""
|
|
41
|
+
To be raised if the config received by the App
|
|
42
|
+
is not the one expected
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class AppRunner(Step, ABC):
|
|
47
|
+
"""Class that knows how to execute the Application logic."""
|
|
48
|
+
|
|
49
|
+
def __init__(
|
|
50
|
+
self,
|
|
51
|
+
config: OpenMetadataApplicationConfig,
|
|
52
|
+
metadata: OpenMetadata,
|
|
53
|
+
):
|
|
54
|
+
self.app_config = config.appConfig.__root__ if config.appConfig else None
|
|
55
|
+
self.private_config = (
|
|
56
|
+
config.appPrivateConfig.__root__ if config.appPrivateConfig else None
|
|
57
|
+
)
|
|
58
|
+
self.metadata = metadata
|
|
59
|
+
|
|
60
|
+
super().__init__()
|
|
61
|
+
|
|
62
|
+
@property
|
|
63
|
+
def name(self) -> str:
|
|
64
|
+
return "AppRunner"
|
|
65
|
+
|
|
66
|
+
@abstractmethod
|
|
67
|
+
def run(self) -> None:
|
|
68
|
+
"""App logic to execute"""
|
|
69
|
+
|
|
70
|
+
@classmethod
|
|
71
|
+
def create(cls, config_dict: dict, metadata: OpenMetadata) -> "Step":
|
|
72
|
+
config = OpenMetadataApplicationConfig.parse_obj(config_dict)
|
|
73
|
+
return cls(config=config, metadata=metadata)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class ApplicationWorkflow(BaseWorkflow, ABC):
|
|
77
|
+
"""Base Application Workflow implementation"""
|
|
78
|
+
|
|
79
|
+
config: OpenMetadataApplicationConfig
|
|
80
|
+
runner: Optional[AppRunner]
|
|
81
|
+
|
|
82
|
+
def __init__(self, config_dict: dict):
|
|
83
|
+
self.runner = None # Will be passed in post-init
|
|
84
|
+
# TODO: Create a parse_gracefully method
|
|
85
|
+
self.config = OpenMetadataApplicationConfig.parse_obj(config_dict)
|
|
86
|
+
|
|
87
|
+
# Applications are associated to the OpenMetadata Service
|
|
88
|
+
self.service_type: ServiceType = ServiceType.Metadata
|
|
89
|
+
|
|
90
|
+
metadata_config: OpenMetadataConnection = (
|
|
91
|
+
self.config.workflowConfig.openMetadataServerConfig
|
|
92
|
+
)
|
|
93
|
+
log_level: LogLevels = self.config.workflowConfig.loggerLevel
|
|
94
|
+
|
|
95
|
+
super().__init__(
|
|
96
|
+
config=self.config,
|
|
97
|
+
log_level=log_level,
|
|
98
|
+
metadata_config=metadata_config,
|
|
99
|
+
service_type=self.service_type,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
@classmethod
|
|
103
|
+
def create(cls, config_dict: dict):
|
|
104
|
+
return cls(config_dict)
|
|
105
|
+
|
|
106
|
+
def post_init(self) -> None:
|
|
107
|
+
"""
|
|
108
|
+
Method to execute after we have initialized all the internals.
|
|
109
|
+
Here we will load the runner since it needs the `metadata` object
|
|
110
|
+
"""
|
|
111
|
+
runner_class = import_from_module(self.config.sourcePythonClass)
|
|
112
|
+
if not issubclass(runner_class, AppRunner):
|
|
113
|
+
raise ValueError(
|
|
114
|
+
"We need a valid AppRunner to initialize the ApplicationWorkflow!"
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
try:
|
|
118
|
+
self.runner = runner_class(
|
|
119
|
+
config=self.config,
|
|
120
|
+
metadata=self.metadata,
|
|
121
|
+
)
|
|
122
|
+
except Exception as exc:
|
|
123
|
+
logger.error(
|
|
124
|
+
f"Error trying to init the AppRunner [{self.config.sourcePythonClass}] due to [{exc}]"
|
|
125
|
+
)
|
|
126
|
+
raise exc
|
|
127
|
+
|
|
128
|
+
def execute_internal(self) -> None:
|
|
129
|
+
"""Workflow-specific logic to execute safely"""
|
|
130
|
+
self.runner.run()
|
|
131
|
+
|
|
132
|
+
def calculate_success(self) -> float:
|
|
133
|
+
return self.runner.get_status().calculate_success()
|
|
134
|
+
|
|
135
|
+
def get_failures(self) -> List[StackTraceError]:
|
|
136
|
+
return self.workflow_steps()[0].get_status().failures
|
|
137
|
+
|
|
138
|
+
def workflow_steps(self) -> List[Step]:
|
|
139
|
+
return [self.runner]
|
|
140
|
+
|
|
141
|
+
def raise_from_status_internal(self, raise_warnings=False):
|
|
142
|
+
"""Check failed status in the runner"""
|
|
143
|
+
if (
|
|
144
|
+
self.runner.get_status().failures
|
|
145
|
+
and self.calculate_success() < SUCCESS_THRESHOLD_VALUE
|
|
146
|
+
):
|
|
147
|
+
raise WorkflowExecutionError(
|
|
148
|
+
f"{self.runner.name} reported errors: {Summary.from_step(self.runner)}"
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
if raise_warnings and self.runner.get_status().warnings:
|
|
152
|
+
raise WorkflowExecutionError(
|
|
153
|
+
f"{self.runner.name} reported warning: {Summary.from_step(self.runner)}"
|
|
154
|
+
)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Copyright 2021 Collate
|
|
2
|
+
# Licensed under the Apache License, Version 2.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
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
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
|
+
Module handles the output messages for applications
|
|
14
|
+
"""
|
|
15
|
+
import time
|
|
16
|
+
|
|
17
|
+
from metadata.utils.helpers import pretty_print_time_duration
|
|
18
|
+
from metadata.utils.logger import ANSI, log_ansi_encoded_string
|
|
19
|
+
from metadata.workflow.output_handler import print_workflow_summary
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def print_status(workflow: "ApplicationWorkflow") -> None:
|
|
23
|
+
"""
|
|
24
|
+
Print the workflow results
|
|
25
|
+
"""
|
|
26
|
+
print_workflow_summary(workflow)
|
|
27
|
+
|
|
28
|
+
if workflow.runner.get_status().source_start_time:
|
|
29
|
+
log_ansi_encoded_string(
|
|
30
|
+
color=ANSI.BRIGHT_CYAN,
|
|
31
|
+
bold=True,
|
|
32
|
+
message="Workflow finished in time: "
|
|
33
|
+
f"{pretty_print_time_duration(time.time()-workflow.runner.get_status().source_start_time)}",
|
|
34
|
+
)
|