openmetadata-ingestion 1.3.0.0.dev0__py3-none-any.whl → 1.3.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 (631) hide show
  1. metadata/applications/auto_tagger.py +8 -3
  2. metadata/cli/db_dump.py +1 -0
  3. metadata/data_insight/processor/reports/cost_analysis_report_data_processor.py +39 -47
  4. metadata/data_insight/processor/reports/data_processor.py +1 -0
  5. metadata/data_insight/producer/cost_analysis_producer.py +78 -14
  6. metadata/data_insight/producer/entity_producer.py +1 -1
  7. metadata/data_insight/producer/producer_interface.py +1 -1
  8. metadata/data_insight/producer/web_analytics_producer.py +1 -1
  9. metadata/data_insight/source/metadata.py +10 -1
  10. metadata/data_quality/processor/test_case_runner.py +7 -5
  11. metadata/data_quality/source/test_suite.py +0 -1
  12. metadata/data_quality/validations/mixins/pandas_validator_mixin.py +4 -2
  13. metadata/data_quality/validations/table/base/tableColumnToMatchSet.py +2 -1
  14. metadata/data_quality/validations/table/pandas/tableColumnToMatchSet.py +2 -1
  15. metadata/data_quality/validations/table/sqlalchemy/tableColumnToMatchSet.py +7 -2
  16. metadata/examples/workflows/bigtable.yaml +32 -0
  17. metadata/generated/antlr/EntityLinkLexer.py +124 -58
  18. metadata/generated/schema/analytics/__init__.py +1 -1
  19. metadata/generated/schema/analytics/basic.py +1 -1
  20. metadata/generated/schema/analytics/reportData.py +1 -1
  21. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  22. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  23. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  24. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  25. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  26. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  27. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  28. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  29. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  30. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  31. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  32. metadata/generated/schema/api/__init__.py +1 -1
  33. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  34. metadata/generated/schema/api/analytics/__init__.py +1 -1
  35. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  36. metadata/generated/schema/api/automations/__init__.py +1 -1
  37. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  38. metadata/generated/schema/api/bulkAssets.py +1 -1
  39. metadata/generated/schema/api/classification/__init__.py +1 -1
  40. metadata/generated/schema/api/classification/createClassification.py +1 -1
  41. metadata/generated/schema/api/classification/createTag.py +1 -1
  42. metadata/generated/schema/api/classification/loadTags.py +1 -1
  43. metadata/generated/schema/api/createBot.py +1 -1
  44. metadata/generated/schema/api/createEventPublisherJob.py +2 -2
  45. metadata/generated/schema/api/createType.py +1 -1
  46. metadata/generated/schema/api/data/__init__.py +1 -1
  47. metadata/generated/schema/api/data/createChart.py +1 -1
  48. metadata/generated/schema/api/data/createContainer.py +1 -1
  49. metadata/generated/schema/api/data/createCustomProperty.py +6 -10
  50. metadata/generated/schema/api/data/createDashboard.py +1 -1
  51. metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
  52. metadata/generated/schema/api/data/createDatabase.py +1 -1
  53. metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
  54. metadata/generated/schema/api/data/createGlossary.py +1 -1
  55. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  56. metadata/generated/schema/api/data/createMlModel.py +1 -1
  57. metadata/generated/schema/api/data/createPipeline.py +1 -1
  58. metadata/generated/schema/api/data/createQuery.py +1 -1
  59. metadata/generated/schema/api/data/createSearchIndex.py +1 -1
  60. metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
  61. metadata/generated/schema/api/data/createTable.py +1 -1
  62. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  63. metadata/generated/schema/api/data/createTopic.py +1 -1
  64. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  65. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  66. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  67. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
  68. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  69. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
  70. metadata/generated/schema/api/docStore/__init__.py +1 -1
  71. metadata/generated/schema/api/docStore/createDocument.py +1 -1
  72. metadata/generated/schema/api/domains/__init__.py +1 -1
  73. metadata/generated/schema/api/domains/createDataProduct.py +1 -1
  74. metadata/generated/schema/api/domains/createDomain.py +1 -1
  75. metadata/generated/schema/api/feed/__init__.py +1 -1
  76. metadata/generated/schema/api/feed/closeTask.py +1 -1
  77. metadata/generated/schema/api/feed/createPost.py +1 -1
  78. metadata/generated/schema/api/feed/createSuggestion.py +30 -0
  79. metadata/generated/schema/api/feed/createThread.py +1 -1
  80. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  81. metadata/generated/schema/api/feed/threadCount.py +1 -1
  82. metadata/generated/schema/api/lineage/__init__.py +1 -1
  83. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  84. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  85. metadata/generated/schema/api/policies/__init__.py +1 -1
  86. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  87. metadata/generated/schema/api/services/__init__.py +1 -1
  88. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  89. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  90. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  91. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  92. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  93. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  94. metadata/generated/schema/api/services/createSearchService.py +1 -1
  95. metadata/generated/schema/api/services/createStorageService.py +1 -1
  96. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  97. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
  98. metadata/generated/schema/api/setOwner.py +1 -1
  99. metadata/generated/schema/api/teams/__init__.py +1 -1
  100. metadata/generated/schema/api/teams/createPersona.py +1 -1
  101. metadata/generated/schema/api/teams/createRole.py +1 -1
  102. metadata/generated/schema/api/teams/createTeam.py +1 -1
  103. metadata/generated/schema/api/teams/createUser.py +1 -1
  104. metadata/generated/schema/api/tests/__init__.py +1 -1
  105. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  106. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  107. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  108. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
  109. metadata/generated/schema/api/tests/createTestDefinition.py +2 -1
  110. metadata/generated/schema/api/tests/createTestSuite.py +1 -1
  111. metadata/generated/schema/api/voteRequest.py +1 -1
  112. metadata/generated/schema/auth/__init__.py +1 -1
  113. metadata/generated/schema/auth/basicAuth.py +1 -1
  114. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  115. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  116. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  117. metadata/generated/schema/auth/emailRequest.py +1 -1
  118. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  119. metadata/generated/schema/auth/generateToken.py +1 -1
  120. metadata/generated/schema/auth/jwtAuth.py +1 -1
  121. metadata/generated/schema/auth/loginRequest.py +1 -1
  122. metadata/generated/schema/auth/logoutRequest.py +1 -1
  123. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  124. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  125. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  126. metadata/generated/schema/auth/refreshToken.py +1 -1
  127. metadata/generated/schema/auth/registrationRequest.py +1 -1
  128. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  129. metadata/generated/schema/auth/revokeToken.py +1 -1
  130. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  131. metadata/generated/schema/auth/ssoAuth.py +1 -1
  132. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  133. metadata/generated/schema/configuration/__init__.py +1 -1
  134. metadata/generated/schema/configuration/appsPrivateConfiguration.py +28 -0
  135. metadata/generated/schema/configuration/authConfig.py +1 -1
  136. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  137. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  138. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  139. metadata/generated/schema/configuration/dataQualityConfiguration.py +16 -0
  140. metadata/generated/schema/configuration/elasticSearchConfiguration.py +4 -1
  141. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  142. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  143. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  144. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  145. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  146. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  147. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  148. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  149. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  150. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  151. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  152. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  153. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  154. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  155. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  156. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  157. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  158. metadata/generated/schema/dataInsight/__init__.py +1 -1
  159. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  160. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  161. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  162. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  163. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  164. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  165. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  166. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  167. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  168. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  169. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  170. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  171. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  172. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  173. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
  174. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
  175. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
  176. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
  177. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
  178. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
  179. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  180. metadata/generated/schema/email/__init__.py +1 -1
  181. metadata/generated/schema/email/emailRequest.py +1 -1
  182. metadata/generated/schema/email/smtpSettings.py +1 -1
  183. metadata/generated/schema/entity/__init__.py +1 -1
  184. metadata/generated/schema/entity/applications/__init__.py +1 -1
  185. metadata/generated/schema/entity/applications/app.py +4 -1
  186. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  187. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  188. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +6 -1
  189. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  190. metadata/generated/schema/entity/applications/configuration/external/autoTaggerAppConfig.py +1 -1
  191. metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +1 -16
  192. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  193. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +1 -1
  194. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
  195. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +2 -2
  196. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +3 -0
  197. metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +26 -0
  198. metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
  199. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  200. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  201. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  202. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
  203. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
  204. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  205. metadata/generated/schema/entity/automations/__init__.py +1 -1
  206. metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
  207. metadata/generated/schema/entity/automations/workflow.py +1 -1
  208. metadata/generated/schema/entity/bot.py +1 -1
  209. metadata/generated/schema/entity/classification/__init__.py +1 -1
  210. metadata/generated/schema/entity/classification/classification.py +1 -1
  211. metadata/generated/schema/entity/classification/tag.py +1 -1
  212. metadata/generated/schema/entity/data/__init__.py +1 -1
  213. metadata/generated/schema/entity/data/chart.py +1 -1
  214. metadata/generated/schema/entity/data/container.py +1 -1
  215. metadata/generated/schema/entity/data/dashboard.py +1 -1
  216. metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
  217. metadata/generated/schema/entity/data/database.py +1 -1
  218. metadata/generated/schema/entity/data/databaseSchema.py +1 -1
  219. metadata/generated/schema/entity/data/glossary.py +1 -1
  220. metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
  221. metadata/generated/schema/entity/data/metrics.py +1 -1
  222. metadata/generated/schema/entity/data/mlmodel.py +2 -2
  223. metadata/generated/schema/entity/data/pipeline.py +1 -1
  224. metadata/generated/schema/entity/data/query.py +1 -1
  225. metadata/generated/schema/entity/data/report.py +1 -1
  226. metadata/generated/schema/entity/data/searchIndex.py +1 -1
  227. metadata/generated/schema/entity/data/storedProcedure.py +1 -1
  228. metadata/generated/schema/entity/data/table.py +2 -1
  229. metadata/generated/schema/entity/data/topic.py +1 -1
  230. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  231. metadata/generated/schema/entity/docStore/document.py +1 -1
  232. metadata/generated/schema/entity/domains/__init__.py +1 -1
  233. metadata/generated/schema/entity/domains/dataProduct.py +1 -1
  234. metadata/generated/schema/entity/domains/domain.py +1 -1
  235. metadata/generated/schema/entity/events/__init__.py +1 -1
  236. metadata/generated/schema/entity/events/webhook.py +4 -6
  237. metadata/generated/schema/entity/feed/__init__.py +1 -1
  238. metadata/generated/schema/entity/feed/suggestion.py +61 -0
  239. metadata/generated/schema/entity/feed/thread.py +1 -1
  240. metadata/generated/schema/entity/policies/__init__.py +1 -1
  241. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  242. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  243. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  244. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  245. metadata/generated/schema/entity/policies/filters.py +1 -1
  246. metadata/generated/schema/entity/policies/policy.py +1 -1
  247. metadata/generated/schema/entity/services/__init__.py +1 -1
  248. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  249. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  250. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  251. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  252. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  253. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  254. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  255. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  256. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  257. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  258. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  259. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  260. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  261. metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +1 -1
  262. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  263. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  264. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  265. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  266. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  267. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  268. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  269. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  270. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  271. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
  272. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +41 -0
  273. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  274. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  275. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  276. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  277. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  278. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  279. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  280. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  281. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  282. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  283. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  284. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  285. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  286. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  287. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  288. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  289. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
  290. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  291. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  292. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  293. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
  294. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
  295. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  296. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
  297. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
  298. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
  299. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
  300. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
  301. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
  302. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
  303. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  304. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  305. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  306. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
  307. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  308. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  309. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +8 -6
  310. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  311. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  312. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  313. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  314. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  315. metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
  316. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  317. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
  318. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  319. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  320. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
  321. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  322. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  323. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  324. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +14 -2
  325. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  326. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  327. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +14 -2
  328. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  329. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  330. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  331. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  332. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  333. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +2 -2
  334. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  335. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  336. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  337. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  338. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  339. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  340. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  341. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  342. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  343. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  344. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  345. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  346. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  347. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  348. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  349. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  350. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  351. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
  352. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  353. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  354. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  355. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  356. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  357. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  358. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  359. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  360. metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
  361. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  362. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
  363. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  364. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  365. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  366. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
  367. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  368. metadata/generated/schema/entity/services/dashboardService.py +1 -1
  369. metadata/generated/schema/entity/services/databaseService.py +4 -4
  370. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  371. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
  372. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  373. metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
  374. metadata/generated/schema/entity/services/messagingService.py +1 -1
  375. metadata/generated/schema/entity/services/metadataService.py +1 -1
  376. metadata/generated/schema/entity/services/mlmodelService.py +1 -1
  377. metadata/generated/schema/entity/services/pipelineService.py +1 -1
  378. metadata/generated/schema/entity/services/searchService.py +1 -1
  379. metadata/generated/schema/entity/services/serviceType.py +1 -1
  380. metadata/generated/schema/entity/services/storageService.py +1 -1
  381. metadata/generated/schema/entity/teams/__init__.py +1 -1
  382. metadata/generated/schema/entity/teams/persona.py +1 -1
  383. metadata/generated/schema/entity/teams/role.py +1 -1
  384. metadata/generated/schema/entity/teams/team.py +1 -1
  385. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  386. metadata/generated/schema/entity/teams/user.py +1 -1
  387. metadata/generated/schema/entity/type.py +3 -18
  388. metadata/generated/schema/entity/utils/__init__.py +1 -1
  389. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  390. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  391. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  392. metadata/generated/schema/events/__init__.py +1 -1
  393. metadata/generated/schema/events/alertMetrics.py +1 -1
  394. metadata/generated/schema/events/api/__init__.py +1 -1
  395. metadata/generated/schema/events/api/createEventSubscription.py +1 -1
  396. metadata/generated/schema/events/emailAlertConfig.py +1 -6
  397. metadata/generated/schema/events/eventFilterRule.py +1 -1
  398. metadata/generated/schema/events/eventSubscription.py +5 -10
  399. metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
  400. metadata/generated/schema/events/failedEvent.py +1 -1
  401. metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
  402. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  403. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  404. metadata/generated/schema/metadataIngestion/application.py +4 -1
  405. metadata/generated/schema/metadataIngestion/applicationPipeline.py +4 -1
  406. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  407. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  408. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
  409. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
  410. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  411. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  412. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  413. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  414. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +6 -3
  415. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  416. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  417. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +6 -3
  418. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  419. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  420. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +6 -3
  421. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  422. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  423. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  424. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  425. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  426. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  427. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  428. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  429. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  430. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  431. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
  432. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  433. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  434. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  435. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  436. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  437. metadata/generated/schema/metadataIngestion/workflow.py +1 -1
  438. metadata/generated/schema/monitoring/__init__.py +1 -1
  439. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  440. metadata/generated/schema/security/__init__.py +1 -1
  441. metadata/generated/schema/security/client/__init__.py +1 -1
  442. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  443. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  444. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  445. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  446. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  447. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  448. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  449. metadata/generated/schema/security/credentials/__init__.py +1 -1
  450. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  451. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  452. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  453. metadata/generated/schema/security/credentials/azureCredentials.py +16 -9
  454. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  455. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  456. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  457. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  458. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  459. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  460. metadata/generated/schema/security/secrets/__init__.py +1 -1
  461. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  462. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  463. metadata/generated/schema/security/secrets/secretsManagerProvider.py +3 -1
  464. metadata/generated/schema/security/securityConfiguration.py +1 -1
  465. metadata/generated/schema/security/ssl/__init__.py +1 -1
  466. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  467. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  468. metadata/generated/schema/settings/__init__.py +1 -1
  469. metadata/generated/schema/settings/settings.py +1 -1
  470. metadata/generated/schema/system/__init__.py +1 -1
  471. metadata/generated/schema/system/entityError.py +1 -1
  472. metadata/generated/schema/system/eventPublisherJob.py +1 -1
  473. metadata/generated/schema/system/indexingError.py +1 -1
  474. metadata/generated/schema/system/ui/__init__.py +1 -1
  475. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  476. metadata/generated/schema/system/ui/page.py +1 -1
  477. metadata/generated/schema/tests/__init__.py +1 -1
  478. metadata/generated/schema/tests/assigned.py +1 -1
  479. metadata/generated/schema/tests/basic.py +1 -1
  480. metadata/generated/schema/tests/customMetric.py +1 -1
  481. metadata/generated/schema/tests/resolved.py +1 -1
  482. metadata/generated/schema/tests/testCase.py +1 -1
  483. metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
  484. metadata/generated/schema/tests/testDefinition.py +2 -1
  485. metadata/generated/schema/tests/testSuite.py +1 -1
  486. metadata/generated/schema/type/__init__.py +1 -1
  487. metadata/generated/schema/type/auditLog.py +1 -1
  488. metadata/generated/schema/type/basic.py +6 -2
  489. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  490. metadata/generated/schema/type/changeEvent.py +1 -1
  491. metadata/generated/schema/type/changeEventType.py +6 -1
  492. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  493. metadata/generated/schema/type/csvDocumentation.py +1 -1
  494. metadata/generated/schema/type/csvErrorType.py +1 -1
  495. metadata/generated/schema/type/csvFile.py +1 -1
  496. metadata/generated/schema/type/csvImportResult.py +1 -1
  497. metadata/generated/schema/type/customProperties/__init__.py +3 -0
  498. metadata/generated/schema/type/customProperties/enumConfig.py +17 -0
  499. metadata/generated/schema/type/customProperty.py +52 -0
  500. metadata/generated/schema/type/dailyCount.py +1 -1
  501. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  502. metadata/generated/schema/type/entityHistory.py +1 -1
  503. metadata/generated/schema/type/entityLineage.py +1 -1
  504. metadata/generated/schema/type/entityReference.py +1 -1
  505. metadata/generated/schema/type/entityReferenceList.py +1 -1
  506. metadata/generated/schema/type/entityRelationship.py +1 -1
  507. metadata/generated/schema/type/entityUsage.py +1 -1
  508. metadata/generated/schema/type/filterPattern.py +1 -1
  509. metadata/generated/schema/type/function.py +1 -1
  510. metadata/generated/schema/type/include.py +1 -1
  511. metadata/generated/schema/type/jdbcConnection.py +1 -1
  512. metadata/generated/schema/type/lifeCycle.py +1 -1
  513. metadata/generated/schema/type/paging.py +1 -1
  514. metadata/generated/schema/type/profile.py +1 -1
  515. metadata/generated/schema/type/queryParserData.py +1 -1
  516. metadata/generated/schema/type/reaction.py +1 -1
  517. metadata/generated/schema/type/schedule.py +1 -1
  518. metadata/generated/schema/type/schema.py +1 -1
  519. metadata/generated/schema/type/tableQuery.py +1 -1
  520. metadata/generated/schema/type/tableUsageCount.py +1 -1
  521. metadata/generated/schema/type/tagLabel.py +1 -1
  522. metadata/generated/schema/type/usageDetails.py +1 -1
  523. metadata/generated/schema/type/usageRequest.py +1 -1
  524. metadata/generated/schema/type/votes.py +1 -1
  525. metadata/great_expectations/action.py +7 -17
  526. metadata/ingestion/api/status.py +4 -0
  527. metadata/ingestion/api/steps.py +14 -1
  528. metadata/ingestion/api/topology_runner.py +4 -1
  529. metadata/ingestion/lineage/parser.py +4 -5
  530. metadata/ingestion/models/custom_properties.py +0 -1
  531. metadata/ingestion/models/patch_request.py +3 -2
  532. metadata/ingestion/ometa/client.py +6 -0
  533. metadata/ingestion/ometa/mixins/custom_property_mixin.py +11 -11
  534. metadata/ingestion/ometa/mixins/patch_mixin.py +0 -1
  535. metadata/ingestion/ometa/mixins/suggestions_mixin.py +41 -0
  536. metadata/ingestion/ometa/ometa_api.py +16 -8
  537. metadata/ingestion/ometa/routes.py +7 -0
  538. metadata/ingestion/sink/metadata_rest.py +2 -2
  539. metadata/ingestion/source/dashboard/dashboard_service.py +0 -1
  540. metadata/ingestion/source/dashboard/looker/metadata.py +3 -6
  541. metadata/ingestion/source/dashboard/metabase/client.py +4 -0
  542. metadata/ingestion/source/dashboard/metabase/metadata.py +5 -4
  543. metadata/ingestion/source/dashboard/metabase/models.py +2 -2
  544. metadata/ingestion/source/dashboard/superset/api_source.py +0 -1
  545. metadata/ingestion/source/dashboard/superset/db_source.py +1 -3
  546. metadata/ingestion/source/dashboard/superset/queries.py +1 -1
  547. metadata/ingestion/source/dashboard/tableau/metadata.py +19 -1
  548. metadata/ingestion/source/database/athena/client.py +2 -4
  549. metadata/ingestion/source/database/azuresql/metadata.py +0 -1
  550. metadata/ingestion/source/database/bigquery/helper.py +68 -1
  551. metadata/ingestion/source/database/bigquery/metadata.py +12 -3
  552. metadata/ingestion/source/database/bigquery/queries.py +22 -0
  553. metadata/ingestion/source/database/bigtable/client.py +62 -0
  554. metadata/ingestion/source/database/bigtable/connection.py +116 -0
  555. metadata/ingestion/source/database/bigtable/metadata.py +224 -0
  556. metadata/ingestion/source/database/bigtable/models.py +60 -0
  557. metadata/ingestion/source/database/common_db_source.py +2 -2
  558. metadata/ingestion/source/database/common_nosql_source.py +22 -4
  559. metadata/ingestion/source/database/databricks/client.py +0 -1
  560. metadata/ingestion/source/database/databricks/metadata.py +132 -46
  561. metadata/ingestion/source/database/databricks/queries.py +3 -4
  562. metadata/ingestion/source/database/datalake/metadata.py +9 -4
  563. metadata/ingestion/source/database/dbt/dbt_config.py +5 -0
  564. metadata/ingestion/source/database/dbt/dbt_service.py +3 -11
  565. metadata/ingestion/source/database/dbt/dbt_utils.py +3 -1
  566. metadata/ingestion/source/database/dbt/metadata.py +16 -29
  567. metadata/ingestion/source/database/extended_sample_data.py +202 -134
  568. metadata/ingestion/source/database/hive/connection.py +0 -2
  569. metadata/ingestion/source/database/mssql/metadata.py +0 -1
  570. metadata/ingestion/source/database/mssql/queries.py +1 -2
  571. metadata/ingestion/source/database/oracle/queries.py +2 -2
  572. metadata/ingestion/source/database/oracle/utils.py +0 -1
  573. metadata/ingestion/source/database/postgres/pgspider/lineage.py +0 -1
  574. metadata/ingestion/source/database/sample_data.py +0 -1
  575. metadata/ingestion/source/database/sas/metadata.py +2 -3
  576. metadata/ingestion/source/database/snowflake/utils.py +2 -6
  577. metadata/ingestion/source/database/stored_procedures_mixin.py +0 -1
  578. metadata/ingestion/source/database/unitycatalog/metadata.py +16 -31
  579. metadata/ingestion/source/messaging/common_broker_source.py +9 -8
  580. metadata/ingestion/source/messaging/kafka/connection.py +45 -4
  581. metadata/ingestion/source/mlmodel/sagemaker/metadata.py +20 -8
  582. metadata/ingestion/source/pipeline/spline/metadata.py +0 -1
  583. metadata/ingestion/source/search/elasticsearch/metadata.py +0 -1
  584. metadata/ingestion/source/storage/storage_service.py +8 -8
  585. metadata/profiler/interface/pandas/profiler_interface.py +7 -2
  586. metadata/profiler/interface/profiler_interface_factory.py +7 -0
  587. metadata/profiler/interface/sqlalchemy/db2/profiler_interface.py +38 -0
  588. metadata/profiler/interface/sqlalchemy/profiler_interface.py +3 -5
  589. metadata/profiler/metrics/hybrid/histogram.py +1 -0
  590. metadata/profiler/orm/functions/conn_test.py +1 -0
  591. metadata/profiler/orm/functions/sum.py +1 -0
  592. metadata/profiler/orm/functions/table_metric_computer.py +0 -1
  593. metadata/profiler/orm/registry.py +1 -0
  594. metadata/profiler/processor/core.py +2 -2
  595. metadata/profiler/processor/processor.py +0 -2
  596. metadata/profiler/processor/sample_data_handler.py +6 -2
  597. metadata/profiler/source/base/profiler_source.py +0 -1
  598. metadata/profiler/source/bigquery/type_mapper.py +0 -1
  599. metadata/readers/file/api_reader.py +0 -1
  600. metadata/utils/datalake/datalake_utils.py +369 -129
  601. metadata/utils/entity_link.py +26 -6
  602. metadata/utils/execution_time_tracker.py +199 -0
  603. metadata/utils/filters.py +4 -0
  604. metadata/utils/helpers.py +30 -38
  605. metadata/utils/secrets/aws_based_secrets_manager.py +67 -4
  606. metadata/utils/secrets/aws_secrets_manager.py +7 -2
  607. metadata/utils/secrets/aws_ssm_secrets_manager.py +7 -2
  608. metadata/utils/secrets/azure_kv_secrets_manager.py +148 -0
  609. metadata/utils/secrets/external_secrets_manager.py +25 -3
  610. metadata/utils/secrets/secrets_manager_factory.py +13 -31
  611. metadata/workflow/application.py +10 -10
  612. metadata/workflow/base.py +4 -1
  613. metadata/workflow/metadata.py +0 -1
  614. metadata/workflow/output_handler.py +22 -0
  615. metadata/workflow/usage.py +0 -1
  616. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/METADATA +298 -289
  617. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/RECORD +624 -612
  618. metadata/generated/schema/entity/services/connections/database/duckdbConnection.py +0 -96
  619. metadata/generated/schema/events/userAlertConfig.py +0 -25
  620. metadata/ingestion/source/database/duckdb/connection.py +0 -76
  621. metadata/ingestion/source/database/duckdb/metadata.py +0 -204
  622. metadata/ingestion/source/database/duckdb/queries.py +0 -141
  623. metadata/ingestion/source/database/duckdb/utils.py +0 -349
  624. metadata/utils/secrets/client/loader.py +0 -78
  625. /metadata/ingestion/source/database/{duckdb → bigtable}/__init__.py +0 -0
  626. /metadata/{utils/secrets/client → profiler/interface/sqlalchemy/db2}/__init__.py +0 -0
  627. /metadata/utils/secrets/{noop_secrets_manager.py → db_secrets_manager.py} +0 -0
  628. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/LICENSE +0 -0
  629. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/WHEEL +0 -0
  630. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/entry_points.txt +0 -0
  631. {openmetadata_ingestion-1.3.0.0.dev0.dist-info → openmetadata_ingestion-1.3.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,199 @@
1
+ # Copyright 2021 Collate
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ """
13
+ ExecutionTimeTracker implementation to help track the execution time of different parts
14
+ of the code.
15
+ """
16
+ from functools import wraps
17
+ from time import perf_counter
18
+ from typing import Dict, List, Optional
19
+
20
+ from pydantic import BaseModel
21
+
22
+ from metadata.utils.helpers import pretty_print_time_duration
23
+ from metadata.utils.logger import utils_logger
24
+ from metadata.utils.singleton import Singleton
25
+
26
+ logger = utils_logger()
27
+
28
+
29
+ class ExecutionTimeTrackerContext(BaseModel):
30
+ """Small Model to hold the ExecutionTimeTracker context."""
31
+
32
+ name: str
33
+ start: float
34
+ stored: bool
35
+
36
+
37
+ class ExecutionTimeTracker(metaclass=Singleton):
38
+ """ExecutionTimeTracker is implemented as a Singleton in order to hold state globally.
39
+
40
+ It works as a Context Manager in order to track and log execution times.
41
+
42
+ Example:
43
+
44
+ def my_function():
45
+ tracker = ExecutionTimeTracker()
46
+
47
+ with tracker(context="MyFunction", store=True):
48
+ other_opeartion()
49
+
50
+ """
51
+
52
+ def __init__(self, enabled: bool = False):
53
+ """When instantiated we can pass if we want it enabled or disabled in order to
54
+ avoid overhead when not needed.
55
+
56
+ Attrs
57
+ ------
58
+ enabled: Defines if it will be enabled or not.
59
+ context: Keeps track of the context levels and their state.
60
+ state: Keeps track of the global state for the Execution Time Tracker.
61
+ """
62
+ self.enabled: bool = enabled
63
+ self.context: List[ExecutionTimeTrackerContext] = []
64
+ self.state: Dict[str, float] = {}
65
+ self.new_context = None
66
+ self.store = True
67
+
68
+ @property
69
+ def last_stored_context_level(self) -> Optional[str]:
70
+ """Returns the last stored context level.
71
+
72
+ In order to provide better logs and keep track where in the code the time is being
73
+ measured we keep track of nested contexts.
74
+
75
+ If a given context is not stored it will only log to debug but won't be part of the
76
+ global state.
77
+ """
78
+ stored_context = [context for context in self.context if context.stored]
79
+
80
+ if stored_context:
81
+ return stored_context[-1].name
82
+
83
+ return None
84
+
85
+ def __call__(self, context: str, store: bool = True):
86
+ """At every point we open a new Context Manager we can pass the current 'context' and
87
+ if we want to 'store' it.
88
+
89
+ Sets the temporary attributes used within the context:
90
+
91
+ new_context: Full Context name, appending the given context to the last stored context level.
92
+ store: If True, it will take part of the global state. Otherwise it will only log to debug.
93
+ """
94
+ self.new_context = ".".join(
95
+ [part for part in [self.last_stored_context_level, context] if part]
96
+ )
97
+ self.store = store
98
+
99
+ return self
100
+
101
+ def __enter__(self):
102
+ """If enabled, when entering the context, we append a new
103
+ ExecutionTimeTrackerContext to the list.
104
+ """
105
+ if self.enabled:
106
+ self.context.append(
107
+ ExecutionTimeTrackerContext(
108
+ name=self.new_context, start=perf_counter(), stored=self.store
109
+ )
110
+ )
111
+
112
+ def __exit__(self, exc_type, exc_val, exc_tb):
113
+ """If enabled, when exiting the context, we calculate the elapsed time and log to debug.
114
+ If the context.stored is True, we also save it to the global state."""
115
+ if self.enabled:
116
+ stop = perf_counter()
117
+ context = self.context.pop(-1)
118
+
119
+ if not context:
120
+ return
121
+
122
+ elapsed = stop - context.start
123
+
124
+ logger.debug(
125
+ "%s executed in %s", context.name, pretty_print_time_duration(elapsed)
126
+ )
127
+
128
+ if context.stored:
129
+ self._save(context, elapsed)
130
+
131
+ def _save(self, context: ExecutionTimeTrackerContext, elapsed: float):
132
+ """Small utility to save the new measure to the global accumulator."""
133
+ self.state[context.name] = self.state.get(context.name, 0) + elapsed
134
+
135
+
136
+ def calculate_execution_time(context: Optional[str] = None, store: bool = True):
137
+ """Utility decorator to be able to use the ExecutionTimeTracker on a function.
138
+
139
+ It receives the context and if it should store it.
140
+
141
+ Example:
142
+
143
+ @calculate_execution_time(context="MyContext")
144
+ def my_function():
145
+ ...
146
+ """
147
+
148
+ def decorator(func):
149
+ @wraps(func)
150
+ def inner(*args, **kwargs):
151
+ execution_time = ExecutionTimeTracker()
152
+
153
+ with execution_time(context or func.__name__, store):
154
+ result = func(*args, **kwargs)
155
+
156
+ return result
157
+
158
+ return inner
159
+
160
+ return decorator
161
+
162
+
163
+ def calculate_execution_time_generator(
164
+ context: Optional[str] = None, store: bool = True
165
+ ):
166
+ """Utility decorator to be able to use the ExecutionTimeTracker on a generator function.
167
+
168
+ It receives the context and if it should store it.
169
+
170
+ Example:
171
+
172
+ @calculate_execution_time_generator(context="MyContext")
173
+ def my_generator():
174
+ ...
175
+ """
176
+
177
+ def decorator(func):
178
+ @wraps(func)
179
+ def inner(*args, **kwargs):
180
+ # NOTE: We are basically implementing by hand a simplified version of 'yield from'
181
+ # in order to be able to calculate the time difference correctly.
182
+ # The 'while True' loop allows us to guarantee we are iterating over all thje values
183
+ # from func(*args, **kwargs).
184
+ execution_time = ExecutionTimeTracker()
185
+
186
+ generator = func(*args, **kwargs)
187
+
188
+ while True:
189
+ with execution_time(context or func.__name__, store):
190
+ try:
191
+ element = next(generator)
192
+ except StopIteration:
193
+ return
194
+
195
+ yield element
196
+
197
+ return inner
198
+
199
+ return decorator
metadata/utils/filters.py CHANGED
@@ -54,6 +54,10 @@ def _filter(filter_pattern: Optional[FilterPattern], name: str) -> bool:
54
54
  # No filter pattern, nothing to filter
55
55
  return False
56
56
 
57
+ if filter_pattern and not name:
58
+ # Filter pattern is present but not the name so we'll filter it out
59
+ return True
60
+
57
61
  if filter_pattern.includes:
58
62
  validate_regex(filter_pattern.includes)
59
63
  return not any( # pylint: disable=use-a-generator
metadata/utils/helpers.py CHANGED
@@ -20,10 +20,8 @@ import re
20
20
  import shutil
21
21
  import sys
22
22
  from datetime import datetime, timedelta
23
- from functools import wraps
24
23
  from math import floor, log
25
24
  from pathlib import Path
26
- from time import perf_counter
27
25
  from typing import Any, Dict, Iterable, List, Optional, Tuple, Union
28
26
 
29
27
  import sqlparse
@@ -31,7 +29,9 @@ from sqlparse.sql import Statement
31
29
 
32
30
  from metadata.generated.schema.entity.data.chart import ChartType
33
31
  from metadata.generated.schema.entity.data.table import Column, Table
32
+ from metadata.generated.schema.entity.feed.suggestion import Suggestion, SuggestionType
34
33
  from metadata.generated.schema.entity.services.databaseService import DatabaseService
34
+ from metadata.generated.schema.type.basic import EntityLink
35
35
  from metadata.generated.schema.type.tagLabel import TagLabel
36
36
  from metadata.utils.constants import DEFAULT_DATABASE
37
37
  from metadata.utils.logger import utils_logger
@@ -99,40 +99,6 @@ om_chart_type_dict = {
99
99
  }
100
100
 
101
101
 
102
- def calculate_execution_time(func):
103
- """
104
- Method to calculate workflow execution time
105
- """
106
-
107
- @wraps(func)
108
- def calculate_debug_time(*args, **kwargs):
109
- start = perf_counter()
110
- result = func(*args, **kwargs)
111
- end = perf_counter()
112
- logger.debug(
113
- f"{func.__name__} executed in { pretty_print_time_duration(end - start)}"
114
- )
115
- return result
116
-
117
- return calculate_debug_time
118
-
119
-
120
- def calculate_execution_time_generator(func):
121
- """
122
- Generator method to calculate workflow execution time
123
- """
124
-
125
- def calculate_debug_time(*args, **kwargs):
126
- start = perf_counter()
127
- yield from func(*args, **kwargs)
128
- end = perf_counter()
129
- logger.debug(
130
- f"{func.__name__} executed in { pretty_print_time_duration(end - start)}"
131
- )
132
-
133
- return calculate_debug_time
134
-
135
-
136
102
  def pretty_print_time_duration(duration: Union[int, float]) -> str:
137
103
  """
138
104
  Method to format and display the time
@@ -227,12 +193,38 @@ def find_in_iter(element: Any, container: Iterable[Any]) -> Optional[Any]:
227
193
  return next((elem for elem in container if elem == element), None)
228
194
 
229
195
 
230
- def find_column_in_table(column_name: str, table: Table) -> Optional[Column]:
196
+ def find_column_in_table(
197
+ column_name: str, table: Table, case_sensitive: bool = True
198
+ ) -> Optional[Column]:
231
199
  """
232
200
  If the column exists in the table, return it
233
201
  """
202
+
203
+ def equals(first: str, second: str) -> bool:
204
+ if case_sensitive:
205
+ return first == second
206
+ return first.lower() == second.lower()
207
+
234
208
  return next(
235
- (col for col in table.columns if col.name.__root__ == column_name), None
209
+ (col for col in table.columns if equals(col.name.__root__, column_name)), None
210
+ )
211
+
212
+
213
+ def find_suggestion(
214
+ suggestions: List[Suggestion],
215
+ suggestion_type: SuggestionType,
216
+ entity_link: EntityLink,
217
+ ) -> Optional[Suggestion]:
218
+ """Given a list of suggestions, a suggestion type and an entity link, find
219
+ one suggestion in the list that matches the criteria
220
+ """
221
+ return next(
222
+ (
223
+ sugg
224
+ for sugg in suggestions
225
+ if sugg.type == suggestion_type and sugg.entityLink == entity_link
226
+ ),
227
+ None,
236
228
  )
237
229
 
238
230
 
@@ -12,20 +12,75 @@
12
12
  """
13
13
  Abstract class for AWS based secrets manager implementations
14
14
  """
15
+ import os
15
16
  from abc import ABC, abstractmethod
16
17
  from typing import Optional
17
18
 
18
19
  from metadata.clients.aws_client import AWSClient
20
+ from metadata.generated.schema.security.secrets.secretsManagerClientLoader import (
21
+ SecretsManagerClientLoader,
22
+ )
19
23
  from metadata.generated.schema.security.secrets.secretsManagerProvider import (
20
24
  SecretsManagerProvider,
21
25
  )
26
+ from metadata.ingestion.models.custom_pydantic import CustomSecretStr
27
+ from metadata.utils.dispatch import enum_register
22
28
  from metadata.utils.logger import utils_logger
23
- from metadata.utils.secrets.external_secrets_manager import ExternalSecretsManager
29
+ from metadata.utils.secrets.external_secrets_manager import (
30
+ SECRET_MANAGER_AIRFLOW_CONF,
31
+ ExternalSecretsManager,
32
+ SecretsManagerConfigException,
33
+ )
24
34
 
25
35
  logger = utils_logger()
26
36
 
27
37
  NULL_VALUE = "null"
28
38
 
39
+ secrets_manager_client_loader = enum_register()
40
+
41
+
42
+ # pylint: disable=import-outside-toplevel
43
+ @secrets_manager_client_loader.add(SecretsManagerClientLoader.noop.value)
44
+ def _() -> None:
45
+ return None
46
+
47
+
48
+ @secrets_manager_client_loader.add(SecretsManagerClientLoader.airflow.value)
49
+ def _() -> Optional["AWSCredentials"]:
50
+ from airflow.configuration import conf
51
+
52
+ from metadata.generated.schema.security.credentials.awsCredentials import (
53
+ AWSCredentials,
54
+ )
55
+
56
+ aws_region = conf.get(SECRET_MANAGER_AIRFLOW_CONF, "aws_region", fallback=None)
57
+ if aws_region:
58
+ credentials = AWSCredentials(awsRegion=aws_region)
59
+ credentials.awsAccessKeyId = conf.get(
60
+ SECRET_MANAGER_AIRFLOW_CONF, "aws_access_key_id", fallback=""
61
+ )
62
+ credentials.awsSecretAccessKey = CustomSecretStr(
63
+ conf.get(SECRET_MANAGER_AIRFLOW_CONF, "aws_secret_access_key", fallback="")
64
+ )
65
+ return credentials
66
+
67
+ return None
68
+
69
+
70
+ @secrets_manager_client_loader.add(SecretsManagerClientLoader.env.value)
71
+ def _() -> Optional["AWSCredentials"]:
72
+ from metadata.generated.schema.security.credentials.awsCredentials import (
73
+ AWSCredentials,
74
+ )
75
+
76
+ # Loading the env vars required by boto3
77
+ # https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html
78
+ aws_region = os.getenv("AWS_DEFAULT_REGION")
79
+ if aws_region:
80
+ return AWSCredentials(awsRegion=aws_region)
81
+
82
+ return None
83
+
29
84
 
30
85
  class AWSBasedSecretsManager(ExternalSecretsManager, ABC):
31
86
  """
@@ -34,12 +89,12 @@ class AWSBasedSecretsManager(ExternalSecretsManager, ABC):
34
89
 
35
90
  def __init__(
36
91
  self,
37
- credentials: Optional["AWSCredentials"],
38
92
  client: str,
39
93
  provider: SecretsManagerProvider,
94
+ loader: SecretsManagerClientLoader,
40
95
  ):
41
- super().__init__(provider)
42
- self.client = AWSClient(credentials).get_client(client)
96
+ super().__init__(provider=provider, loader=loader)
97
+ self.client = AWSClient(self.credentials).get_client(client)
43
98
 
44
99
  @abstractmethod
45
100
  def get_string_value(self, secret_id: str) -> str:
@@ -47,3 +102,11 @@ class AWSBasedSecretsManager(ExternalSecretsManager, ABC):
47
102
  :param secret_id: The secret id to retrieve
48
103
  :return: The value of the secret
49
104
  """
105
+
106
+ def load_credentials(self) -> Optional["AWSCredentials"]:
107
+ """Load the provider credentials based on the loader type"""
108
+ try:
109
+ loader_fn = secrets_manager_client_loader.registry.get(self.loader.value)
110
+ return loader_fn()
111
+ except Exception as err:
112
+ raise SecretsManagerConfigException(f"Error loading credentials - [{err}]")
@@ -17,6 +17,9 @@ from typing import Optional
17
17
 
18
18
  from botocore.exceptions import ClientError
19
19
 
20
+ from metadata.generated.schema.security.secrets.secretsManagerClientLoader import (
21
+ SecretsManagerClientLoader,
22
+ )
20
23
  from metadata.generated.schema.security.secrets.secretsManagerProvider import (
21
24
  SecretsManagerProvider,
22
25
  )
@@ -32,8 +35,10 @@ class AWSSecretsManager(AWSBasedSecretsManager):
32
35
  Secrets Manager Implementation Class
33
36
  """
34
37
 
35
- def __init__(self, credentials: Optional["AWSCredentials"]):
36
- super().__init__(credentials, "secretsmanager", SecretsManagerProvider.aws)
38
+ def __init__(self, loader: SecretsManagerClientLoader):
39
+ super().__init__(
40
+ client="secretsmanager", provider=SecretsManagerProvider.aws, loader=loader
41
+ )
37
42
 
38
43
  def get_string_value(self, secret_id: str) -> Optional[str]:
39
44
  """
@@ -17,6 +17,9 @@ from typing import Optional
17
17
 
18
18
  from botocore.exceptions import ClientError
19
19
 
20
+ from metadata.generated.schema.security.secrets.secretsManagerClientLoader import (
21
+ SecretsManagerClientLoader,
22
+ )
20
23
  from metadata.generated.schema.security.secrets.secretsManagerProvider import (
21
24
  SecretsManagerProvider,
22
25
  )
@@ -32,8 +35,10 @@ class AWSSSMSecretsManager(AWSBasedSecretsManager):
32
35
  AWS SSM Parameter Store Secret Manager Class
33
36
  """
34
37
 
35
- def __init__(self, credentials: Optional["AWSCredentials"]):
36
- super().__init__(credentials, "ssm", SecretsManagerProvider.aws)
38
+ def __init__(self, loader: SecretsManagerClientLoader):
39
+ super().__init__(
40
+ client="ssm", provider=SecretsManagerProvider.aws, loader=loader
41
+ )
37
42
 
38
43
  def get_string_value(self, secret_id: str) -> Optional[str]:
39
44
  """
@@ -0,0 +1,148 @@
1
+ # Copyright 2022 Collate
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ # Unless required by applicable law or agreed to in writing, software
7
+ # distributed under the License is distributed on an "AS IS" BASIS,
8
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
+ # See the License for the specific language governing permissions and
10
+ # limitations under the License.
11
+
12
+ """
13
+ Abstract class for AWS based secrets manager implementations
14
+ """
15
+ import os
16
+ import traceback
17
+ from abc import ABC
18
+ from typing import Optional
19
+
20
+ from azure.identity import ClientSecretCredential, DefaultAzureCredential
21
+ from azure.keyvault.secrets import KeyVaultSecret, SecretClient
22
+
23
+ from metadata.generated.schema.security.secrets.secretsManagerClientLoader import (
24
+ SecretsManagerClientLoader,
25
+ )
26
+ from metadata.generated.schema.security.secrets.secretsManagerProvider import (
27
+ SecretsManagerProvider,
28
+ )
29
+ from metadata.utils.dispatch import enum_register
30
+ from metadata.utils.logger import utils_logger
31
+ from metadata.utils.secrets.external_secrets_manager import (
32
+ SECRET_MANAGER_AIRFLOW_CONF,
33
+ ExternalSecretsManager,
34
+ SecretsManagerConfigException,
35
+ )
36
+
37
+ logger = utils_logger()
38
+
39
+ secrets_manager_client_loader = enum_register()
40
+
41
+
42
+ # pylint: disable=import-outside-toplevel
43
+ @secrets_manager_client_loader.add(SecretsManagerClientLoader.noop.value)
44
+ def _() -> None:
45
+ return None
46
+
47
+
48
+ @secrets_manager_client_loader.add(SecretsManagerClientLoader.airflow.value)
49
+ def _() -> Optional["AzureCredentials"]:
50
+ from airflow.configuration import conf
51
+
52
+ from metadata.generated.schema.security.credentials.azureCredentials import (
53
+ AzureCredentials,
54
+ )
55
+
56
+ key_vault_name = conf.get(
57
+ SECRET_MANAGER_AIRFLOW_CONF, "azure_key_vault_name", fallback=None
58
+ )
59
+ if not key_vault_name:
60
+ raise ValueError(
61
+ "Missing `azure_key_vault_name` config for Azure Key Vault Secrets Manager Provider."
62
+ )
63
+
64
+ tenant_id = conf.get(SECRET_MANAGER_AIRFLOW_CONF, "azure_tenant_id", fallback=None)
65
+ client_id = conf.get(SECRET_MANAGER_AIRFLOW_CONF, "azure_client_id", fallback=None)
66
+ client_secret = conf.get(
67
+ SECRET_MANAGER_AIRFLOW_CONF, "azure_client_secret", fallback=None
68
+ )
69
+
70
+ return AzureCredentials(
71
+ clientId=client_id,
72
+ clientSecret=client_secret,
73
+ tenantId=tenant_id,
74
+ vaultName=key_vault_name,
75
+ )
76
+
77
+
78
+ @secrets_manager_client_loader.add(SecretsManagerClientLoader.env.value)
79
+ def _() -> Optional["AzureCredentials"]:
80
+ from metadata.generated.schema.security.credentials.azureCredentials import (
81
+ AzureCredentials,
82
+ )
83
+
84
+ # Load only the AZURE_KEY_VAULT_NAME (required) variable and use the
85
+ # Default Auth chain
86
+ # https://learn.microsoft.com/en-us/python/api/overview/azure/identity-readme?view=azure-python#defaultazurecredential
87
+ key_vault_name = os.getenv("AZURE_KEY_VAULT_NAME")
88
+
89
+ if not key_vault_name:
90
+ raise ValueError(
91
+ "Missing `azure_key_vault_name` config for Azure Key Vault Secrets Manager Provider."
92
+ )
93
+
94
+ return AzureCredentials(vaultName=key_vault_name)
95
+
96
+
97
+ class AzureKVSecretsManager(ExternalSecretsManager, ABC):
98
+ """
99
+ Azure Key Vault Secrets Manager class
100
+ """
101
+
102
+ def __init__(
103
+ self,
104
+ loader: SecretsManagerClientLoader,
105
+ ):
106
+ super().__init__(provider=SecretsManagerProvider.azure_kv, loader=loader)
107
+
108
+ if (
109
+ self.credentials.tenantId
110
+ and self.credentials.clientId
111
+ and self.credentials.clientSecret
112
+ ):
113
+ azure_identity = ClientSecretCredential(
114
+ tenant_id=self.credentials.tenantId,
115
+ client_id=self.credentials.clientId,
116
+ client_secret=self.credentials.clientSecret.get_secret_value(),
117
+ )
118
+ else:
119
+ azure_identity = DefaultAzureCredential()
120
+
121
+ self.client = SecretClient(
122
+ vault_url=f"https://{self.credentials.vaultName}.vault.azure.net/",
123
+ credential=azure_identity,
124
+ )
125
+
126
+ def get_string_value(self, secret_id: str) -> str:
127
+ """
128
+ :param secret_id: The secret id to retrieve
129
+ :return: The value of the secret
130
+ """
131
+ try:
132
+ secret: KeyVaultSecret = self.client.get_secret(secret_id)
133
+ logger.debug(f"Got value for secret {secret_id}")
134
+ return secret.value
135
+ except Exception as exc:
136
+ logger.debug(traceback.format_exc())
137
+ logger.error(
138
+ f"Could not get the secret value of {secret_id} due to [{exc}]"
139
+ )
140
+ raise exc
141
+
142
+ def load_credentials(self) -> Optional["AzureCredentials"]:
143
+ """Load the provider credentials based on the loader type"""
144
+ try:
145
+ loader_fn = secrets_manager_client_loader.registry.get(self.loader.value)
146
+ return loader_fn()
147
+ except Exception as err:
148
+ raise SecretsManagerConfigException(f"Error loading credentials - [{err}]")
@@ -12,18 +12,40 @@
12
12
  """
13
13
  Abstract class for third party secrets' manager implementations
14
14
  """
15
- from abc import ABC
15
+ from abc import ABC, abstractmethod
16
+ from typing import Any
16
17
 
18
+ from metadata.generated.schema.security.secrets.secretsManagerClientLoader import (
19
+ SecretsManagerClientLoader,
20
+ )
17
21
  from metadata.generated.schema.security.secrets.secretsManagerProvider import (
18
22
  SecretsManagerProvider,
19
23
  )
20
24
  from metadata.utils.secrets.secrets_manager import SecretsManager
21
25
 
26
+ SECRET_MANAGER_AIRFLOW_CONF = "openmetadata_secrets_manager"
27
+
28
+
29
+ class SecretsManagerConfigException(Exception):
30
+ """
31
+ Invalid config that does not allow us to create
32
+ the SecretsManagerFactory
33
+ """
34
+
22
35
 
23
36
  class ExternalSecretsManager(SecretsManager, ABC):
24
37
  """
25
38
  Abstract class for third party secrets' manager implementations
26
39
  """
27
40
 
28
- def __init__(self, provider: SecretsManagerProvider):
29
- self.provider = provider.name
41
+ def __init__(
42
+ self, provider: SecretsManagerProvider, loader: SecretsManagerClientLoader
43
+ ):
44
+ self.provider = provider
45
+ self.loader = loader
46
+
47
+ self.credentials = self.load_credentials()
48
+
49
+ @abstractmethod
50
+ def load_credentials(self) -> Any:
51
+ """Load the provider credentials based on the loader type"""