acryl-datahub-cloud 0.3.10rc4__py3-none-any.whl → 0.3.16.1rc0__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 acryl-datahub-cloud might be problematic. Click here for more details.

Files changed (243) hide show
  1. acryl_datahub_cloud/_codegen_config.json +1 -1
  2. acryl_datahub_cloud/acryl_cs_issues/acryl_customer.py +1 -1
  3. acryl_datahub_cloud/acryl_cs_issues/models.py +5 -3
  4. acryl_datahub_cloud/action_request/action_request_owner_source.py +37 -8
  5. acryl_datahub_cloud/datahub_forms_notifications/__init__.py +0 -0
  6. acryl_datahub_cloud/datahub_forms_notifications/forms_notifications_source.py +569 -0
  7. acryl_datahub_cloud/datahub_forms_notifications/get_feature_flag.gql +7 -0
  8. acryl_datahub_cloud/datahub_forms_notifications/get_search_results_total.gql +14 -0
  9. acryl_datahub_cloud/datahub_forms_notifications/query.py +17 -0
  10. acryl_datahub_cloud/datahub_forms_notifications/scroll_forms_for_notification.gql +29 -0
  11. acryl_datahub_cloud/datahub_forms_notifications/send_form_notification_request.gql +5 -0
  12. acryl_datahub_cloud/datahub_reporting/datahub_dataset.py +39 -19
  13. acryl_datahub_cloud/datahub_reporting/datahub_form_reporting.py +60 -25
  14. acryl_datahub_cloud/datahub_reporting/extract_graph.py +9 -3
  15. acryl_datahub_cloud/datahub_reporting/extract_sql.py +248 -52
  16. acryl_datahub_cloud/datahub_reporting/forms.py +1 -1
  17. acryl_datahub_cloud/datahub_reporting/forms_config.py +3 -2
  18. acryl_datahub_cloud/datahub_restore/source.py +3 -2
  19. acryl_datahub_cloud/datahub_usage_reporting/excluded.py +94 -0
  20. acryl_datahub_cloud/datahub_usage_reporting/query_builder.py +48 -8
  21. acryl_datahub_cloud/datahub_usage_reporting/usage_feature_reporter.py +532 -109
  22. acryl_datahub_cloud/elasticsearch/graph_service.py +76 -14
  23. acryl_datahub_cloud/graphql_utils.py +64 -0
  24. acryl_datahub_cloud/lineage_features/source.py +555 -49
  25. acryl_datahub_cloud/metadata/_urns/urn_defs.py +2390 -1938
  26. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/actionworkflow/__init__.py +53 -0
  27. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/anomaly/__init__.py +2 -0
  28. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/application/__init__.py +19 -0
  29. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/assertion/__init__.py +6 -2
  30. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/common/__init__.py +6 -0
  31. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/conversation/__init__.py +29 -0
  32. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/event/notification/settings/__init__.py +2 -0
  33. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/execution/__init__.py +2 -0
  34. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/file/__init__.py +19 -0
  35. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/form/__init__.py +8 -0
  36. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/identity/__init__.py +8 -0
  37. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/knowledge/__init__.py +33 -0
  38. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/logical/__init__.py +15 -0
  39. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/metadata/key/__init__.py +14 -0
  40. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/metadata/search/features/__init__.py +2 -0
  41. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/module/__init__.py +31 -0
  42. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/monitor/__init__.py +6 -0
  43. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/notification/__init__.py +19 -0
  44. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/platform/event/v1/__init__.py +4 -0
  45. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/role/__init__.py +2 -0
  46. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/settings/asset/__init__.py +19 -0
  47. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/settings/global/__init__.py +28 -0
  48. acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/template/__init__.py +31 -0
  49. acryl_datahub_cloud/metadata/schema.avsc +27843 -23200
  50. acryl_datahub_cloud/metadata/schema_classes.py +29901 -24310
  51. acryl_datahub_cloud/metadata/schemas/ActionRequestInfo.avsc +235 -2
  52. acryl_datahub_cloud/metadata/schemas/ActionWorkflowInfo.avsc +683 -0
  53. acryl_datahub_cloud/metadata/schemas/ActionWorkflowKey.avsc +21 -0
  54. acryl_datahub_cloud/metadata/schemas/Actors.avsc +38 -1
  55. acryl_datahub_cloud/metadata/schemas/ApplicationKey.avsc +31 -0
  56. acryl_datahub_cloud/metadata/schemas/ApplicationProperties.avsc +75 -0
  57. acryl_datahub_cloud/metadata/schemas/Applications.avsc +38 -0
  58. acryl_datahub_cloud/metadata/schemas/AssertionAnalyticsRunEvent.avsc +375 -212
  59. acryl_datahub_cloud/metadata/schemas/AssertionInfo.avsc +147 -20
  60. acryl_datahub_cloud/metadata/schemas/AssertionKey.avsc +1 -1
  61. acryl_datahub_cloud/metadata/schemas/AssertionRunEvent.avsc +191 -21
  62. acryl_datahub_cloud/metadata/schemas/{AssertionSummary.avsc → AssertionRunSummary.avsc} +15 -2
  63. acryl_datahub_cloud/metadata/schemas/AssertionsSummary.avsc +54 -0
  64. acryl_datahub_cloud/metadata/schemas/AssetSettings.avsc +63 -0
  65. acryl_datahub_cloud/metadata/schemas/BusinessAttributeInfo.avsc +7 -3
  66. acryl_datahub_cloud/metadata/schemas/ChartInfo.avsc +20 -6
  67. acryl_datahub_cloud/metadata/schemas/ChartKey.avsc +1 -0
  68. acryl_datahub_cloud/metadata/schemas/ConstraintInfo.avsc +12 -1
  69. acryl_datahub_cloud/metadata/schemas/ContainerKey.avsc +1 -0
  70. acryl_datahub_cloud/metadata/schemas/ContainerProperties.avsc +16 -5
  71. acryl_datahub_cloud/metadata/schemas/CorpGroupEditableInfo.avsc +2 -1
  72. acryl_datahub_cloud/metadata/schemas/CorpGroupInfo.avsc +7 -3
  73. acryl_datahub_cloud/metadata/schemas/CorpGroupKey.avsc +2 -1
  74. acryl_datahub_cloud/metadata/schemas/CorpGroupSettings.avsc +127 -2
  75. acryl_datahub_cloud/metadata/schemas/CorpUserEditableInfo.avsc +1 -1
  76. acryl_datahub_cloud/metadata/schemas/CorpUserInfo.avsc +18 -2
  77. acryl_datahub_cloud/metadata/schemas/CorpUserInvitationStatus.avsc +106 -0
  78. acryl_datahub_cloud/metadata/schemas/CorpUserKey.avsc +4 -1
  79. acryl_datahub_cloud/metadata/schemas/CorpUserSettings.avsc +304 -2
  80. acryl_datahub_cloud/metadata/schemas/CorpUserUsageFeatures.avsc +86 -0
  81. acryl_datahub_cloud/metadata/schemas/DashboardInfo.avsc +11 -5
  82. acryl_datahub_cloud/metadata/schemas/DashboardKey.avsc +1 -0
  83. acryl_datahub_cloud/metadata/schemas/DataContractKey.avsc +2 -1
  84. acryl_datahub_cloud/metadata/schemas/DataFlowInfo.avsc +15 -5
  85. acryl_datahub_cloud/metadata/schemas/DataFlowKey.avsc +1 -0
  86. acryl_datahub_cloud/metadata/schemas/DataHubAiConversationInfo.avsc +256 -0
  87. acryl_datahub_cloud/metadata/schemas/DataHubAiConversationKey.avsc +22 -0
  88. acryl_datahub_cloud/metadata/schemas/DataHubFileInfo.avsc +234 -0
  89. acryl_datahub_cloud/metadata/schemas/DataHubFileKey.avsc +22 -0
  90. acryl_datahub_cloud/metadata/schemas/DataHubIngestionSourceKey.avsc +2 -1
  91. acryl_datahub_cloud/metadata/schemas/DataHubOpenAPISchemaKey.avsc +22 -0
  92. acryl_datahub_cloud/metadata/schemas/DataHubPageModuleKey.avsc +21 -0
  93. acryl_datahub_cloud/metadata/schemas/DataHubPageModuleProperties.avsc +308 -0
  94. acryl_datahub_cloud/metadata/schemas/DataHubPageTemplateKey.avsc +21 -0
  95. acryl_datahub_cloud/metadata/schemas/DataHubPageTemplateProperties.avsc +251 -0
  96. acryl_datahub_cloud/metadata/schemas/DataHubPolicyInfo.avsc +12 -1
  97. acryl_datahub_cloud/metadata/schemas/DataJobInfo.avsc +13 -4
  98. acryl_datahub_cloud/metadata/schemas/DataJobInputOutput.avsc +8 -0
  99. acryl_datahub_cloud/metadata/schemas/DataJobKey.avsc +1 -0
  100. acryl_datahub_cloud/metadata/schemas/DataPlatformInfo.avsc +3 -1
  101. acryl_datahub_cloud/metadata/schemas/DataPlatformInstanceProperties.avsc +5 -2
  102. acryl_datahub_cloud/metadata/schemas/DataProcessKey.avsc +4 -0
  103. acryl_datahub_cloud/metadata/schemas/DataProductKey.avsc +2 -0
  104. acryl_datahub_cloud/metadata/schemas/DataProductProperties.avsc +6 -3
  105. acryl_datahub_cloud/metadata/schemas/DataTransformLogic.avsc +4 -2
  106. acryl_datahub_cloud/metadata/schemas/DataTypeInfo.avsc +5 -0
  107. acryl_datahub_cloud/metadata/schemas/DatasetKey.avsc +10 -2
  108. acryl_datahub_cloud/metadata/schemas/DatasetProperties.avsc +12 -5
  109. acryl_datahub_cloud/metadata/schemas/DatasetUsageStatistics.avsc +8 -0
  110. acryl_datahub_cloud/metadata/schemas/DocumentInfo.avsc +407 -0
  111. acryl_datahub_cloud/metadata/schemas/DocumentKey.avsc +35 -0
  112. acryl_datahub_cloud/metadata/schemas/DocumentSettings.avsc +79 -0
  113. acryl_datahub_cloud/metadata/schemas/DomainKey.avsc +2 -0
  114. acryl_datahub_cloud/metadata/schemas/DomainProperties.avsc +7 -3
  115. acryl_datahub_cloud/metadata/schemas/EditableContainerProperties.avsc +2 -1
  116. acryl_datahub_cloud/metadata/schemas/EditableDashboardProperties.avsc +2 -1
  117. acryl_datahub_cloud/metadata/schemas/EditableDataFlowProperties.avsc +2 -1
  118. acryl_datahub_cloud/metadata/schemas/EditableDataJobProperties.avsc +2 -1
  119. acryl_datahub_cloud/metadata/schemas/EditableDatasetProperties.avsc +2 -1
  120. acryl_datahub_cloud/metadata/schemas/EditableERModelRelationshipProperties.avsc +2 -1
  121. acryl_datahub_cloud/metadata/schemas/EditableMLFeatureProperties.avsc +2 -1
  122. acryl_datahub_cloud/metadata/schemas/EditableMLFeatureTableProperties.avsc +2 -1
  123. acryl_datahub_cloud/metadata/schemas/EditableMLModelGroupProperties.avsc +2 -1
  124. acryl_datahub_cloud/metadata/schemas/EditableMLModelProperties.avsc +2 -1
  125. acryl_datahub_cloud/metadata/schemas/EditableNotebookProperties.avsc +2 -1
  126. acryl_datahub_cloud/metadata/schemas/EditableSchemaMetadata.avsc +4 -2
  127. acryl_datahub_cloud/metadata/schemas/EntityTypeInfo.avsc +5 -0
  128. acryl_datahub_cloud/metadata/schemas/ExecutionRequestArtifactsLocation.avsc +16 -0
  129. acryl_datahub_cloud/metadata/schemas/ExecutionRequestKey.avsc +2 -1
  130. acryl_datahub_cloud/metadata/schemas/FormAssignmentStatus.avsc +36 -0
  131. acryl_datahub_cloud/metadata/schemas/FormInfo.avsc +6 -0
  132. acryl_datahub_cloud/metadata/schemas/FormKey.avsc +3 -1
  133. acryl_datahub_cloud/metadata/schemas/FormNotifications.avsc +69 -0
  134. acryl_datahub_cloud/metadata/schemas/FormSettings.avsc +30 -0
  135. acryl_datahub_cloud/metadata/schemas/GlobalSettingsInfo.avsc +416 -0
  136. acryl_datahub_cloud/metadata/schemas/GlobalTags.avsc +2 -1
  137. acryl_datahub_cloud/metadata/schemas/GlossaryNodeInfo.avsc +3 -1
  138. acryl_datahub_cloud/metadata/schemas/GlossaryNodeKey.avsc +1 -0
  139. acryl_datahub_cloud/metadata/schemas/GlossaryTermInfo.avsc +3 -1
  140. acryl_datahub_cloud/metadata/schemas/GlossaryTermKey.avsc +2 -0
  141. acryl_datahub_cloud/metadata/schemas/IcebergWarehouseInfo.avsc +4 -0
  142. acryl_datahub_cloud/metadata/schemas/IncidentActivityEvent.avsc +3 -3
  143. acryl_datahub_cloud/metadata/schemas/IncidentInfo.avsc +3 -3
  144. acryl_datahub_cloud/metadata/schemas/InferredMetadata.avsc +71 -1
  145. acryl_datahub_cloud/metadata/schemas/InputFields.avsc +2 -1
  146. acryl_datahub_cloud/metadata/schemas/InviteToken.avsc +26 -0
  147. acryl_datahub_cloud/metadata/schemas/LineageFeatures.avsc +67 -42
  148. acryl_datahub_cloud/metadata/schemas/LogicalParent.avsc +145 -0
  149. acryl_datahub_cloud/metadata/schemas/MLFeatureKey.avsc +4 -1
  150. acryl_datahub_cloud/metadata/schemas/MLFeatureTableKey.avsc +4 -1
  151. acryl_datahub_cloud/metadata/schemas/MLModelDeploymentKey.avsc +7 -1
  152. acryl_datahub_cloud/metadata/schemas/MLModelDeploymentProperties.avsc +3 -0
  153. acryl_datahub_cloud/metadata/schemas/MLModelGroupKey.avsc +9 -1
  154. acryl_datahub_cloud/metadata/schemas/MLModelKey.avsc +9 -1
  155. acryl_datahub_cloud/metadata/schemas/MLModelProperties.avsc +4 -2
  156. acryl_datahub_cloud/metadata/schemas/MLPrimaryKeyKey.avsc +4 -1
  157. acryl_datahub_cloud/metadata/schemas/MetadataChangeEvent.avsc +424 -97
  158. acryl_datahub_cloud/metadata/schemas/MetadataChangeLog.avsc +65 -44
  159. acryl_datahub_cloud/metadata/schemas/MetadataChangeProposal.avsc +64 -0
  160. acryl_datahub_cloud/metadata/schemas/MonitorAnomalyEvent.avsc +84 -29
  161. acryl_datahub_cloud/metadata/schemas/MonitorInfo.avsc +221 -23
  162. acryl_datahub_cloud/metadata/schemas/MonitorKey.avsc +9 -1
  163. acryl_datahub_cloud/metadata/schemas/MonitorSuiteInfo.avsc +128 -3
  164. acryl_datahub_cloud/metadata/schemas/NotebookInfo.avsc +5 -2
  165. acryl_datahub_cloud/metadata/schemas/NotebookKey.avsc +1 -0
  166. acryl_datahub_cloud/metadata/schemas/NotificationRequest.avsc +91 -4
  167. acryl_datahub_cloud/metadata/schemas/Operation.avsc +17 -0
  168. acryl_datahub_cloud/metadata/schemas/Ownership.avsc +71 -1
  169. acryl_datahub_cloud/metadata/schemas/QueryProperties.avsc +4 -2
  170. acryl_datahub_cloud/metadata/schemas/QuerySubjects.avsc +2 -13
  171. acryl_datahub_cloud/metadata/schemas/RelationshipChangeEvent.avsc +215 -0
  172. acryl_datahub_cloud/metadata/schemas/RoleProperties.avsc +3 -1
  173. acryl_datahub_cloud/metadata/schemas/SchemaFieldInfo.avsc +3 -1
  174. acryl_datahub_cloud/metadata/schemas/SchemaFieldKey.avsc +3 -0
  175. acryl_datahub_cloud/metadata/schemas/SchemaMetadata.avsc +2 -1
  176. acryl_datahub_cloud/metadata/schemas/SemanticContent.avsc +123 -0
  177. acryl_datahub_cloud/metadata/schemas/StructuredProperties.avsc +69 -0
  178. acryl_datahub_cloud/metadata/schemas/StructuredPropertyDefinition.avsc +15 -4
  179. acryl_datahub_cloud/metadata/schemas/StructuredPropertySettings.avsc +9 -0
  180. acryl_datahub_cloud/metadata/schemas/SubscriptionInfo.avsc +136 -5
  181. acryl_datahub_cloud/metadata/schemas/SubscriptionKey.avsc +2 -1
  182. acryl_datahub_cloud/metadata/schemas/SystemMetadata.avsc +147 -0
  183. acryl_datahub_cloud/metadata/schemas/TagProperties.avsc +3 -1
  184. acryl_datahub_cloud/metadata/schemas/TestInfo.avsc +2 -1
  185. acryl_datahub_cloud/metadata/schemas/UpstreamLineage.avsc +9 -0
  186. acryl_datahub_cloud/metadata/schemas/UsageFeatures.avsc +10 -0
  187. acryl_datahub_cloud/metadata/schemas/__init__.py +3 -3
  188. acryl_datahub_cloud/notifications/__init__.py +0 -0
  189. acryl_datahub_cloud/notifications/notification_recipient_builder.py +399 -0
  190. acryl_datahub_cloud/sdk/__init__.py +69 -0
  191. acryl_datahub_cloud/sdk/assertion/__init__.py +58 -0
  192. acryl_datahub_cloud/sdk/assertion/assertion_base.py +779 -0
  193. acryl_datahub_cloud/sdk/assertion/column_metric_assertion.py +191 -0
  194. acryl_datahub_cloud/sdk/assertion/column_value_assertion.py +431 -0
  195. acryl_datahub_cloud/sdk/assertion/freshness_assertion.py +201 -0
  196. acryl_datahub_cloud/sdk/assertion/schema_assertion.py +268 -0
  197. acryl_datahub_cloud/sdk/assertion/smart_column_metric_assertion.py +212 -0
  198. acryl_datahub_cloud/sdk/assertion/smart_freshness_assertion.py +165 -0
  199. acryl_datahub_cloud/sdk/assertion/smart_sql_assertion.py +156 -0
  200. acryl_datahub_cloud/sdk/assertion/smart_volume_assertion.py +162 -0
  201. acryl_datahub_cloud/sdk/assertion/sql_assertion.py +273 -0
  202. acryl_datahub_cloud/sdk/assertion/types.py +20 -0
  203. acryl_datahub_cloud/sdk/assertion/volume_assertion.py +156 -0
  204. acryl_datahub_cloud/sdk/assertion_client/__init__.py +0 -0
  205. acryl_datahub_cloud/sdk/assertion_client/column_metric.py +545 -0
  206. acryl_datahub_cloud/sdk/assertion_client/column_value.py +617 -0
  207. acryl_datahub_cloud/sdk/assertion_client/freshness.py +371 -0
  208. acryl_datahub_cloud/sdk/assertion_client/helpers.py +166 -0
  209. acryl_datahub_cloud/sdk/assertion_client/schema.py +358 -0
  210. acryl_datahub_cloud/sdk/assertion_client/smart_column_metric.py +540 -0
  211. acryl_datahub_cloud/sdk/assertion_client/smart_freshness.py +373 -0
  212. acryl_datahub_cloud/sdk/assertion_client/smart_sql.py +411 -0
  213. acryl_datahub_cloud/sdk/assertion_client/smart_volume.py +380 -0
  214. acryl_datahub_cloud/sdk/assertion_client/sql.py +410 -0
  215. acryl_datahub_cloud/sdk/assertion_client/volume.py +446 -0
  216. acryl_datahub_cloud/sdk/assertion_input/__init__.py +0 -0
  217. acryl_datahub_cloud/sdk/assertion_input/assertion_input.py +1470 -0
  218. acryl_datahub_cloud/sdk/assertion_input/column_assertion_constants.py +114 -0
  219. acryl_datahub_cloud/sdk/assertion_input/column_assertion_utils.py +284 -0
  220. acryl_datahub_cloud/sdk/assertion_input/column_metric_assertion_input.py +759 -0
  221. acryl_datahub_cloud/sdk/assertion_input/column_metric_constants.py +109 -0
  222. acryl_datahub_cloud/sdk/assertion_input/column_value_assertion_input.py +810 -0
  223. acryl_datahub_cloud/sdk/assertion_input/freshness_assertion_input.py +305 -0
  224. acryl_datahub_cloud/sdk/assertion_input/schema_assertion_input.py +413 -0
  225. acryl_datahub_cloud/sdk/assertion_input/smart_column_metric_assertion_input.py +793 -0
  226. acryl_datahub_cloud/sdk/assertion_input/smart_freshness_assertion_input.py +218 -0
  227. acryl_datahub_cloud/sdk/assertion_input/smart_sql_assertion_input.py +181 -0
  228. acryl_datahub_cloud/sdk/assertion_input/smart_volume_assertion_input.py +189 -0
  229. acryl_datahub_cloud/sdk/assertion_input/sql_assertion_input.py +320 -0
  230. acryl_datahub_cloud/sdk/assertion_input/volume_assertion_input.py +635 -0
  231. acryl_datahub_cloud/sdk/assertions_client.py +1074 -0
  232. acryl_datahub_cloud/sdk/entities/__init__.py +0 -0
  233. acryl_datahub_cloud/sdk/entities/assertion.py +439 -0
  234. acryl_datahub_cloud/sdk/entities/monitor.py +291 -0
  235. acryl_datahub_cloud/sdk/entities/subscription.py +100 -0
  236. acryl_datahub_cloud/sdk/errors.py +34 -0
  237. acryl_datahub_cloud/sdk/resolver_client.py +42 -0
  238. acryl_datahub_cloud/sdk/subscription_client.py +737 -0
  239. {acryl_datahub_cloud-0.3.10rc4.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/METADATA +49 -43
  240. {acryl_datahub_cloud-0.3.10rc4.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/RECORD +243 -145
  241. {acryl_datahub_cloud-0.3.10rc4.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/WHEEL +1 -1
  242. {acryl_datahub_cloud-0.3.10rc4.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/entry_points.txt +1 -0
  243. {acryl_datahub_cloud-0.3.10rc4.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/top_level.txt +0 -0
@@ -15,10 +15,10 @@ import pathlib
15
15
  def _load_schema(schema_name: str) -> str:
16
16
  return (pathlib.Path(__file__).parent / f"{schema_name}.avsc").read_text()
17
17
 
18
- def getMetadataChangeProposalSchema() -> str:
19
- return _load_schema("MetadataChangeProposal")
20
-
21
18
  def getMetadataChangeEventSchema() -> str:
22
19
  return _load_schema("MetadataChangeEvent")
23
20
 
21
+ def getMetadataChangeProposalSchema() -> str:
22
+ return _load_schema("MetadataChangeProposal")
23
+
24
24
  # fmt: on
File without changes
@@ -0,0 +1,399 @@
1
+ import logging
2
+ from typing import Any, Dict, List
3
+
4
+ from datahub.ingestion.graph.client import DataHubGraph
5
+ from datahub.metadata.schema_classes import (
6
+ CorpGroupSettingsClass,
7
+ CorpUserSettingsClass,
8
+ NotificationRecipientClass,
9
+ NotificationRecipientTypeClass,
10
+ NotificationSettingsClass,
11
+ NotificationSinkTypeClass,
12
+ )
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class NotificationRecipientBuilder:
18
+ """Class to assist in building notification recipients for all notification scenarios"""
19
+
20
+ def __init__(self, graph: DataHubGraph):
21
+ self.graph: DataHubGraph = graph
22
+ self.user_settings_map: Dict[str, CorpUserSettingsClass] = {}
23
+ self.group_settings_map: Dict[str, CorpGroupSettingsClass] = {}
24
+
25
+ def convert_recipients_to_json_objects(
26
+ self, recipients: List[NotificationRecipientClass]
27
+ ) -> List[Dict[str, Any]]:
28
+ converted_recipients: List[Dict[str, Any]] = []
29
+
30
+ for r in recipients:
31
+ recipient: Dict[str, Any] = {}
32
+ recipient["type"] = r.type
33
+ recipient["id"] = r.id
34
+ recipient["actor"] = r.actor
35
+ converted_recipients.append(recipient)
36
+
37
+ return converted_recipients
38
+
39
+ def build_actor_recipients(
40
+ self,
41
+ actor_urns: List[str],
42
+ notification_scenario_type: str,
43
+ is_default_enabled: bool,
44
+ ) -> List[NotificationRecipientClass]:
45
+ self.populate_user_settings_map(actor_urns)
46
+ self.populate_group_settings_map(actor_urns)
47
+
48
+ recipients: List[NotificationRecipientClass] = []
49
+
50
+ recipients.extend(
51
+ self.get_slack_recipients(
52
+ actor_urns, notification_scenario_type, is_default_enabled
53
+ )
54
+ )
55
+ recipients.extend(
56
+ self.get_email_recipients(
57
+ actor_urns, notification_scenario_type, is_default_enabled
58
+ )
59
+ )
60
+
61
+ return recipients
62
+
63
+ def populate_user_settings_map(self, actor_urns: List[str]) -> None:
64
+ new_actors = [
65
+ urn
66
+ for urn in actor_urns
67
+ if urn not in self.user_settings_map and self.is_user(urn)
68
+ ]
69
+
70
+ entities = self.graph.get_entities("corpuser", new_actors, ["corpUserSettings"])
71
+ for urn, entity in entities.items():
72
+ user_tuple = entity.get(CorpUserSettingsClass.ASPECT_NAME, (None, None))
73
+ if user_tuple and user_tuple[0]:
74
+ if not isinstance(user_tuple[0], CorpUserSettingsClass):
75
+ logger.error(
76
+ f"{user_tuple[0]} is not of type CorpUserSettings for urn: {urn}"
77
+ )
78
+ else:
79
+ self.user_settings_map[urn] = user_tuple[0]
80
+
81
+ def populate_group_settings_map(self, actor_urns: List[str]) -> None:
82
+ new_actors = [
83
+ urn
84
+ for urn in actor_urns
85
+ if urn not in self.group_settings_map and self.is_group(urn)
86
+ ]
87
+
88
+ entities = self.graph.get_entities(
89
+ "corpGroup", new_actors, ["corpGroupSettings"]
90
+ )
91
+ for urn, entity in entities.items():
92
+ group_tuple = entity.get(CorpGroupSettingsClass.ASPECT_NAME, (None, None))
93
+ if group_tuple and group_tuple[0]:
94
+ if not isinstance(group_tuple[0], CorpGroupSettingsClass):
95
+ logger.error(
96
+ f"{group_tuple[0]} is not of type CorpGroupSettings for urn: {urn}"
97
+ )
98
+ else:
99
+ self.group_settings_map[urn] = group_tuple[0]
100
+
101
+ def is_user(self, actor_urn: str) -> bool:
102
+ return actor_urn.startswith("urn:li:corpuser")
103
+
104
+ def is_group(self, actor_urn: str) -> bool:
105
+ return actor_urn.startswith("urn:li:corpGroup")
106
+
107
+ def get_slack_recipients(
108
+ self,
109
+ actor_urns: List[str],
110
+ notification_scenario_type: str,
111
+ is_default_enabled: bool,
112
+ ) -> List[NotificationRecipientClass]:
113
+ slack_recipients: List[NotificationRecipientClass] = []
114
+
115
+ for actor_urn in actor_urns:
116
+ actor_settings = (
117
+ self.user_settings_map.get(actor_urn)
118
+ if self.is_user(actor_urn)
119
+ else self.group_settings_map.get(actor_urn)
120
+ )
121
+ # ensure slack is enabled in the user settings in general
122
+ if (
123
+ actor_settings is not None
124
+ and actor_settings.notificationSettings is not None
125
+ and NotificationSinkTypeClass.SLACK
126
+ in actor_settings.notificationSettings.sinkTypes
127
+ ):
128
+ notification_settings = actor_settings.notificationSettings
129
+ if self.is_notification_enabled(
130
+ "slack.enabled",
131
+ notification_settings,
132
+ notification_scenario_type,
133
+ is_default_enabled,
134
+ ):
135
+ recipients = self.build_slack_recipient_objects(
136
+ actor_urn, notification_scenario_type
137
+ )
138
+ if recipients is not None:
139
+ slack_recipients.extend(recipients)
140
+
141
+ return slack_recipients
142
+
143
+ def get_email_recipients(
144
+ self,
145
+ actor_urns: List[str],
146
+ notification_scenario_type: str,
147
+ is_default_enabled: bool,
148
+ ) -> List[NotificationRecipientClass]:
149
+ email_recipients: List[NotificationRecipientClass] = []
150
+
151
+ for actor_urn in actor_urns:
152
+ actor_settings = (
153
+ self.user_settings_map.get(actor_urn)
154
+ if self.is_user(actor_urn)
155
+ else self.group_settings_map.get(actor_urn)
156
+ )
157
+ # ensure email is enabled in the user settings in general
158
+ if (
159
+ actor_settings is not None
160
+ and actor_settings.notificationSettings is not None
161
+ and NotificationSinkTypeClass.EMAIL
162
+ in actor_settings.notificationSettings.sinkTypes
163
+ ):
164
+ notification_settings = actor_settings.notificationSettings
165
+ if self.is_notification_enabled(
166
+ "email.enabled",
167
+ notification_settings,
168
+ notification_scenario_type,
169
+ is_default_enabled,
170
+ ):
171
+ recipient = self.build_email_recipient_object(
172
+ actor_urn, notification_scenario_type
173
+ )
174
+ if recipient is not None:
175
+ email_recipients.append(recipient)
176
+
177
+ return email_recipients
178
+
179
+ def is_notification_enabled(
180
+ self,
181
+ sink_key: str,
182
+ notification_settings: NotificationSettingsClass,
183
+ notification_scenario_type: str,
184
+ is_default_enabled: bool,
185
+ ) -> bool:
186
+ """
187
+ Returns if a given scenario type is enabled for a given sink.
188
+ If a notification is default enabled, it will be true if this scenario is not explicitly turned off.
189
+ """
190
+ if notification_settings.settings is not None:
191
+ scenario_settings = notification_settings.settings.get(
192
+ notification_scenario_type
193
+ )
194
+ if (
195
+ scenario_settings is not None
196
+ and scenario_settings.params is not None
197
+ and sink_key in scenario_settings.params
198
+ ):
199
+ is_enabled = scenario_settings.params.get(sink_key)
200
+ if is_enabled == "true" or (is_enabled is None and is_default_enabled):
201
+ return True
202
+ elif is_default_enabled:
203
+ return True
204
+ elif is_default_enabled:
205
+ return True
206
+
207
+ return False
208
+
209
+ def build_slack_recipient_objects(
210
+ self, actor_urn: str, notification_scenario_type: str
211
+ ) -> List[NotificationRecipientClass] | None:
212
+ if actor_urn.startswith("urn:li:corpuser"):
213
+ user_recipient = self.build_user_slack_recipient_object(
214
+ actor_urn, notification_scenario_type
215
+ )
216
+ if user_recipient:
217
+ return [user_recipient]
218
+ elif actor_urn.startswith("urn:li:corpGroup"):
219
+ return self.build_group_slack_recipient_objects(
220
+ actor_urn, notification_scenario_type
221
+ )
222
+
223
+ return None
224
+
225
+ def build_user_slack_recipient_object(
226
+ self, actor_urn: str, notification_scenario_type: str
227
+ ) -> NotificationRecipientClass | None:
228
+ notification_settings = self.get_user_notification_settings(actor_urn)
229
+ if notification_settings is None:
230
+ return None
231
+
232
+ slack = self.get_user_slack_for_notification_type(
233
+ notification_settings, notification_scenario_type
234
+ )
235
+ if slack is None:
236
+ return None
237
+
238
+ return NotificationRecipientClass(
239
+ type=NotificationRecipientTypeClass.SLACK_DM, id=slack, actor=actor_urn
240
+ )
241
+
242
+ def get_user_slack_for_notification_type(
243
+ self,
244
+ notification_settings: NotificationSettingsClass,
245
+ notification_scenario_type: str,
246
+ ) -> str | None:
247
+ custom_slack = self.get_custom_id_for_scenario(
248
+ notification_settings, notification_scenario_type, "slack.channel"
249
+ )
250
+ if custom_slack is not None:
251
+ return custom_slack
252
+
253
+ slack_settings = notification_settings.slackSettings
254
+ if slack_settings is not None and slack_settings.userHandle is not None:
255
+ return slack_settings.userHandle
256
+
257
+ return None
258
+
259
+ def build_group_slack_recipient_objects(
260
+ self, actor_urn: str, notification_scenario_type: str
261
+ ) -> List[NotificationRecipientClass] | None:
262
+ notification_settings = self.get_group_notification_settings(actor_urn)
263
+ if notification_settings is None:
264
+ return None
265
+
266
+ slacks = self.get_group_slacks_for_notification_type(
267
+ notification_settings, notification_scenario_type
268
+ )
269
+ if slacks is None:
270
+ return None
271
+
272
+ recipients = []
273
+ for slack in slacks:
274
+ recipients.append(
275
+ NotificationRecipientClass(
276
+ type=NotificationRecipientTypeClass.SLACK_CHANNEL,
277
+ id=slack,
278
+ actor=actor_urn,
279
+ )
280
+ )
281
+
282
+ return recipients
283
+
284
+ def get_group_slacks_for_notification_type(
285
+ self,
286
+ notification_settings: NotificationSettingsClass,
287
+ notification_scenario_type: str,
288
+ ) -> List[str] | None:
289
+ custom_slack = self.get_custom_id_for_scenario(
290
+ notification_settings, notification_scenario_type, "slack.channel"
291
+ )
292
+ if custom_slack is not None:
293
+ return [custom_slack]
294
+
295
+ slack_settings = notification_settings.slackSettings
296
+ if slack_settings is not None and slack_settings.channels is not None:
297
+ return slack_settings.channels
298
+
299
+ return None
300
+
301
+ def build_email_recipient_object(
302
+ self, actor_urn: str, notification_scenario_type: str
303
+ ) -> NotificationRecipientClass | None:
304
+ email = self.get_email_for_notification_type(
305
+ actor_urn, notification_scenario_type
306
+ )
307
+ if email is None:
308
+ return None
309
+
310
+ return NotificationRecipientClass(
311
+ type=NotificationRecipientTypeClass.EMAIL, id=email, actor=actor_urn
312
+ )
313
+
314
+ def get_email_for_notification_type(
315
+ self, actor_urn: str, notification_scenario_type: str
316
+ ) -> str | None:
317
+ notification_settings = (
318
+ self.get_user_notification_settings(actor_urn)
319
+ if self.is_user(actor_urn)
320
+ else self.get_group_notification_settings(actor_urn)
321
+ )
322
+ if notification_settings is None:
323
+ return None
324
+
325
+ custom_email = self.get_custom_id_for_scenario(
326
+ notification_settings, notification_scenario_type, "email.address"
327
+ )
328
+ if custom_email is not None:
329
+ return custom_email
330
+
331
+ email_settings = notification_settings.emailSettings
332
+ if email_settings is not None and email_settings.email is not None:
333
+ return email_settings.email
334
+
335
+ return None
336
+
337
+ def get_user_notification_settings(
338
+ self, user_urn: str
339
+ ) -> NotificationSettingsClass | None:
340
+ user_settings = self.user_settings_map.get(user_urn)
341
+ if user_settings is None:
342
+ logger.warning(f"User settings not populdated for user with urn {user_urn}")
343
+ return None
344
+
345
+ notification_settings = user_settings.notificationSettings
346
+ if notification_settings is None:
347
+ logger.warning(
348
+ f"User notification settings not populdated for user with urn {user_urn}"
349
+ )
350
+ return None
351
+
352
+ return notification_settings
353
+
354
+ def get_group_notification_settings(
355
+ self, group_urn: str
356
+ ) -> NotificationSettingsClass | None:
357
+ group_settings = self.group_settings_map.get(group_urn)
358
+ if group_settings is None:
359
+ logger.warning(
360
+ f"Group settings not populdated for group with urn {group_urn}"
361
+ )
362
+ return None
363
+
364
+ notification_settings = group_settings.notificationSettings
365
+ if notification_settings is None:
366
+ logger.warning(
367
+ f"Group notification settings not populdated for group with urn {group_urn}"
368
+ )
369
+ return None
370
+
371
+ return notification_settings
372
+
373
+ def get_custom_id_for_scenario(
374
+ self,
375
+ notification_settings: NotificationSettingsClass,
376
+ notification_scenario_type: str,
377
+ param_key: str,
378
+ ) -> str | None:
379
+ """
380
+ We support storing a custom ID for a given sink type for specific notification scenarios in settings.
381
+ This method takes in the type and finds if there is a custom ID.
382
+ For example, you may want to send notifications about incidents to a different email than your
383
+ default email.
384
+ """
385
+ scenario_settings = notification_settings.settings
386
+ if (
387
+ scenario_settings is not None
388
+ and (setting := scenario_settings.get(notification_scenario_type))
389
+ is not None
390
+ ):
391
+ params = setting.params
392
+ if (
393
+ params is not None
394
+ and (custom_id := params.get(param_key)) is not None
395
+ and custom_id
396
+ ):
397
+ return custom_id
398
+
399
+ return None
@@ -0,0 +1,69 @@
1
+ from acryl_datahub_cloud.sdk.assertion.assertion_base import (
2
+ FreshnessAssertion,
3
+ SmartFreshnessAssertion,
4
+ SmartVolumeAssertion,
5
+ SqlAssertion,
6
+ )
7
+ from acryl_datahub_cloud.sdk.assertion.column_value_assertion import (
8
+ ColumnValueAssertion,
9
+ )
10
+ from acryl_datahub_cloud.sdk.assertion.smart_column_metric_assertion import (
11
+ SmartColumnMetricAssertion,
12
+ )
13
+ from acryl_datahub_cloud.sdk.assertion_input.assertion_input import (
14
+ AssertionIncidentBehavior,
15
+ CalendarInterval,
16
+ DetectionMechanism,
17
+ FixedRangeExclusionWindow,
18
+ InferenceSensitivity,
19
+ TimeWindowSize,
20
+ )
21
+ from acryl_datahub_cloud.sdk.assertion_input.column_metric_constants import (
22
+ MetricType,
23
+ OperatorType,
24
+ ValueType,
25
+ )
26
+ from acryl_datahub_cloud.sdk.assertion_input.column_value_assertion_input import (
27
+ FailThresholdType,
28
+ FieldTransformType,
29
+ )
30
+ from acryl_datahub_cloud.sdk.assertion_input.freshness_assertion_input import (
31
+ FreshnessAssertionScheduleCheckType,
32
+ )
33
+ from acryl_datahub_cloud.sdk.assertion_input.sql_assertion_input import (
34
+ SqlAssertionCondition,
35
+ SqlAssertionCriteria,
36
+ )
37
+ from acryl_datahub_cloud.sdk.assertion_input.volume_assertion_input import (
38
+ VolumeAssertionCondition,
39
+ )
40
+ from acryl_datahub_cloud.sdk.assertions_client import AssertionsClient
41
+ from acryl_datahub_cloud.sdk.resolver_client import ResolverClient
42
+ from acryl_datahub_cloud.sdk.subscription_client import SubscriptionClient
43
+
44
+ __all__ = [
45
+ "SmartFreshnessAssertion",
46
+ "SmartVolumeAssertion",
47
+ "SmartColumnMetricAssertion",
48
+ "TimeWindowSize",
49
+ "FreshnessAssertion",
50
+ "DetectionMechanism",
51
+ "InferenceSensitivity",
52
+ "FixedRangeExclusionWindow",
53
+ "AssertionIncidentBehavior",
54
+ "MetricType",
55
+ "OperatorType",
56
+ "ValueType",
57
+ "AssertionsClient",
58
+ "ResolverClient",
59
+ "SubscriptionClient",
60
+ "SqlAssertion",
61
+ "SqlAssertionCriteria",
62
+ "VolumeAssertionCondition",
63
+ "SqlAssertionCondition",
64
+ "FreshnessAssertionScheduleCheckType",
65
+ "CalendarInterval",
66
+ "ColumnValueAssertion",
67
+ "FailThresholdType",
68
+ "FieldTransformType",
69
+ ]
@@ -0,0 +1,58 @@
1
+ """
2
+ Assertion SDK module providing various assertion types for data quality monitoring.
3
+
4
+ This module provides classes for creating and managing different types of assertions:
5
+ - Column metric assertions (native and smart)
6
+ - Freshness assertions (native and smart)
7
+ - Volume assertions (native and smart)
8
+ - SQL assertions (native and smart)
9
+ - Schema assertions
10
+
11
+ Each assertion type has been split into separate files for better maintainability.
12
+ """
13
+
14
+ from acryl_datahub_cloud.sdk.assertion.assertion_base import (
15
+ AssertionMode,
16
+ _AssertionPublic,
17
+ _HasColumnMetricFunctionality,
18
+ _HasSchedule,
19
+ _HasSmartFunctionality,
20
+ )
21
+ from acryl_datahub_cloud.sdk.assertion.column_metric_assertion import (
22
+ ColumnMetricAssertion,
23
+ )
24
+ from acryl_datahub_cloud.sdk.assertion.column_value_assertion import (
25
+ ColumnValueAssertion,
26
+ )
27
+ from acryl_datahub_cloud.sdk.assertion.freshness_assertion import FreshnessAssertion
28
+ from acryl_datahub_cloud.sdk.assertion.schema_assertion import SchemaAssertion
29
+ from acryl_datahub_cloud.sdk.assertion.smart_column_metric_assertion import (
30
+ SmartColumnMetricAssertion,
31
+ )
32
+ from acryl_datahub_cloud.sdk.assertion.smart_freshness_assertion import (
33
+ SmartFreshnessAssertion,
34
+ )
35
+ from acryl_datahub_cloud.sdk.assertion.smart_sql_assertion import SmartSqlAssertion
36
+ from acryl_datahub_cloud.sdk.assertion.smart_volume_assertion import (
37
+ SmartVolumeAssertion,
38
+ )
39
+ from acryl_datahub_cloud.sdk.assertion.sql_assertion import SqlAssertion
40
+ from acryl_datahub_cloud.sdk.assertion.volume_assertion import VolumeAssertion
41
+
42
+ __all__ = [
43
+ "AssertionMode",
44
+ "_AssertionPublic",
45
+ "_HasColumnMetricFunctionality",
46
+ "_HasSchedule",
47
+ "_HasSmartFunctionality",
48
+ "ColumnMetricAssertion",
49
+ "ColumnValueAssertion",
50
+ "FreshnessAssertion",
51
+ "SchemaAssertion",
52
+ "SmartColumnMetricAssertion",
53
+ "SmartFreshnessAssertion",
54
+ "SmartSqlAssertion",
55
+ "SmartVolumeAssertion",
56
+ "SqlAssertion",
57
+ "VolumeAssertion",
58
+ ]