openmetadata-ingestion 1.2.3.2__py3-none-any.whl → 1.2.4.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 (493) hide show
  1. metadata/generated/schema/analytics/__init__.py +1 -1
  2. metadata/generated/schema/analytics/basic.py +1 -1
  3. metadata/generated/schema/analytics/reportData.py +1 -1
  4. metadata/generated/schema/analytics/reportDataType/__init__.py +1 -1
  5. metadata/generated/schema/analytics/reportDataType/aggregatedCostAnalysisReportData.py +1 -1
  6. metadata/generated/schema/analytics/reportDataType/entityReportData.py +1 -1
  7. metadata/generated/schema/analytics/reportDataType/rawCostAnalysisReportData.py +1 -1
  8. metadata/generated/schema/analytics/reportDataType/webAnalyticEntityViewReportData.py +1 -1
  9. metadata/generated/schema/analytics/reportDataType/webAnalyticUserActivityReportData.py +1 -1
  10. metadata/generated/schema/analytics/webAnalyticEvent.py +1 -1
  11. metadata/generated/schema/analytics/webAnalyticEventData.py +1 -1
  12. metadata/generated/schema/analytics/webAnalyticEventType/__init__.py +1 -1
  13. metadata/generated/schema/analytics/webAnalyticEventType/customEvent.py +1 -1
  14. metadata/generated/schema/analytics/webAnalyticEventType/pageViewEvent.py +1 -1
  15. metadata/generated/schema/api/__init__.py +1 -1
  16. metadata/generated/schema/api/addGlossaryToAssetsRequest.py +1 -1
  17. metadata/generated/schema/api/analytics/__init__.py +1 -1
  18. metadata/generated/schema/api/analytics/createWebAnalyticEvent.py +1 -1
  19. metadata/generated/schema/api/automations/__init__.py +1 -1
  20. metadata/generated/schema/api/automations/createWorkflow.py +1 -1
  21. metadata/generated/schema/api/bulkAssets.py +1 -1
  22. metadata/generated/schema/api/classification/__init__.py +1 -1
  23. metadata/generated/schema/api/classification/createClassification.py +1 -1
  24. metadata/generated/schema/api/classification/createTag.py +1 -1
  25. metadata/generated/schema/api/classification/loadTags.py +1 -1
  26. metadata/generated/schema/api/createBot.py +1 -1
  27. metadata/generated/schema/api/createEventPublisherJob.py +1 -1
  28. metadata/generated/schema/api/createType.py +1 -1
  29. metadata/generated/schema/api/data/__init__.py +1 -1
  30. metadata/generated/schema/api/data/createChart.py +1 -1
  31. metadata/generated/schema/api/data/createContainer.py +1 -1
  32. metadata/generated/schema/api/data/createCustomProperty.py +32 -0
  33. metadata/generated/schema/api/data/createDashboard.py +1 -1
  34. metadata/generated/schema/api/data/createDashboardDataModel.py +1 -1
  35. metadata/generated/schema/api/data/createDatabase.py +1 -1
  36. metadata/generated/schema/api/data/createDatabaseSchema.py +1 -1
  37. metadata/generated/schema/api/data/createGlossary.py +1 -1
  38. metadata/generated/schema/api/data/createGlossaryTerm.py +1 -1
  39. metadata/generated/schema/api/data/createMlModel.py +1 -1
  40. metadata/generated/schema/api/data/createPipeline.py +1 -1
  41. metadata/generated/schema/api/data/createQuery.py +1 -1
  42. metadata/generated/schema/api/data/createSearchIndex.py +1 -1
  43. metadata/generated/schema/api/data/createStoredProcedure.py +1 -1
  44. metadata/generated/schema/api/data/createTable.py +1 -1
  45. metadata/generated/schema/api/data/createTableProfile.py +1 -1
  46. metadata/generated/schema/api/data/createTopic.py +1 -1
  47. metadata/generated/schema/api/data/loadGlossary.py +1 -1
  48. metadata/generated/schema/api/data/restoreEntity.py +1 -1
  49. metadata/generated/schema/api/dataInsight/__init__.py +1 -1
  50. metadata/generated/schema/api/dataInsight/createDataInsightChart.py +1 -1
  51. metadata/generated/schema/api/dataInsight/kpi/__init__.py +1 -1
  52. metadata/generated/schema/api/dataInsight/kpi/createKpiRequest.py +1 -1
  53. metadata/generated/schema/api/docStore/__init__.py +1 -1
  54. metadata/generated/schema/api/docStore/createDocument.py +1 -1
  55. metadata/generated/schema/api/domains/__init__.py +1 -1
  56. metadata/generated/schema/api/domains/createDataProduct.py +1 -1
  57. metadata/generated/schema/api/domains/createDomain.py +1 -1
  58. metadata/generated/schema/api/feed/__init__.py +1 -1
  59. metadata/generated/schema/api/feed/closeTask.py +1 -1
  60. metadata/generated/schema/api/feed/createPost.py +1 -1
  61. metadata/generated/schema/api/feed/createThread.py +1 -1
  62. metadata/generated/schema/api/feed/resolveTask.py +1 -1
  63. metadata/generated/schema/api/feed/threadCount.py +1 -1
  64. metadata/generated/schema/api/lineage/__init__.py +1 -1
  65. metadata/generated/schema/api/lineage/addLineage.py +1 -1
  66. metadata/generated/schema/api/openMetadataServerVersion.py +1 -1
  67. metadata/generated/schema/api/policies/__init__.py +1 -1
  68. metadata/generated/schema/api/policies/createPolicy.py +1 -1
  69. metadata/generated/schema/api/services/__init__.py +1 -1
  70. metadata/generated/schema/api/services/createDashboardService.py +1 -1
  71. metadata/generated/schema/api/services/createDatabaseService.py +1 -1
  72. metadata/generated/schema/api/services/createMessagingService.py +1 -1
  73. metadata/generated/schema/api/services/createMetadataService.py +1 -1
  74. metadata/generated/schema/api/services/createMlModelService.py +1 -1
  75. metadata/generated/schema/api/services/createPipelineService.py +1 -1
  76. metadata/generated/schema/api/services/createSearchService.py +1 -1
  77. metadata/generated/schema/api/services/createStorageService.py +1 -1
  78. metadata/generated/schema/api/services/ingestionPipelines/__init__.py +1 -1
  79. metadata/generated/schema/api/services/ingestionPipelines/createIngestionPipeline.py +1 -1
  80. metadata/generated/schema/api/setOwner.py +1 -1
  81. metadata/generated/schema/api/teams/__init__.py +1 -1
  82. metadata/generated/schema/api/teams/createPersona.py +1 -1
  83. metadata/generated/schema/api/teams/createRole.py +1 -1
  84. metadata/generated/schema/api/teams/createTeam.py +1 -1
  85. metadata/generated/schema/api/teams/createUser.py +1 -1
  86. metadata/generated/schema/api/tests/__init__.py +1 -1
  87. metadata/generated/schema/api/tests/createCustomMetric.py +1 -1
  88. metadata/generated/schema/api/tests/createLogicalTestCases.py +1 -1
  89. metadata/generated/schema/api/tests/createTestCase.py +1 -1
  90. metadata/generated/schema/api/tests/createTestDefinition.py +1 -1
  91. metadata/generated/schema/api/tests/createTestSuite.py +1 -1
  92. metadata/generated/schema/api/voteRequest.py +1 -1
  93. metadata/generated/schema/auth/__init__.py +1 -1
  94. metadata/generated/schema/auth/basicAuth.py +1 -1
  95. metadata/generated/schema/auth/basicLoginRequest.py +1 -1
  96. metadata/generated/schema/auth/changePasswordRequest.py +1 -1
  97. metadata/generated/schema/auth/createPersonalToken.py +1 -1
  98. metadata/generated/schema/auth/emailRequest.py +1 -1
  99. metadata/generated/schema/auth/emailVerificationToken.py +1 -1
  100. metadata/generated/schema/auth/generateToken.py +1 -1
  101. metadata/generated/schema/auth/jwtAuth.py +1 -1
  102. metadata/generated/schema/auth/loginRequest.py +1 -1
  103. metadata/generated/schema/auth/logoutRequest.py +1 -1
  104. metadata/generated/schema/auth/passwordResetRequest.py +1 -1
  105. metadata/generated/schema/auth/passwordResetToken.py +1 -1
  106. metadata/generated/schema/auth/personalAccessToken.py +1 -1
  107. metadata/generated/schema/auth/refreshToken.py +1 -1
  108. metadata/generated/schema/auth/registrationRequest.py +1 -1
  109. metadata/generated/schema/auth/revokePersonalToken.py +1 -1
  110. metadata/generated/schema/auth/revokeToken.py +1 -1
  111. metadata/generated/schema/auth/serviceTokenEnum.py +1 -1
  112. metadata/generated/schema/auth/ssoAuth.py +1 -1
  113. metadata/generated/schema/auth/tokenRefreshRequest.py +1 -1
  114. metadata/generated/schema/configuration/__init__.py +1 -1
  115. metadata/generated/schema/configuration/authConfig.py +1 -1
  116. metadata/generated/schema/configuration/authenticationConfiguration.py +1 -1
  117. metadata/generated/schema/configuration/authorizerConfiguration.py +1 -1
  118. metadata/generated/schema/configuration/changeEventConfiguration.py +1 -1
  119. metadata/generated/schema/configuration/elasticSearchConfiguration.py +1 -1
  120. metadata/generated/schema/configuration/eventHandlerConfiguration.py +1 -1
  121. metadata/generated/schema/configuration/fernetConfiguration.py +1 -1
  122. metadata/generated/schema/configuration/jwtTokenConfiguration.py +1 -1
  123. metadata/generated/schema/configuration/kafkaEventConfiguration.py +1 -1
  124. metadata/generated/schema/configuration/ldapConfiguration.py +1 -1
  125. metadata/generated/schema/configuration/ldapTrustStoreConfig/__init__.py +1 -1
  126. metadata/generated/schema/configuration/ldapTrustStoreConfig/customTrustManagerConfig.py +1 -1
  127. metadata/generated/schema/configuration/ldapTrustStoreConfig/hostNameConfig.py +1 -1
  128. metadata/generated/schema/configuration/ldapTrustStoreConfig/jvmDefaultConfig.py +1 -1
  129. metadata/generated/schema/configuration/ldapTrustStoreConfig/trustAllConfig.py +1 -1
  130. metadata/generated/schema/configuration/ldapTrustStoreConfig/truststoreConfig.py +1 -1
  131. metadata/generated/schema/configuration/loginConfiguration.py +1 -1
  132. metadata/generated/schema/configuration/logoConfiguration.py +1 -1
  133. metadata/generated/schema/configuration/pipelineServiceClientConfiguration.py +1 -1
  134. metadata/generated/schema/configuration/slackAppConfiguration.py +1 -1
  135. metadata/generated/schema/configuration/taskNotificationConfiguration.py +1 -1
  136. metadata/generated/schema/configuration/testResultNotificationConfiguration.py +1 -1
  137. metadata/generated/schema/dataInsight/__init__.py +1 -1
  138. metadata/generated/schema/dataInsight/dataInsightChart.py +1 -1
  139. metadata/generated/schema/dataInsight/dataInsightChartResult.py +1 -1
  140. metadata/generated/schema/dataInsight/kpi/__init__.py +1 -1
  141. metadata/generated/schema/dataInsight/kpi/basic.py +1 -1
  142. metadata/generated/schema/dataInsight/kpi/kpi.py +1 -1
  143. metadata/generated/schema/dataInsight/type/__init__.py +1 -1
  144. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsCount.py +1 -1
  145. metadata/generated/schema/dataInsight/type/aggregatedUnusedAssetsSize.py +1 -1
  146. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsCount.py +1 -1
  147. metadata/generated/schema/dataInsight/type/aggregatedUsedVsUnusedAssetsSize.py +1 -1
  148. metadata/generated/schema/dataInsight/type/dailyActiveUsers.py +1 -1
  149. metadata/generated/schema/dataInsight/type/mostActiveUsers.py +1 -1
  150. metadata/generated/schema/dataInsight/type/mostViewedEntities.py +1 -1
  151. metadata/generated/schema/dataInsight/type/pageViewsByEntities.py +1 -1
  152. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithDescriptionByType.py +1 -1
  153. metadata/generated/schema/dataInsight/type/percentageOfEntitiesWithOwnerByType.py +1 -1
  154. metadata/generated/schema/dataInsight/type/percentageOfServicesWithDescription.py +1 -1
  155. metadata/generated/schema/dataInsight/type/percentageOfServicesWithOwner.py +1 -1
  156. metadata/generated/schema/dataInsight/type/totalEntitiesByTier.py +1 -1
  157. metadata/generated/schema/dataInsight/type/totalEntitiesByType.py +1 -1
  158. metadata/generated/schema/dataInsight/type/unusedAssets.py +1 -1
  159. metadata/generated/schema/email/__init__.py +1 -1
  160. metadata/generated/schema/email/emailRequest.py +1 -1
  161. metadata/generated/schema/email/smtpSettings.py +1 -1
  162. metadata/generated/schema/entity/__init__.py +1 -1
  163. metadata/generated/schema/entity/applications/__init__.py +1 -1
  164. metadata/generated/schema/entity/applications/app.py +1 -1
  165. metadata/generated/schema/entity/applications/appConfig.py +1 -1
  166. metadata/generated/schema/entity/applications/appRunRecord.py +1 -1
  167. metadata/generated/schema/entity/applications/configuration/__init__.py +1 -1
  168. metadata/generated/schema/entity/applications/configuration/dataInsightsApp.py +1 -1
  169. metadata/generated/schema/entity/applications/configuration/externalAppIngestionConfig.py +1 -1
  170. metadata/generated/schema/entity/applications/configuration/searchIndexingApp.py +1 -1
  171. metadata/generated/schema/entity/applications/createAppRequest.py +1 -1
  172. metadata/generated/schema/entity/applications/jobStatus.py +1 -1
  173. metadata/generated/schema/entity/applications/liveExecutionContext.py +1 -1
  174. metadata/generated/schema/entity/applications/marketplace/__init__.py +1 -1
  175. metadata/generated/schema/entity/applications/marketplace/appMarketPlaceDefinition.py +1 -1
  176. metadata/generated/schema/entity/applications/marketplace/createAppMarketPlaceDefinitionReq.py +1 -1
  177. metadata/generated/schema/entity/applications/scheduledExecutionContext.py +1 -1
  178. metadata/generated/schema/entity/automations/__init__.py +1 -1
  179. metadata/generated/schema/entity/automations/testServiceConnection.py +1 -1
  180. metadata/generated/schema/entity/automations/workflow.py +1 -1
  181. metadata/generated/schema/entity/bot.py +1 -1
  182. metadata/generated/schema/entity/classification/__init__.py +1 -1
  183. metadata/generated/schema/entity/classification/classification.py +1 -1
  184. metadata/generated/schema/entity/classification/tag.py +1 -1
  185. metadata/generated/schema/entity/data/__init__.py +1 -1
  186. metadata/generated/schema/entity/data/chart.py +1 -1
  187. metadata/generated/schema/entity/data/container.py +1 -1
  188. metadata/generated/schema/entity/data/dashboard.py +1 -1
  189. metadata/generated/schema/entity/data/dashboardDataModel.py +1 -1
  190. metadata/generated/schema/entity/data/database.py +1 -1
  191. metadata/generated/schema/entity/data/databaseSchema.py +1 -1
  192. metadata/generated/schema/entity/data/glossary.py +1 -1
  193. metadata/generated/schema/entity/data/glossaryTerm.py +1 -1
  194. metadata/generated/schema/entity/data/metrics.py +1 -1
  195. metadata/generated/schema/entity/data/mlmodel.py +1 -1
  196. metadata/generated/schema/entity/data/pipeline.py +1 -1
  197. metadata/generated/schema/entity/data/query.py +1 -1
  198. metadata/generated/schema/entity/data/report.py +1 -1
  199. metadata/generated/schema/entity/data/searchIndex.py +1 -1
  200. metadata/generated/schema/entity/data/storedProcedure.py +1 -1
  201. metadata/generated/schema/entity/data/table.py +1 -1
  202. metadata/generated/schema/entity/data/topic.py +1 -1
  203. metadata/generated/schema/entity/docStore/__init__.py +1 -1
  204. metadata/generated/schema/entity/docStore/document.py +1 -1
  205. metadata/generated/schema/entity/domains/__init__.py +1 -1
  206. metadata/generated/schema/entity/domains/dataProduct.py +1 -1
  207. metadata/generated/schema/entity/domains/domain.py +1 -1
  208. metadata/generated/schema/entity/events/__init__.py +1 -1
  209. metadata/generated/schema/entity/events/webhook.py +1 -1
  210. metadata/generated/schema/entity/feed/__init__.py +1 -1
  211. metadata/generated/schema/entity/feed/thread.py +1 -1
  212. metadata/generated/schema/entity/policies/__init__.py +1 -1
  213. metadata/generated/schema/entity/policies/accessControl/__init__.py +1 -1
  214. metadata/generated/schema/entity/policies/accessControl/resourceDescriptor.py +1 -1
  215. metadata/generated/schema/entity/policies/accessControl/resourcePermission.py +1 -1
  216. metadata/generated/schema/entity/policies/accessControl/rule.py +1 -1
  217. metadata/generated/schema/entity/policies/filters.py +1 -1
  218. metadata/generated/schema/entity/policies/policy.py +1 -1
  219. metadata/generated/schema/entity/services/__init__.py +1 -1
  220. metadata/generated/schema/entity/services/connections/__init__.py +1 -1
  221. metadata/generated/schema/entity/services/connections/common/__init__.py +1 -1
  222. metadata/generated/schema/entity/services/connections/common/sslCertPaths.py +1 -1
  223. metadata/generated/schema/entity/services/connections/common/sslCertValues.py +1 -1
  224. metadata/generated/schema/entity/services/connections/common/sslConfig.py +1 -1
  225. metadata/generated/schema/entity/services/connections/connectionBasicType.py +1 -1
  226. metadata/generated/schema/entity/services/connections/dashboard/__init__.py +1 -1
  227. metadata/generated/schema/entity/services/connections/dashboard/customDashboardConnection.py +1 -1
  228. metadata/generated/schema/entity/services/connections/dashboard/domoDashboardConnection.py +1 -1
  229. metadata/generated/schema/entity/services/connections/dashboard/lightdashConnection.py +1 -1
  230. metadata/generated/schema/entity/services/connections/dashboard/lookerConnection.py +1 -1
  231. metadata/generated/schema/entity/services/connections/dashboard/metabaseConnection.py +1 -1
  232. metadata/generated/schema/entity/services/connections/dashboard/modeConnection.py +1 -1
  233. metadata/generated/schema/entity/services/connections/dashboard/powerBIConnection.py +1 -1
  234. metadata/generated/schema/entity/services/connections/dashboard/qlikSenseConnection.py +1 -1
  235. metadata/generated/schema/entity/services/connections/dashboard/quickSightConnection.py +1 -1
  236. metadata/generated/schema/entity/services/connections/dashboard/redashConnection.py +1 -1
  237. metadata/generated/schema/entity/services/connections/dashboard/supersetConnection.py +1 -1
  238. metadata/generated/schema/entity/services/connections/dashboard/tableauConnection.py +1 -1
  239. metadata/generated/schema/entity/services/connections/database/__init__.py +1 -1
  240. metadata/generated/schema/entity/services/connections/database/athenaConnection.py +1 -1
  241. metadata/generated/schema/entity/services/connections/database/azureSQLConnection.py +1 -1
  242. metadata/generated/schema/entity/services/connections/database/bigQueryConnection.py +1 -1
  243. metadata/generated/schema/entity/services/connections/database/clickhouseConnection.py +1 -1
  244. metadata/generated/schema/entity/services/connections/database/common/__init__.py +1 -1
  245. metadata/generated/schema/entity/services/connections/database/common/basicAuth.py +1 -1
  246. metadata/generated/schema/entity/services/connections/database/common/iamAuthConfig.py +1 -1
  247. metadata/generated/schema/entity/services/connections/database/common/jwtAuth.py +1 -1
  248. metadata/generated/schema/entity/services/connections/database/couchbaseConnection.py +1 -1
  249. metadata/generated/schema/entity/services/connections/database/customDatabaseConnection.py +1 -1
  250. metadata/generated/schema/entity/services/connections/database/databricksConnection.py +1 -1
  251. metadata/generated/schema/entity/services/connections/database/datalake/__init__.py +1 -1
  252. metadata/generated/schema/entity/services/connections/database/datalake/azureConfig.py +1 -1
  253. metadata/generated/schema/entity/services/connections/database/datalake/gcsConfig.py +1 -1
  254. metadata/generated/schema/entity/services/connections/database/datalake/s3Config.py +1 -1
  255. metadata/generated/schema/entity/services/connections/database/datalakeConnection.py +1 -1
  256. metadata/generated/schema/entity/services/connections/database/db2Connection.py +1 -1
  257. metadata/generated/schema/entity/services/connections/database/deltaLakeConnection.py +1 -1
  258. metadata/generated/schema/entity/services/connections/database/domoDatabaseConnection.py +1 -1
  259. metadata/generated/schema/entity/services/connections/database/druidConnection.py +1 -1
  260. metadata/generated/schema/entity/services/connections/database/dynamoDBConnection.py +1 -1
  261. metadata/generated/schema/entity/services/connections/database/glueConnection.py +1 -1
  262. metadata/generated/schema/entity/services/connections/database/greenplumConnection.py +1 -1
  263. metadata/generated/schema/entity/services/connections/database/hiveConnection.py +1 -1
  264. metadata/generated/schema/entity/services/connections/database/impalaConnection.py +1 -1
  265. metadata/generated/schema/entity/services/connections/database/mariaDBConnection.py +1 -1
  266. metadata/generated/schema/entity/services/connections/database/mongoDB/__init__.py +1 -1
  267. metadata/generated/schema/entity/services/connections/database/mongoDB/mongoDBValues.py +1 -1
  268. metadata/generated/schema/entity/services/connections/database/mongoDBConnection.py +1 -1
  269. metadata/generated/schema/entity/services/connections/database/mssqlConnection.py +1 -1
  270. metadata/generated/schema/entity/services/connections/database/mysqlConnection.py +1 -1
  271. metadata/generated/schema/entity/services/connections/database/oracleConnection.py +1 -1
  272. metadata/generated/schema/entity/services/connections/database/pinotDBConnection.py +1 -1
  273. metadata/generated/schema/entity/services/connections/database/postgresConnection.py +1 -1
  274. metadata/generated/schema/entity/services/connections/database/prestoConnection.py +1 -1
  275. metadata/generated/schema/entity/services/connections/database/redshiftConnection.py +1 -1
  276. metadata/generated/schema/entity/services/connections/database/salesforceConnection.py +1 -1
  277. metadata/generated/schema/entity/services/connections/database/sapHanaConnection.py +1 -1
  278. metadata/generated/schema/entity/services/connections/database/singleStoreConnection.py +1 -1
  279. metadata/generated/schema/entity/services/connections/database/snowflakeConnection.py +1 -1
  280. metadata/generated/schema/entity/services/connections/database/sqliteConnection.py +1 -1
  281. metadata/generated/schema/entity/services/connections/database/trinoConnection.py +1 -1
  282. metadata/generated/schema/entity/services/connections/database/verticaConnection.py +1 -1
  283. metadata/generated/schema/entity/services/connections/messaging/__init__.py +1 -1
  284. metadata/generated/schema/entity/services/connections/messaging/customMessagingConnection.py +1 -1
  285. metadata/generated/schema/entity/services/connections/messaging/kafkaConnection.py +1 -1
  286. metadata/generated/schema/entity/services/connections/messaging/kinesisConnection.py +1 -1
  287. metadata/generated/schema/entity/services/connections/messaging/pulsarConnection.py +1 -1
  288. metadata/generated/schema/entity/services/connections/messaging/redpandaConnection.py +1 -1
  289. metadata/generated/schema/entity/services/connections/messaging/saslMechanismType.py +1 -1
  290. metadata/generated/schema/entity/services/connections/metadata/__init__.py +1 -1
  291. metadata/generated/schema/entity/services/connections/metadata/alationConnection.py +62 -0
  292. metadata/generated/schema/entity/services/connections/metadata/amundsenConnection.py +1 -1
  293. metadata/generated/schema/entity/services/connections/metadata/atlasConnection.py +1 -1
  294. metadata/generated/schema/entity/services/connections/metadata/metadataESConnection.py +1 -1
  295. metadata/generated/schema/entity/services/connections/metadata/openMetadataConnection.py +1 -1
  296. metadata/generated/schema/entity/services/connections/mlmodel/__init__.py +1 -1
  297. metadata/generated/schema/entity/services/connections/mlmodel/customMlModelConnection.py +1 -1
  298. metadata/generated/schema/entity/services/connections/mlmodel/mlflowConnection.py +1 -1
  299. metadata/generated/schema/entity/services/connections/mlmodel/sageMakerConnection.py +1 -1
  300. metadata/generated/schema/entity/services/connections/mlmodel/sklearnConnection.py +1 -1
  301. metadata/generated/schema/entity/services/connections/pipeline/__init__.py +1 -1
  302. metadata/generated/schema/entity/services/connections/pipeline/airbyteConnection.py +1 -1
  303. metadata/generated/schema/entity/services/connections/pipeline/airflowConnection.py +1 -1
  304. metadata/generated/schema/entity/services/connections/pipeline/backendConnection.py +1 -1
  305. metadata/generated/schema/entity/services/connections/pipeline/customPipelineConnection.py +1 -1
  306. metadata/generated/schema/entity/services/connections/pipeline/dagsterConnection.py +1 -1
  307. metadata/generated/schema/entity/services/connections/pipeline/databricksPipelineConnection.py +1 -1
  308. metadata/generated/schema/entity/services/connections/pipeline/domoPipelineConnection.py +1 -1
  309. metadata/generated/schema/entity/services/connections/pipeline/fivetranConnection.py +1 -1
  310. metadata/generated/schema/entity/services/connections/pipeline/gluePipelineConnection.py +1 -1
  311. metadata/generated/schema/entity/services/connections/pipeline/nifiConnection.py +1 -1
  312. metadata/generated/schema/entity/services/connections/pipeline/splineConnection.py +1 -1
  313. metadata/generated/schema/entity/services/connections/search/__init__.py +1 -1
  314. metadata/generated/schema/entity/services/connections/search/customSearchConnection.py +1 -1
  315. metadata/generated/schema/entity/services/connections/search/elasticSearch/__init__.py +1 -1
  316. metadata/generated/schema/entity/services/connections/search/elasticSearch/apiAuth.py +1 -1
  317. metadata/generated/schema/entity/services/connections/search/elasticSearch/basicAuth.py +1 -1
  318. metadata/generated/schema/entity/services/connections/search/elasticSearchConnection.py +1 -1
  319. metadata/generated/schema/entity/services/connections/search/openSearchConnection.py +1 -1
  320. metadata/generated/schema/entity/services/connections/serviceConnection.py +1 -1
  321. metadata/generated/schema/entity/services/connections/storage/__init__.py +1 -1
  322. metadata/generated/schema/entity/services/connections/storage/adlsConection.py +1 -1
  323. metadata/generated/schema/entity/services/connections/storage/customStorageConnection.py +1 -1
  324. metadata/generated/schema/entity/services/connections/storage/gcsConnection.py +1 -1
  325. metadata/generated/schema/entity/services/connections/storage/s3Connection.py +1 -1
  326. metadata/generated/schema/entity/services/connections/testConnectionDefinition.py +1 -1
  327. metadata/generated/schema/entity/services/connections/testConnectionResult.py +1 -1
  328. metadata/generated/schema/entity/services/dashboardService.py +1 -1
  329. metadata/generated/schema/entity/services/databaseService.py +1 -1
  330. metadata/generated/schema/entity/services/ingestionPipelines/__init__.py +1 -1
  331. metadata/generated/schema/entity/services/ingestionPipelines/ingestionPipeline.py +1 -1
  332. metadata/generated/schema/entity/services/ingestionPipelines/pipelineServiceClientResponse.py +1 -1
  333. metadata/generated/schema/entity/services/messagingService.py +1 -1
  334. metadata/generated/schema/entity/services/metadataService.py +4 -1
  335. metadata/generated/schema/entity/services/mlmodelService.py +1 -1
  336. metadata/generated/schema/entity/services/pipelineService.py +1 -1
  337. metadata/generated/schema/entity/services/searchService.py +1 -1
  338. metadata/generated/schema/entity/services/serviceType.py +1 -1
  339. metadata/generated/schema/entity/services/storageService.py +1 -1
  340. metadata/generated/schema/entity/teams/__init__.py +1 -1
  341. metadata/generated/schema/entity/teams/persona.py +1 -1
  342. metadata/generated/schema/entity/teams/role.py +1 -1
  343. metadata/generated/schema/entity/teams/team.py +1 -1
  344. metadata/generated/schema/entity/teams/teamHierarchy.py +1 -1
  345. metadata/generated/schema/entity/teams/user.py +1 -1
  346. metadata/generated/schema/entity/type.py +1 -1
  347. metadata/generated/schema/entity/utils/__init__.py +1 -1
  348. metadata/generated/schema/entity/utils/entitiesCount.py +1 -1
  349. metadata/generated/schema/entity/utils/servicesCount.py +1 -1
  350. metadata/generated/schema/entity/utils/supersetApiConnection.py +1 -1
  351. metadata/generated/schema/events/__init__.py +1 -1
  352. metadata/generated/schema/events/api/__init__.py +1 -1
  353. metadata/generated/schema/events/api/createEventSubscription.py +1 -1
  354. metadata/generated/schema/events/dataInsightAlertConfig.py +1 -1
  355. metadata/generated/schema/events/emailAlertConfig.py +1 -1
  356. metadata/generated/schema/events/entitySpelFilters.py +1 -1
  357. metadata/generated/schema/events/eventFilterRule.py +1 -1
  358. metadata/generated/schema/events/eventSubscription.py +1 -1
  359. metadata/generated/schema/events/subscriptionResourceDescriptor.py +1 -1
  360. metadata/generated/schema/metadataIngestion/__init__.py +1 -1
  361. metadata/generated/schema/metadataIngestion/applicationPipeline.py +1 -1
  362. metadata/generated/schema/metadataIngestion/dashboardServiceMetadataPipeline.py +1 -1
  363. metadata/generated/schema/metadataIngestion/dataInsightPipeline.py +1 -1
  364. metadata/generated/schema/metadataIngestion/databaseServiceMetadataPipeline.py +1 -1
  365. metadata/generated/schema/metadataIngestion/databaseServiceProfilerPipeline.py +1 -1
  366. metadata/generated/schema/metadataIngestion/databaseServiceQueryLineagePipeline.py +1 -1
  367. metadata/generated/schema/metadataIngestion/databaseServiceQueryUsagePipeline.py +1 -1
  368. metadata/generated/schema/metadataIngestion/dbtPipeline.py +1 -1
  369. metadata/generated/schema/metadataIngestion/dbtconfig/__init__.py +1 -1
  370. metadata/generated/schema/metadataIngestion/dbtconfig/dbtAzureConfig.py +1 -1
  371. metadata/generated/schema/metadataIngestion/dbtconfig/dbtBucketDetails.py +1 -1
  372. metadata/generated/schema/metadataIngestion/dbtconfig/dbtCloudConfig.py +1 -1
  373. metadata/generated/schema/metadataIngestion/dbtconfig/dbtGCSConfig.py +1 -1
  374. metadata/generated/schema/metadataIngestion/dbtconfig/dbtHttpConfig.py +1 -1
  375. metadata/generated/schema/metadataIngestion/dbtconfig/dbtLocalConfig.py +1 -1
  376. metadata/generated/schema/metadataIngestion/dbtconfig/dbtS3Config.py +1 -1
  377. metadata/generated/schema/metadataIngestion/messagingServiceMetadataPipeline.py +1 -1
  378. metadata/generated/schema/metadataIngestion/metadataToElasticSearchPipeline.py +1 -1
  379. metadata/generated/schema/metadataIngestion/mlmodelServiceMetadataPipeline.py +1 -1
  380. metadata/generated/schema/metadataIngestion/pipelineServiceMetadataPipeline.py +1 -1
  381. metadata/generated/schema/metadataIngestion/searchServiceMetadataPipeline.py +1 -1
  382. metadata/generated/schema/metadataIngestion/storage/__init__.py +1 -1
  383. metadata/generated/schema/metadataIngestion/storage/containerMetadataConfig.py +1 -1
  384. metadata/generated/schema/metadataIngestion/storage/manifestMetadataConfig.py +1 -1
  385. metadata/generated/schema/metadataIngestion/storage/storageBucketDetails.py +1 -1
  386. metadata/generated/schema/metadataIngestion/storage/storageMetadataADLSConfig.py +1 -1
  387. metadata/generated/schema/metadataIngestion/storage/storageMetadataHttpConfig.py +1 -1
  388. metadata/generated/schema/metadataIngestion/storage/storageMetadataLocalConfig.py +1 -1
  389. metadata/generated/schema/metadataIngestion/storage/storageMetadataS3Config.py +1 -1
  390. metadata/generated/schema/metadataIngestion/storageServiceMetadataPipeline.py +1 -1
  391. metadata/generated/schema/metadataIngestion/testSuitePipeline.py +1 -1
  392. metadata/generated/schema/metadataIngestion/workflow.py +1 -1
  393. metadata/generated/schema/monitoring/__init__.py +1 -1
  394. metadata/generated/schema/monitoring/eventMonitorProvider.py +1 -1
  395. metadata/generated/schema/security/__init__.py +1 -1
  396. metadata/generated/schema/security/client/__init__.py +1 -1
  397. metadata/generated/schema/security/client/auth0SSOClientConfig.py +1 -1
  398. metadata/generated/schema/security/client/azureSSOClientConfig.py +1 -1
  399. metadata/generated/schema/security/client/customOidcSSOClientConfig.py +1 -1
  400. metadata/generated/schema/security/client/googleSSOClientConfig.py +1 -1
  401. metadata/generated/schema/security/client/oktaSSOClientConfig.py +1 -1
  402. metadata/generated/schema/security/client/openMetadataJWTClientConfig.py +1 -1
  403. metadata/generated/schema/security/client/samlSSOClientConfig.py +1 -1
  404. metadata/generated/schema/security/credentials/__init__.py +1 -1
  405. metadata/generated/schema/security/credentials/accessTokenAuth.py +1 -1
  406. metadata/generated/schema/security/credentials/apiAccessTokenAuth.py +18 -0
  407. metadata/generated/schema/security/credentials/awsCredentials.py +1 -1
  408. metadata/generated/schema/security/credentials/azureCredentials.py +1 -1
  409. metadata/generated/schema/security/credentials/basicAuth.py +1 -1
  410. metadata/generated/schema/security/credentials/bitbucketCredentials.py +1 -1
  411. metadata/generated/schema/security/credentials/gcpCredentials.py +1 -1
  412. metadata/generated/schema/security/credentials/gcpValues.py +1 -1
  413. metadata/generated/schema/security/credentials/gitCredentials.py +1 -1
  414. metadata/generated/schema/security/credentials/githubCredentials.py +1 -1
  415. metadata/generated/schema/security/secrets/__init__.py +1 -1
  416. metadata/generated/schema/security/secrets/secretsManagerClientLoader.py +1 -1
  417. metadata/generated/schema/security/secrets/secretsManagerConfiguration.py +1 -1
  418. metadata/generated/schema/security/secrets/secretsManagerProvider.py +1 -1
  419. metadata/generated/schema/security/securityConfiguration.py +1 -1
  420. metadata/generated/schema/security/ssl/__init__.py +1 -1
  421. metadata/generated/schema/security/ssl/validateSSLClientConfig.py +1 -1
  422. metadata/generated/schema/security/ssl/verifySSLConfig.py +1 -1
  423. metadata/generated/schema/settings/__init__.py +1 -1
  424. metadata/generated/schema/settings/settings.py +1 -1
  425. metadata/generated/schema/system/__init__.py +1 -1
  426. metadata/generated/schema/system/eventPublisherJob.py +1 -1
  427. metadata/generated/schema/system/ui/__init__.py +1 -1
  428. metadata/generated/schema/system/ui/knowledgePanel.py +1 -1
  429. metadata/generated/schema/system/ui/page.py +1 -1
  430. metadata/generated/schema/tests/__init__.py +1 -1
  431. metadata/generated/schema/tests/basic.py +1 -1
  432. metadata/generated/schema/tests/customMetric.py +1 -1
  433. metadata/generated/schema/tests/testCase.py +1 -1
  434. metadata/generated/schema/tests/testDefinition.py +1 -1
  435. metadata/generated/schema/tests/testSuite.py +1 -1
  436. metadata/generated/schema/type/__init__.py +1 -1
  437. metadata/generated/schema/type/auditLog.py +1 -1
  438. metadata/generated/schema/type/basic.py +1 -1
  439. metadata/generated/schema/type/bulkOperationResult.py +1 -1
  440. metadata/generated/schema/type/changeEvent.py +1 -1
  441. metadata/generated/schema/type/collectionDescriptor.py +1 -1
  442. metadata/generated/schema/type/csvDocumentation.py +1 -1
  443. metadata/generated/schema/type/csvErrorType.py +1 -1
  444. metadata/generated/schema/type/csvFile.py +1 -1
  445. metadata/generated/schema/type/csvImportResult.py +1 -1
  446. metadata/generated/schema/type/dailyCount.py +1 -1
  447. metadata/generated/schema/type/databaseConnectionConfig.py +1 -1
  448. metadata/generated/schema/type/entityHistory.py +1 -1
  449. metadata/generated/schema/type/entityLineage.py +1 -1
  450. metadata/generated/schema/type/entityReference.py +1 -1
  451. metadata/generated/schema/type/entityReferenceList.py +1 -1
  452. metadata/generated/schema/type/entityRelationship.py +1 -1
  453. metadata/generated/schema/type/entityUsage.py +1 -1
  454. metadata/generated/schema/type/filterPattern.py +1 -1
  455. metadata/generated/schema/type/function.py +1 -1
  456. metadata/generated/schema/type/include.py +1 -1
  457. metadata/generated/schema/type/jdbcConnection.py +1 -1
  458. metadata/generated/schema/type/lifeCycle.py +1 -1
  459. metadata/generated/schema/type/paging.py +1 -1
  460. metadata/generated/schema/type/profile.py +1 -1
  461. metadata/generated/schema/type/queryParserData.py +1 -1
  462. metadata/generated/schema/type/reaction.py +1 -1
  463. metadata/generated/schema/type/schedule.py +1 -1
  464. metadata/generated/schema/type/schema.py +1 -1
  465. metadata/generated/schema/type/tableQuery.py +1 -1
  466. metadata/generated/schema/type/tableUsageCount.py +1 -1
  467. metadata/generated/schema/type/tagLabel.py +1 -1
  468. metadata/generated/schema/type/usageDetails.py +1 -1
  469. metadata/generated/schema/type/usageRequest.py +1 -1
  470. metadata/generated/schema/type/votes.py +1 -1
  471. metadata/ingestion/api/parser.py +79 -26
  472. metadata/ingestion/api/topology_runner.py +14 -0
  473. metadata/ingestion/lineage/parser.py +20 -14
  474. metadata/ingestion/models/custom_properties.py +63 -0
  475. metadata/ingestion/ometa/mixins/custom_property_mixin.py +80 -0
  476. metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py +3 -2
  477. metadata/ingestion/ometa/mixins/patch_mixin_utils.py +0 -5
  478. metadata/ingestion/ometa/mixins/server_mixin.py +4 -2
  479. metadata/ingestion/ometa/ometa_api.py +4 -0
  480. metadata/ingestion/sink/metadata_rest.py +9 -0
  481. metadata/ingestion/source/database/dbt/constants.py +2 -0
  482. metadata/ingestion/source/database/dbt/metadata.py +13 -3
  483. metadata/ingestion/source/database/salesforce/metadata.py +1 -1
  484. metadata/ingestion/source/pipeline/airflow/metadata.py +19 -7
  485. metadata/profiler/interface/sqlalchemy/profiler_interface.py +1 -1
  486. metadata/utils/logger.py +13 -0
  487. metadata/utils/tag_utils.py +2 -2
  488. {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/METADATA +201 -201
  489. {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/RECORD +493 -488
  490. {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/LICENSE +0 -0
  491. {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/WHEEL +0 -0
  492. {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/entry_points.txt +0 -0
  493. {openmetadata_ingestion-1.2.3.2.dist-info → openmetadata_ingestion-1.2.4.0.dist-info}/top_level.txt +0 -0
@@ -11,12 +11,12 @@
11
11
  """
12
12
  Helper to parse workflow configurations
13
13
  """
14
- from typing import Optional, Type, TypeVar, Union
14
+ from typing import Type, TypeVar, Union
15
15
 
16
16
  from pydantic import BaseModel, ValidationError
17
17
 
18
- from metadata.generated.schema.entity.automations.testServiceConnection import (
19
- TestServiceConnectionRequest,
18
+ from metadata.generated.schema.entity.automations.workflow import (
19
+ Workflow as AutomationWorkflow,
20
20
  )
21
21
  from metadata.generated.schema.entity.services.dashboardService import (
22
22
  DashboardConnection,
@@ -26,6 +26,9 @@ from metadata.generated.schema.entity.services.databaseService import (
26
26
  DatabaseConnection,
27
27
  DatabaseServiceType,
28
28
  )
29
+ from metadata.generated.schema.entity.services.ingestionPipelines.ingestionPipeline import (
30
+ IngestionPipeline,
31
+ )
29
32
  from metadata.generated.schema.entity.services.messagingService import (
30
33
  MessagingConnection,
31
34
  MessagingServiceType,
@@ -271,13 +274,11 @@ def _parse_inner_connection(config_dict: dict, source_type: str) -> None:
271
274
  :param config_dict: JSON configuration
272
275
  :param source_type: source type name, e.g., Airflow.
273
276
  """
274
- inner_source_type = config_dict["source"]["serviceConnection"]["config"][
275
- "connection"
276
- ]["type"]
277
+ inner_source_type = config_dict["type"]
277
278
  inner_service_type = get_service_type(inner_source_type)
278
279
  inner_connection_class = get_connection_class(inner_source_type, inner_service_type)
279
280
  _unsafe_parse_config(
280
- config=config_dict["source"]["serviceConnection"]["config"]["connection"],
281
+ config=config_dict,
281
282
  cls=inner_connection_class,
282
283
  message=f"Error parsing the inner service connection for {source_type}",
283
284
  )
@@ -304,7 +305,12 @@ def parse_service_connection(config_dict: dict) -> None:
304
305
 
305
306
  if source_type in HAS_INNER_CONNECTION:
306
307
  # We will first parse the inner `connection` configuration
307
- _parse_inner_connection(config_dict, source_type)
308
+ _parse_inner_connection(
309
+ config_dict["source"]["serviceConnection"]["config"]["connection"][
310
+ "config"
311
+ ]["connection"],
312
+ source_type,
313
+ )
308
314
 
309
315
  # Parse the service connection dictionary with the scoped class
310
316
  _unsafe_parse_config(
@@ -434,37 +440,84 @@ def parse_workflow_config_gracefully(
434
440
  raise ParsingConfigurationError("Uncaught error when parsing the workflow!")
435
441
 
436
442
 
437
- def parse_test_connection_request_gracefully(
443
+ def parse_ingestion_pipeline_config_gracefully(
438
444
  config_dict: dict,
439
- ) -> Optional[TestServiceConnectionRequest]:
445
+ ) -> IngestionPipeline:
440
446
  """
441
- This function either correctly parses the pydantic class,
442
- or throws a scoped error while fetching the required source
443
- connection class
447
+ This function either correctly parses the pydantic class, or
448
+ throws a scoped error while fetching the required source connection
449
+ class.
444
450
 
445
- :param config_dict: JSON workflow config
446
- :return: TestServiceConnectionRequest or scoped error
451
+ :param config_dict: JSON ingestion pipeline config
452
+ :return:Ingestion Pipeline config or scoped error
447
453
  """
448
454
 
449
455
  try:
450
- test_service_connection = TestServiceConnectionRequest.parse_obj(config_dict)
451
- return test_service_connection
456
+ ingestion_pipeline = IngestionPipeline.parse_obj(config_dict)
457
+ return ingestion_pipeline
452
458
 
453
- except ValidationError as err:
454
- # Unsafe access to the keys. Allow a KeyError if the config is not well formatted
455
- source_type = config_dict["connection"]["config"]["type"]
456
- logger.warning(
457
- f"Error parsing the Workflow Configuration for {source_type} ingestion: {err}"
459
+ except ValidationError:
460
+ source_config_type = config_dict["sourceConfig"]["config"].get("type")
461
+
462
+ if source_config_type is None:
463
+ raise InvalidWorkflowException("Missing type in the sourceConfig config")
464
+
465
+ source_config_class = get_source_config_class(source_config_type)
466
+
467
+ _unsafe_parse_config(
468
+ config=config_dict["sourceConfig"]["config"],
469
+ cls=source_config_class,
470
+ message="Error parsing the source config",
471
+ )
472
+
473
+ raise ParsingConfigurationError(
474
+ "Uncaught error when parsing the Ingestion Pipeline!"
475
+ )
476
+
477
+
478
+ def parse_automation_workflow_gracefully(
479
+ config_dict: dict,
480
+ ) -> AutomationWorkflow:
481
+ """
482
+ This function either correctly parses the pydantic class, or
483
+ throws a scoped error while fetching the required source connection
484
+ class.
485
+
486
+ :param config_dict: JSON AutomationWorkflow config
487
+ :return: AutomationWorkflow config or scoped error
488
+ """
489
+
490
+ try:
491
+ automation_workflow = AutomationWorkflow.parse_obj(config_dict)
492
+ return automation_workflow
493
+
494
+ except ValidationError:
495
+ source_type = config_dict["request"]["connection"]["config"].get("type")
496
+
497
+ if source_type is None:
498
+ raise InvalidWorkflowException("Missing type in the connection config")
499
+
500
+ logger.debug(
501
+ f"Error parsing the Workflow Configuration for {source_type} ingestion"
458
502
  )
459
503
 
460
504
  service_type = get_service_type(source_type)
461
505
  connection_class = get_connection_class(source_type, service_type)
462
506
 
463
- # Parse the dictionary with the scoped class
507
+ if source_type in HAS_INNER_CONNECTION:
508
+ # We will first parse the inner `connection` configuration
509
+ _parse_inner_connection(
510
+ config_dict["request"]["connection"]["config"]["connection"],
511
+ source_type,
512
+ )
513
+
514
+ # Parse the service connection dictionary with the scoped class
464
515
  _unsafe_parse_config(
465
- config=config_dict["connection"]["config"],
516
+ config=config_dict["request"]["connection"]["config"],
466
517
  cls=connection_class,
467
- message="Error parsing the connection config",
518
+ message="Error parsing the service connection",
468
519
  )
469
520
 
470
- raise ParsingConfigurationError("Uncaught error when parsing the workflow!")
521
+ raise ParsingConfigurationError(
522
+ "Uncaught error when parsing the Ingestion Pipeline!"
523
+ )
@@ -26,6 +26,7 @@ from metadata.generated.schema.entity.data.database import Database
26
26
  from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema
27
27
  from metadata.generated.schema.entity.data.storedProcedure import StoredProcedure
28
28
  from metadata.ingestion.api.models import Either, Entity
29
+ from metadata.ingestion.models.custom_properties import OMetaCustomProperties
29
30
  from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
30
31
  from metadata.ingestion.models.patch_request import PatchRequest
31
32
  from metadata.ingestion.models.topology import (
@@ -387,6 +388,19 @@ class TopologyRunnerMixin(Generic[C]):
387
388
  # We'll keep the tag fqn in the context and use if required
388
389
  self.update_context(stage=stage, context=right)
389
390
 
391
+ @yield_and_update_context.register
392
+ def _(
393
+ self,
394
+ right: OMetaCustomProperties,
395
+ stage: NodeStage,
396
+ entity_request: Either[C],
397
+ ) -> Iterable[Either[Entity]]:
398
+ """Custom Property implementation for the context information"""
399
+ yield entity_request
400
+
401
+ # We'll keep the tag fqn in the context and use if required
402
+ self.update_context(stage=stage, context=right)
403
+
390
404
  @yield_and_update_context.register
391
405
  def _(
392
406
  self,
@@ -117,26 +117,32 @@ class LineageParser:
117
117
  # These are @lazy_property, not properly being picked up by IDEs. Ignore the warning
118
118
  return self.retrieve_tables(self.parser.target_tables)
119
119
 
120
+ # pylint: disable=protected-access
120
121
  @cached_property
121
122
  def column_lineage(self) -> List[Tuple[Column, Column]]:
122
123
  """
123
124
  Get a list of tuples of column lineage
124
125
  """
125
- if self.parser._dialect == SQLPARSE_DIALECT: # pylint: disable=protected-access
126
- return self.parser.get_column_lineage()
127
126
  column_lineage = []
128
- for col_lineage in self.parser.get_column_lineage():
129
- # In case of column level lineage it is possible that we get
130
- # two or more columns as there might be some intermediate columns
131
- # but the source columns will be the first value and
132
- # the target column always will be the last columns
133
- src_column = col_lineage[0]
134
- tgt_column = col_lineage[-1]
135
- src_col = Column(src_column.raw_name)
136
- src_col._parent = src_column._parent # pylint: disable=protected-access
137
- tgt_col = Column(tgt_column.raw_name)
138
- tgt_col._parent = tgt_column._parent # pylint: disable=protected-access
139
- column_lineage.append((src_col, tgt_col))
127
+ try:
128
+ if self.parser._dialect == SQLPARSE_DIALECT:
129
+ return self.parser.get_column_lineage()
130
+
131
+ for col_lineage in self.parser.get_column_lineage():
132
+ # In case of column level lineage it is possible that we get
133
+ # two or more columns as there might be some intermediate columns
134
+ # but the source columns will be the first value and
135
+ # the target column always will be the last columns
136
+ src_column = col_lineage[0]
137
+ tgt_column = col_lineage[-1]
138
+ src_col = Column(src_column.raw_name)
139
+ src_col._parent = src_column._parent # pylint: disable=protected-access
140
+ tgt_col = Column(tgt_column.raw_name)
141
+ tgt_col._parent = tgt_column._parent # pylint: disable=protected-access
142
+ column_lineage.append((src_col, tgt_col))
143
+ except Exception as err:
144
+ logger.warning(f"Failed to fetch column level lineage due to: {err}")
145
+ logger.debug(traceback.format_exc())
140
146
  return column_lineage
141
147
 
142
148
  @cached_property
@@ -0,0 +1,63 @@
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
+ Custom models for custom properties
13
+ """
14
+ from enum import Enum
15
+ from typing import Optional, Type, TypeVar
16
+
17
+ from pydantic import BaseModel
18
+
19
+ from metadata.generated.schema.api.data.createCustomProperty import (
20
+ CreateCustomPropertyRequest,
21
+ )
22
+ from metadata.generated.schema.type import basic, entityHistory
23
+
24
+ T = TypeVar("T", bound=BaseModel)
25
+
26
+
27
+ class CustomPropertyDataTypes(Enum):
28
+ STRING = "string"
29
+ INTEGER = "integer"
30
+ MARKDOWN = "markdown"
31
+ DATE = "date"
32
+ DATETIME = "dateTime"
33
+ DURATION = "duration"
34
+ EMAIL = "email"
35
+ NUMBER = "number"
36
+ SQLQUERY = "sqlQuery"
37
+ TIME = "time"
38
+ TIMEINTERVAL = "timeInterval"
39
+ TIMESTAMP = "timestamp"
40
+
41
+
42
+ class OMetaCustomProperties(BaseModel):
43
+ entity_type: Type[T]
44
+ custom_property_type: Optional[CustomPropertyDataTypes]
45
+ createCustomPropertyRequest: CreateCustomPropertyRequest
46
+
47
+
48
+ class CustomPropertyType(BaseModel):
49
+ """
50
+ Pydantic Model for custom properties
51
+ """
52
+
53
+ id: basic.Uuid
54
+ name: basic.EntityName
55
+ displayName: Optional[str]
56
+ fullyQualifiedName: Optional[basic.FullyQualifiedEntityName]
57
+ description: Optional[basic.Markdown]
58
+ category: Optional[str]
59
+ nameSpace: Optional[str]
60
+ version: Optional[entityHistory.EntityVersion]
61
+ updatedAt: Optional[basic.Timestamp]
62
+ updatedBy: Optional[str]
63
+ href: Optional[basic.Href]
@@ -0,0 +1,80 @@
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
+ Mixin class containing Custom Property specific methods
13
+
14
+ To be used by OpenMetadata class
15
+ """
16
+ from typing import Dict
17
+
18
+ from metadata.generated.schema.api.data.createCustomProperty import PropertyType
19
+ from metadata.ingestion.models.custom_properties import (
20
+ CustomPropertyDataTypes,
21
+ CustomPropertyType,
22
+ OMetaCustomProperties,
23
+ )
24
+ from metadata.ingestion.ometa.client import REST
25
+ from metadata.utils.constants import ENTITY_REFERENCE_TYPE_MAP
26
+ from metadata.utils.logger import ometa_logger
27
+
28
+ logger = ometa_logger()
29
+
30
+
31
+ class OMetaCustomPropertyMixin:
32
+ """
33
+ OpenMetadata API methods related to CustomProperty.
34
+
35
+ To be inherited by OpenMetadata
36
+ """
37
+
38
+ client: REST
39
+
40
+ def create_or_update_custom_property(
41
+ self, ometa_custom_property: OMetaCustomProperties
42
+ ) -> Dict:
43
+ """Create or update custom property. If custom property name matches an existing
44
+ one then it will be updated.
45
+
46
+ Args:
47
+ ometa_custom_property (OMetaCustomProperties): custom property to be create or updated
48
+ """
49
+ # Get the json schema id of the entity to be updated
50
+ entity_type = ENTITY_REFERENCE_TYPE_MAP.get(
51
+ ometa_custom_property.entity_type.__name__
52
+ )
53
+ entity_schema = self.client.get(
54
+ f"/metadata/types/name/{entity_type}?category=field"
55
+ )
56
+
57
+ # Get the data type of the custom property
58
+ if not ometa_custom_property.createCustomPropertyRequest.propertyType:
59
+ custom_property_type = self.get_custom_property_type(
60
+ data_type=ometa_custom_property.custom_property_type
61
+ )
62
+ property_type = PropertyType(id=custom_property_type.id, type="type")
63
+ ometa_custom_property.createCustomPropertyRequest.propertyType = (
64
+ property_type
65
+ )
66
+
67
+ resp = self.client.put(
68
+ f"/metadata/types/{entity_schema.get('id')}",
69
+ data=ometa_custom_property.createCustomPropertyRequest.json(),
70
+ )
71
+ return resp
72
+
73
+ def get_custom_property_type(
74
+ self, data_type: CustomPropertyDataTypes
75
+ ) -> CustomPropertyType:
76
+ """
77
+ Get all the supported datatypes for the custom properties
78
+ """
79
+ resp = self.client.get(f"/metadata/types/name/{data_type.value}?category=field")
80
+ return CustomPropertyType(**resp)
@@ -20,6 +20,7 @@ from metadata.generated.schema.entity.services.ingestionPipelines.ingestionPipel
20
20
  IngestionPipeline,
21
21
  PipelineStatus,
22
22
  )
23
+ from metadata.ingestion.api.parser import parse_ingestion_pipeline_config_gracefully
23
24
  from metadata.ingestion.ometa.client import REST
24
25
  from metadata.utils.logger import ometa_logger
25
26
 
@@ -79,7 +80,7 @@ class OMetaIngestionPipelineMixin:
79
80
  f"{self.get_suffix(IngestionPipeline)}/trigger/{ingestion_pipeline_id}"
80
81
  )
81
82
 
82
- return IngestionPipeline.parse_obj(resp)
83
+ return parse_ingestion_pipeline_config_gracefully(resp)
83
84
 
84
85
  def get_pipeline_status_between_ts(
85
86
  self,
@@ -125,6 +126,6 @@ class OMetaIngestionPipelineMixin:
125
126
  )
126
127
 
127
128
  if hasattr(resp, "sourceConfig"):
128
- return IngestionPipeline.parse_obj(resp)
129
+ return parse_ingestion_pipeline_config_gracefully(resp)
129
130
 
130
131
  return None
@@ -21,10 +21,8 @@ from typing import Generic, List, Optional, Type, TypeVar, Union
21
21
  from pydantic import BaseModel
22
22
 
23
23
  from metadata.generated.schema.type import basic
24
- from metadata.utils.logger import ometa_logger
25
24
 
26
25
  T = TypeVar("T", bound=BaseModel)
27
- logger = ometa_logger()
28
26
 
29
27
 
30
28
  class PatchField(str, Enum):
@@ -140,9 +138,6 @@ class OMetaPatchMixinBase(Generic[T]):
140
138
  instance = self.get_by_id(entity=entity, entity_id=entity_id, fields=fields)
141
139
 
142
140
  if not instance:
143
- logger.warning(
144
- f"Cannot find an instance of '{entity.__class__.__name__}' with id [{str(entity_id)}]."
145
- )
146
141
  return None
147
142
 
148
143
  return instance
@@ -60,11 +60,13 @@ class OMetaServerMixin:
60
60
  Validate Server & Client versions. They should match.
61
61
  Otherwise, raise VersionMismatchException
62
62
  """
63
- logger.debug("Validating client and server versions")
64
-
65
63
  server_version = self.get_server_version()
66
64
  client_version = get_client_version()
67
65
 
66
+ logger.info(
67
+ f"OpenMetadata client running with Server version [{server_version}] and Client version [{client_version}]"
68
+ )
69
+
68
70
  # Server version will be 0.13.2, vs 0.13.2.X from the client.
69
71
  # If the server version is contained in the client version, then we're good to go
70
72
  if server_version not in client_version:
@@ -33,6 +33,9 @@ from metadata.generated.schema.type.entityReference import EntityReference
33
33
  from metadata.ingestion.models.encoders import show_secrets_encoder
34
34
  from metadata.ingestion.ometa.auth_provider import AuthenticationProvider
35
35
  from metadata.ingestion.ometa.client import REST, APIError, ClientConfig
36
+ from metadata.ingestion.ometa.mixins.custom_property_mixin import (
37
+ OMetaCustomPropertyMixin,
38
+ )
36
39
  from metadata.ingestion.ometa.mixins.dashboard_mixin import OMetaDashboardMixin
37
40
  from metadata.ingestion.ometa.mixins.data_insight_mixin import DataInsightMixin
38
41
  from metadata.ingestion.ometa.mixins.es_mixin import ESMixin
@@ -110,6 +113,7 @@ class OpenMetadata(
110
113
  OMetaQueryMixin,
111
114
  OMetaRolePolicyMixin,
112
115
  OMetaSearchIndexMixin,
116
+ OMetaCustomPropertyMixin,
113
117
  Generic[T, C],
114
118
  ):
115
119
  """
@@ -51,6 +51,7 @@ from metadata.generated.schema.tests.testSuite import TestSuite
51
51
  from metadata.generated.schema.type.schema import Topic
52
52
  from metadata.ingestion.api.models import Either, Entity, StackTraceError
53
53
  from metadata.ingestion.api.steps import Sink
54
+ from metadata.ingestion.models.custom_properties import OMetaCustomProperties
54
55
  from metadata.ingestion.models.data_insight import OMetaDataInsightSample
55
56
  from metadata.ingestion.models.delete_entity import DeleteEntity
56
57
  from metadata.ingestion.models.life_cycle import OMetaLifeCycleData
@@ -172,6 +173,14 @@ class MetadataRestSink(Sink): # pylint: disable=too-many-public-methods
172
173
  )
173
174
  return Either(right=entity)
174
175
 
176
+ @_run_dispatch.register
177
+ def write_custom_properties(self, record: OMetaCustomProperties) -> Either[Dict]:
178
+ """
179
+ Create or update the custom properties
180
+ """
181
+ custom_property = self.metadata.create_or_update_custom_property(record)
182
+ return Either(right=custom_property)
183
+
175
184
  @_run_dispatch.register
176
185
  def write_datamodel(self, datamodel_link: DataModelLink) -> Either[DataModel]:
177
186
  """
@@ -14,6 +14,8 @@ Constants required for dbt
14
14
 
15
15
  from enum import Enum
16
16
 
17
+ DBT_RUN_RESULT_DATE_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
18
+
17
19
  # Based on https://schemas.getdbt.com/dbt/manifest/v7/index.html
18
20
  REQUIRED_MANIFEST_KEYS = ["name", "schema", "resource_type"]
19
21
 
@@ -59,6 +59,7 @@ from metadata.ingestion.ometa.ometa_api import OpenMetadata
59
59
  from metadata.ingestion.source.database.column_type_parser import ColumnTypeParser
60
60
  from metadata.ingestion.source.database.database_service import DataModelLink
61
61
  from metadata.ingestion.source.database.dbt.constants import (
62
+ DBT_RUN_RESULT_DATE_FORMAT,
62
63
  REQUIRED_CATALOG_KEYS,
63
64
  REQUIRED_MANIFEST_KEYS,
64
65
  DbtCommonEnum,
@@ -870,12 +871,21 @@ class DbtSource(DbtServiceSource):
870
871
  dbt_test_completed_at = dbt_test_timing.completed_at
871
872
  dbt_timestamp = None
872
873
  if dbt_test_completed_at:
873
- dbt_timestamp = dbt_test_completed_at.timestamp()
874
+ dbt_timestamp = dbt_test_completed_at
874
875
  elif self.context.run_results_generate_time:
875
- dbt_timestamp = self.context.run_results_generate_time.timestamp()
876
+ dbt_timestamp = self.context.run_results_generate_time
877
+
878
+ # check if the timestamp is a str type and convert accordingly
879
+ if isinstance(dbt_timestamp, str):
880
+ dbt_timestamp = datetime.strptime(
881
+ dbt_timestamp, DBT_RUN_RESULT_DATE_FORMAT
882
+ )
883
+
876
884
  # Create the test case result object
877
885
  test_case_result = TestCaseResult(
878
- timestamp=convert_timestamp_to_milliseconds(dbt_timestamp),
886
+ timestamp=convert_timestamp_to_milliseconds(
887
+ dbt_timestamp.timestamp()
888
+ ),
879
889
  testCaseStatus=test_case_status,
880
890
  testResultValue=[
881
891
  TestResultValue(
@@ -213,7 +213,7 @@ class SalesforceSource(DatabaseServiceSource):
213
213
  entity_type=DatabaseSchema,
214
214
  service_name=self.context.database_service,
215
215
  database_name=self.context.database,
216
- schema_name=self.context.database.database_schema,
216
+ schema_name=self.context.database_schema,
217
217
  ),
218
218
  sourceUrl=self.get_source_url(
219
219
  table_name=table_name,
@@ -13,6 +13,7 @@ Airflow source to extract metadata from OM UI
13
13
  """
14
14
  import traceback
15
15
  from datetime import datetime
16
+ from enum import Enum
16
17
  from typing import Iterable, List, Optional, cast
17
18
 
18
19
  from airflow.models import BaseOperator, DagRun, TaskInstance
@@ -61,10 +62,18 @@ from metadata.utils.logger import ingestion_logger
61
62
 
62
63
  logger = ingestion_logger()
63
64
 
65
+
66
+ class AirflowTaskStatus(Enum):
67
+ SUCCESS = "success"
68
+ FAILED = "failed"
69
+ QUEUED = "queued"
70
+ REMOVED = "removed"
71
+
72
+
64
73
  STATUS_MAP = {
65
- "success": StatusType.Successful.value,
66
- "failed": StatusType.Failed.value,
67
- "queued": StatusType.Pending.value,
74
+ AirflowTaskStatus.SUCCESS.value: StatusType.Successful.value,
75
+ AirflowTaskStatus.FAILED.value: StatusType.Failed.value,
76
+ AirflowTaskStatus.QUEUED.value: StatusType.Pending.value,
68
77
  }
69
78
 
70
79
 
@@ -169,12 +178,15 @@ class AirflowSource(PipelineServiceSource):
169
178
  TaskInstance.end_date,
170
179
  TaskInstance.run_id,
171
180
  )
172
- .filter(TaskInstance.dag_id == dag_id, TaskInstance.run_id == run_id)
181
+ .filter(
182
+ TaskInstance.dag_id == dag_id,
183
+ TaskInstance.run_id == run_id,
184
+ # updating old runs flag deleted tasks as `removed`
185
+ TaskInstance.state != AirflowTaskStatus.REMOVED,
186
+ )
173
187
  .all()
174
188
  )
175
- except Exception as exc: # pylint: disable=broad-except
176
- # Using a broad Exception here as the backend can come in many flavours (pymysql, pyodbc...)
177
- # And we don't want to force all imports
189
+ except Exception as exc:
178
190
  logger.debug(traceback.format_exc())
179
191
  logger.warning(
180
192
  f"Tried to get TaskInstances with run_id. It might not be available in older Airflow versions - {exc}."
@@ -399,6 +399,7 @@ class SQAProfilerInterface(ProfilerInterface, SQAInterfaceMixin):
399
399
  table,
400
400
  sample,
401
401
  )
402
+ row = None
402
403
 
403
404
  try:
404
405
  row = self._get_metric_fn[metric_type.value](
@@ -412,7 +413,6 @@ class SQAProfilerInterface(ProfilerInterface, SQAInterfaceMixin):
412
413
  error = f"{column if column is not None else runner.table.__tablename__} metric_type.value: {exc}"
413
414
  logger.error(error)
414
415
  self.status.failed_profiler(error, traceback.format_exc())
415
- row = None
416
416
 
417
417
  if column is not None:
418
418
  column = column.name
metadata/utils/logger.py CHANGED
@@ -28,6 +28,8 @@ from metadata.ingestion.api.models import Entity
28
28
  from metadata.ingestion.models.delete_entity import DeleteEntity
29
29
  from metadata.ingestion.models.life_cycle import OMetaLifeCycleData
30
30
  from metadata.ingestion.models.ometa_classification import OMetaTagAndClassification
31
+ from metadata.ingestion.models.patch_request import PatchRequest
32
+ from metadata.ingestion.models.pipeline_status import OMetaPipelineStatus
31
33
 
32
34
  METADATA_LOGGER = "metadata"
33
35
  BASE_LOGGING_FORMAT = (
@@ -251,3 +253,14 @@ def _(_: TestCaseResults) -> Optional[str]:
251
253
  @get_log_name.register
252
254
  def _(record: TestCaseResultResponse) -> str:
253
255
  return record.testCase.fullyQualifiedName.__root__
256
+
257
+
258
+ @get_log_name.register
259
+ def _(record: OMetaPipelineStatus) -> str:
260
+ return f"Pipeline Status [{record.pipeline_fqn}]"
261
+
262
+
263
+ @get_log_name.register
264
+ def _(record: PatchRequest) -> str:
265
+ """Get the log of the new entity"""
266
+ return get_log_name(record.new_entity)
@@ -40,8 +40,8 @@ logger = ingestion_logger()
40
40
  def get_ometa_tag_and_classification(
41
41
  tags: List[str],
42
42
  classification_name: str,
43
- tag_description: Optional[str],
44
- classification_description: Optional[str],
43
+ tag_description: Optional[str] = None,
44
+ classification_description: Optional[str] = None,
45
45
  include_tags: bool = True,
46
46
  tag_fqn: Optional[FullyQualifiedEntityName] = None,
47
47
  ) -> Iterable[Either[OMetaTagAndClassification]]: