openmetadata-ingestion 1.8.10.0__py3-none-any.whl → 1.9.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.
- metadata/__init__.py +2 -0
- metadata/data_quality/validations/models.py +2 -2
- metadata/data_quality/validations/runtime_param_setter/base_diff_params_setter.py +78 -5
- metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +10 -63
- metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +4 -1
- metadata/examples/workflows/grafana.yaml +115 -0
- metadata/generated/schema/analytics/__init__.py +1 -1
- metadata/generated/schema/analytics/basic.py +1 -1
- metadata/generated/schema/analytics/reportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
- metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
- metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
- metadata/generated/schema/analytics/webAnalyticEvent.py +5 -5
- 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/addTagToAssetsRequest.py +1 -1
- metadata/generated/schema/api/analytics/__init__.py +1 -1
- metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +6 -5
- metadata/generated/schema/api/automations/__init__.py +1 -1
- metadata/generated/schema/api/automations/createWorkflow.py +6 -5
- 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 -5
- metadata/generated/schema/api/classification/createTag.py +4 -4
- metadata/generated/schema/api/classification/loadTags.py +1 -1
- metadata/generated/schema/api/createBot.py +5 -5
- metadata/generated/schema/api/createEventPublisherJob.py +1 -1
- metadata/generated/schema/api/createType.py +6 -5
- metadata/generated/schema/api/data/__init__.py +1 -1
- metadata/generated/schema/api/data/createAPICollection.py +4 -4
- metadata/generated/schema/api/data/createAPIEndpoint.py +4 -4
- metadata/generated/schema/api/data/createChart.py +12 -4
- metadata/generated/schema/api/data/createContainer.py +4 -4
- metadata/generated/schema/api/data/createCustomProperty.py +1 -1
- metadata/generated/schema/api/data/createDashboard.py +4 -4
- metadata/generated/schema/api/data/createDashboardDataModel.py +4 -4
- metadata/generated/schema/api/data/createDataContract.py +11 -5
- metadata/generated/schema/api/data/createDatabase.py +4 -4
- metadata/generated/schema/api/data/createDatabaseSchema.py +4 -4
- metadata/generated/schema/api/data/createDirectory.py +105 -0
- metadata/generated/schema/api/data/createFile.py +104 -0
- metadata/generated/schema/api/data/createGlossary.py +4 -4
- metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
- metadata/generated/schema/api/data/createMetric.py +4 -4
- metadata/generated/schema/api/data/createMlModel.py +4 -4
- metadata/generated/schema/api/data/createPipeline.py +4 -4
- metadata/generated/schema/api/data/createQuery.py +5 -4
- metadata/generated/schema/api/data/createQueryCostRecord.py +1 -1
- metadata/generated/schema/api/data/createSearchIndex.py +4 -4
- metadata/generated/schema/api/data/createSpreadsheet.py +111 -0
- metadata/generated/schema/api/data/createStoredProcedure.py +4 -4
- metadata/generated/schema/api/data/createTable.py +5 -4
- metadata/generated/schema/api/data/createTableProfile.py +1 -1
- metadata/generated/schema/api/data/createTopic.py +5 -4
- metadata/generated/schema/api/data/createWorksheet.py +105 -0
- 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 +1 -1
- metadata/generated/schema/api/dataInsight/__init__.py +1 -1
- metadata/generated/schema/api/dataInsight/createDataInsightChart.py +5 -4
- 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 +5 -5
- metadata/generated/schema/api/docStore/__init__.py +1 -1
- metadata/generated/schema/api/docStore/createDocument.py +6 -5
- metadata/generated/schema/api/domains/__init__.py +1 -1
- metadata/generated/schema/api/domains/createDataProduct.py +4 -4
- metadata/generated/schema/api/domains/createDomain.py +1 -1
- metadata/generated/schema/api/entityRelationship/__init__.py +3 -0
- metadata/generated/schema/api/entityRelationship/entityRelationshipDirection.py +12 -0
- metadata/generated/schema/api/entityRelationship/esEntityRelationshipData.py +57 -0
- metadata/generated/schema/api/entityRelationship/relationshipRef.py +32 -0
- metadata/generated/schema/api/entityRelationship/searchEntityRelationshipRequest.py +47 -0
- metadata/generated/schema/api/entityRelationship/searchEntityRelationshipResult.py +47 -0
- metadata/generated/schema/api/entityRelationship/searchSchemaEntityRelationshipResult.py +20 -0
- 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 +6 -2
- 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 +4 -1
- metadata/generated/schema/api/lineage/lineageDirection.py +1 -1
- metadata/generated/schema/api/lineage/nodeInformation.py +4 -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 +1 -1
- metadata/generated/schema/api/mcp/mcpToolDefinition.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 +6 -5
- metadata/generated/schema/api/scim/__init__.py +1 -1
- metadata/generated/schema/api/scim/scimGroup.py +1 -1
- metadata/generated/schema/api/scim/scimPatchOp.py +1 -1
- metadata/generated/schema/api/scim/scimUser.py +1 -1
- 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 +4 -4
- metadata/generated/schema/api/services/createDashboardService.py +4 -4
- metadata/generated/schema/api/services/createDatabaseService.py +4 -4
- metadata/generated/schema/api/services/createDriveService.py +58 -0
- metadata/generated/schema/api/services/createMessagingService.py +4 -4
- metadata/generated/schema/api/services/createMetadataService.py +5 -4
- metadata/generated/schema/api/services/createMlModelService.py +4 -4
- metadata/generated/schema/api/services/createPipelineService.py +4 -4
- metadata/generated/schema/api/services/createSearchService.py +4 -4
- metadata/generated/schema/api/services/createSecurityService.py +4 -4
- metadata/generated/schema/api/services/createStorageService.py +4 -4
- metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +13 -5
- metadata/generated/schema/api/setOwner.py +1 -1
- metadata/generated/schema/api/teams/__init__.py +1 -1
- metadata/generated/schema/api/teams/createPersona.py +12 -4
- metadata/generated/schema/api/teams/createRole.py +5 -4
- metadata/generated/schema/api/teams/createTeam.py +1 -1
- metadata/generated/schema/api/teams/createUser.py +1 -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 +1 -1
- 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 +5 -4
- metadata/generated/schema/api/tests/createTestSuite.py +13 -5
- metadata/generated/schema/api/tests/moveGlossaryTermRequest.py +27 -0
- metadata/generated/schema/api/validateGlossaryTagsRequest.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 +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 +1 -1
- metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
- metadata/generated/schema/configuration/__init__.py +1 -1
- metadata/generated/schema/configuration/aiPlatformConfiguration.py +58 -0
- 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/cacheConfiguration.py +137 -0
- metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
- metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
- metadata/generated/schema/configuration/elasticSearchConfiguration.py +18 -1
- metadata/generated/schema/configuration/entityRulesSettings.py +24 -0
- 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 +5 -1
- metadata/generated/schema/dataInsight/custom/summaryCard.py +1 -1
- metadata/generated/schema/dataInsight/dataInsightChart.py +5 -5
- 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 +4 -4
- 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 +4 -4
- metadata/generated/schema/entity/applications/appExtension.py +1 -1
- metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
- metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addCustomProperties.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDataProductAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +5 -5
- metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTestCaseAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +4 -4
- metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
- metadata/generated/schema/entity/applications/configuration/external/automator/propagationStopConfig.py +2 -2
- 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 +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/helloPipelinesConfiguration.py +1 -1
- metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -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 +6 -5
- 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 +5 -11
- metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +5 -4
- 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 +5 -5
- metadata/generated/schema/entity/bot.py +5 -5
- metadata/generated/schema/entity/classification/__init__.py +1 -1
- metadata/generated/schema/entity/classification/classification.py +5 -5
- metadata/generated/schema/entity/classification/tag.py +4 -4
- metadata/generated/schema/entity/data/__init__.py +1 -1
- metadata/generated/schema/entity/data/apiCollection.py +4 -4
- metadata/generated/schema/entity/data/apiEndpoint.py +4 -4
- metadata/generated/schema/entity/data/chart.py +16 -4
- metadata/generated/schema/entity/data/container.py +4 -4
- metadata/generated/schema/entity/data/dashboard.py +4 -4
- metadata/generated/schema/entity/data/dashboardDataModel.py +4 -4
- metadata/generated/schema/entity/data/dataContract.py +40 -53
- metadata/generated/schema/entity/data/database.py +4 -4
- metadata/generated/schema/entity/data/databaseSchema.py +4 -4
- metadata/generated/schema/entity/data/directory.py +173 -0
- metadata/generated/schema/entity/data/file.py +184 -0
- metadata/generated/schema/entity/data/glossary.py +4 -4
- metadata/generated/schema/entity/data/glossaryTerm.py +4 -4
- metadata/generated/schema/entity/data/metric.py +4 -5
- metadata/generated/schema/entity/data/mlmodel.py +4 -4
- metadata/generated/schema/entity/data/pipeline.py +4 -4
- metadata/generated/schema/entity/data/query.py +4 -4
- 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 +4 -4
- metadata/generated/schema/entity/data/searchIndex.py +4 -4
- metadata/generated/schema/entity/data/spreadsheet.py +209 -0
- metadata/generated/schema/entity/data/storedProcedure.py +4 -4
- metadata/generated/schema/entity/data/table.py +50 -4
- metadata/generated/schema/entity/data/topic.py +4 -4
- metadata/generated/schema/entity/data/worksheet.py +168 -0
- metadata/generated/schema/entity/datacontract/__init__.py +3 -0
- metadata/generated/schema/entity/datacontract/dataContractResult.py +74 -0
- metadata/generated/schema/entity/datacontract/qualityValidation.py +31 -0
- metadata/generated/schema/entity/datacontract/schemaValidation.py +31 -0
- metadata/generated/schema/entity/datacontract/semanticsValidation.py +39 -0
- metadata/generated/schema/entity/datacontract/slaValidation.py +32 -0
- metadata/generated/schema/entity/docStore/__init__.py +1 -1
- metadata/generated/schema/entity/docStore/document.py +5 -5
- metadata/generated/schema/entity/domains/__init__.py +1 -1
- metadata/generated/schema/entity/domains/dataProduct.py +5 -5
- 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 +1 -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 +8 -8
- 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 +4 -3
- 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 +1 -1
- metadata/generated/schema/entity/policies/policy.py +4 -4
- metadata/generated/schema/entity/services/__init__.py +1 -1
- metadata/generated/schema/entity/services/apiService.py +4 -4
- 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/grafanaConnection.py +77 -0
- 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/dashboard/thoughtSpotConnection.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 +1 -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/epicConnection.py +80 -0
- 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/ssasConnection.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/drive/__init__.py +3 -0
- metadata/generated/schema/entity/services/connections/drive/customDriveConnection.py +45 -0
- metadata/generated/schema/entity/services/connections/drive/googleDriveConnection.py +82 -0
- metadata/generated/schema/entity/services/connections/drive/sharePointConnection.py +79 -0
- 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 +1 -1
- metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/mlmodel/vertexaiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/datafactoryConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillion/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillion/matillionETL.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifi/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifi/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/ssisConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/stitchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/pipeline/wherescapeConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/security/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/security/ranger/__init__.py +1 -1
- metadata/generated/schema/entity/services/connections/security/ranger/basicAuth.py +1 -1
- metadata/generated/schema/entity/services/connections/security/rangerConnection.py +1 -1
- metadata/generated/schema/entity/services/connections/serviceConnection.py +4 -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 +5 -5
- metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
- metadata/generated/schema/entity/services/dashboardService.py +7 -4
- metadata/generated/schema/entity/services/databaseService.py +7 -4
- metadata/generated/schema/entity/services/driveService.py +143 -0
- metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
- metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +11 -4
- 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 +4 -4
- metadata/generated/schema/entity/services/metadataService.py +4 -4
- metadata/generated/schema/entity/services/mlmodelService.py +4 -4
- metadata/generated/schema/entity/services/pipelineService.py +4 -4
- metadata/generated/schema/entity/services/searchService.py +4 -4
- metadata/generated/schema/entity/services/securityService.py +4 -4
- metadata/generated/schema/entity/services/serviceType.py +2 -1
- metadata/generated/schema/entity/services/storageService.py +4 -4
- metadata/generated/schema/entity/teams/__init__.py +1 -1
- metadata/generated/schema/entity/teams/persona.py +11 -4
- metadata/generated/schema/entity/teams/role.py +5 -5
- 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 +21 -3
- metadata/generated/schema/entity/type.py +5 -11
- 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 +5 -4
- 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 +5 -5
- 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 +9 -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 +5 -1
- metadata/generated/schema/jobs/__init__.py +1 -1
- metadata/generated/schema/jobs/backgroundJob.py +1 -1
- 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 +25 -3
- 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/driveServiceMetadataPipeline.py +165 -0
- metadata/generated/schema/metadataIngestion/engine/__init__.py +3 -0
- metadata/generated/schema/metadataIngestion/engine/nativeEngineConfig.py +23 -0
- metadata/generated/schema/metadataIngestion/engine/sparkEngineConfig.py +43 -0
- 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/securityServiceMetadataPipeline.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 +3 -1
- metadata/generated/schema/monitoring/__init__.py +1 -1
- metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
- metadata/generated/schema/scim/__init__.py +1 -1
- metadata/generated/schema/scim/scimConfiguration.py +1 -1
- metadata/generated/schema/search/__init__.py +1 -1
- metadata/generated/schema/search/aggregationRequest.py +1 -1
- metadata/generated/schema/search/searchRequest.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 +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/credentials/kubernetesCredentials.py +40 -0
- 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 +2 -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 +4 -1
- metadata/generated/schema/system/__init__.py +1 -1
- metadata/generated/schema/system/entityError.py +1 -1
- metadata/generated/schema/system/eventPublisherJob.py +1 -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 +5 -4
- metadata/generated/schema/system/ui/tab.py +1 -1
- metadata/generated/schema/system/ui/uiCustomization.py +9 -2
- 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 +4 -4
- metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
- metadata/generated/schema/tests/testDefinition.py +5 -5
- metadata/generated/schema/tests/testSuite.py +11 -4
- 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 +43 -1
- metadata/generated/schema/type/bulkOperationResult.py +1 -1
- metadata/generated/schema/type/changeEvent.py +5 -7
- 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/contractExecutionStatus.py +16 -0
- 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 → entityRelationship/__init__.py} +2 -2
- metadata/generated/schema/type/entityRelationship/nodeInformation.py +25 -0
- 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/layerPaging.py +24 -0
- metadata/generated/schema/type/lifeCycle.py +1 -1
- metadata/generated/schema/type/paging.py +1 -1
- metadata/generated/schema/type/personaPreferences.py +48 -0
- 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/ingestion/api/parser.py +13 -0
- metadata/ingestion/bulksink/metadata_usage.py +2 -2
- metadata/ingestion/connections/connection.py +18 -1
- metadata/ingestion/lineage/sql_lineage.py +98 -65
- metadata/ingestion/models/custom_properties.py +3 -3
- metadata/ingestion/models/patch_request.py +36 -4
- metadata/ingestion/ometa/mixins/data_contract_mixin.py +205 -0
- metadata/ingestion/ometa/mixins/lineage_mixin.py +1 -1
- metadata/ingestion/ometa/mixins/patch_mixin.py +131 -55
- metadata/ingestion/ometa/ometa_api.py +4 -1
- metadata/ingestion/ometa/routes.py +32 -0
- metadata/ingestion/sink/metadata_rest.py +51 -0
- metadata/ingestion/source/api/rest/connection.py +12 -6
- metadata/ingestion/source/api/rest/metadata.py +3 -1
- metadata/ingestion/source/api/rest/parser.py +103 -0
- metadata/ingestion/source/connections.py +1 -1
- metadata/ingestion/source/dashboard/grafana/__init__.py +10 -0
- metadata/ingestion/source/dashboard/grafana/client.py +223 -0
- metadata/ingestion/source/dashboard/grafana/connection.py +66 -0
- metadata/ingestion/source/dashboard/grafana/metadata.py +476 -0
- metadata/ingestion/source/dashboard/grafana/models.py +159 -0
- metadata/ingestion/source/dashboard/grafana/service_spec.py +17 -0
- metadata/ingestion/source/dashboard/microstrategy/metadata.py +1 -1
- metadata/ingestion/source/dashboard/powerbi/metadata.py +9 -9
- metadata/ingestion/source/dashboard/powerbi/models.py +1 -1
- metadata/ingestion/source/dashboard/superset/connection.py +5 -7
- metadata/ingestion/source/dashboard/tableau/client.py +4 -4
- metadata/ingestion/source/dashboard/tableau/metadata.py +1 -0
- metadata/ingestion/source/database/datalake/connection.py +51 -73
- metadata/ingestion/source/database/datalake/metadata.py +3 -4
- metadata/ingestion/source/database/datalake/service_spec.py +2 -0
- metadata/ingestion/source/database/dbt/constants.py +17 -1
- metadata/ingestion/source/database/dbt/dbt_service.py +30 -1
- metadata/ingestion/source/database/dbt/metadata.py +136 -1
- metadata/ingestion/source/database/deltalake/clients/pyspark.py +1 -1
- metadata/ingestion/source/database/exasol/connection.py +14 -3
- metadata/ingestion/source/database/exasol/queries.py +13 -0
- metadata/ingestion/source/database/lineage_source.py +18 -2
- metadata/ingestion/source/database/mysql/connection.py +13 -19
- metadata/ingestion/source/database/oracle/metadata.py +1 -1
- metadata/ingestion/source/database/oracle/utils.py +19 -0
- metadata/ingestion/source/database/postgres/connection.py +51 -48
- metadata/ingestion/source/database/postgres/service_spec.py +2 -0
- metadata/ingestion/source/database/sample_data.py +661 -2
- metadata/ingestion/source/database/snowflake/connection.py +196 -162
- metadata/ingestion/source/database/snowflake/service_spec.py +2 -0
- metadata/ingestion/source/database/stored_procedures_mixin.py +9 -1
- metadata/ingestion/source/database/trino/connection.py +279 -125
- metadata/ingestion/source/database/trino/service_spec.py +2 -0
- metadata/ingestion/source/database/unitycatalog/connection.py +20 -3
- metadata/ingestion/source/database/unitycatalog/queries.py +37 -1
- metadata/ingestion/source/database/unitycatalog/query_parser.py +4 -0
- metadata/ingestion/source/database/unitycatalog/usage.py +21 -35
- metadata/ingestion/source/drive/drive_service.py +648 -0
- metadata/ingestion/source/drives/__init__.py +13 -0
- metadata/ingestion/source/pipeline/airflow/connection.py +8 -6
- metadata/ingestion/source/pipeline/airflow/metadata.py +33 -10
- metadata/ingestion/source/pipeline/fivetran/metadata.py +2 -2
- metadata/profiler/processor/processor.py +18 -3
- metadata/profiler/source/database/base/profiler_resolver.py +5 -2
- metadata/profiler/source/database/base/profiler_source.py +8 -1
- metadata/profiler/source/profiler_source_interface.py +11 -2
- metadata/sampler/pandas/sampler.py +1 -1
- metadata/sampler/processor.py +19 -3
- metadata/sampler/sampler_interface.py +7 -0
- metadata/utils/credentials.py +35 -0
- metadata/utils/db_utils.py +12 -5
- metadata/utils/filters.py +60 -0
- metadata/utils/fqn.py +79 -0
- metadata/utils/helpers.py +6 -1
- metadata/utils/logger.py +9 -0
- metadata/utils/metadata_service_helper.py +1 -1
- metadata/utils/secrets/kubernetes_secrets_manager.py +176 -0
- metadata/utils/secrets/secrets_manager_factory.py +3 -0
- metadata/workflow/ingestion.py +15 -2
- {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/METADATA +543 -536
- {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/RECORD +844 -790
- metadata/ingestion/source/database/extended_sample_data.py +0 -534
- {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/LICENSE +0 -0
- {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/WHEEL +0 -0
- {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/entry_points.txt +0 -0
- {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/top_level.txt +0 -0
|
@@ -25,7 +25,6 @@ from metadata.generated.schema.entity.automations.workflow import (
|
|
|
25
25
|
)
|
|
26
26
|
from metadata.generated.schema.entity.automations.workflow import WorkflowStatus
|
|
27
27
|
from metadata.generated.schema.entity.data.table import Column, Table, TableConstraint
|
|
28
|
-
from metadata.generated.schema.entity.domains.domain import Domain
|
|
29
28
|
from metadata.generated.schema.entity.services.connections.testConnectionResult import (
|
|
30
29
|
TestConnectionResult,
|
|
31
30
|
)
|
|
@@ -34,7 +33,6 @@ from metadata.generated.schema.entity.services.ingestionPipelines.reverseIngesti
|
|
|
34
33
|
)
|
|
35
34
|
from metadata.generated.schema.tests.testCase import TestCase, TestCaseParameterValue
|
|
36
35
|
from metadata.generated.schema.type.basic import EntityLink, Markdown
|
|
37
|
-
from metadata.generated.schema.type.entityReference import EntityReference
|
|
38
36
|
from metadata.generated.schema.type.entityReferenceList import EntityReferenceList
|
|
39
37
|
from metadata.generated.schema.type.lifeCycle import LifeCycle
|
|
40
38
|
from metadata.generated.schema.type.tagLabel import TagLabel
|
|
@@ -124,6 +122,7 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
124
122
|
restrict_update_fields: Optional[List] = None,
|
|
125
123
|
array_entity_fields: Optional[List] = None,
|
|
126
124
|
override_metadata: Optional[bool] = False,
|
|
125
|
+
skip_on_failure: Optional[bool] = True,
|
|
127
126
|
) -> Optional[T]:
|
|
128
127
|
"""
|
|
129
128
|
Given an Entity type and Source entity and Destination entity,
|
|
@@ -135,6 +134,9 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
135
134
|
destination: payload with changes applied to the source.
|
|
136
135
|
allowed_fields: List of field names to filter from source and destination models
|
|
137
136
|
restrict_update_fields: List of field names which will only support add operation
|
|
137
|
+
array_entity_fields: List of array fields to sort for consistent patching
|
|
138
|
+
override_metadata: Whether to override existing metadata fields
|
|
139
|
+
skip_on_failure: Whether to skip the patch operation on failure (default: True)
|
|
138
140
|
|
|
139
141
|
Returns
|
|
140
142
|
Updated Entity
|
|
@@ -147,6 +149,7 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
147
149
|
restrict_update_fields=restrict_update_fields,
|
|
148
150
|
array_entity_fields=array_entity_fields,
|
|
149
151
|
override_metadata=override_metadata,
|
|
152
|
+
skip_on_failure=skip_on_failure,
|
|
150
153
|
)
|
|
151
154
|
|
|
152
155
|
if not patch:
|
|
@@ -160,9 +163,19 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
160
163
|
|
|
161
164
|
except Exception as exc:
|
|
162
165
|
logger.debug(traceback.format_exc())
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
+
if skip_on_failure:
|
|
167
|
+
entity_name = get_log_name(source)
|
|
168
|
+
logger.warning(
|
|
169
|
+
f"Failed to update {entity_name}. The patch operation was skipped. "
|
|
170
|
+
f"Reason: {exc}"
|
|
171
|
+
)
|
|
172
|
+
return None
|
|
173
|
+
else:
|
|
174
|
+
entity_name = get_log_name(source)
|
|
175
|
+
raise RuntimeError(
|
|
176
|
+
f"Failed to update {entity_name}. The patch operation failed. "
|
|
177
|
+
f"Set 'skip_on_failure=True' to skip failed patches. Error: {exc}"
|
|
178
|
+
) from exc
|
|
166
179
|
|
|
167
180
|
def patch_description(
|
|
168
181
|
self,
|
|
@@ -170,6 +183,7 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
170
183
|
source: T,
|
|
171
184
|
description: str,
|
|
172
185
|
force: bool = False,
|
|
186
|
+
skip_on_failure: bool = True,
|
|
173
187
|
) -> Optional[T]:
|
|
174
188
|
"""
|
|
175
189
|
Given an Entity type and ID, JSON PATCH the description.
|
|
@@ -180,33 +194,51 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
180
194
|
description: new description to add
|
|
181
195
|
force: if True, we will patch any existing description. Otherwise, we will maintain
|
|
182
196
|
the existing data.
|
|
197
|
+
skip_on_failure: if True, return None on failure instead of raising exception
|
|
183
198
|
Returns
|
|
184
199
|
Updated Entity
|
|
185
200
|
"""
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
201
|
+
try:
|
|
202
|
+
if isinstance(source, TestCase):
|
|
203
|
+
instance: Optional[T] = self._fetch_entity_if_exists(
|
|
204
|
+
entity=entity,
|
|
205
|
+
entity_id=source.id,
|
|
206
|
+
fields=["testDefinition", "testSuite"],
|
|
207
|
+
)
|
|
208
|
+
else:
|
|
209
|
+
instance: Optional[T] = self._fetch_entity_if_exists(
|
|
210
|
+
entity=entity, entity_id=source.id
|
|
211
|
+
)
|
|
196
212
|
|
|
197
|
-
|
|
198
|
-
|
|
213
|
+
if not instance:
|
|
214
|
+
return None
|
|
199
215
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
216
|
+
if instance.description and not force:
|
|
217
|
+
# If the description is already present and force is not passed,
|
|
218
|
+
# description will not be overridden
|
|
219
|
+
return None
|
|
204
220
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
221
|
+
# https://docs.pydantic.dev/latest/usage/exporting_models/#modelcopy
|
|
222
|
+
destination = source.model_copy(deep=True)
|
|
223
|
+
destination.description = Markdown(description)
|
|
208
224
|
|
|
209
|
-
|
|
225
|
+
return self.patch(
|
|
226
|
+
entity=entity,
|
|
227
|
+
source=source,
|
|
228
|
+
destination=destination,
|
|
229
|
+
skip_on_failure=skip_on_failure,
|
|
230
|
+
)
|
|
231
|
+
except Exception as exc:
|
|
232
|
+
if skip_on_failure:
|
|
233
|
+
logger.debug(traceback.format_exc())
|
|
234
|
+
entity_name = get_log_name(source)
|
|
235
|
+
logger.warning(
|
|
236
|
+
f"Failed to patch description for {entity_name}. The patch operation was skipped. "
|
|
237
|
+
f"Reason: {exc}"
|
|
238
|
+
)
|
|
239
|
+
return None
|
|
240
|
+
else:
|
|
241
|
+
raise
|
|
210
242
|
|
|
211
243
|
def patch_table_constraints(
|
|
212
244
|
self,
|
|
@@ -275,6 +307,7 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
275
307
|
operation: Union[
|
|
276
308
|
PatchOperation.ADD, PatchOperation.REMOVE
|
|
277
309
|
] = PatchOperation.ADD,
|
|
310
|
+
skip_on_failure: bool = True,
|
|
278
311
|
) -> Optional[T]:
|
|
279
312
|
"""
|
|
280
313
|
Given an Entity type and ID, JSON PATCH the tag.
|
|
@@ -284,29 +317,47 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
284
317
|
source: Source entity object
|
|
285
318
|
tag_label: TagLabel to add or remove
|
|
286
319
|
operation: Patch Operation to add or remove the tag.
|
|
320
|
+
skip_on_failure: if True, return None on failure instead of raising exception
|
|
287
321
|
Returns
|
|
288
322
|
Updated Entity
|
|
289
323
|
"""
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
324
|
+
try:
|
|
325
|
+
instance: Optional[T] = self._fetch_entity_if_exists(
|
|
326
|
+
entity=entity, entity_id=source.id, fields=["tags"]
|
|
327
|
+
)
|
|
328
|
+
if not instance:
|
|
329
|
+
return None
|
|
295
330
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
331
|
+
# Initialize empty tag list or the last updated tags
|
|
332
|
+
source.tags = instance.tags or []
|
|
333
|
+
destination = source.model_copy(deep=True)
|
|
299
334
|
|
|
300
|
-
|
|
335
|
+
tag_fqns = {label.tagFQN.root for label in tag_labels}
|
|
301
336
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
337
|
+
if operation == PatchOperation.REMOVE:
|
|
338
|
+
for tag in destination.tags:
|
|
339
|
+
if tag.tagFQN.root in tag_fqns:
|
|
340
|
+
destination.tags.remove(tag)
|
|
341
|
+
else:
|
|
342
|
+
destination.tags.extend(tag_labels)
|
|
308
343
|
|
|
309
|
-
|
|
344
|
+
return self.patch(
|
|
345
|
+
entity=entity,
|
|
346
|
+
source=source,
|
|
347
|
+
destination=destination,
|
|
348
|
+
skip_on_failure=skip_on_failure,
|
|
349
|
+
)
|
|
350
|
+
except Exception as exc:
|
|
351
|
+
if skip_on_failure:
|
|
352
|
+
logger.debug(traceback.format_exc())
|
|
353
|
+
entity_name = get_log_name(source)
|
|
354
|
+
logger.warning(
|
|
355
|
+
f"Failed to patch tags for {entity_name}. The patch operation was skipped. "
|
|
356
|
+
f"Reason: {exc}"
|
|
357
|
+
)
|
|
358
|
+
return None
|
|
359
|
+
else:
|
|
360
|
+
raise
|
|
310
361
|
|
|
311
362
|
def patch_tag(
|
|
312
363
|
self,
|
|
@@ -316,11 +367,16 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
316
367
|
operation: Union[
|
|
317
368
|
PatchOperation.ADD, PatchOperation.REMOVE
|
|
318
369
|
] = PatchOperation.ADD,
|
|
370
|
+
skip_on_failure: bool = True,
|
|
319
371
|
) -> Optional[T]:
|
|
320
372
|
"""Will be deprecated in 1.3"""
|
|
321
373
|
logger.warning("patch_tag will be deprecated in 1.3. Use `patch_tags` instead.")
|
|
322
374
|
return self.patch_tags(
|
|
323
|
-
entity=entity,
|
|
375
|
+
entity=entity,
|
|
376
|
+
source=source,
|
|
377
|
+
tag_labels=[tag_label],
|
|
378
|
+
operation=operation,
|
|
379
|
+
skip_on_failure=skip_on_failure,
|
|
324
380
|
)
|
|
325
381
|
|
|
326
382
|
def patch_owner(
|
|
@@ -554,17 +610,37 @@ class OMetaPatchMixin(OMetaPatchMixinBase):
|
|
|
554
610
|
)
|
|
555
611
|
return None
|
|
556
612
|
|
|
557
|
-
def patch_domain(
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
)
|
|
613
|
+
def patch_domain(
|
|
614
|
+
self,
|
|
615
|
+
entity: Type[T],
|
|
616
|
+
source: T,
|
|
617
|
+
domains: EntityReferenceList = None,
|
|
618
|
+
force: bool = False,
|
|
619
|
+
) -> Optional[T]:
|
|
620
|
+
"""
|
|
621
|
+
Given an Entity type and ID, JSON PATCH the owner. If not owner Entity type and
|
|
622
|
+
not owner ID are provided, the owner is removed.
|
|
623
|
+
|
|
624
|
+
Args
|
|
625
|
+
entity (T): Entity Type of the entity to be patched
|
|
626
|
+
entity_id: ID of the entity to be patched
|
|
627
|
+
owner: Entity Reference of the owner. If None, the owner will be removed
|
|
628
|
+
force: if True, we will patch any existing owner. Otherwise, we will maintain
|
|
629
|
+
the existing data.
|
|
630
|
+
Returns
|
|
631
|
+
Updated Entity
|
|
632
|
+
"""
|
|
633
|
+
instance: Optional[T] = self._fetch_entity_if_exists(
|
|
634
|
+
entity=entity, entity_id=source.id, fields=["domains"]
|
|
635
|
+
)
|
|
636
|
+
|
|
637
|
+
if not instance:
|
|
570
638
|
return None
|
|
639
|
+
|
|
640
|
+
if instance.domains and instance.domains.root and not force:
|
|
641
|
+
return None
|
|
642
|
+
|
|
643
|
+
destination = deepcopy(instance)
|
|
644
|
+
destination.domains = domains
|
|
645
|
+
|
|
646
|
+
return self.patch(entity=entity, source=instance, destination=destination)
|
|
@@ -37,6 +37,7 @@ from metadata.ingestion.ometa.mixins.custom_property_mixin import (
|
|
|
37
37
|
OMetaCustomPropertyMixin,
|
|
38
38
|
)
|
|
39
39
|
from metadata.ingestion.ometa.mixins.dashboard_mixin import OMetaDashboardMixin
|
|
40
|
+
from metadata.ingestion.ometa.mixins.data_contract_mixin import OMetaDataContractMixin
|
|
40
41
|
from metadata.ingestion.ometa.mixins.data_insight_mixin import DataInsightMixin
|
|
41
42
|
from metadata.ingestion.ometa.mixins.domain_mixin import OMetaDomainMixin
|
|
42
43
|
from metadata.ingestion.ometa.mixins.es_mixin import ESMixin
|
|
@@ -116,6 +117,7 @@ class OpenMetadata(
|
|
|
116
117
|
ESMixin,
|
|
117
118
|
OMetaServerMixin,
|
|
118
119
|
OMetaDashboardMixin,
|
|
120
|
+
OMetaDataContractMixin,
|
|
119
121
|
OMetaPatchMixin,
|
|
120
122
|
OMetaTestsMixin,
|
|
121
123
|
DataInsightMixin,
|
|
@@ -289,6 +291,7 @@ class OpenMetadata(
|
|
|
289
291
|
.replace("storedprocedure", "storedProcedure")
|
|
290
292
|
.replace("ingestionpipeline", "ingestionPipeline")
|
|
291
293
|
.replace("dataproduct", "dataProduct")
|
|
294
|
+
.replace("datacontract", "dataContract")
|
|
292
295
|
)
|
|
293
296
|
class_path = ".".join(
|
|
294
297
|
filter(
|
|
@@ -325,7 +328,7 @@ class OpenMetadata(
|
|
|
325
328
|
resp = fn(
|
|
326
329
|
# this might be a regular pydantic model so we build the context manually
|
|
327
330
|
self.get_suffix(entity),
|
|
328
|
-
data=data.model_dump_json(context={"mask_secrets": False}),
|
|
331
|
+
data=data.model_dump_json(context={"mask_secrets": False}, by_alias=True),
|
|
329
332
|
)
|
|
330
333
|
if not resp:
|
|
331
334
|
raise EmptyPayloadException(
|
|
@@ -38,6 +38,11 @@ from metadata.generated.schema.api.data.createDatabase import CreateDatabaseRequ
|
|
|
38
38
|
from metadata.generated.schema.api.data.createDatabaseSchema import (
|
|
39
39
|
CreateDatabaseSchemaRequest,
|
|
40
40
|
)
|
|
41
|
+
from metadata.generated.schema.api.data.createDataContract import (
|
|
42
|
+
CreateDataContractRequest,
|
|
43
|
+
)
|
|
44
|
+
from metadata.generated.schema.api.data.createDirectory import CreateDirectoryRequest
|
|
45
|
+
from metadata.generated.schema.api.data.createFile import CreateFileRequest
|
|
41
46
|
from metadata.generated.schema.api.data.createGlossary import CreateGlossaryRequest
|
|
42
47
|
from metadata.generated.schema.api.data.createGlossaryTerm import (
|
|
43
48
|
CreateGlossaryTermRequest,
|
|
@@ -52,11 +57,15 @@ from metadata.generated.schema.api.data.createQueryCostRecord import (
|
|
|
52
57
|
from metadata.generated.schema.api.data.createSearchIndex import (
|
|
53
58
|
CreateSearchIndexRequest,
|
|
54
59
|
)
|
|
60
|
+
from metadata.generated.schema.api.data.createSpreadsheet import (
|
|
61
|
+
CreateSpreadsheetRequest,
|
|
62
|
+
)
|
|
55
63
|
from metadata.generated.schema.api.data.createStoredProcedure import (
|
|
56
64
|
CreateStoredProcedureRequest,
|
|
57
65
|
)
|
|
58
66
|
from metadata.generated.schema.api.data.createTable import CreateTableRequest
|
|
59
67
|
from metadata.generated.schema.api.data.createTopic import CreateTopicRequest
|
|
68
|
+
from metadata.generated.schema.api.data.createWorksheet import CreateWorksheetRequest
|
|
60
69
|
from metadata.generated.schema.api.docStore.createDocument import CreateDocumentRequest
|
|
61
70
|
from metadata.generated.schema.api.domains.createDataProduct import (
|
|
62
71
|
CreateDataProductRequest,
|
|
@@ -74,6 +83,9 @@ from metadata.generated.schema.api.services.createDashboardService import (
|
|
|
74
83
|
from metadata.generated.schema.api.services.createDatabaseService import (
|
|
75
84
|
CreateDatabaseServiceRequest,
|
|
76
85
|
)
|
|
86
|
+
from metadata.generated.schema.api.services.createDriveService import (
|
|
87
|
+
CreateDriveServiceRequest,
|
|
88
|
+
)
|
|
77
89
|
from metadata.generated.schema.api.services.createMessagingService import (
|
|
78
90
|
CreateMessagingServiceRequest,
|
|
79
91
|
)
|
|
@@ -133,6 +145,9 @@ from metadata.generated.schema.entity.data.dashboard import Dashboard
|
|
|
133
145
|
from metadata.generated.schema.entity.data.dashboardDataModel import DashboardDataModel
|
|
134
146
|
from metadata.generated.schema.entity.data.database import Database
|
|
135
147
|
from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
|
|
148
|
+
from metadata.generated.schema.entity.data.dataContract import DataContract
|
|
149
|
+
from metadata.generated.schema.entity.data.directory import Directory
|
|
150
|
+
from metadata.generated.schema.entity.data.file import File
|
|
136
151
|
from metadata.generated.schema.entity.data.glossary import Glossary
|
|
137
152
|
from metadata.generated.schema.entity.data.glossaryTerm import GlossaryTerm
|
|
138
153
|
from metadata.generated.schema.entity.data.metric import Metric
|
|
@@ -142,9 +157,11 @@ from metadata.generated.schema.entity.data.query import Query
|
|
|
142
157
|
from metadata.generated.schema.entity.data.queryCostRecord import QueryCostRecord
|
|
143
158
|
from metadata.generated.schema.entity.data.report import Report
|
|
144
159
|
from metadata.generated.schema.entity.data.searchIndex import SearchIndex
|
|
160
|
+
from metadata.generated.schema.entity.data.spreadsheet import Spreadsheet
|
|
145
161
|
from metadata.generated.schema.entity.data.storedProcedure import StoredProcedure
|
|
146
162
|
from metadata.generated.schema.entity.data.table import Table
|
|
147
163
|
from metadata.generated.schema.entity.data.topic import Topic
|
|
164
|
+
from metadata.generated.schema.entity.data.worksheet import Worksheet
|
|
148
165
|
from metadata.generated.schema.entity.docStore.document import Document
|
|
149
166
|
from metadata.generated.schema.entity.domains.dataProduct import DataProduct
|
|
150
167
|
from metadata.generated.schema.entity.domains.domain import Domain
|
|
@@ -156,6 +173,7 @@ from metadata.generated.schema.entity.services.connections.testConnectionDefinit
|
|
|
156
173
|
)
|
|
157
174
|
from metadata.generated.schema.entity.services.dashboardService import DashboardService
|
|
158
175
|
from metadata.generated.schema.entity.services.databaseService import DatabaseService
|
|
176
|
+
from metadata.generated.schema.entity.services.driveService import DriveService
|
|
159
177
|
from metadata.generated.schema.entity.services.ingestionPipelines.ingestionPipeline import (
|
|
160
178
|
IngestionPipeline,
|
|
161
179
|
)
|
|
@@ -213,6 +231,15 @@ ROUTES = {
|
|
|
213
231
|
CreateAPICollectionRequest.__name__: "/apiCollections",
|
|
214
232
|
Document.__name__: "/docStore",
|
|
215
233
|
CreateDocumentRequest.__name__: "/docStore",
|
|
234
|
+
# Drive
|
|
235
|
+
Directory.__name__: "/drives/directories",
|
|
236
|
+
CreateDirectoryRequest.__name__: "/drives/directories",
|
|
237
|
+
Spreadsheet.__name__: "/drives/spreadsheets",
|
|
238
|
+
CreateSpreadsheetRequest.__name__: "/drives/spreadsheets",
|
|
239
|
+
File.__name__: "/drives/files",
|
|
240
|
+
CreateFileRequest.__name__: "/drives/files",
|
|
241
|
+
Worksheet.__name__: "/drives/worksheets",
|
|
242
|
+
CreateWorksheetRequest.__name__: "/drives/worksheets",
|
|
216
243
|
# Classifications
|
|
217
244
|
Tag.__name__: "/tags",
|
|
218
245
|
CreateTagRequest.__name__: "/tags",
|
|
@@ -242,6 +269,8 @@ ROUTES = {
|
|
|
242
269
|
Workflow.__name__: "/automations/workflows",
|
|
243
270
|
CreateWorkflowRequest.__name__: "/automations/workflows",
|
|
244
271
|
# Services
|
|
272
|
+
DriveService.__name__: "/services/driveServices",
|
|
273
|
+
CreateDriveServiceRequest.__name__: "/services/driveServices",
|
|
245
274
|
ApiService.__name__: "/services/apiServices",
|
|
246
275
|
CreateApiServiceRequest.__name__: "/services/apiServices",
|
|
247
276
|
DatabaseService.__name__: "/services/databaseServices",
|
|
@@ -295,4 +324,7 @@ ROUTES = {
|
|
|
295
324
|
# Query Cost
|
|
296
325
|
QueryCostRecord.__name__: "/queryCostRecord",
|
|
297
326
|
CreateQueryCostRecordRequest.__name__: "/queryCostRecord",
|
|
327
|
+
# Data Contracts
|
|
328
|
+
DataContract.__name__: "/dataContracts",
|
|
329
|
+
CreateDataContractRequest.__name__: "/dataContracts",
|
|
298
330
|
}
|
|
@@ -34,6 +34,7 @@ from metadata.generated.schema.api.tests.createTestSuite import CreateTestSuiteR
|
|
|
34
34
|
from metadata.generated.schema.dataInsight.kpi.basic import KpiResult
|
|
35
35
|
from metadata.generated.schema.entity.classification.tag import Tag
|
|
36
36
|
from metadata.generated.schema.entity.data.dashboard import Dashboard
|
|
37
|
+
from metadata.generated.schema.entity.data.dataContract import DataContract
|
|
37
38
|
from metadata.generated.schema.entity.data.pipeline import Pipeline, PipelineStatus
|
|
38
39
|
from metadata.generated.schema.entity.data.searchIndex import (
|
|
39
40
|
SearchIndex,
|
|
@@ -41,6 +42,9 @@ from metadata.generated.schema.entity.data.searchIndex import (
|
|
|
41
42
|
)
|
|
42
43
|
from metadata.generated.schema.entity.data.table import DataModel, Table
|
|
43
44
|
from metadata.generated.schema.entity.data.topic import TopicSampleData
|
|
45
|
+
from metadata.generated.schema.entity.datacontract.dataContractResult import (
|
|
46
|
+
DataContractResult,
|
|
47
|
+
)
|
|
44
48
|
from metadata.generated.schema.entity.teams.role import Role
|
|
45
49
|
from metadata.generated.schema.entity.teams.team import Team
|
|
46
50
|
from metadata.generated.schema.entity.teams.user import User
|
|
@@ -685,6 +689,53 @@ class MetadataRestSink(Sink): # pylint: disable=too-many-public-methods
|
|
|
685
689
|
|
|
686
690
|
return Either(right=record)
|
|
687
691
|
|
|
692
|
+
@_run_dispatch.register
|
|
693
|
+
def write_data_contract_result(
|
|
694
|
+
self, record: DataContractResult
|
|
695
|
+
) -> Either[DataContractResult]:
|
|
696
|
+
"""
|
|
697
|
+
Send a DataContractResult to OM API
|
|
698
|
+
:param record: DataContractResult to be created/updated
|
|
699
|
+
"""
|
|
700
|
+
try:
|
|
701
|
+
# Find the data contract by FQN to get its ID
|
|
702
|
+
data_contract = self.metadata.get_by_name(
|
|
703
|
+
entity=DataContract, fqn=record.dataContractFQN
|
|
704
|
+
)
|
|
705
|
+
|
|
706
|
+
if not data_contract:
|
|
707
|
+
error = f"Data contract not found: {record.dataContractFQN}"
|
|
708
|
+
return Either(
|
|
709
|
+
left=StackTraceError(
|
|
710
|
+
name="DataContractResult", error=error, stackTrace=None
|
|
711
|
+
)
|
|
712
|
+
)
|
|
713
|
+
|
|
714
|
+
# Create or update the result using the mixin method
|
|
715
|
+
result = self.metadata.put_data_contract_result(
|
|
716
|
+
data_contract_id=data_contract.id, result=record
|
|
717
|
+
)
|
|
718
|
+
|
|
719
|
+
if result:
|
|
720
|
+
return Either(right=result)
|
|
721
|
+
else:
|
|
722
|
+
error = f"Failed to create data contract result for {record.dataContractFQN}"
|
|
723
|
+
return Either(
|
|
724
|
+
left=StackTraceError(
|
|
725
|
+
name="DataContractResult", error=error, stackTrace=None
|
|
726
|
+
)
|
|
727
|
+
)
|
|
728
|
+
|
|
729
|
+
except Exception as exc:
|
|
730
|
+
error = f"Error processing data contract result: {exc}"
|
|
731
|
+
return Either(
|
|
732
|
+
left=StackTraceError(
|
|
733
|
+
name="DataContractResult",
|
|
734
|
+
error=error,
|
|
735
|
+
stackTrace=traceback.format_exc(),
|
|
736
|
+
)
|
|
737
|
+
)
|
|
738
|
+
|
|
688
739
|
@_run_dispatch.register
|
|
689
740
|
def write_pipeline_usage(self, pipeline_usage: PipelineUsage) -> Either[Pipeline]:
|
|
690
741
|
"""
|
|
@@ -28,6 +28,11 @@ from metadata.generated.schema.entity.services.connections.testConnectionResult
|
|
|
28
28
|
)
|
|
29
29
|
from metadata.ingestion.connections.test_connections import test_connection_steps
|
|
30
30
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
31
|
+
from metadata.ingestion.source.api.rest.parser import (
|
|
32
|
+
OpenAPIParseError,
|
|
33
|
+
parse_openapi_schema,
|
|
34
|
+
validate_openapi_schema,
|
|
35
|
+
)
|
|
31
36
|
from metadata.utils.constants import THREE_MIN
|
|
32
37
|
|
|
33
38
|
|
|
@@ -75,16 +80,17 @@ def test_connection(
|
|
|
75
80
|
|
|
76
81
|
def custom_schema_exec():
|
|
77
82
|
try:
|
|
78
|
-
|
|
83
|
+
schema = parse_openapi_schema(client)
|
|
84
|
+
if validate_openapi_schema(schema):
|
|
79
85
|
return []
|
|
80
86
|
|
|
81
87
|
raise InvalidOpenAPISchemaError(
|
|
82
|
-
"Provided schema is not valid OpenAPI
|
|
83
|
-
)
|
|
84
|
-
except:
|
|
85
|
-
raise InvalidOpenAPISchemaError(
|
|
86
|
-
"Provided schema is not valid OpenAPI JSON schema"
|
|
88
|
+
"Provided schema is not valid OpenAPI specification"
|
|
87
89
|
)
|
|
90
|
+
except OpenAPIParseError as e:
|
|
91
|
+
raise InvalidOpenAPISchemaError(f"Failed to parse OpenAPI schema: {e}")
|
|
92
|
+
except Exception as e:
|
|
93
|
+
raise InvalidOpenAPISchemaError(f"Error validating OpenAPI schema: {e}")
|
|
88
94
|
|
|
89
95
|
test_fn = {"CheckURL": custom_url_exec, "CheckSchema": custom_schema_exec}
|
|
90
96
|
|
|
@@ -40,6 +40,7 @@ from metadata.ingestion.api.steps import InvalidSourceException
|
|
|
40
40
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
|
41
41
|
from metadata.ingestion.source.api.api_service import ApiServiceSource
|
|
42
42
|
from metadata.ingestion.source.api.rest.models import RESTCollection, RESTEndpoint
|
|
43
|
+
from metadata.ingestion.source.api.rest.parser import parse_openapi_schema
|
|
43
44
|
from metadata.utils import fqn
|
|
44
45
|
from metadata.utils.filters import filter_by_collection
|
|
45
46
|
from metadata.utils.helpers import clean_uri
|
|
@@ -77,7 +78,7 @@ class RestSource(ApiServiceSource):
|
|
|
77
78
|
Here is where filtering happens
|
|
78
79
|
"""
|
|
79
80
|
try:
|
|
80
|
-
self.json_response = self.connection
|
|
81
|
+
self.json_response = parse_openapi_schema(self.connection)
|
|
81
82
|
collections_list = []
|
|
82
83
|
tags_collection_set = set()
|
|
83
84
|
if self.json_response.get("tags", []):
|
|
@@ -362,6 +363,7 @@ class RestSource(ApiServiceSource):
|
|
|
362
363
|
FieldModel(
|
|
363
364
|
name=key,
|
|
364
365
|
dataType=DataTypeTopic.UNKNOWN,
|
|
366
|
+
dataTypeDisplay="OBJECT",
|
|
365
367
|
children=children,
|
|
366
368
|
)
|
|
367
369
|
)
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Copyright 2024 Collate
|
|
2
|
+
# Licensed under the Collate Community License, Version 1.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
# https://github.com/open-metadata/OpenMetadata/blob/main/ingestion/LICENSE
|
|
6
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
7
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
8
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
+
# See the License for the specific language governing permissions and
|
|
10
|
+
# limitations under the License.
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
OpenAPI schema parser for both JSON and YAML formats
|
|
14
|
+
"""
|
|
15
|
+
import json
|
|
16
|
+
from typing import Any, Dict
|
|
17
|
+
|
|
18
|
+
import yaml
|
|
19
|
+
from requests.models import Response
|
|
20
|
+
|
|
21
|
+
from metadata.utils.logger import ingestion_logger
|
|
22
|
+
|
|
23
|
+
logger = ingestion_logger()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class OpenAPIParseError(Exception):
|
|
27
|
+
"""
|
|
28
|
+
Exception raised when OpenAPI schema cannot be parsed as either JSON or YAML
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def parse_openapi_schema(response: Response) -> Dict[str, Any]:
|
|
33
|
+
"""
|
|
34
|
+
Parse OpenAPI schema from HTTP response.
|
|
35
|
+
Supports both JSON and YAML formats.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
response: HTTP response containing OpenAPI schema
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
Parsed OpenAPI schema as dictionary
|
|
42
|
+
|
|
43
|
+
Raises:
|
|
44
|
+
OpenAPIParseError: If content cannot be parsed as either JSON or YAML
|
|
45
|
+
"""
|
|
46
|
+
content = response.text
|
|
47
|
+
content_type = response.headers.get("content-type", "").lower()
|
|
48
|
+
|
|
49
|
+
# Try to determine format from content-type header
|
|
50
|
+
if "json" in content_type:
|
|
51
|
+
try:
|
|
52
|
+
return json.loads(content)
|
|
53
|
+
except json.JSONDecodeError as e:
|
|
54
|
+
logger.warning(f"Failed to parse as JSON despite content-type: {e}")
|
|
55
|
+
elif "yaml" in content_type or "yml" in content_type:
|
|
56
|
+
try:
|
|
57
|
+
return yaml.safe_load(content)
|
|
58
|
+
except yaml.YAMLError as e:
|
|
59
|
+
logger.warning(f"Failed to parse as YAML despite content-type: {e}")
|
|
60
|
+
|
|
61
|
+
# If content-type is not definitive or parsing failed, try both formats
|
|
62
|
+
|
|
63
|
+
# First try JSON (backward compatibility)
|
|
64
|
+
try:
|
|
65
|
+
parsed = json.loads(content)
|
|
66
|
+
logger.debug("Successfully parsed OpenAPI schema as JSON")
|
|
67
|
+
return parsed
|
|
68
|
+
except json.JSONDecodeError:
|
|
69
|
+
logger.debug("Content is not valid JSON, trying YAML")
|
|
70
|
+
|
|
71
|
+
# Then try YAML
|
|
72
|
+
try:
|
|
73
|
+
parsed = yaml.safe_load(content)
|
|
74
|
+
if parsed is None:
|
|
75
|
+
raise OpenAPIParseError("YAML parsing returned None")
|
|
76
|
+
logger.debug("Successfully parsed OpenAPI schema as YAML")
|
|
77
|
+
return parsed
|
|
78
|
+
except yaml.YAMLError as e:
|
|
79
|
+
logger.error(f"Failed to parse as YAML: {e}")
|
|
80
|
+
|
|
81
|
+
# If both formats fail, raise an error
|
|
82
|
+
raise OpenAPIParseError(
|
|
83
|
+
"Failed to parse OpenAPI schema as either JSON or YAML. "
|
|
84
|
+
"Please ensure the schema is valid OpenAPI specification."
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def validate_openapi_schema(schema: Dict[str, Any]) -> bool:
|
|
89
|
+
"""
|
|
90
|
+
Validate that the parsed schema is a valid OpenAPI specification.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
schema: Parsed schema dictionary
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
True if schema appears to be valid OpenAPI, False otherwise
|
|
97
|
+
"""
|
|
98
|
+
# Check for required OpenAPI fields
|
|
99
|
+
if not isinstance(schema, dict):
|
|
100
|
+
return False
|
|
101
|
+
|
|
102
|
+
# OpenAPI 3.x uses "openapi" field, OpenAPI 2.x uses "swagger" field
|
|
103
|
+
return schema.get("openapi") is not None or schema.get("swagger") is not None
|
|
@@ -0,0 +1,10 @@
|
|
|
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.
|