openmetadata-ingestion 1.5.0.0rc1__py3-none-any.whl → 1.5.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 (676) hide show
  1. _openmetadata_testutils/kafka/__init__.py +0 -0
  2. _openmetadata_testutils/kafka/load_csv_data.py +133 -0
  3. _openmetadata_testutils/kafka/schema_registry_container.py +31 -0
  4. _openmetadata_testutils/postgres/conftest.py +5 -0
  5. _openmetadata_testutils/pydantic/test_utils.py +5 -4
  6. metadata/cli/app.py +0 -1
  7. metadata/cli/dataquality.py +0 -1
  8. metadata/cli/ingest.py +0 -1
  9. metadata/cli/profile.py +0 -1
  10. metadata/cli/usage.py +0 -1
  11. metadata/clients/domo_client.py +1 -1
  12. metadata/data_quality/validations/column/sqlalchemy/columnValueLengthsToBeBetween.py +7 -6
  13. metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeBetween.py +7 -2
  14. metadata/data_quality/validations/table/sqlalchemy/tableDiff.py +44 -12
  15. metadata/generated/antlr/EntityLinkLexer.py +377 -379
  16. metadata/generated/schema/analytics/__init__.py +1 -1
  17. metadata/generated/schema/analytics/basic.py +1 -1
  18. metadata/generated/schema/analytics/reportData.py +1 -1
  19. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  20. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  21. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  22. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  23. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  24. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  25. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  26. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  27. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  28. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  29. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  30. metadata/generated/schema/api/__init__.py +1 -1
  31. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  32. metadata/generated/schema/api/analytics/__init__.py +1 -1
  33. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  34. metadata/generated/schema/api/automations/__init__.py +1 -1
  35. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  36. metadata/generated/schema/api/bulkAssets.py +1 -1
  37. metadata/generated/schema/api/classification/__init__.py +1 -1
  38. metadata/generated/schema/api/classification/createClassification.py +1 -1
  39. metadata/generated/schema/api/classification/createTag.py +1 -1
  40. metadata/generated/schema/api/classification/loadTags.py +1 -1
  41. metadata/generated/schema/api/createBot.py +1 -1
  42. metadata/generated/schema/api/createEventPublisherJob.py +1 -1
  43. metadata/generated/schema/api/createType.py +1 -1
  44. metadata/generated/schema/api/data/__init__.py +1 -1
  45. metadata/generated/schema/api/data/createAPICollection.py +1 -1
  46. metadata/generated/schema/api/data/createAPIEndpoint.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 +1 -1
  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/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 +1 -1
  72. metadata/generated/schema/api/docStore/__init__.py +1 -1
  73. metadata/generated/schema/api/docStore/createDocument.py +1 -1
  74. metadata/generated/schema/api/domains/__init__.py +1 -1
  75. metadata/generated/schema/api/domains/createDataProduct.py +1 -1
  76. metadata/generated/schema/api/domains/createDomain.py +1 -1
  77. metadata/generated/schema/api/feed/__init__.py +1 -1
  78. metadata/generated/schema/api/feed/closeTask.py +1 -1
  79. metadata/generated/schema/api/feed/createPost.py +1 -1
  80. metadata/generated/schema/api/feed/createSuggestion.py +1 -1
  81. metadata/generated/schema/api/feed/createThread.py +1 -1
  82. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  83. metadata/generated/schema/api/feed/threadCount.py +1 -1
  84. metadata/generated/schema/api/lineage/__init__.py +1 -1
  85. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  86. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  87. metadata/generated/schema/api/policies/__init__.py +1 -1
  88. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  89. metadata/generated/schema/api/services/__init__.py +1 -1
  90. metadata/generated/schema/api/services/createApiService.py +1 -1
  91. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  92. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  93. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  94. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  95. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  96. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  97. metadata/generated/schema/api/services/createSearchService.py +1 -1
  98. metadata/generated/schema/api/services/createStorageService.py +1 -1
  99. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  100. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
  101. metadata/generated/schema/api/setOwner.py +1 -1
  102. metadata/generated/schema/api/teams/__init__.py +1 -1
  103. metadata/generated/schema/api/teams/createPersona.py +1 -1
  104. metadata/generated/schema/api/teams/createRole.py +1 -1
  105. metadata/generated/schema/api/teams/createTeam.py +1 -1
  106. metadata/generated/schema/api/teams/createUser.py +1 -1
  107. metadata/generated/schema/api/tests/__init__.py +1 -1
  108. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  109. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  110. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  111. metadata/generated/schema/api/tests/createTestCaseResolutionStatus.py +1 -1
  112. metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
  113. metadata/generated/schema/api/tests/createTestSuite.py +1 -1
  114. metadata/generated/schema/api/voteRequest.py +1 -1
  115. metadata/generated/schema/auth/__init__.py +1 -1
  116. metadata/generated/schema/auth/basicAuth.py +1 -1
  117. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  118. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  119. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  120. metadata/generated/schema/auth/emailRequest.py +1 -1
  121. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  122. metadata/generated/schema/auth/generateToken.py +1 -1
  123. metadata/generated/schema/auth/jwtAuth.py +1 -1
  124. metadata/generated/schema/auth/loginRequest.py +1 -1
  125. metadata/generated/schema/auth/logoutRequest.py +1 -1
  126. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  127. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  128. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  129. metadata/generated/schema/auth/refreshToken.py +1 -1
  130. metadata/generated/schema/auth/registrationRequest.py +1 -1
  131. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  132. metadata/generated/schema/auth/revokeToken.py +1 -1
  133. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  134. metadata/generated/schema/auth/ssoAuth.py +1 -1
  135. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  136. metadata/generated/schema/configuration/__init__.py +1 -1
  137. metadata/generated/schema/configuration/appsPrivateConfiguration.py +1 -1
  138. metadata/generated/schema/configuration/authConfig.py +1 -1
  139. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  140. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  141. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  142. metadata/generated/schema/configuration/dataQualityConfiguration.py +1 -1
  143. metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
  144. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  145. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  146. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  147. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  148. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  149. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  150. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  151. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  152. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  153. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  154. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  155. metadata/generated/schema/configuration/limitsConfiguration.py +1 -1
  156. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  157. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  158. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  159. metadata/generated/schema/configuration/profilerConfiguration.py +1 -1
  160. metadata/generated/schema/configuration/slackAppConfiguration.py +18 -7
  161. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  162. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  163. metadata/generated/schema/configuration/themeConfiguration.py +1 -1
  164. metadata/generated/schema/configuration/uiThemePreference.py +1 -1
  165. metadata/generated/schema/dataInsight/__init__.py +1 -1
  166. metadata/generated/schema/dataInsight/custom/__init__.py +1 -1
  167. metadata/generated/schema/dataInsight/custom/dataInsightCustomChart.py +2 -1
  168. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResult.py +1 -1
  169. metadata/generated/schema/dataInsight/custom/dataInsightCustomChartResultList.py +1 -1
  170. metadata/generated/schema/dataInsight/custom/formulaHolder.py +1 -1
  171. metadata/generated/schema/dataInsight/custom/lineChart.py +23 -2
  172. metadata/generated/schema/dataInsight/custom/summaryCard.py +8 -1
  173. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  174. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -21
  175. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  176. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  177. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  178. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  179. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  180. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  181. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  182. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  183. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  184. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  185. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  186. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  187. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  188. metadata/generated/schema/email/__init__.py +1 -1
  189. metadata/generated/schema/email/emailRequest.py +1 -1
  190. metadata/generated/schema/email/emailTemplate.py +1 -1
  191. metadata/generated/schema/email/emailTemplatePlaceholder.py +1 -1
  192. metadata/generated/schema/email/smtpSettings.py +1 -1
  193. metadata/generated/schema/email/templateValidationReponse.py +1 -1
  194. metadata/generated/schema/entity/__init__.py +1 -1
  195. metadata/generated/schema/entity/applications/__init__.py +1 -1
  196. metadata/generated/schema/entity/applications/app.py +1 -1
  197. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  198. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  199. metadata/generated/schema/entity/applications/configuration/applicationConfig.py +1 -1
  200. metadata/generated/schema/entity/applications/configuration/external/__init__.py +1 -1
  201. metadata/generated/schema/entity/applications/configuration/external/automator/__init__.py +1 -1
  202. metadata/generated/schema/entity/applications/configuration/external/automator/addDescriptionAction.py +1 -1
  203. metadata/generated/schema/entity/applications/configuration/external/automator/addDomainAction.py +1 -1
  204. metadata/generated/schema/entity/applications/configuration/external/automator/addOwnerAction.py +1 -1
  205. metadata/generated/schema/entity/applications/configuration/external/automator/addTagsAction.py +1 -1
  206. metadata/generated/schema/entity/applications/configuration/external/automator/addTierAction.py +1 -1
  207. metadata/generated/schema/entity/applications/configuration/external/automator/lineagePropagationAction.py +1 -1
  208. metadata/generated/schema/entity/applications/configuration/external/automator/mlTaggingAction.py +1 -1
  209. metadata/generated/schema/entity/applications/configuration/external/automator/removeDescriptionAction.py +1 -1
  210. metadata/generated/schema/entity/applications/configuration/external/automator/removeDomainAction.py +1 -1
  211. metadata/generated/schema/entity/applications/configuration/external/automator/removeOwnerAction.py +1 -1
  212. metadata/generated/schema/entity/applications/configuration/external/automator/removeTagsAction.py +1 -1
  213. metadata/generated/schema/entity/applications/configuration/external/automator/removeTierAction.py +1 -1
  214. metadata/generated/schema/entity/applications/configuration/external/automatorAppConfig.py +1 -1
  215. metadata/generated/schema/entity/applications/configuration/external/metaPilotAppConfig.py +10 -2
  216. metadata/generated/schema/entity/applications/configuration/internal/__init__.py +1 -1
  217. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsAppConfig.py +9 -1
  218. metadata/generated/schema/entity/applications/configuration/internal/dataInsightsReportAppConfig.py +1 -1
  219. metadata/generated/schema/entity/applications/configuration/internal/searchIndexingAppConfig.py +1 -1
  220. metadata/generated/schema/entity/applications/configuration/private/external/__init__.py +1 -1
  221. metadata/generated/schema/entity/applications/configuration/private/external/metaPilotAppPrivateConfig.py +1 -1
  222. metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
  223. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  224. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  225. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  226. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
  227. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
  228. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  229. metadata/generated/schema/entity/automations/__init__.py +1 -1
  230. metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
  231. metadata/generated/schema/entity/automations/workflow.py +1 -1
  232. metadata/generated/schema/entity/bot.py +1 -1
  233. metadata/generated/schema/entity/classification/__init__.py +1 -1
  234. metadata/generated/schema/entity/classification/classification.py +1 -1
  235. metadata/generated/schema/entity/classification/tag.py +1 -1
  236. metadata/generated/schema/entity/data/__init__.py +1 -1
  237. metadata/generated/schema/entity/data/apiCollection.py +1 -1
  238. metadata/generated/schema/entity/data/apiEndpoint.py +1 -1
  239. metadata/generated/schema/entity/data/chart.py +1 -1
  240. metadata/generated/schema/entity/data/container.py +1 -1
  241. metadata/generated/schema/entity/data/dashboard.py +1 -1
  242. metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
  243. metadata/generated/schema/entity/data/database.py +1 -1
  244. metadata/generated/schema/entity/data/databaseSchema.py +1 -1
  245. metadata/generated/schema/entity/data/glossary.py +1 -1
  246. metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
  247. metadata/generated/schema/entity/data/metrics.py +1 -1
  248. metadata/generated/schema/entity/data/mlmodel.py +1 -1
  249. metadata/generated/schema/entity/data/pipeline.py +1 -1
  250. metadata/generated/schema/entity/data/query.py +1 -1
  251. metadata/generated/schema/entity/data/report.py +1 -1
  252. metadata/generated/schema/entity/data/searchIndex.py +1 -1
  253. metadata/generated/schema/entity/data/storedProcedure.py +1 -1
  254. metadata/generated/schema/entity/data/table.py +2 -1
  255. metadata/generated/schema/entity/data/topic.py +1 -1
  256. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  257. metadata/generated/schema/entity/docStore/document.py +1 -1
  258. metadata/generated/schema/entity/domains/__init__.py +1 -1
  259. metadata/generated/schema/entity/domains/dataProduct.py +1 -1
  260. metadata/generated/schema/entity/domains/domain.py +1 -1
  261. metadata/generated/schema/entity/events/__init__.py +1 -1
  262. metadata/generated/schema/entity/events/webhook.py +1 -1
  263. metadata/generated/schema/entity/feed/__init__.py +1 -1
  264. metadata/generated/schema/entity/feed/assets.py +1 -1
  265. metadata/generated/schema/entity/feed/customProperty.py +1 -1
  266. metadata/generated/schema/entity/feed/description.py +1 -1
  267. metadata/generated/schema/entity/feed/domain.py +1 -1
  268. metadata/generated/schema/entity/feed/entityInfo.py +1 -1
  269. metadata/generated/schema/entity/feed/owner.py +1 -1
  270. metadata/generated/schema/entity/feed/suggestion.py +1 -1
  271. metadata/generated/schema/entity/feed/tag.py +1 -1
  272. metadata/generated/schema/entity/feed/testCaseResult.py +1 -1
  273. metadata/generated/schema/entity/feed/thread.py +1 -1
  274. metadata/generated/schema/entity/policies/__init__.py +1 -1
  275. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  276. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  277. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  278. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  279. metadata/generated/schema/entity/policies/filters.py +1 -1
  280. metadata/generated/schema/entity/policies/policy.py +1 -1
  281. metadata/generated/schema/entity/services/__init__.py +1 -1
  282. metadata/generated/schema/entity/services/apiService.py +1 -1
  283. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  284. metadata/generated/schema/entity/services/connections/apiService/__init__.py +1 -1
  285. metadata/generated/schema/entity/services/connections/apiService/restConnection.py +1 -1
  286. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  287. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  288. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  289. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  290. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  291. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  292. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  293. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  294. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  295. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +7 -2
  296. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  297. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  298. metadata/generated/schema/entity/services/connections/dashboard/mstrConnection.py +1 -1
  299. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  300. metadata/generated/schema/entity/services/connections/dashboard/powerbi/__init__.py +1 -1
  301. metadata/generated/schema/entity/services/connections/dashboard/powerbi/azureConfig.py +1 -1
  302. metadata/generated/schema/entity/services/connections/dashboard/powerbi/bucketDetails.py +1 -1
  303. metadata/generated/schema/entity/services/connections/dashboard/powerbi/gcsConfig.py +1 -1
  304. metadata/generated/schema/entity/services/connections/dashboard/powerbi/s3Config.py +1 -1
  305. metadata/generated/schema/entity/services/connections/dashboard/qlikCloudConnection.py +1 -1
  306. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  307. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  308. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  309. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  310. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  311. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  312. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  313. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  314. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
  315. metadata/generated/schema/entity/services/connections/database/bigTableConnection.py +1 -1
  316. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  317. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  318. metadata/generated/schema/entity/services/connections/database/common/azureConfig.py +1 -1
  319. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  320. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  321. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  322. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  323. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  324. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  325. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  326. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  327. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  328. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  329. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  330. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  331. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  332. metadata/generated/schema/entity/services/connections/database/deltalake/__init__.py +1 -1
  333. metadata/generated/schema/entity/services/connections/database/deltalake/metastoreConfig.py +1 -1
  334. metadata/generated/schema/entity/services/connections/database/deltalake/storageConfig.py +1 -1
  335. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  336. metadata/generated/schema/entity/services/connections/database/dorisConnection.py +1 -1
  337. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  338. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  339. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  340. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
  341. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
  342. metadata/generated/schema/entity/services/connections/database/iceberg/__init__.py +1 -1
  343. metadata/generated/schema/entity/services/connections/database/iceberg/dynamoDbCatalogConnection.py +1 -1
  344. metadata/generated/schema/entity/services/connections/database/iceberg/glueCatalogConnection.py +1 -1
  345. metadata/generated/schema/entity/services/connections/database/iceberg/hiveCatalogConnection.py +1 -1
  346. metadata/generated/schema/entity/services/connections/database/iceberg/icebergCatalog.py +1 -1
  347. metadata/generated/schema/entity/services/connections/database/iceberg/icebergFileSystem.py +1 -1
  348. metadata/generated/schema/entity/services/connections/database/iceberg/restCatalogConnection.py +1 -1
  349. metadata/generated/schema/entity/services/connections/database/icebergConnection.py +1 -1
  350. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  351. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  352. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  353. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
  354. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  355. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  356. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
  357. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  358. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  359. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  360. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  361. metadata/generated/schema/entity/services/connections/database/sapErpConnection.py +1 -1
  362. metadata/generated/schema/entity/services/connections/database/sapHana/__init__.py +1 -1
  363. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaHDBConnection.py +1 -1
  364. metadata/generated/schema/entity/services/connections/database/sapHana/sapHanaSQLConnection.py +1 -1
  365. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  366. metadata/generated/schema/entity/services/connections/database/sasConnection.py +1 -1
  367. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  368. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +2 -2
  369. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  370. metadata/generated/schema/entity/services/connections/database/synapseConnection.py +1 -1
  371. metadata/generated/schema/entity/services/connections/database/teradataConnection.py +2 -1
  372. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  373. metadata/generated/schema/entity/services/connections/database/unityCatalogConnection.py +1 -1
  374. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  375. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  376. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  377. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
  378. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  379. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  380. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
  381. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  382. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  383. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +1 -1
  384. metadata/generated/schema/entity/services/connections/metadata/alationSinkConnection.py +1 -1
  385. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  386. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  387. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
  388. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  389. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  390. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  391. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  392. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  393. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  394. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  395. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  396. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  397. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  398. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  399. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  400. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  401. metadata/generated/schema/entity/services/connections/pipeline/dbtCloudConnection.py +1 -1
  402. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  403. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  404. metadata/generated/schema/entity/services/connections/pipeline/flinkConnection.py +1 -1
  405. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  406. metadata/generated/schema/entity/services/connections/pipeline/kafkaConnectConnection.py +1 -1
  407. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  408. metadata/generated/schema/entity/services/connections/pipeline/openLineageConnection.py +1 -1
  409. metadata/generated/schema/entity/services/connections/pipeline/sparkConnection.py +1 -1
  410. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  411. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  412. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  413. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  414. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  415. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  416. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  417. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  418. metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
  419. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  420. metadata/generated/schema/entity/services/connections/storage/adlsConnection.py +1 -1
  421. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  422. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  423. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  424. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +2 -2
  425. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  426. metadata/generated/schema/entity/services/dashboardService.py +1 -1
  427. metadata/generated/schema/entity/services/databaseService.py +1 -1
  428. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  429. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
  430. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  431. metadata/generated/schema/entity/services/ingestionPipelines/status.py +1 -1
  432. metadata/generated/schema/entity/services/messagingService.py +1 -1
  433. metadata/generated/schema/entity/services/metadataService.py +1 -1
  434. metadata/generated/schema/entity/services/mlmodelService.py +1 -1
  435. metadata/generated/schema/entity/services/pipelineService.py +1 -1
  436. metadata/generated/schema/entity/services/searchService.py +1 -1
  437. metadata/generated/schema/entity/services/serviceType.py +1 -1
  438. metadata/generated/schema/entity/services/storageService.py +1 -1
  439. metadata/generated/schema/entity/teams/__init__.py +1 -1
  440. metadata/generated/schema/entity/teams/persona.py +1 -1
  441. metadata/generated/schema/entity/teams/role.py +1 -1
  442. metadata/generated/schema/entity/teams/team.py +1 -1
  443. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  444. metadata/generated/schema/entity/teams/user.py +1 -1
  445. metadata/generated/schema/entity/type.py +1 -1
  446. metadata/generated/schema/entity/utils/__init__.py +1 -1
  447. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  448. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  449. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  450. metadata/generated/schema/events/__init__.py +1 -1
  451. metadata/generated/schema/events/alertMetrics.py +1 -1
  452. metadata/generated/schema/events/api/__init__.py +1 -1
  453. metadata/generated/schema/events/api/createEventSubscription.py +1 -1
  454. metadata/generated/schema/events/api/testEventSubscriptionDestination.py +1 -1
  455. metadata/generated/schema/events/emailAlertConfig.py +1 -1
  456. metadata/generated/schema/events/eventFilterRule.py +1 -1
  457. metadata/generated/schema/events/eventSubscription.py +1 -1
  458. metadata/generated/schema/events/eventSubscriptionOffset.py +1 -1
  459. metadata/generated/schema/events/failedEvent.py +1 -1
  460. metadata/generated/schema/events/filterResourceDescriptor.py +1 -1
  461. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  462. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  463. metadata/generated/schema/metadataIngestion/application.py +1 -1
  464. metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
  465. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  466. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  467. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +2 -2
  468. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
  469. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  470. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  471. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  472. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  473. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
  474. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  475. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  476. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
  477. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  478. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  479. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
  480. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  481. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  482. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  483. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  484. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  485. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  486. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  487. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  488. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  489. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  490. metadata/generated/schema/metadataIngestion/storage/storageMetadataGCSConfig.py +1 -1
  491. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  492. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  493. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  494. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  495. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  496. metadata/generated/schema/metadataIngestion/workflow.py +1 -1
  497. metadata/generated/schema/monitoring/__init__.py +1 -1
  498. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  499. metadata/generated/schema/security/__init__.py +1 -1
  500. metadata/generated/schema/security/client/__init__.py +1 -1
  501. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  502. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  503. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  504. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  505. metadata/generated/schema/security/client/oidcClientConfig.py +1 -1
  506. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  507. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  508. metadata/generated/schema/security/client/samlSSOClientConfig.py +7 -5
  509. metadata/generated/schema/security/credentials/__init__.py +1 -1
  510. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  511. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +1 -1
  512. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  513. metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
  514. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  515. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  516. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  517. metadata/generated/schema/security/credentials/gcpExternalAccount.py +1 -1
  518. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  519. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  520. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  521. metadata/generated/schema/security/credentials/gitlabCredentials.py +34 -0
  522. metadata/generated/schema/security/sasl/__init__.py +1 -1
  523. metadata/generated/schema/security/sasl/saslClientConfig.py +1 -1
  524. metadata/generated/schema/security/secrets/__init__.py +1 -1
  525. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  526. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  527. metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
  528. metadata/generated/schema/security/securityConfiguration.py +1 -1
  529. metadata/generated/schema/security/ssl/__init__.py +1 -1
  530. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  531. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  532. metadata/generated/schema/settings/__init__.py +1 -1
  533. metadata/generated/schema/settings/settings.py +2 -1
  534. metadata/generated/schema/system/__init__.py +1 -1
  535. metadata/generated/schema/system/entityError.py +1 -1
  536. metadata/generated/schema/system/eventPublisherJob.py +5 -1
  537. metadata/generated/schema/system/indexingError.py +1 -1
  538. metadata/generated/schema/system/limitsResponse.py +1 -1
  539. metadata/generated/schema/system/ui/__init__.py +1 -1
  540. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  541. metadata/generated/schema/system/ui/page.py +1 -1
  542. metadata/generated/schema/system/validationResponse.py +1 -1
  543. metadata/generated/schema/tests/__init__.py +1 -1
  544. metadata/generated/schema/tests/assigned.py +1 -1
  545. metadata/generated/schema/tests/basic.py +20 -20
  546. metadata/generated/schema/tests/customMetric.py +1 -1
  547. metadata/generated/schema/tests/dataQualityReport.py +1 -1
  548. metadata/generated/schema/tests/resolved.py +1 -1
  549. metadata/generated/schema/tests/testCase.py +1 -1
  550. metadata/generated/schema/tests/testCaseResolutionStatus.py +1 -1
  551. metadata/generated/schema/tests/testDefinition.py +1 -1
  552. metadata/generated/schema/tests/testSuite.py +1 -1
  553. metadata/generated/schema/type/__init__.py +1 -1
  554. metadata/generated/schema/type/apiSchema.py +1 -1
  555. metadata/generated/schema/type/auditLog.py +1 -1
  556. metadata/generated/schema/type/basic.py +1 -1
  557. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  558. metadata/generated/schema/type/changeEvent.py +1 -1
  559. metadata/generated/schema/type/changeEventType.py +1 -1
  560. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  561. metadata/generated/schema/type/csvDocumentation.py +1 -1
  562. metadata/generated/schema/type/csvErrorType.py +1 -1
  563. metadata/generated/schema/type/csvFile.py +1 -1
  564. metadata/generated/schema/type/csvImportResult.py +1 -1
  565. metadata/generated/schema/type/customProperties/__init__.py +1 -1
  566. metadata/generated/schema/type/customProperties/complexTypes.py +1 -1
  567. metadata/generated/schema/type/customProperties/enumConfig.py +1 -1
  568. metadata/generated/schema/type/customProperty.py +1 -1
  569. metadata/generated/schema/type/dailyCount.py +1 -1
  570. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  571. metadata/generated/schema/type/entityHierarchy.py +1 -1
  572. metadata/generated/schema/type/entityHistory.py +1 -1
  573. metadata/generated/schema/type/entityLineage.py +1 -1
  574. metadata/generated/schema/type/entityReference.py +1 -1
  575. metadata/generated/schema/type/entityReferenceList.py +1 -1
  576. metadata/generated/schema/type/entityRelationship.py +1 -1
  577. metadata/generated/schema/type/entityUsage.py +1 -1
  578. metadata/generated/schema/type/filterPattern.py +1 -1
  579. metadata/generated/schema/type/function.py +1 -1
  580. metadata/generated/schema/type/include.py +1 -1
  581. metadata/generated/schema/type/jdbcConnection.py +1 -1
  582. metadata/generated/schema/type/lifeCycle.py +1 -1
  583. metadata/generated/schema/type/paging.py +1 -1
  584. metadata/generated/schema/type/profile.py +1 -1
  585. metadata/generated/schema/type/queryParserData.py +1 -1
  586. metadata/generated/schema/type/reaction.py +1 -1
  587. metadata/generated/schema/type/schedule.py +1 -1
  588. metadata/generated/schema/type/schema.py +1 -1
  589. metadata/generated/schema/type/tableQuery.py +1 -1
  590. metadata/generated/schema/type/tableUsageCount.py +1 -1
  591. metadata/generated/schema/type/tagLabel.py +1 -1
  592. metadata/generated/schema/type/usageDetails.py +1 -1
  593. metadata/generated/schema/type/usageRequest.py +1 -1
  594. metadata/generated/schema/type/votes.py +1 -1
  595. metadata/great_expectations/action.py +1 -1
  596. metadata/ingestion/connections/builders.py +6 -0
  597. metadata/ingestion/connections/test_connections.py +5 -0
  598. metadata/ingestion/lineage/models.py +4 -0
  599. metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py +1 -1
  600. metadata/ingestion/source/connections.py +19 -0
  601. metadata/ingestion/source/dashboard/domodashboard/metadata.py +3 -3
  602. metadata/ingestion/source/dashboard/looker/metadata.py +8 -3
  603. metadata/ingestion/source/dashboard/looker/utils.py +6 -3
  604. metadata/ingestion/source/dashboard/metabase/client.py +2 -1
  605. metadata/ingestion/source/dashboard/powerbi/metadata.py +2 -1
  606. metadata/ingestion/source/dashboard/qlikcloud/client.py +1 -1
  607. metadata/ingestion/source/dashboard/superset/mixin.py +5 -0
  608. metadata/ingestion/source/dashboard/tableau/metadata.py +10 -7
  609. metadata/ingestion/source/database/bigquery/metadata.py +5 -1
  610. metadata/ingestion/source/database/column_type_parser.py +3 -2
  611. metadata/ingestion/source/database/common_db_source.py +9 -4
  612. metadata/ingestion/source/database/database_service.py +1 -1
  613. metadata/ingestion/source/database/databricks/lineage.py +2 -2
  614. metadata/ingestion/source/database/databricks/metadata.py +100 -18
  615. metadata/ingestion/source/database/databricks/queries.py +3 -1
  616. metadata/ingestion/source/database/databricks/usage.py +2 -2
  617. metadata/ingestion/source/database/datalake/clients/gcs.py +4 -0
  618. metadata/ingestion/source/database/db2/metadata.py +8 -1
  619. metadata/ingestion/source/database/dbt/constants.py +1 -7
  620. metadata/ingestion/source/database/dbt/dbt_config.py +18 -19
  621. metadata/ingestion/source/database/dbt/dbt_service.py +4 -3
  622. metadata/ingestion/source/database/dbt/metadata.py +14 -3
  623. metadata/ingestion/source/database/dbt/models.py +2 -2
  624. metadata/ingestion/source/database/mssql/lineage.py +0 -4
  625. metadata/ingestion/source/database/mssql/metadata.py +1 -1
  626. metadata/ingestion/source/database/mssql/usage.py +42 -0
  627. metadata/ingestion/source/database/oracle/metadata.py +7 -0
  628. metadata/ingestion/source/database/oracle/queries.py +45 -11
  629. metadata/ingestion/source/database/oracle/utils.py +33 -0
  630. metadata/ingestion/source/database/postgres/converter_orm.py +52 -0
  631. metadata/ingestion/source/database/postgres/metadata.py +6 -0
  632. metadata/ingestion/source/database/postgres/metrics.py +42 -0
  633. metadata/ingestion/source/database/postgres/types/money.py +37 -0
  634. metadata/ingestion/source/database/postgres/usage.py +6 -0
  635. metadata/ingestion/source/database/redshift/connection.py +37 -9
  636. metadata/ingestion/source/database/redshift/queries.py +4 -5
  637. metadata/ingestion/source/database/unitycatalog/client.py +21 -0
  638. metadata/ingestion/source/database/unitycatalog/metadata.py +58 -22
  639. metadata/ingestion/source/pipeline/dagster/metadata.py +17 -14
  640. metadata/ingestion/source/pipeline/dbtcloud/client.py +29 -4
  641. metadata/ingestion/source/pipeline/dbtcloud/metadata.py +94 -71
  642. metadata/ingestion/source/pipeline/dbtcloud/models.py +6 -6
  643. metadata/ingestion/source/pipeline/dbtcloud/queries.py +22 -11
  644. metadata/ingestion/source/pipeline/domopipeline/metadata.py +1 -1
  645. metadata/ingestion/source/pipeline/fivetran/client.py +2 -1
  646. metadata/ingestion/source/storage/gcs/client.py +4 -9
  647. metadata/ingestion/source/storage/gcs/metadata.py +4 -0
  648. metadata/profiler/interface/sqlalchemy/profiler_interface.py +23 -1
  649. metadata/profiler/metrics/composed/null_ratio.py +5 -8
  650. metadata/profiler/metrics/hybrid/histogram.py +9 -3
  651. metadata/profiler/metrics/static/mean.py +8 -9
  652. metadata/profiler/metrics/static/null_count.py +4 -2
  653. metadata/profiler/orm/functions/median.py +11 -4
  654. metadata/profiler/orm/functions/sum.py +1 -1
  655. metadata/profiler/orm/functions/table_metric_computer.py +2 -2
  656. metadata/profiler/orm/registry.py +14 -1
  657. metadata/profiler/processor/default.py +4 -1
  658. metadata/profiler/processor/sampler/sampler_factory.py +9 -0
  659. metadata/profiler/processor/sampler/sqlalchemy/azuresql/sampler.py +40 -0
  660. metadata/profiler/source/base/profiler_source.py +1 -0
  661. metadata/readers/file/api_reader.py +4 -1
  662. metadata/readers/file/gitlab.py +172 -0
  663. metadata/utils/helpers.py +4 -1
  664. metadata/utils/importer.py +26 -0
  665. {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/METADATA +353 -346
  666. {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/RECORD +670 -667
  667. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +0 -48
  668. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +0 -44
  669. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +0 -46
  670. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +0 -44
  671. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +0 -39
  672. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +0 -40
  673. {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/LICENSE +0 -0
  674. {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/WHEEL +0 -0
  675. {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/entry_points.txt +0 -0
  676. {openmetadata_ingestion-1.5.0.0rc1.dist-info → openmetadata_ingestion-1.5.1.0.dist-info}/top_level.txt +0 -0
@@ -16,11 +16,12 @@ supporting sqlalchemy abstraction layer
16
16
  """
17
17
 
18
18
  import concurrent.futures
19
+ import math
19
20
  import threading
20
21
  import traceback
21
22
  from collections import defaultdict
22
23
  from datetime import datetime
23
- from typing import Dict, List, Optional
24
+ from typing import Any, Dict, List, Optional
24
25
 
25
26
  from sqlalchemy import Column, inspect, text
26
27
  from sqlalchemy.exc import DBAPIError, ProgrammingError, ResourceClosedError
@@ -450,6 +451,16 @@ class SQAProfilerInterface(ProfilerInterface, SQAInterfaceMixin):
450
451
  column=metric_func.column,
451
452
  sample=sample,
452
453
  )
454
+ if row and isinstance(row, dict):
455
+ row = self._validate_nulls(row)
456
+
457
+ # System metrics return a list of dictionaries, with UPDATE, INSERT or DELETE ops results
458
+ if row and metric_func.metric_type == MetricTypes.System:
459
+ row = [
460
+ self._validate_nulls(r) if isinstance(r, dict) else r
461
+ for r in row
462
+ ]
463
+
453
464
  except Exception as exc:
454
465
  error = (
455
466
  f"{metric_func.column if metric_func.column is not None else metric_func.table.__tablename__} "
@@ -467,6 +478,17 @@ class SQAProfilerInterface(ProfilerInterface, SQAInterfaceMixin):
467
478
 
468
479
  return row, column, metric_func.metric_type.value
469
480
 
481
+ @staticmethod
482
+ def _validate_nulls(row: Dict[str, Any]) -> Dict[str, Any]:
483
+ """Detect if we are computing NaNs and replace them with None"""
484
+ for k, v in row.items():
485
+ if isinstance(v, float) and math.isnan(v):
486
+ logger.warning(
487
+ "NaN data detected and will be cast to null in OpenMetadata to maintain database parity"
488
+ )
489
+ row[k] = None
490
+ return row
491
+
470
492
  # pylint: disable=use-dict-literal
471
493
  def get_all_metrics(
472
494
  self,
@@ -49,12 +49,9 @@ class NullRatio(ComposedMetric):
49
49
  Safely compute null ratio based on the profiler
50
50
  results of other Metrics
51
51
  """
52
- import pandas as pd
53
52
 
54
- res_count = res.get(Count.name())
55
- res_null = res.get(NullCount.name())
56
-
57
- if not pd.isnull(res_count) and not pd.isnull(res_null):
58
- result = res_null / (res_null + res_count)
59
- return None if pd.isnull(result) else result
60
- return None
53
+ count = res.get(Count.name())
54
+ null_count = res.get(NullCount.name())
55
+ if count + null_count == 0:
56
+ return None
57
+ return null_count / (null_count + count)
@@ -25,7 +25,11 @@ from metadata.profiler.metrics.static.count import Count
25
25
  from metadata.profiler.metrics.static.max import Max
26
26
  from metadata.profiler.metrics.static.min import Min
27
27
  from metadata.profiler.orm.functions.length import LenFn
28
- from metadata.profiler.orm.registry import is_concatenable, is_quantifiable
28
+ from metadata.profiler.orm.registry import (
29
+ is_concatenable,
30
+ is_quantifiable,
31
+ is_value_non_numeric,
32
+ )
29
33
  from metadata.utils.helpers import format_large_string_numbers
30
34
  from metadata.utils.logger import profiler_logger
31
35
 
@@ -120,7 +124,6 @@ class Histogram(HybridMetric):
120
124
  # freedman-diaconis rule
121
125
  bin_width = self._get_bin_width(float(res_iqr), res_row_count) # type: ignore
122
126
  num_bins = math.ceil((res_max - res_min) / bin_width) # type: ignore
123
-
124
127
  # sturge's rule
125
128
  if res_iqr is None or num_bins > max_bin_count:
126
129
  num_bins = int(math.ceil(math.log2(res_row_count) + 1))
@@ -148,7 +151,10 @@ class Histogram(HybridMetric):
148
151
  "We are missing the session attribute to compute the Histogram."
149
152
  )
150
153
 
151
- if not (is_quantifiable(self.col.type) or is_concatenable(self.col.type)):
154
+ if not (is_quantifiable(self.col.type) or is_concatenable(self.col.type)) or (
155
+ is_value_non_numeric(res.get(Min.name()))
156
+ or is_value_non_numeric(res.get(Max.name()))
157
+ ):
152
158
  return None
153
159
 
154
160
  # get the metric need for the freedman-diaconis rule
@@ -15,7 +15,7 @@ AVG Metric definition
15
15
  from functools import partial
16
16
  from typing import Callable, List, Optional, cast
17
17
 
18
- from sqlalchemy import column, func
18
+ from sqlalchemy import column
19
19
  from sqlalchemy.ext.compiler import compiles
20
20
  from sqlalchemy.sql.functions import GenericFunction
21
21
 
@@ -39,20 +39,19 @@ from metadata.utils.logger import profiler_logger
39
39
  logger = profiler_logger()
40
40
 
41
41
 
42
- # pylint: disable=invalid-name
43
- class avg(GenericFunction):
42
+ class AvgFn(GenericFunction):
44
43
  name = "avg"
45
44
  inherit_cache = CACHE
46
45
 
47
46
 
48
- @compiles(avg, Dialects.ClickHouse)
47
+ @compiles(AvgFn, Dialects.ClickHouse)
49
48
  def _(element, compiler, **kw):
50
49
  """Handle case for empty table. If empty, clickhouse returns NaN"""
51
50
  proc = compiler.process(element.clauses, **kw)
52
51
  return f"if(isNaN(avg({proc})), null, avg({proc}))"
53
52
 
54
53
 
55
- @compiles(avg, Dialects.Redshift)
54
+ @compiles(AvgFn, Dialects.Redshift)
56
55
  def _(element, compiler, **kw):
57
56
  """
58
57
  Cast to decimal to get around potential integer overflow error
@@ -61,7 +60,7 @@ def _(element, compiler, **kw):
61
60
  return f"avg(CAST({proc} AS DECIMAL(38,0)))"
62
61
 
63
62
 
64
- @compiles(avg, Dialects.MSSQL)
63
+ @compiles(AvgFn, Dialects.MSSQL)
65
64
  def _(element, compiler, **kw):
66
65
  """
67
66
  Cast to decimal to get around potential integer overflow error -
@@ -71,7 +70,7 @@ def _(element, compiler, **kw):
71
70
  return f"avg(cast({proc} as decimal))"
72
71
 
73
72
 
74
- @compiles(avg, Dialects.Trino)
73
+ @compiles(AvgFn, Dialects.Trino)
75
74
  def _(element, compiler, **kw):
76
75
  proc = compiler.process(element.clauses, **kw)
77
76
  first_clause = element.clauses.clauses[0]
@@ -108,10 +107,10 @@ class Mean(StaticMetric):
108
107
  def fn(self):
109
108
  """sqlalchemy function"""
110
109
  if is_quantifiable(self.col.type):
111
- return func.avg(column(self.col.name, self.col.type))
110
+ return AvgFn(column(self.col.name, self.col.type))
112
111
 
113
112
  if is_concatenable(self.col.type):
114
- return func.avg(LenFn(column(self.col.name, self.col.type)))
113
+ return AvgFn(LenFn(column(self.col.name, self.col.type)))
115
114
 
116
115
  logger.debug(
117
116
  f"Don't know how to process type {self.col.type} when computing MEAN"
@@ -16,6 +16,7 @@ Null Count Metric definition
16
16
 
17
17
 
18
18
  from sqlalchemy import case, column
19
+ from sqlalchemy.sql.functions import coalesce
19
20
 
20
21
  from metadata.generated.schema.configuration.profilerConfiguration import MetricType
21
22
  from metadata.profiler.metrics.core import StaticMetric, _label
@@ -48,8 +49,9 @@ class NullCount(StaticMetric):
48
49
  @_label
49
50
  def fn(self):
50
51
  """sqlalchemy function"""
51
- return SumFn(
52
- case([(column(self.col.name, self.col.type).is_(None), 1)], else_=0)
52
+ return coalesce(
53
+ SumFn(case([(column(self.col.name, self.col.type).is_(None), 1)], else_=0)),
54
+ 0,
53
55
  )
54
56
 
55
57
  def df_fn(self, dfs=None):
@@ -28,12 +28,19 @@ logger = profiler_logger()
28
28
  class MedianFn(FunctionElement):
29
29
  inherit_cache = CACHE
30
30
 
31
+ @staticmethod
32
+ def default_fn(elements, compiler, **kwargs): # pylint: disable=unused-argument
33
+ col = compiler.process(elements.clauses.clauses[0])
34
+ percentile = elements.clauses.clauses[2].value
35
+ return "percentile_cont(%.2f) WITHIN GROUP (ORDER BY %s ASC)" % (
36
+ percentile,
37
+ col,
38
+ )
39
+
31
40
 
32
41
  @compiles(MedianFn)
33
- def _(elements, compiler, **kwargs): # pylint: disable=unused-argument
34
- col = compiler.process(elements.clauses.clauses[0])
35
- percentile = elements.clauses.clauses[2].value
36
- return "percentile_cont(%.2f) WITHIN GROUP (ORDER BY %s ASC)" % (percentile, col)
42
+ def _(elements, compiler, **kwargs):
43
+ return MedianFn.default_fn(elements, compiler, **kwargs)
37
44
 
38
45
 
39
46
  @compiles(MedianFn, Dialects.BigQuery)
@@ -45,7 +45,7 @@ def _(element, compiler, **kw):
45
45
  def _(element, compiler, **kw):
46
46
  """Cast to DECIMAL to address cannot cast nan to bigint"""
47
47
  proc = compiler.process(element.clauses, **kw)
48
- return f"SUM(TRY_CAST({proc} AS DECIMAL))"
48
+ return f"COALESCE(SUM(CAST({proc} AS DECIMAL)),0)"
49
49
 
50
50
 
51
51
  @compiles(SumFn, Dialects.BigQuery)
@@ -194,7 +194,7 @@ class OracleTableMetricComputer(BaseTableMetricComputer):
194
194
  Column("object_name").label("table_name"),
195
195
  Column("created"),
196
196
  ],
197
- self._build_table("all_objects", None),
197
+ self._build_table("DBA_OBJECTS", None),
198
198
  [
199
199
  func.lower(Column("owner")) == self.schema_name.lower(),
200
200
  func.lower(Column("object_name")) == self.table_name.lower(),
@@ -209,7 +209,7 @@ class OracleTableMetricComputer(BaseTableMetricComputer):
209
209
  Column("table_name"),
210
210
  Column("NUM_ROWS"),
211
211
  ],
212
- self._build_table("all_tables", None),
212
+ self._build_table("DBA_TABLES", None),
213
213
  [
214
214
  func.lower(Column("owner")) == self.schema_name.lower(),
215
215
  func.lower(Column("table_name")) == self.table_name.lower(),
@@ -13,6 +13,8 @@
13
13
  Custom types' registry for easy access
14
14
  without having an import mess
15
15
  """
16
+ import math
17
+
16
18
  import sqlalchemy
17
19
  from sqlalchemy import Date, DateTime, Integer, Numeric, Time
18
20
  from sqlalchemy.sql.sqltypes import Concatenable, Enum
@@ -160,7 +162,9 @@ def is_quantifiable(_type) -> bool:
160
162
  """
161
163
  if isinstance(_type, DataType):
162
164
  return _type.value in QUANTIFIABLE_SET
163
- return is_numeric(_type) or is_integer(_type)
165
+ return (
166
+ is_numeric(_type) or is_integer(_type) or getattr(_type, "quantifiable", False)
167
+ )
164
168
 
165
169
 
166
170
  def is_concatenable(_type) -> bool:
@@ -171,3 +175,12 @@ def is_concatenable(_type) -> bool:
171
175
  if isinstance(_type, DataType):
172
176
  return _type.value in CONCATENABLE_SET
173
177
  return issubclass(_type.__class__, Concatenable)
178
+
179
+
180
+ def is_value_non_numeric(value) -> bool:
181
+ try:
182
+ if isinstance(value, float) and (math.isnan(value) or math.isinf(value)):
183
+ return True
184
+ return False
185
+ except Exception:
186
+ return False
@@ -77,9 +77,12 @@ class DefaultProfiler(Profiler):
77
77
  include_columns: Optional[List[ColumnProfilerConfig]] = None,
78
78
  exclude_columns: Optional[List[str]] = None,
79
79
  global_profiler_configuration: Optional[ProfilerConfiguration] = None,
80
+ db_service=None,
80
81
  ):
81
82
  _metrics = get_default_metrics(
82
- table=profiler_interface.table, ometa_client=profiler_interface.ometa_client
83
+ table=profiler_interface.table,
84
+ ometa_client=profiler_interface.ometa_client,
85
+ db_service=db_service,
83
86
  )
84
87
 
85
88
  super().__init__(
@@ -15,6 +15,9 @@ Factory class for creating sampler objects
15
15
 
16
16
  from typing import Union
17
17
 
18
+ from metadata.generated.schema.entity.services.connections.database.azureSQLConnection import (
19
+ AzureSQLConnection,
20
+ )
18
21
  from metadata.generated.schema.entity.services.connections.database.bigQueryConnection import (
19
22
  BigQueryConnection,
20
23
  )
@@ -36,6 +39,9 @@ from metadata.generated.schema.entity.services.connections.database.trinoConnect
36
39
  from metadata.generated.schema.entity.services.databaseService import DatabaseConnection
37
40
  from metadata.profiler.processor.sampler.nosql.sampler import NoSQLSampler
38
41
  from metadata.profiler.processor.sampler.pandas.sampler import DatalakeSampler
42
+ from metadata.profiler.processor.sampler.sqlalchemy.azuresql.sampler import (
43
+ AzureSQLSampler,
44
+ )
39
45
  from metadata.profiler.processor.sampler.sqlalchemy.bigquery.sampler import (
40
46
  BigQuerySampler,
41
47
  )
@@ -89,3 +95,6 @@ sampler_factory_.register(
89
95
  sampler_factory_.register(
90
96
  source_type=DynamoDBConnection.__name__, sampler_class=NoSQLSampler
91
97
  )
98
+ sampler_factory_.register(
99
+ source_type=AzureSQLConnection.__name__, sampler_class=AzureSQLSampler
100
+ )
@@ -0,0 +1,40 @@
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
+ Helper module to handle data sampling
13
+ for the profiler
14
+ """
15
+ from typing import List, Optional
16
+
17
+ from sqlalchemy import Column
18
+
19
+ from metadata.generated.schema.entity.data.table import TableData
20
+ from metadata.profiler.processor.sampler.sqlalchemy.sampler import SQASampler
21
+
22
+
23
+ class AzureSQLSampler(SQASampler):
24
+ """
25
+ Generates a sample of the data to not
26
+ run the query in the whole table.
27
+ """
28
+
29
+ # These types are not supported by pyodbc - it throws
30
+ # an error when trying to fetch data from these columns
31
+ # pyodbc.ProgrammingError: ('ODBC SQL type -151 is not yet supported. column-index=x type=-151', 'HY106')
32
+ NOT_COMPUTE_PYODBC = {"SQASGeography", "UndeterminedType"}
33
+
34
+ def fetch_sample_data(self, columns: Optional[List[Column]] = None) -> TableData:
35
+ sqa_columns = []
36
+ if columns:
37
+ for col in columns:
38
+ if col.type.__class__.__name__ not in self.NOT_COMPUTE_PYODBC:
39
+ sqa_columns.append(col)
40
+ return super().fetch_sample_data(sqa_columns or columns)
@@ -277,6 +277,7 @@ class ProfilerSource(ProfilerSourceInterface):
277
277
  include_columns=self._get_include_columns(entity, table_config),
278
278
  exclude_columns=self._get_exclude_columns(entity, table_config),
279
279
  global_profiler_configuration=self.global_profiler_configuration,
280
+ db_service=db_service,
280
281
  )
281
282
 
282
283
  metrics = (
@@ -21,12 +21,15 @@ from metadata.generated.schema.security.credentials.bitbucketCredentials import
21
21
  from metadata.generated.schema.security.credentials.githubCredentials import (
22
22
  GitHubCredentials,
23
23
  )
24
+ from metadata.generated.schema.security.credentials.gitlabCredentials import (
25
+ GitlabCredentials,
26
+ )
24
27
  from metadata.readers.file.base import Reader
25
28
  from metadata.utils.logger import ingestion_logger
26
29
 
27
30
  logger = ingestion_logger()
28
31
 
29
- ReadersCredentials = Union[GitHubCredentials, BitBucketCredentials]
32
+ ReadersCredentials = Union[GitHubCredentials, BitBucketCredentials, GitlabCredentials]
30
33
 
31
34
 
32
35
  class ApiReader(Reader, ABC):
@@ -0,0 +1,172 @@
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
+ Gitlab client to read files with token auth
13
+ """
14
+ import base64
15
+ import traceback
16
+ from enum import Enum
17
+ from typing import Any, Dict, List, Optional
18
+ from urllib.parse import quote_plus
19
+
20
+ import requests
21
+
22
+ from metadata.generated.schema.security.credentials.gitlabCredentials import (
23
+ GitlabCredentials,
24
+ )
25
+ from metadata.readers.file.api_reader import ApiReader
26
+ from metadata.readers.file.base import ReadException
27
+ from metadata.utils.constants import UTF_8
28
+ from metadata.utils.logger import ingestion_logger
29
+
30
+ logger = ingestion_logger()
31
+
32
+
33
+ HOST = "https://gitlab.com/api/v4"
34
+
35
+
36
+ class UrlParts(Enum):
37
+ FILES = "files"
38
+ PROJECTS = "projects"
39
+ REPOSITORY = "repository"
40
+ TREE = "tree"
41
+
42
+
43
+ class GitlabReader(ApiReader):
44
+ """
45
+ Handle calls to the Gitlab API against a repo
46
+ """
47
+
48
+ credentials: GitlabCredentials
49
+
50
+ def __init__(self, credentials):
51
+ super().__init__(credentials)
52
+ self._encoded_project_path = None
53
+
54
+ @property
55
+ def auth_headers(self) -> Dict[str, str]:
56
+ """
57
+ Build the headers to authenticate
58
+ to the API
59
+ """
60
+ if self._auth_headers is None and self.credentials.token:
61
+ self._auth_headers = {
62
+ "PRIVATE-TOKEN": self.credentials.token.root.get_secret_value()
63
+ }
64
+
65
+ return self._auth_headers
66
+
67
+ @property
68
+ def encoded_project_path(self) -> str:
69
+ """
70
+ Build the URL-encoded project path for the Gitlab API
71
+ """
72
+ if (
73
+ self._encoded_project_path is None
74
+ and self.credentials.repositoryOwner.root
75
+ and self.credentials.repositoryName.root
76
+ ):
77
+ self._encoded_project_path = quote_plus(
78
+ "/".join(
79
+ [
80
+ self.credentials.repositoryOwner.root,
81
+ self.credentials.repositoryName.root,
82
+ ]
83
+ )
84
+ )
85
+
86
+ return self._encoded_project_path
87
+
88
+ @staticmethod
89
+ def _decode_content(json_response: Dict[str, Any]) -> str:
90
+ """
91
+ Return the content of the response
92
+
93
+ If no `content` there, throw the KeyError
94
+ """
95
+ return base64.b64decode(json_response["content"]).decode(UTF_8)
96
+
97
+ def read(self, path: str, **__) -> str:
98
+ """
99
+ Read a file from a Gitlab Repo and return its
100
+ contents as a string
101
+ https://docs.gitlab.com/ee/api/repository_files.html
102
+ """
103
+ encoded_file_path = quote_plus(path)
104
+ branch = self._get_default_branch()
105
+ try:
106
+ res = requests.get(
107
+ self._build_url(
108
+ HOST,
109
+ UrlParts.PROJECTS.value,
110
+ self.encoded_project_path,
111
+ UrlParts.REPOSITORY.value,
112
+ UrlParts.FILES.value,
113
+ f"{encoded_file_path}?ref={branch}",
114
+ ),
115
+ headers=self.auth_headers,
116
+ timeout=30,
117
+ )
118
+ if res.status_code == 200:
119
+ return self._decode_content(res.json())
120
+
121
+ # If we don't get a 200, raise
122
+ res.raise_for_status()
123
+
124
+ except Exception as err:
125
+ logger.debug(traceback.format_exc())
126
+ raise ReadException(f"Error fetching file [{path}] from repo: {err}")
127
+
128
+ raise ReadException(f"Could not fetch file [{path}] from repo")
129
+
130
+ def _get_default_branch(self) -> str:
131
+ """
132
+ Get repo default branch
133
+ """
134
+ res = requests.get(
135
+ self._build_url(HOST, UrlParts.PROJECTS.value, self.encoded_project_path),
136
+ headers=self.auth_headers,
137
+ timeout=30,
138
+ )
139
+ if res.status_code == 200:
140
+ return res.json().get("default_branch")
141
+
142
+ # If we don't get a 200, raise
143
+ res.raise_for_status()
144
+ raise RuntimeError("Could not fetch the default branch")
145
+
146
+ def _get_tree(self, url: str = None) -> Optional[List[str]]:
147
+ """
148
+ Use the Gitlab Repository Tree API to iterate over tree pages recursively
149
+ """
150
+ if url is None:
151
+ url = self._build_url(
152
+ HOST,
153
+ UrlParts.PROJECTS.value,
154
+ self.encoded_project_path,
155
+ UrlParts.REPOSITORY.value,
156
+ f"{UrlParts.TREE.value}?recursive=true&pagination=keyset&per_page=100&order_by=path&sort=desc",
157
+ )
158
+ res = requests.get(
159
+ url,
160
+ headers=self.auth_headers,
161
+ timeout=30,
162
+ )
163
+ if res.status_code == 200:
164
+ paths = [elem.get("path") for elem in res.json()]
165
+ if res.links.get("next"):
166
+ paths.extend(self._get_tree(res.links["next"]["url"]))
167
+ return paths
168
+
169
+ # If we don't get a 200, raise
170
+ res.raise_for_status()
171
+
172
+ return None
metadata/utils/helpers.py CHANGED
@@ -106,8 +106,11 @@ def pretty_print_time_duration(duration: Union[int, float]) -> str:
106
106
  """
107
107
 
108
108
  days = divmod(duration, 86400)[0]
109
+ duration = duration - days * 86400
109
110
  hours = divmod(duration, 3600)[0]
111
+ duration = duration - hours * 3600
110
112
  minutes = divmod(duration, 60)[0]
113
+ duration = duration - minutes * 60
111
114
  seconds = round(divmod(duration, 60)[1], 2)
112
115
  if days:
113
116
  return f"{days}day(s) {hours}h {minutes}m {seconds}s"
@@ -123,7 +126,7 @@ def get_start_and_end(duration: int = 0) -> Tuple[datetime, datetime]:
123
126
  Method to return start and end time based on duration
124
127
  """
125
128
 
126
- today = datetime.now(timezone.utc)
129
+ today = datetime.now(timezone.utc).replace(tzinfo=None)
127
130
  start = (today + timedelta(0 - duration)).replace(
128
131
  hour=0, minute=0, second=0, microsecond=0
129
132
  )
@@ -12,6 +12,7 @@
12
12
  Helpers to import python classes and modules dynamically
13
13
  """
14
14
  import importlib
15
+ import sys
15
16
  import traceback
16
17
  from enum import Enum
17
18
  from typing import Any, Callable, Optional, Type, TypeVar
@@ -27,6 +28,7 @@ from metadata.generated.schema.metadataIngestion.workflow import Sink as Workflo
27
28
  from metadata.ingestion.api.steps import BulkSink, Processor, Sink, Source, Stage
28
29
  from metadata.utils.class_helper import get_service_type_from_source_type
29
30
  from metadata.utils.logger import utils_logger
31
+ from metadata.utils.singleton import Singleton
30
32
 
31
33
  logger = utils_logger()
32
34
 
@@ -244,3 +246,27 @@ def import_test_case_class(
244
246
  test_definition_class,
245
247
  )
246
248
  )
249
+
250
+
251
+ class SideEffectsLoader(metaclass=Singleton):
252
+ modules = set(sys.modules.keys())
253
+
254
+ def import_side_effects(self, *modules):
255
+ """Handles loading of side effects and caches modules that have already been imported.
256
+ Requires full module name."""
257
+ for module in modules:
258
+ if module not in self.modules:
259
+ try:
260
+ module = importlib.import_module(module)
261
+ SideEffectsLoader.modules.add(module.__name__)
262
+ except Exception as err:
263
+ logger.debug(traceback.format_exc())
264
+ raise DynamicImportException(
265
+ f"Cannot load object from {module} due to {err}"
266
+ )
267
+ else:
268
+ logger.debug(f"Module {module} already imported")
269
+
270
+
271
+ def import_side_effects(*modules):
272
+ SideEffectsLoader().import_side_effects(*modules)