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
@@ -0,0 +1,540 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ from datetime import datetime, timezone
5
+ from typing import TYPE_CHECKING, Optional, Union
6
+
7
+ from acryl_datahub_cloud.sdk.assertion.assertion_base import (
8
+ AssertionMode,
9
+ )
10
+ from acryl_datahub_cloud.sdk.assertion.smart_column_metric_assertion import (
11
+ SmartColumnMetricAssertion,
12
+ )
13
+ from acryl_datahub_cloud.sdk.assertion_client.helpers import (
14
+ DEFAULT_CREATED_BY,
15
+ _merge_field,
16
+ _print_experimental_warning,
17
+ _validate_required_field,
18
+ retrieve_assertion_and_monitor_by_urn,
19
+ )
20
+ from acryl_datahub_cloud.sdk.assertion_input.assertion_input import (
21
+ AssertionIncidentBehaviorInputTypes,
22
+ DetectionMechanismInputTypes,
23
+ ExclusionWindowInputTypes,
24
+ InferenceSensitivity,
25
+ )
26
+ from acryl_datahub_cloud.sdk.assertion_input.column_metric_constants import (
27
+ MetricInputType,
28
+ )
29
+ from acryl_datahub_cloud.sdk.assertion_input.smart_column_metric_assertion_input import (
30
+ _SmartColumnMetricAssertionInput,
31
+ )
32
+ from acryl_datahub_cloud.sdk.entities.assertion import Assertion, TagsInputType
33
+ from acryl_datahub_cloud.sdk.entities.monitor import Monitor
34
+ from acryl_datahub_cloud.sdk.errors import SDKUsageError
35
+ from datahub.metadata import schema_classes as models
36
+ from datahub.metadata.urns import AssertionUrn, CorpUserUrn, DatasetUrn, MonitorUrn
37
+
38
+ if TYPE_CHECKING:
39
+ from datahub.sdk.main_client import DataHubClient
40
+
41
+ logger = logging.getLogger(__name__)
42
+
43
+
44
+ class SmartColumnMetricAssertionClient:
45
+ """Client for managing smart column metric assertions."""
46
+
47
+ def __init__(self, client: "DataHubClient"):
48
+ self.client = client
49
+
50
+ def _validate_required_smart_column_fields_for_creation(
51
+ self,
52
+ column_name: Optional[str],
53
+ metric_type: Optional[MetricInputType],
54
+ ) -> None:
55
+ """Validate required fields for smart column metric assertion creation."""
56
+ _validate_required_field(
57
+ column_name, "column_name", "when creating a new assertion (urn is None)"
58
+ )
59
+ _validate_required_field(
60
+ metric_type, "metric_type", "when creating a new assertion (urn is None)"
61
+ )
62
+
63
+ def _validate_required_smart_column_fields_for_update(
64
+ self,
65
+ column_name: Optional[str],
66
+ metric_type: Optional[MetricInputType],
67
+ assertion_urn: Union[str, AssertionUrn],
68
+ ) -> None:
69
+ """Validate required fields after attempting to fetch from existing assertion."""
70
+ context = f"and not found in existing assertion {assertion_urn}. The existing assertion may be invalid or corrupted."
71
+ _validate_required_field(column_name, "column_name", context)
72
+ _validate_required_field(metric_type, "metric_type", context)
73
+
74
+ def _retrieve_assertion_and_monitor(
75
+ self,
76
+ urn: Union[str, AssertionUrn],
77
+ dataset_urn: Union[str, DatasetUrn],
78
+ ) -> tuple[Optional[Assertion], MonitorUrn, Optional[Monitor]]:
79
+ """Retrieve the assertion and monitor entities from the DataHub instance.
80
+
81
+ Args:
82
+ urn: The assertion URN.
83
+ dataset_urn: The dataset URN.
84
+
85
+ Returns:
86
+ The assertion and monitor entities.
87
+ """
88
+ return retrieve_assertion_and_monitor_by_urn(self.client, urn, dataset_urn)
89
+
90
+ def sync_smart_column_metric_assertion(
91
+ self,
92
+ *,
93
+ dataset_urn: Union[str, DatasetUrn],
94
+ column_name: Optional[str] = None,
95
+ metric_type: Optional[MetricInputType] = None,
96
+ urn: Optional[Union[str, AssertionUrn]] = None,
97
+ display_name: Optional[str] = None,
98
+ enabled: Optional[bool] = None,
99
+ detection_mechanism: DetectionMechanismInputTypes = None,
100
+ sensitivity: Optional[Union[str, InferenceSensitivity]] = None,
101
+ exclusion_windows: Optional[ExclusionWindowInputTypes] = None,
102
+ training_data_lookback_days: Optional[int] = None,
103
+ incident_behavior: Optional[AssertionIncidentBehaviorInputTypes] = None,
104
+ tags: Optional[TagsInputType] = None,
105
+ updated_by: Optional[Union[str, CorpUserUrn]] = None,
106
+ schedule: Optional[Union[str, models.CronScheduleClass]] = None,
107
+ ) -> SmartColumnMetricAssertion:
108
+ _print_experimental_warning()
109
+ now_utc = datetime.now(timezone.utc)
110
+
111
+ if updated_by is None:
112
+ logger.warning(
113
+ f"updated_by is not set, using {DEFAULT_CREATED_BY} as a placeholder"
114
+ )
115
+ updated_by = DEFAULT_CREATED_BY
116
+
117
+ # 1. Retrieve and merge the assertion input with any existing assertion and monitor entities,
118
+ # or build a new assertion input if the assertion does not exist:
119
+ assertion_input = (
120
+ self._retrieve_and_merge_smart_column_metric_assertion_and_monitor(
121
+ dataset_urn=dataset_urn,
122
+ urn=urn,
123
+ column_name=column_name,
124
+ metric_type=metric_type,
125
+ display_name=display_name,
126
+ enabled=enabled,
127
+ detection_mechanism=detection_mechanism,
128
+ sensitivity=sensitivity,
129
+ exclusion_windows=exclusion_windows,
130
+ training_data_lookback_days=training_data_lookback_days,
131
+ incident_behavior=incident_behavior,
132
+ tags=tags,
133
+ updated_by=updated_by,
134
+ now_utc=now_utc,
135
+ schedule=schedule,
136
+ )
137
+ )
138
+
139
+ # 2. Upsert the assertion and monitor entities:
140
+ assertion_entity, monitor_entity = (
141
+ assertion_input.to_assertion_and_monitor_entities()
142
+ )
143
+ # If assertion upsert fails, we won't try to upsert the monitor
144
+ self.client.entities.upsert(assertion_entity)
145
+ # TODO: Wrap monitor upsert in a try-except and delete the assertion if monitor upsert fails (once delete is implemented https://linear.app/acryl-data/issue/OBS-1350/add-delete-method-to-entity-clientpy)
146
+ # try:
147
+ self.client.entities.upsert(monitor_entity)
148
+ # except Exception as e:
149
+ # logger.error(f"Error upserting monitor: {e}")
150
+ # self.client.entities.delete(assertion_entity)
151
+ # raise e
152
+
153
+ return SmartColumnMetricAssertion._from_entities(
154
+ assertion_entity, monitor_entity
155
+ )
156
+
157
+ def _extract_fields_from_existing_assertion(
158
+ self,
159
+ maybe_assertion_entity: Optional[Assertion],
160
+ column_name: Optional[str],
161
+ metric_type: Optional[MetricInputType],
162
+ ) -> tuple[Optional[str], Optional[MetricInputType]]:
163
+ """Extract missing fields from existing assertion entity."""
164
+ if maybe_assertion_entity is None:
165
+ return column_name, metric_type
166
+
167
+ assertion_info = maybe_assertion_entity.info
168
+ if not (
169
+ hasattr(assertion_info, "fieldMetricAssertion")
170
+ and assertion_info.fieldMetricAssertion
171
+ ):
172
+ return column_name, metric_type
173
+
174
+ field_metric_assertion = assertion_info.fieldMetricAssertion
175
+
176
+ # Extract column_name
177
+ if (
178
+ column_name is None
179
+ and hasattr(field_metric_assertion, "field")
180
+ and hasattr(field_metric_assertion.field, "path")
181
+ ):
182
+ column_name = field_metric_assertion.field.path
183
+
184
+ # Extract metric_type
185
+ if metric_type is None and hasattr(field_metric_assertion, "metric"):
186
+ metric_type = field_metric_assertion.metric
187
+
188
+ return column_name, metric_type
189
+
190
+ def _create_existing_assertion_from_entities(
191
+ self,
192
+ maybe_assertion_entity: Optional[Assertion],
193
+ maybe_monitor_entity: Optional[Monitor],
194
+ monitor_urn: MonitorUrn,
195
+ enabled: Optional[bool],
196
+ ) -> Optional[SmartColumnMetricAssertion]:
197
+ """Create existing assertion object from entities, handling missing monitor case."""
198
+ if maybe_assertion_entity and maybe_monitor_entity:
199
+ return SmartColumnMetricAssertion._from_entities(
200
+ maybe_assertion_entity, maybe_monitor_entity
201
+ )
202
+
203
+ if maybe_assertion_entity and not maybe_monitor_entity:
204
+ monitor_mode = (
205
+ "ACTIVE" if enabled else "INACTIVE" if enabled is not None else "ACTIVE"
206
+ )
207
+ return SmartColumnMetricAssertion._from_entities(
208
+ maybe_assertion_entity,
209
+ Monitor(id=monitor_urn, info=("ASSERTION", monitor_mode)),
210
+ )
211
+
212
+ return None
213
+
214
+ def _retrieve_and_merge_smart_column_metric_assertion_and_monitor(
215
+ self,
216
+ dataset_urn: Union[str, DatasetUrn],
217
+ urn: Optional[Union[str, AssertionUrn]],
218
+ column_name: Optional[str],
219
+ metric_type: Optional[MetricInputType],
220
+ display_name: Optional[str],
221
+ enabled: Optional[bool],
222
+ detection_mechanism: DetectionMechanismInputTypes,
223
+ sensitivity: Optional[Union[str, InferenceSensitivity]],
224
+ exclusion_windows: Optional[ExclusionWindowInputTypes],
225
+ training_data_lookback_days: Optional[int],
226
+ incident_behavior: Optional[AssertionIncidentBehaviorInputTypes],
227
+ tags: Optional[TagsInputType],
228
+ updated_by: Union[str, CorpUserUrn],
229
+ now_utc: datetime,
230
+ schedule: Optional[Union[str, models.CronScheduleClass]],
231
+ ) -> _SmartColumnMetricAssertionInput:
232
+ # 1. If urn is not provided, validate required fields and build a new assertion input directly
233
+ if urn is None:
234
+ logger.info("URN is not set, building a new assertion input")
235
+ self._validate_required_smart_column_fields_for_creation(
236
+ column_name, metric_type
237
+ )
238
+ assert column_name is not None and metric_type is not None, (
239
+ "Fields guaranteed non-None after validation"
240
+ )
241
+ return _SmartColumnMetricAssertionInput(
242
+ urn=None,
243
+ entity_client=self.client.entities,
244
+ dataset_urn=dataset_urn,
245
+ column_name=column_name,
246
+ metric_type=metric_type,
247
+ display_name=display_name,
248
+ enabled=enabled if enabled is not None else True,
249
+ detection_mechanism=detection_mechanism,
250
+ sensitivity=sensitivity,
251
+ exclusion_windows=exclusion_windows,
252
+ training_data_lookback_days=training_data_lookback_days,
253
+ incident_behavior=incident_behavior,
254
+ tags=tags,
255
+ created_by=updated_by,
256
+ created_at=now_utc,
257
+ updated_by=updated_by,
258
+ updated_at=now_utc,
259
+ schedule=schedule,
260
+ )
261
+
262
+ # 2. Retrieve any existing assertion and monitor entities
263
+ maybe_assertion_entity, monitor_urn, maybe_monitor_entity = (
264
+ self._retrieve_assertion_and_monitor(urn, dataset_urn)
265
+ )
266
+
267
+ # 3. Extract missing required fields from existing assertion
268
+ column_name, metric_type = self._extract_fields_from_existing_assertion(
269
+ maybe_assertion_entity, column_name, metric_type
270
+ )
271
+
272
+ # 4. Validate required fields
273
+ if maybe_assertion_entity is None:
274
+ self._validate_required_smart_column_fields_for_creation(
275
+ column_name, metric_type
276
+ )
277
+ else:
278
+ self._validate_required_smart_column_fields_for_update(
279
+ column_name, metric_type, urn
280
+ )
281
+
282
+ assert column_name is not None and metric_type is not None, (
283
+ "Fields guaranteed non-None after validation"
284
+ )
285
+
286
+ # 5. If the assertion does not exist, build and return a new assertion input
287
+ if not maybe_assertion_entity:
288
+ logger.info(
289
+ f"No existing assertion entity found for assertion urn {urn}, building a new assertion input"
290
+ )
291
+ return _SmartColumnMetricAssertionInput(
292
+ urn=urn,
293
+ entity_client=self.client.entities,
294
+ dataset_urn=dataset_urn,
295
+ column_name=column_name,
296
+ metric_type=metric_type,
297
+ display_name=display_name,
298
+ enabled=enabled if enabled is not None else True,
299
+ detection_mechanism=detection_mechanism,
300
+ sensitivity=sensitivity,
301
+ exclusion_windows=exclusion_windows,
302
+ training_data_lookback_days=training_data_lookback_days,
303
+ incident_behavior=incident_behavior,
304
+ tags=tags,
305
+ created_by=updated_by,
306
+ created_at=now_utc,
307
+ updated_by=updated_by,
308
+ updated_at=now_utc,
309
+ schedule=schedule,
310
+ )
311
+
312
+ # 6. Build assertion input for validation
313
+ assertion_input = _SmartColumnMetricAssertionInput(
314
+ urn=urn,
315
+ entity_client=self.client.entities,
316
+ dataset_urn=dataset_urn,
317
+ column_name=column_name,
318
+ metric_type=metric_type,
319
+ display_name=display_name,
320
+ detection_mechanism=detection_mechanism,
321
+ sensitivity=sensitivity,
322
+ exclusion_windows=exclusion_windows,
323
+ training_data_lookback_days=training_data_lookback_days,
324
+ incident_behavior=incident_behavior,
325
+ tags=tags,
326
+ created_by=updated_by,
327
+ created_at=now_utc,
328
+ updated_by=updated_by,
329
+ updated_at=now_utc,
330
+ schedule=schedule,
331
+ )
332
+
333
+ # 7. Create existing assertion from entities
334
+ existing_assertion = self._create_existing_assertion_from_entities(
335
+ maybe_assertion_entity, maybe_monitor_entity, monitor_urn, enabled
336
+ )
337
+ assert existing_assertion is not None, (
338
+ "existing_assertion is guaranteed non-None after early return check"
339
+ )
340
+
341
+ # 8. Check for any issues e.g. different dataset urns
342
+ if (
343
+ existing_assertion
344
+ and hasattr(existing_assertion, "dataset_urn")
345
+ and existing_assertion.dataset_urn != assertion_input.dataset_urn
346
+ ):
347
+ raise SDKUsageError(
348
+ f"Dataset URN mismatch, existing assertion: {existing_assertion.dataset_urn} != new assertion: {dataset_urn}"
349
+ )
350
+
351
+ # 9. Merge the existing assertion with the validated input
352
+ merged_assertion_input = self._merge_smart_column_metric_input(
353
+ dataset_urn=dataset_urn,
354
+ column_name=column_name,
355
+ metric_type=metric_type,
356
+ urn=urn,
357
+ display_name=display_name,
358
+ enabled=enabled,
359
+ schedule=schedule,
360
+ detection_mechanism=detection_mechanism,
361
+ sensitivity=sensitivity,
362
+ exclusion_windows=exclusion_windows,
363
+ training_data_lookback_days=training_data_lookback_days,
364
+ incident_behavior=incident_behavior,
365
+ tags=tags,
366
+ now_utc=now_utc,
367
+ assertion_input=assertion_input,
368
+ maybe_assertion_entity=maybe_assertion_entity,
369
+ maybe_monitor_entity=maybe_monitor_entity,
370
+ existing_assertion=existing_assertion,
371
+ )
372
+
373
+ return merged_assertion_input
374
+
375
+ def _merge_smart_column_metric_input(
376
+ self,
377
+ dataset_urn: Union[str, DatasetUrn],
378
+ column_name: str,
379
+ metric_type: MetricInputType,
380
+ urn: Union[str, AssertionUrn],
381
+ display_name: Optional[str],
382
+ enabled: Optional[bool],
383
+ detection_mechanism: DetectionMechanismInputTypes,
384
+ sensitivity: Optional[Union[str, InferenceSensitivity]],
385
+ exclusion_windows: Optional[ExclusionWindowInputTypes],
386
+ training_data_lookback_days: Optional[int],
387
+ incident_behavior: Optional[AssertionIncidentBehaviorInputTypes],
388
+ tags: Optional[TagsInputType],
389
+ schedule: Optional[Union[str, models.CronScheduleClass]],
390
+ now_utc: datetime,
391
+ assertion_input: _SmartColumnMetricAssertionInput,
392
+ maybe_assertion_entity: Optional[Assertion],
393
+ maybe_monitor_entity: Optional[Monitor],
394
+ existing_assertion: SmartColumnMetricAssertion,
395
+ ) -> _SmartColumnMetricAssertionInput:
396
+ """Merge the input with the existing assertion and monitor entities.
397
+
398
+ Args:
399
+ dataset_urn: The urn of the dataset to be monitored.
400
+ column_name: The name of the column to be monitored.
401
+ metric_type: The type of the metric to be monitored.
402
+ urn: The urn of the assertion.
403
+ display_name: The display name of the assertion.
404
+ enabled: Whether the assertion is enabled.
405
+ detection_mechanism: The detection mechanism to be used for the assertion.
406
+ sensitivity: The sensitivity to be applied to the assertion.
407
+ exclusion_windows: The exclusion windows to be applied to the assertion.
408
+ training_data_lookback_days: The training data lookback days to be applied to the assertion.
409
+ incident_behavior: The incident behavior to be applied to the assertion.
410
+ tags: The tags to be applied to the assertion.
411
+ schedule: The schedule to be applied to the assertion.
412
+ now_utc: The current UTC time from when the function is called.
413
+ assertion_input: The validated input to the function.
414
+ maybe_assertion_entity: The existing assertion entity from the DataHub instance.
415
+ maybe_monitor_entity: The existing monitor entity from the DataHub instance.
416
+ existing_assertion: The existing assertion from the DataHub instance.
417
+
418
+ Returns:
419
+ The merged assertion input.
420
+ """
421
+ merged_assertion_input = _SmartColumnMetricAssertionInput(
422
+ urn=urn,
423
+ entity_client=self.client.entities,
424
+ dataset_urn=dataset_urn,
425
+ column_name=_merge_field(
426
+ input_field_value=column_name,
427
+ input_field_name="column_name",
428
+ validated_assertion_input=assertion_input,
429
+ validated_existing_assertion=existing_assertion,
430
+ existing_entity_value=SmartColumnMetricAssertion._get_column_name(
431
+ maybe_assertion_entity
432
+ )
433
+ if maybe_assertion_entity
434
+ else None,
435
+ ),
436
+ metric_type=_merge_field(
437
+ input_field_value=metric_type,
438
+ input_field_name="metric_type",
439
+ validated_assertion_input=assertion_input,
440
+ validated_existing_assertion=existing_assertion,
441
+ existing_entity_value=SmartColumnMetricAssertion._get_metric_type(
442
+ maybe_assertion_entity
443
+ )
444
+ if maybe_assertion_entity
445
+ else None,
446
+ ),
447
+ display_name=_merge_field(
448
+ input_field_value=display_name,
449
+ input_field_name="display_name",
450
+ validated_assertion_input=assertion_input,
451
+ validated_existing_assertion=existing_assertion,
452
+ existing_entity_value=maybe_assertion_entity.description
453
+ if maybe_assertion_entity
454
+ else None,
455
+ ),
456
+ enabled=_merge_field(
457
+ input_field_value=enabled,
458
+ input_field_name="enabled",
459
+ validated_assertion_input=assertion_input,
460
+ validated_existing_assertion=existing_assertion,
461
+ existing_entity_value=existing_assertion.mode == AssertionMode.ACTIVE
462
+ if existing_assertion
463
+ else None,
464
+ ),
465
+ schedule=_merge_field(
466
+ input_field_value=schedule,
467
+ input_field_name="schedule",
468
+ validated_assertion_input=assertion_input,
469
+ validated_existing_assertion=existing_assertion,
470
+ existing_entity_value=existing_assertion.schedule
471
+ if existing_assertion
472
+ else None,
473
+ ),
474
+ detection_mechanism=_merge_field(
475
+ input_field_value=detection_mechanism,
476
+ input_field_name="detection_mechanism",
477
+ validated_assertion_input=assertion_input,
478
+ validated_existing_assertion=existing_assertion,
479
+ existing_entity_value=SmartColumnMetricAssertion._get_detection_mechanism(
480
+ maybe_assertion_entity, maybe_monitor_entity, default=None
481
+ )
482
+ if maybe_assertion_entity and maybe_monitor_entity
483
+ else None,
484
+ ),
485
+ sensitivity=_merge_field(
486
+ input_field_value=sensitivity,
487
+ input_field_name="sensitivity",
488
+ validated_assertion_input=assertion_input,
489
+ validated_existing_assertion=existing_assertion,
490
+ existing_entity_value=maybe_monitor_entity.sensitivity
491
+ if maybe_monitor_entity
492
+ else None,
493
+ ),
494
+ exclusion_windows=_merge_field(
495
+ input_field_value=exclusion_windows,
496
+ input_field_name="exclusion_windows",
497
+ validated_assertion_input=assertion_input,
498
+ validated_existing_assertion=existing_assertion,
499
+ existing_entity_value=maybe_monitor_entity.exclusion_windows
500
+ if maybe_monitor_entity
501
+ else None,
502
+ ),
503
+ training_data_lookback_days=_merge_field(
504
+ input_field_value=training_data_lookback_days,
505
+ input_field_name="training_data_lookback_days",
506
+ validated_assertion_input=assertion_input,
507
+ validated_existing_assertion=existing_assertion,
508
+ existing_entity_value=maybe_monitor_entity.training_data_lookback_days
509
+ if maybe_monitor_entity
510
+ else None,
511
+ ),
512
+ incident_behavior=_merge_field(
513
+ input_field_value=incident_behavior,
514
+ input_field_name="incident_behavior",
515
+ validated_assertion_input=assertion_input,
516
+ validated_existing_assertion=existing_assertion,
517
+ existing_entity_value=SmartColumnMetricAssertion._get_incident_behavior(
518
+ maybe_assertion_entity
519
+ )
520
+ if maybe_assertion_entity
521
+ else None,
522
+ ),
523
+ tags=_merge_field(
524
+ input_field_value=tags,
525
+ input_field_name="tags",
526
+ validated_assertion_input=assertion_input,
527
+ validated_existing_assertion=existing_assertion,
528
+ existing_entity_value=maybe_assertion_entity.tags
529
+ if maybe_assertion_entity
530
+ else None,
531
+ ),
532
+ created_by=existing_assertion.created_by
533
+ or DEFAULT_CREATED_BY, # Override with the existing assertion's created_by or the default created_by if not set
534
+ created_at=existing_assertion.created_at
535
+ or now_utc, # Override with the existing assertion's created_at or now if not set
536
+ updated_by=assertion_input.updated_by, # Override with the input's updated_by
537
+ updated_at=assertion_input.updated_at, # Override with the input's updated_at (now)
538
+ )
539
+
540
+ return merged_assertion_input