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.

Files changed (845) hide show
  1. metadata/__init__.py +2 -0
  2. metadata/data_quality/validations/models.py +2 -2
  3. metadata/data_quality/validations/runtime_param_setter/base_diff_params_setter.py +78 -5
  4. metadata/data_quality/validations/runtime_param_setter/table_diff_params_setter.py +10 -63
  5. metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +4 -1
  6. metadata/examples/workflows/grafana.yaml +115 -0
  7. metadata/generated/schema/analytics/__init__.py +1 -1
  8. metadata/generated/schema/analytics/basic.py +1 -1
  9. metadata/generated/schema/analytics/reportData.py +1 -1
  10. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  11. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  12. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  13. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  14. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  15. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  16. metadata/generated/schema/analytics/webAnalyticEvent.py +5 -5
  17. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  18. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  19. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  20. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  21. metadata/generated/schema/api/__init__.py +1 -1
  22. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  23. metadata/generated/schema/api/addTagToAssetsRequest.py +1 -1
  24. metadata/generated/schema/api/analytics/__init__.py +1 -1
  25. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +6 -5
  26. metadata/generated/schema/api/automations/__init__.py +1 -1
  27. metadata/generated/schema/api/automations/createWorkflow.py +6 -5
  28. metadata/generated/schema/api/bulkAssets.py +1 -1
  29. metadata/generated/schema/api/classification/__init__.py +1 -1
  30. metadata/generated/schema/api/classification/createClassification.py +6 -5
  31. metadata/generated/schema/api/classification/createTag.py +4 -4
  32. metadata/generated/schema/api/classification/loadTags.py +1 -1
  33. metadata/generated/schema/api/createBot.py +5 -5
  34. metadata/generated/schema/api/createEventPublisherJob.py +1 -1
  35. metadata/generated/schema/api/createType.py +6 -5
  36. metadata/generated/schema/api/data/__init__.py +1 -1
  37. metadata/generated/schema/api/data/createAPICollection.py +4 -4
  38. metadata/generated/schema/api/data/createAPIEndpoint.py +4 -4
  39. metadata/generated/schema/api/data/createChart.py +12 -4
  40. metadata/generated/schema/api/data/createContainer.py +4 -4
  41. metadata/generated/schema/api/data/createCustomProperty.py +1 -1
  42. metadata/generated/schema/api/data/createDashboard.py +4 -4
  43. metadata/generated/schema/api/data/createDashboardDataModel.py +4 -4
  44. metadata/generated/schema/api/data/createDataContract.py +11 -5
  45. metadata/generated/schema/api/data/createDatabase.py +4 -4
  46. metadata/generated/schema/api/data/createDatabaseSchema.py +4 -4
  47. metadata/generated/schema/api/data/createDirectory.py +105 -0
  48. metadata/generated/schema/api/data/createFile.py +104 -0
  49. metadata/generated/schema/api/data/createGlossary.py +4 -4
  50. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  51. metadata/generated/schema/api/data/createMetric.py +4 -4
  52. metadata/generated/schema/api/data/createMlModel.py +4 -4
  53. metadata/generated/schema/api/data/createPipeline.py +4 -4
  54. metadata/generated/schema/api/data/createQuery.py +5 -4
  55. metadata/generated/schema/api/data/createQueryCostRecord.py +1 -1
  56. metadata/generated/schema/api/data/createSearchIndex.py +4 -4
  57. metadata/generated/schema/api/data/createSpreadsheet.py +111 -0
  58. metadata/generated/schema/api/data/createStoredProcedure.py +4 -4
  59. metadata/generated/schema/api/data/createTable.py +5 -4
  60. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  61. metadata/generated/schema/api/data/createTopic.py +5 -4
  62. metadata/generated/schema/api/data/createWorksheet.py +105 -0
  63. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  64. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  65. metadata/generated/schema/api/data/updateColumn.py +1 -1
  66. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  67. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +5 -4
  68. metadata/generated/schema/api/dataInsight/custom/__init__.py +1 -1
  69. metadata/generated/schema/api/dataInsight/custom/createDataInsightCustomChart.py +1 -1
  70. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  71. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +5 -5
  72. metadata/generated/schema/api/docStore/__init__.py +1 -1
  73. metadata/generated/schema/api/docStore/createDocument.py +6 -5
  74. metadata/generated/schema/api/domains/__init__.py +1 -1
  75. metadata/generated/schema/api/domains/createDataProduct.py +4 -4
  76. metadata/generated/schema/api/domains/createDomain.py +1 -1
  77. metadata/generated/schema/api/entityRelationship/__init__.py +3 -0
  78. metadata/generated/schema/api/entityRelationship/entityRelationshipDirection.py +12 -0
  79. metadata/generated/schema/api/entityRelationship/esEntityRelationshipData.py +57 -0
  80. metadata/generated/schema/api/entityRelationship/relationshipRef.py +32 -0
  81. metadata/generated/schema/api/entityRelationship/searchEntityRelationshipRequest.py +47 -0
  82. metadata/generated/schema/api/entityRelationship/searchEntityRelationshipResult.py +47 -0
  83. metadata/generated/schema/api/entityRelationship/searchSchemaEntityRelationshipResult.py +20 -0
  84. metadata/generated/schema/api/feed/__init__.py +1 -1
  85. metadata/generated/schema/api/feed/closeTask.py +1 -1
  86. metadata/generated/schema/api/feed/createPost.py +1 -1
  87. metadata/generated/schema/api/feed/createSuggestion.py +1 -1
  88. metadata/generated/schema/api/feed/createThread.py +6 -2
  89. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  90. metadata/generated/schema/api/feed/threadCount.py +1 -1
  91. metadata/generated/schema/api/governance/__init__.py +1 -1
  92. metadata/generated/schema/api/governance/createWorkflowDefinition.py +1 -1
  93. metadata/generated/schema/api/governance/createWorkflowInstanceState.py +1 -1
  94. metadata/generated/schema/api/lineage/__init__.py +1 -1
  95. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  96. metadata/generated/schema/api/lineage/esLineageData.py +4 -1
  97. metadata/generated/schema/api/lineage/lineageDirection.py +1 -1
  98. metadata/generated/schema/api/lineage/nodeInformation.py +4 -1
  99. metadata/generated/schema/api/lineage/searchLineageRequest.py +1 -1
  100. metadata/generated/schema/api/lineage/searchLineageResult.py +1 -1
  101. metadata/generated/schema/api/mcp/__init__.py +1 -1
  102. metadata/generated/schema/api/mcp/mcpToolDefinition.py +1 -1
  103. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  104. metadata/generated/schema/api/policies/__init__.py +1 -1
  105. metadata/generated/schema/api/policies/createPolicy.py +6 -5
  106. metadata/generated/schema/api/scim/__init__.py +1 -1
  107. metadata/generated/schema/api/scim/scimGroup.py +1 -1
  108. metadata/generated/schema/api/scim/scimPatchOp.py +1 -1
  109. metadata/generated/schema/api/scim/scimUser.py +1 -1
  110. metadata/generated/schema/api/search/__init__.py +1 -1
  111. metadata/generated/schema/api/search/previewSearchRequest.py +1 -1
  112. metadata/generated/schema/api/services/__init__.py +1 -1
  113. metadata/generated/schema/api/services/createApiService.py +4 -4
  114. metadata/generated/schema/api/services/createDashboardService.py +4 -4
  115. metadata/generated/schema/api/services/createDatabaseService.py +4 -4
  116. metadata/generated/schema/api/services/createDriveService.py +58 -0
  117. metadata/generated/schema/api/services/createMessagingService.py +4 -4
  118. metadata/generated/schema/api/services/createMetadataService.py +5 -4
  119. metadata/generated/schema/api/services/createMlModelService.py +4 -4
  120. metadata/generated/schema/api/services/createPipelineService.py +4 -4
  121. metadata/generated/schema/api/services/createSearchService.py +4 -4
  122. metadata/generated/schema/api/services/createSecurityService.py +4 -4
  123. metadata/generated/schema/api/services/createStorageService.py +4 -4
  124. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  125. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +13 -5
  126. metadata/generated/schema/api/setOwner.py +1 -1
  127. metadata/generated/schema/api/teams/__init__.py +1 -1
  128. metadata/generated/schema/api/teams/createPersona.py +12 -4
  129. metadata/generated/schema/api/teams/createRole.py +5 -4
  130. metadata/generated/schema/api/teams/createTeam.py +1 -1
  131. metadata/generated/schema/api/teams/createUser.py +1 -1
  132. metadata/generated/schema/api/tests/__init__.py +1 -1
  133. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  134. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  135. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  136. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
  137. metadata/generated/schema/api/tests/createTestCaseResult.py +1 -1
  138. metadata/generated/schema/api/tests/createTestDefinition.py +5 -4
  139. metadata/generated/schema/api/tests/createTestSuite.py +13 -5
  140. metadata/generated/schema/api/tests/moveGlossaryTermRequest.py +27 -0
  141. metadata/generated/schema/api/validateGlossaryTagsRequest.py +1 -1
  142. metadata/generated/schema/api/voteRequest.py +1 -1
  143. metadata/generated/schema/auth/__init__.py +1 -1
  144. metadata/generated/schema/auth/basicAuth.py +1 -1
  145. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  146. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  147. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  148. metadata/generated/schema/auth/emailRequest.py +1 -1
  149. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  150. metadata/generated/schema/auth/generateToken.py +1 -1
  151. metadata/generated/schema/auth/jwtAuth.py +1 -1
  152. metadata/generated/schema/auth/loginRequest.py +1 -1
  153. metadata/generated/schema/auth/logoutRequest.py +1 -1
  154. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  155. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  156. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  157. metadata/generated/schema/auth/refreshToken.py +1 -1
  158. metadata/generated/schema/auth/registrationRequest.py +1 -1
  159. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  160. metadata/generated/schema/auth/revokeToken.py +1 -1
  161. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  162. metadata/generated/schema/auth/ssoAuth.py +1 -1
  163. metadata/generated/schema/auth/supportToken.py +1 -1
  164. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  165. metadata/generated/schema/configuration/__init__.py +1 -1
  166. metadata/generated/schema/configuration/aiPlatformConfiguration.py +58 -0
  167. metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
  168. metadata/generated/schema/configuration/assetCertificationSettings.py +1 -1
  169. metadata/generated/schema/configuration/authConfig.py +1 -1
  170. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  171. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  172. metadata/generated/schema/configuration/cacheConfiguration.py +137 -0
  173. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  174. metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
  175. metadata/generated/schema/configuration/elasticSearchConfiguration.py +18 -1
  176. metadata/generated/schema/configuration/entityRulesSettings.py +24 -0
  177. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  178. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  179. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  180. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  181. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  182. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  183. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  184. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  185. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  186. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  187. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  188. metadata/generated/schema/configuration/limitsConfiguration.py +1 -1
  189. metadata/generated/schema/configuration/lineageSettings.py +1 -1
  190. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  191. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  192. metadata/generated/schema/configuration/openMetadataBaseUrlConfiguration.py +1 -1
  193. metadata/generated/schema/configuration/opertionalConfiguration.py +1 -1
  194. metadata/generated/schema/configuration/opsConfig.py +1 -1
  195. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  196. metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
  197. metadata/generated/schema/configuration/searchSettings.py +1 -1
  198. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  199. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  200. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  201. metadata/generated/schema/configuration/themeConfiguration.py +1 -1
  202. metadata/generated/schema/configuration/uiThemePreference.py +1 -1
  203. metadata/generated/schema/configuration/workflowSettings.py +1 -1
  204. metadata/generated/schema/dataInsight/__init__.py +1 -1
  205. metadata/generated/schema/dataInsight/custom/__init__.py +1 -1
  206. metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +1 -1
  207. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +1 -1
  208. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
  209. metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
  210. metadata/generated/schema/dataInsight/custom/lineChart.py +5 -1
  211. metadata/generated/schema/dataInsight/custom/summaryCard.py +1 -1
  212. metadata/generated/schema/dataInsight/dataInsightChart.py +5 -5
  213. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  214. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  215. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  216. metadata/generated/schema/dataInsight/kpi/kpi.py +4 -4
  217. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  218. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  219. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  220. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  221. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  222. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  223. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  224. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  225. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  226. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  227. metadata/generated/schema/email/__init__.py +1 -1
  228. metadata/generated/schema/email/emailRequest.py +1 -1
  229. metadata/generated/schema/email/emailTemplate.py +1 -1
  230. metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
  231. metadata/generated/schema/email/smtpSettings.py +1 -1
  232. metadata/generated/schema/email/templateValidationReponse.py +1 -1
  233. metadata/generated/schema/entity/__init__.py +1 -1
  234. metadata/generated/schema/entity/applications/__init__.py +1 -1
  235. metadata/generated/schema/entity/applications/app.py +4 -4
  236. metadata/generated/schema/entity/applications/appExtension.py +1 -1
  237. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  238. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  239. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
  240. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  241. metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
  242. metadata/generated/schema/entity/applications/configuration/external/automator/addCustomProperties.py +1 -1
  243. metadata/generated/schema/entity/applications/configuration/external/automator/addDataProductAction.py +1 -1
  244. metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
  245. metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +5 -5
  246. metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
  247. metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
  248. metadata/generated/schema/entity/applications/configuration/external/automator/addTestCaseAction.py +1 -1
  249. metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
  250. metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +4 -4
  251. metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
  252. metadata/generated/schema/entity/applications/configuration/external/automator/propagationStopConfig.py +2 -2
  253. metadata/generated/schema/entity/applications/configuration/external/automator/removeCustomPropertiesAction.py +1 -1
  254. metadata/generated/schema/entity/applications/configuration/external/automator/removeDataProductAction.py +1 -1
  255. metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
  256. metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
  257. metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
  258. metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
  259. metadata/generated/schema/entity/applications/configuration/external/automator/removeTestCaseAction.py +1 -1
  260. metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
  261. metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +1 -1
  262. metadata/generated/schema/entity/applications/configuration/external/collateAIAppConfig.py +1 -1
  263. metadata/generated/schema/entity/applications/configuration/external/slackAppTokenConfiguration.py +1 -1
  264. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  265. metadata/generated/schema/entity/applications/configuration/internal/autoPilotAppConfig.py +1 -1
  266. metadata/generated/schema/entity/applications/configuration/internal/collateAIQualityAgentAppConfig.py +1 -1
  267. metadata/generated/schema/entity/applications/configuration/internal/collateAITierAgentAppConfig.py +1 -1
  268. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
  269. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
  270. metadata/generated/schema/entity/applications/configuration/internal/dataRetentionConfiguration.py +1 -1
  271. metadata/generated/schema/entity/applications/configuration/internal/helloPipelinesConfiguration.py +1 -1
  272. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
  273. metadata/generated/schema/entity/applications/configuration/private/__init__.py +1 -1
  274. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
  275. metadata/generated/schema/entity/applications/configuration/private/external/collateAIAppPrivateConfig.py +1 -1
  276. metadata/generated/schema/entity/applications/configuration/private/internal/__init__.py +1 -1
  277. metadata/generated/schema/entity/applications/configuration/private/internal/collateAITierAgentAppPrivateConfig.py +1 -1
  278. metadata/generated/schema/entity/applications/configuration/private/limits.py +1 -1
  279. metadata/generated/schema/entity/applications/createAppRequest.py +6 -5
  280. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  281. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  282. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  283. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +5 -11
  284. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +5 -4
  285. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  286. metadata/generated/schema/entity/automations/__init__.py +1 -1
  287. metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
  288. metadata/generated/schema/entity/automations/workflow.py +5 -5
  289. metadata/generated/schema/entity/bot.py +5 -5
  290. metadata/generated/schema/entity/classification/__init__.py +1 -1
  291. metadata/generated/schema/entity/classification/classification.py +5 -5
  292. metadata/generated/schema/entity/classification/tag.py +4 -4
  293. metadata/generated/schema/entity/data/__init__.py +1 -1
  294. metadata/generated/schema/entity/data/apiCollection.py +4 -4
  295. metadata/generated/schema/entity/data/apiEndpoint.py +4 -4
  296. metadata/generated/schema/entity/data/chart.py +16 -4
  297. metadata/generated/schema/entity/data/container.py +4 -4
  298. metadata/generated/schema/entity/data/dashboard.py +4 -4
  299. metadata/generated/schema/entity/data/dashboardDataModel.py +4 -4
  300. metadata/generated/schema/entity/data/dataContract.py +40 -53
  301. metadata/generated/schema/entity/data/database.py +4 -4
  302. metadata/generated/schema/entity/data/databaseSchema.py +4 -4
  303. metadata/generated/schema/entity/data/directory.py +173 -0
  304. metadata/generated/schema/entity/data/file.py +184 -0
  305. metadata/generated/schema/entity/data/glossary.py +4 -4
  306. metadata/generated/schema/entity/data/glossaryTerm.py +4 -4
  307. metadata/generated/schema/entity/data/metric.py +4 -5
  308. metadata/generated/schema/entity/data/mlmodel.py +4 -4
  309. metadata/generated/schema/entity/data/pipeline.py +4 -4
  310. metadata/generated/schema/entity/data/query.py +4 -4
  311. metadata/generated/schema/entity/data/queryCostRecord.py +1 -1
  312. metadata/generated/schema/entity/data/queryCostSearchResult.py +1 -1
  313. metadata/generated/schema/entity/data/report.py +4 -4
  314. metadata/generated/schema/entity/data/searchIndex.py +4 -4
  315. metadata/generated/schema/entity/data/spreadsheet.py +209 -0
  316. metadata/generated/schema/entity/data/storedProcedure.py +4 -4
  317. metadata/generated/schema/entity/data/table.py +50 -4
  318. metadata/generated/schema/entity/data/topic.py +4 -4
  319. metadata/generated/schema/entity/data/worksheet.py +168 -0
  320. metadata/generated/schema/entity/datacontract/__init__.py +3 -0
  321. metadata/generated/schema/entity/datacontract/dataContractResult.py +74 -0
  322. metadata/generated/schema/entity/datacontract/qualityValidation.py +31 -0
  323. metadata/generated/schema/entity/datacontract/schemaValidation.py +31 -0
  324. metadata/generated/schema/entity/datacontract/semanticsValidation.py +39 -0
  325. metadata/generated/schema/entity/datacontract/slaValidation.py +32 -0
  326. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  327. metadata/generated/schema/entity/docStore/document.py +5 -5
  328. metadata/generated/schema/entity/domains/__init__.py +1 -1
  329. metadata/generated/schema/entity/domains/dataProduct.py +5 -5
  330. metadata/generated/schema/entity/domains/domain.py +1 -1
  331. metadata/generated/schema/entity/events/__init__.py +1 -1
  332. metadata/generated/schema/entity/events/webhook.py +1 -1
  333. metadata/generated/schema/entity/feed/__init__.py +1 -1
  334. metadata/generated/schema/entity/feed/assets.py +1 -1
  335. metadata/generated/schema/entity/feed/customProperty.py +1 -1
  336. metadata/generated/schema/entity/feed/description.py +1 -1
  337. metadata/generated/schema/entity/feed/domain.py +8 -8
  338. metadata/generated/schema/entity/feed/entityInfo.py +1 -1
  339. metadata/generated/schema/entity/feed/owner.py +1 -1
  340. metadata/generated/schema/entity/feed/suggestion.py +1 -1
  341. metadata/generated/schema/entity/feed/tag.py +1 -1
  342. metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
  343. metadata/generated/schema/entity/feed/thread.py +4 -3
  344. metadata/generated/schema/entity/policies/__init__.py +1 -1
  345. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  346. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  347. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  348. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  349. metadata/generated/schema/entity/policies/filters.py +1 -1
  350. metadata/generated/schema/entity/policies/policy.py +4 -4
  351. metadata/generated/schema/entity/services/__init__.py +1 -1
  352. metadata/generated/schema/entity/services/apiService.py +4 -4
  353. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  354. metadata/generated/schema/entity/services/connections/api/__init__.py +1 -1
  355. metadata/generated/schema/entity/services/connections/api/restConnection.py +1 -1
  356. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  357. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  358. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  359. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  360. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  361. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  362. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  363. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  364. metadata/generated/schema/entity/services/connections/dashboard/grafanaConnection.py +77 -0
  365. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  366. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  367. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  368. metadata/generated/schema/entity/services/connections/dashboard/microStrategyConnection.py +1 -1
  369. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  370. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  371. metadata/generated/schema/entity/services/connections/dashboard/powerBIReportServerConnection.py +1 -1
  372. metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
  373. metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
  374. metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
  375. metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
  376. metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
  377. metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
  378. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  379. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  380. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  381. metadata/generated/schema/entity/services/connections/dashboard/sigmaConnection.py +1 -1
  382. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  383. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  384. metadata/generated/schema/entity/services/connections/dashboard/thoughtSpotConnection.py +1 -1
  385. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  386. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  387. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  388. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
  389. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
  390. metadata/generated/schema/entity/services/connections/database/cassandra/__init__.py +1 -1
  391. metadata/generated/schema/entity/services/connections/database/cassandra/cloudConfig.py +1 -1
  392. metadata/generated/schema/entity/services/connections/database/cassandraConnection.py +1 -1
  393. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  394. metadata/generated/schema/entity/services/connections/database/cockroachConnection.py +1 -1
  395. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  396. metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
  397. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  398. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  399. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  400. metadata/generated/schema/entity/services/connections/database/common/noConfigAuthenticationTypes.py +1 -1
  401. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  402. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  403. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  404. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  405. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  406. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  407. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  408. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  409. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  410. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  411. metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
  412. metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
  413. metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
  414. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  415. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
  416. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  417. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  418. metadata/generated/schema/entity/services/connections/database/epicConnection.py +80 -0
  419. metadata/generated/schema/entity/services/connections/database/exasolConnection.py +1 -1
  420. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  421. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
  422. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
  423. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  424. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
  425. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
  426. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
  427. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
  428. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
  429. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
  430. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
  431. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  432. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  433. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  434. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
  435. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  436. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  437. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
  438. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  439. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  440. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  441. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  442. metadata/generated/schema/entity/services/connections/database/sapErpConnection.py +1 -1
  443. metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
  444. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
  445. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
  446. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  447. metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
  448. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  449. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
  450. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  451. metadata/generated/schema/entity/services/connections/database/ssasConnection.py +1 -1
  452. metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
  453. metadata/generated/schema/entity/services/connections/database/teradataConnection.py +1 -1
  454. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  455. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
  456. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  457. metadata/generated/schema/entity/services/connections/drive/__init__.py +3 -0
  458. metadata/generated/schema/entity/services/connections/drive/customDriveConnection.py +45 -0
  459. metadata/generated/schema/entity/services/connections/drive/googleDriveConnection.py +82 -0
  460. metadata/generated/schema/entity/services/connections/drive/sharePointConnection.py +79 -0
  461. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  462. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  463. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
  464. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  465. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  466. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
  467. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  468. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  469. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  470. metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
  471. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  472. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  473. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
  474. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  475. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  476. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  477. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  478. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  479. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  480. metadata/generated/schema/entity/services/connections/mlmodel/vertexaiConnection.py +1 -1
  481. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  482. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  483. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  484. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  485. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  486. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  487. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  488. metadata/generated/schema/entity/services/connections/pipeline/datafactoryConnection.py +1 -1
  489. metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +1 -1
  490. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  491. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  492. metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +1 -1
  493. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  494. metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
  495. metadata/generated/schema/entity/services/connections/pipeline/matillion/__init__.py +1 -1
  496. metadata/generated/schema/entity/services/connections/pipeline/matillion/matillionETL.py +1 -1
  497. metadata/generated/schema/entity/services/connections/pipeline/matillionConnection.py +1 -1
  498. metadata/generated/schema/entity/services/connections/pipeline/nifi/__init__.py +1 -1
  499. metadata/generated/schema/entity/services/connections/pipeline/nifi/basicAuth.py +1 -1
  500. metadata/generated/schema/entity/services/connections/pipeline/nifi/clientCertificateAuth.py +1 -1
  501. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  502. metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
  503. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
  504. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  505. metadata/generated/schema/entity/services/connections/pipeline/ssisConnection.py +1 -1
  506. metadata/generated/schema/entity/services/connections/pipeline/stitchConnection.py +1 -1
  507. metadata/generated/schema/entity/services/connections/pipeline/wherescapeConnection.py +1 -1
  508. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  509. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  510. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  511. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  512. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  513. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  514. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  515. metadata/generated/schema/entity/services/connections/security/__init__.py +1 -1
  516. metadata/generated/schema/entity/services/connections/security/ranger/__init__.py +1 -1
  517. metadata/generated/schema/entity/services/connections/security/ranger/basicAuth.py +1 -1
  518. metadata/generated/schema/entity/services/connections/security/rangerConnection.py +1 -1
  519. metadata/generated/schema/entity/services/connections/serviceConnection.py +4 -1
  520. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  521. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
  522. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  523. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  524. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  525. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +5 -5
  526. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  527. metadata/generated/schema/entity/services/dashboardService.py +7 -4
  528. metadata/generated/schema/entity/services/databaseService.py +7 -4
  529. metadata/generated/schema/entity/services/driveService.py +143 -0
  530. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  531. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +11 -4
  532. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  533. metadata/generated/schema/entity/services/ingestionPipelines/reverseIngestionResponse.py +1 -1
  534. metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
  535. metadata/generated/schema/entity/services/messagingService.py +4 -4
  536. metadata/generated/schema/entity/services/metadataService.py +4 -4
  537. metadata/generated/schema/entity/services/mlmodelService.py +4 -4
  538. metadata/generated/schema/entity/services/pipelineService.py +4 -4
  539. metadata/generated/schema/entity/services/searchService.py +4 -4
  540. metadata/generated/schema/entity/services/securityService.py +4 -4
  541. metadata/generated/schema/entity/services/serviceType.py +2 -1
  542. metadata/generated/schema/entity/services/storageService.py +4 -4
  543. metadata/generated/schema/entity/teams/__init__.py +1 -1
  544. metadata/generated/schema/entity/teams/persona.py +11 -4
  545. metadata/generated/schema/entity/teams/role.py +5 -5
  546. metadata/generated/schema/entity/teams/team.py +1 -1
  547. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  548. metadata/generated/schema/entity/teams/user.py +21 -3
  549. metadata/generated/schema/entity/type.py +5 -11
  550. metadata/generated/schema/entity/utils/__init__.py +1 -1
  551. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  552. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  553. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  554. metadata/generated/schema/events/__init__.py +1 -1
  555. metadata/generated/schema/events/alertMetrics.py +1 -1
  556. metadata/generated/schema/events/api/__init__.py +1 -1
  557. metadata/generated/schema/events/api/createEventSubscription.py +5 -4
  558. metadata/generated/schema/events/api/eventSubscriptionDiagnosticInfo.py +1 -1
  559. metadata/generated/schema/events/api/eventsRecord.py +1 -1
  560. metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -1
  561. metadata/generated/schema/events/api/typedEvent.py +1 -1
  562. metadata/generated/schema/events/emailAlertConfig.py +1 -1
  563. metadata/generated/schema/events/eventFilterRule.py +1 -1
  564. metadata/generated/schema/events/eventSubscription.py +5 -5
  565. metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
  566. metadata/generated/schema/events/failedEvent.py +1 -1
  567. metadata/generated/schema/events/failedEventResponse.py +1 -1
  568. metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
  569. metadata/generated/schema/events/statusContext.py +1 -1
  570. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  571. metadata/generated/schema/events/subscriptionStatus.py +1 -1
  572. metadata/generated/schema/events/testDestinationStatus.py +1 -1
  573. metadata/generated/schema/governance/workflows/__init__.py +1 -1
  574. metadata/generated/schema/governance/workflows/elements/__init__.py +1 -1
  575. metadata/generated/schema/governance/workflows/elements/edge.py +1 -1
  576. metadata/generated/schema/governance/workflows/elements/nodeSubType.py +1 -1
  577. metadata/generated/schema/governance/workflows/elements/nodeType.py +1 -1
  578. metadata/generated/schema/governance/workflows/elements/nodes/__init__.py +1 -1
  579. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/__init__.py +1 -1
  580. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/checkEntityAttributesTask.py +1 -1
  581. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/createAndRunIngestionPipelineTask.py +1 -1
  582. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/runAppTask.py +1 -1
  583. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setEntityCertificationTask.py +1 -1
  584. metadata/generated/schema/governance/workflows/elements/nodes/automatedTask/setGlossaryTermStatusTask.py +1 -1
  585. metadata/generated/schema/governance/workflows/elements/nodes/endEvent/__init__.py +1 -1
  586. metadata/generated/schema/governance/workflows/elements/nodes/endEvent/endEvent.py +1 -1
  587. metadata/generated/schema/governance/workflows/elements/nodes/gateway/__init__.py +1 -1
  588. metadata/generated/schema/governance/workflows/elements/nodes/gateway/parallelGateway.py +1 -1
  589. metadata/generated/schema/governance/workflows/elements/nodes/startEvent/__init__.py +1 -1
  590. metadata/generated/schema/governance/workflows/elements/nodes/startEvent/startEvent.py +1 -1
  591. metadata/generated/schema/governance/workflows/elements/nodes/userTask/__init__.py +1 -1
  592. metadata/generated/schema/governance/workflows/elements/nodes/userTask/userApprovalTask.py +1 -1
  593. metadata/generated/schema/governance/workflows/elements/triggers/__init__.py +1 -1
  594. metadata/generated/schema/governance/workflows/elements/triggers/eventBasedEntityTrigger.py +9 -1
  595. metadata/generated/schema/governance/workflows/elements/triggers/noOpTrigger.py +1 -1
  596. metadata/generated/schema/governance/workflows/elements/triggers/periodicBatchEntityTrigger.py +1 -1
  597. metadata/generated/schema/governance/workflows/workflowDefinition.py +1 -1
  598. metadata/generated/schema/governance/workflows/workflowInstance.py +1 -1
  599. metadata/generated/schema/governance/workflows/workflowInstanceState.py +5 -1
  600. metadata/generated/schema/jobs/__init__.py +1 -1
  601. metadata/generated/schema/jobs/backgroundJob.py +1 -1
  602. metadata/generated/schema/jobs/enumCleanupArgs.py +1 -1
  603. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  604. metadata/generated/schema/metadataIngestion/apiServiceMetadataPipeline.py +1 -1
  605. metadata/generated/schema/metadataIngestion/application.py +1 -1
  606. metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
  607. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  608. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  609. metadata/generated/schema/metadataIngestion/databaseServiceAutoClassificationPipeline.py +1 -1
  610. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
  611. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +25 -3
  612. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  613. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  614. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  615. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  616. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
  617. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  618. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  619. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
  620. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  621. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  622. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
  623. metadata/generated/schema/metadataIngestion/driveServiceMetadataPipeline.py +165 -0
  624. metadata/generated/schema/metadataIngestion/engine/__init__.py +3 -0
  625. metadata/generated/schema/metadataIngestion/engine/nativeEngineConfig.py +23 -0
  626. metadata/generated/schema/metadataIngestion/engine/sparkEngineConfig.py +43 -0
  627. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  628. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  629. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  630. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  631. metadata/generated/schema/metadataIngestion/reverseIngestionPipeline.py +1 -1
  632. metadata/generated/schema/metadataIngestion/reverseingestionconfig/__init__.py +1 -1
  633. metadata/generated/schema/metadataIngestion/reverseingestionconfig/descriptionConfig.py +1 -1
  634. metadata/generated/schema/metadataIngestion/reverseingestionconfig/ownerConfig.py +1 -1
  635. metadata/generated/schema/metadataIngestion/reverseingestionconfig/tagsConfig.py +1 -1
  636. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  637. metadata/generated/schema/metadataIngestion/securityServiceMetadataPipeline.py +1 -1
  638. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  639. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  640. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  641. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  642. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  643. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
  644. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  645. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  646. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  647. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  648. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  649. metadata/generated/schema/metadataIngestion/workflow.py +3 -1
  650. metadata/generated/schema/monitoring/__init__.py +1 -1
  651. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  652. metadata/generated/schema/scim/__init__.py +1 -1
  653. metadata/generated/schema/scim/scimConfiguration.py +1 -1
  654. metadata/generated/schema/search/__init__.py +1 -1
  655. metadata/generated/schema/search/aggregationRequest.py +1 -1
  656. metadata/generated/schema/search/searchRequest.py +1 -1
  657. metadata/generated/schema/security/__init__.py +1 -1
  658. metadata/generated/schema/security/client/__init__.py +1 -1
  659. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  660. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  661. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  662. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  663. metadata/generated/schema/security/client/oidcClientConfig.py +1 -1
  664. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  665. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  666. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  667. metadata/generated/schema/security/credentials/__init__.py +1 -1
  668. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  669. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  670. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  671. metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
  672. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  673. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  674. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  675. metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
  676. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  677. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  678. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  679. metadata/generated/schema/security/credentials/gitlabCredentials.py +1 -1
  680. metadata/generated/schema/security/credentials/kubernetesCredentials.py +40 -0
  681. metadata/generated/schema/security/sasl/__init__.py +1 -1
  682. metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
  683. metadata/generated/schema/security/secrets/__init__.py +1 -1
  684. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  685. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  686. metadata/generated/schema/security/secrets/secretsManagerProvider.py +2 -1
  687. metadata/generated/schema/security/securityConfiguration.py +1 -1
  688. metadata/generated/schema/security/ssl/__init__.py +1 -1
  689. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  690. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  691. metadata/generated/schema/settings/__init__.py +1 -1
  692. metadata/generated/schema/settings/settings.py +4 -1
  693. metadata/generated/schema/system/__init__.py +1 -1
  694. metadata/generated/schema/system/entityError.py +1 -1
  695. metadata/generated/schema/system/eventPublisherJob.py +1 -1
  696. metadata/generated/schema/system/indexingError.py +1 -1
  697. metadata/generated/schema/system/limitsResponse.py +1 -1
  698. metadata/generated/schema/system/ui/__init__.py +1 -1
  699. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  700. metadata/generated/schema/system/ui/navigationItem.py +1 -1
  701. metadata/generated/schema/system/ui/page.py +5 -4
  702. metadata/generated/schema/system/ui/tab.py +1 -1
  703. metadata/generated/schema/system/ui/uiCustomization.py +9 -2
  704. metadata/generated/schema/system/validationResponse.py +1 -1
  705. metadata/generated/schema/tests/__init__.py +1 -1
  706. metadata/generated/schema/tests/assigned.py +1 -1
  707. metadata/generated/schema/tests/basic.py +1 -1
  708. metadata/generated/schema/tests/customMetric.py +1 -1
  709. metadata/generated/schema/tests/dataQualityReport.py +1 -1
  710. metadata/generated/schema/tests/resolved.py +1 -1
  711. metadata/generated/schema/tests/testCase.py +4 -4
  712. metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
  713. metadata/generated/schema/tests/testDefinition.py +5 -5
  714. metadata/generated/schema/tests/testSuite.py +11 -4
  715. metadata/generated/schema/type/__init__.py +1 -1
  716. metadata/generated/schema/type/apiSchema.py +1 -1
  717. metadata/generated/schema/type/assetCertification.py +1 -1
  718. metadata/generated/schema/type/auditLog.py +1 -1
  719. metadata/generated/schema/type/basic.py +43 -1
  720. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  721. metadata/generated/schema/type/changeEvent.py +5 -7
  722. metadata/generated/schema/type/changeEventType.py +1 -1
  723. metadata/generated/schema/type/changeSummaryMap.py +1 -1
  724. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  725. metadata/generated/schema/type/contractExecutionStatus.py +16 -0
  726. metadata/generated/schema/type/csvDocumentation.py +1 -1
  727. metadata/generated/schema/type/csvErrorType.py +1 -1
  728. metadata/generated/schema/type/csvFile.py +1 -1
  729. metadata/generated/schema/type/csvImportResult.py +1 -1
  730. metadata/generated/schema/type/customProperties/__init__.py +1 -1
  731. metadata/generated/schema/type/customProperties/complexTypes.py +1 -1
  732. metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
  733. metadata/generated/schema/type/customProperties/tableConfig.py +1 -1
  734. metadata/generated/schema/type/customProperty.py +1 -1
  735. metadata/generated/schema/type/dailyCount.py +1 -1
  736. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  737. metadata/generated/schema/type/entityHierarchy.py +1 -1
  738. metadata/generated/schema/type/entityHistory.py +1 -1
  739. metadata/generated/schema/type/entityLineage.py +1 -1
  740. metadata/generated/schema/type/entityReference.py +1 -1
  741. metadata/generated/schema/type/entityReferenceList.py +1 -1
  742. metadata/generated/schema/type/{entityRelationship.py → entityRelationship/__init__.py} +2 -2
  743. metadata/generated/schema/type/entityRelationship/nodeInformation.py +25 -0
  744. metadata/generated/schema/type/entityUsage.py +1 -1
  745. metadata/generated/schema/type/filterPattern.py +1 -1
  746. metadata/generated/schema/type/function.py +1 -1
  747. metadata/generated/schema/type/include.py +1 -1
  748. metadata/generated/schema/type/jdbcConnection.py +1 -1
  749. metadata/generated/schema/type/layerPaging.py +24 -0
  750. metadata/generated/schema/type/lifeCycle.py +1 -1
  751. metadata/generated/schema/type/paging.py +1 -1
  752. metadata/generated/schema/type/personaPreferences.py +48 -0
  753. metadata/generated/schema/type/profile.py +1 -1
  754. metadata/generated/schema/type/queryParserData.py +1 -1
  755. metadata/generated/schema/type/reaction.py +1 -1
  756. metadata/generated/schema/type/schedule.py +1 -1
  757. metadata/generated/schema/type/schema.py +1 -1
  758. metadata/generated/schema/type/tableQuery.py +1 -1
  759. metadata/generated/schema/type/tableUsageCount.py +1 -1
  760. metadata/generated/schema/type/tagLabel.py +1 -1
  761. metadata/generated/schema/type/usageDetails.py +1 -1
  762. metadata/generated/schema/type/usageRequest.py +1 -1
  763. metadata/generated/schema/type/votes.py +1 -1
  764. metadata/ingestion/api/parser.py +13 -0
  765. metadata/ingestion/bulksink/metadata_usage.py +2 -2
  766. metadata/ingestion/connections/connection.py +18 -1
  767. metadata/ingestion/lineage/sql_lineage.py +98 -65
  768. metadata/ingestion/models/custom_properties.py +3 -3
  769. metadata/ingestion/models/patch_request.py +36 -4
  770. metadata/ingestion/ometa/mixins/data_contract_mixin.py +205 -0
  771. metadata/ingestion/ometa/mixins/lineage_mixin.py +1 -1
  772. metadata/ingestion/ometa/mixins/patch_mixin.py +131 -55
  773. metadata/ingestion/ometa/ometa_api.py +4 -1
  774. metadata/ingestion/ometa/routes.py +32 -0
  775. metadata/ingestion/sink/metadata_rest.py +51 -0
  776. metadata/ingestion/source/api/rest/connection.py +12 -6
  777. metadata/ingestion/source/api/rest/metadata.py +3 -1
  778. metadata/ingestion/source/api/rest/parser.py +103 -0
  779. metadata/ingestion/source/connections.py +1 -1
  780. metadata/ingestion/source/dashboard/grafana/__init__.py +10 -0
  781. metadata/ingestion/source/dashboard/grafana/client.py +223 -0
  782. metadata/ingestion/source/dashboard/grafana/connection.py +66 -0
  783. metadata/ingestion/source/dashboard/grafana/metadata.py +476 -0
  784. metadata/ingestion/source/dashboard/grafana/models.py +159 -0
  785. metadata/ingestion/source/dashboard/grafana/service_spec.py +17 -0
  786. metadata/ingestion/source/dashboard/microstrategy/metadata.py +1 -1
  787. metadata/ingestion/source/dashboard/powerbi/metadata.py +9 -9
  788. metadata/ingestion/source/dashboard/powerbi/models.py +1 -1
  789. metadata/ingestion/source/dashboard/superset/connection.py +5 -7
  790. metadata/ingestion/source/dashboard/tableau/client.py +4 -4
  791. metadata/ingestion/source/dashboard/tableau/metadata.py +1 -0
  792. metadata/ingestion/source/database/datalake/connection.py +51 -73
  793. metadata/ingestion/source/database/datalake/metadata.py +3 -4
  794. metadata/ingestion/source/database/datalake/service_spec.py +2 -0
  795. metadata/ingestion/source/database/dbt/constants.py +17 -1
  796. metadata/ingestion/source/database/dbt/dbt_service.py +30 -1
  797. metadata/ingestion/source/database/dbt/metadata.py +136 -1
  798. metadata/ingestion/source/database/deltalake/clients/pyspark.py +1 -1
  799. metadata/ingestion/source/database/exasol/connection.py +14 -3
  800. metadata/ingestion/source/database/exasol/queries.py +13 -0
  801. metadata/ingestion/source/database/lineage_source.py +18 -2
  802. metadata/ingestion/source/database/mysql/connection.py +13 -19
  803. metadata/ingestion/source/database/oracle/metadata.py +1 -1
  804. metadata/ingestion/source/database/oracle/utils.py +19 -0
  805. metadata/ingestion/source/database/postgres/connection.py +51 -48
  806. metadata/ingestion/source/database/postgres/service_spec.py +2 -0
  807. metadata/ingestion/source/database/sample_data.py +661 -2
  808. metadata/ingestion/source/database/snowflake/connection.py +196 -162
  809. metadata/ingestion/source/database/snowflake/service_spec.py +2 -0
  810. metadata/ingestion/source/database/stored_procedures_mixin.py +9 -1
  811. metadata/ingestion/source/database/trino/connection.py +279 -125
  812. metadata/ingestion/source/database/trino/service_spec.py +2 -0
  813. metadata/ingestion/source/database/unitycatalog/connection.py +20 -3
  814. metadata/ingestion/source/database/unitycatalog/queries.py +37 -1
  815. metadata/ingestion/source/database/unitycatalog/query_parser.py +4 -0
  816. metadata/ingestion/source/database/unitycatalog/usage.py +21 -35
  817. metadata/ingestion/source/drive/drive_service.py +648 -0
  818. metadata/ingestion/source/drives/__init__.py +13 -0
  819. metadata/ingestion/source/pipeline/airflow/connection.py +8 -6
  820. metadata/ingestion/source/pipeline/airflow/metadata.py +33 -10
  821. metadata/ingestion/source/pipeline/fivetran/metadata.py +2 -2
  822. metadata/profiler/processor/processor.py +18 -3
  823. metadata/profiler/source/database/base/profiler_resolver.py +5 -2
  824. metadata/profiler/source/database/base/profiler_source.py +8 -1
  825. metadata/profiler/source/profiler_source_interface.py +11 -2
  826. metadata/sampler/pandas/sampler.py +1 -1
  827. metadata/sampler/processor.py +19 -3
  828. metadata/sampler/sampler_interface.py +7 -0
  829. metadata/utils/credentials.py +35 -0
  830. metadata/utils/db_utils.py +12 -5
  831. metadata/utils/filters.py +60 -0
  832. metadata/utils/fqn.py +79 -0
  833. metadata/utils/helpers.py +6 -1
  834. metadata/utils/logger.py +9 -0
  835. metadata/utils/metadata_service_helper.py +1 -1
  836. metadata/utils/secrets/kubernetes_secrets_manager.py +176 -0
  837. metadata/utils/secrets/secrets_manager_factory.py +3 -0
  838. metadata/workflow/ingestion.py +15 -2
  839. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/METADATA +543 -536
  840. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/RECORD +844 -790
  841. metadata/ingestion/source/database/extended_sample_data.py +0 -534
  842. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/LICENSE +0 -0
  843. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/WHEEL +0 -0
  844. {openmetadata_ingestion-1.8.10.0.dist-info → openmetadata_ingestion-1.9.1.0.dist-info}/entry_points.txt +0 -0
  845. {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
- logger.warning(f"Error trying to PATCH {get_log_name(source)}: {exc}")
164
-
165
- return None
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
- if isinstance(source, TestCase):
187
- instance: Optional[T] = self._fetch_entity_if_exists(
188
- entity=entity,
189
- entity_id=source.id,
190
- fields=["testDefinition", "testSuite"],
191
- )
192
- else:
193
- instance: Optional[T] = self._fetch_entity_if_exists(
194
- entity=entity, entity_id=source.id
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
- if not instance:
198
- return None
213
+ if not instance:
214
+ return None
199
215
 
200
- if instance.description and not force:
201
- # If the description is already present and force is not passed,
202
- # description will not be overridden
203
- return None
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
- # https://docs.pydantic.dev/latest/usage/exporting_models/#modelcopy
206
- destination = source.model_copy(deep=True)
207
- destination.description = Markdown(description)
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
- return self.patch(entity=entity, source=source, destination=destination)
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
- instance: Optional[T] = self._fetch_entity_if_exists(
291
- entity=entity, entity_id=source.id, fields=["tags"]
292
- )
293
- if not instance:
294
- return None
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
- # Initialize empty tag list or the last updated tags
297
- source.tags = instance.tags or []
298
- destination = source.model_copy(deep=True)
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
- tag_fqns = {label.tagFQN.root for label in tag_labels}
335
+ tag_fqns = {label.tagFQN.root for label in tag_labels}
301
336
 
302
- if operation == PatchOperation.REMOVE:
303
- for tag in destination.tags:
304
- if tag.tagFQN.root in tag_fqns:
305
- destination.tags.remove(tag)
306
- else:
307
- destination.tags.extend(tag_labels)
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
- return self.patch(entity=entity, source=source, destination=destination)
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, source=source, tag_labels=[tag_label], operation=operation
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(self, entity: Entity, domain: Domain) -> Optional[Entity]:
558
- """Patch domain data for an Entity"""
559
- try:
560
- destination: Entity = entity.model_copy(deep=True)
561
- destination.domain = EntityReference(id=domain.id, type="domain")
562
- return self.patch(
563
- entity=type(entity), source=entity, destination=destination
564
- )
565
- except Exception as exc:
566
- logger.debug(traceback.format_exc())
567
- logger.warning(
568
- f"Error trying to Patch Domain for {entity.fullyQualifiedName.root}: {exc}"
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
- if client.json() is not None and client.json().get("openapi") is not None:
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 JSON schema"
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.json()
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
@@ -73,7 +73,7 @@ def _get_connection_fn_from_service_spec(connection: BaseModel) -> Optional[Call
73
73
  if connection_class:
74
74
 
75
75
  def _get_client(conn):
76
- return connection_class(conn).get_client()
76
+ return connection_class(conn).client
77
77
 
78
78
  return _get_client
79
79
  return 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.