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.
- acryl_datahub_cloud/_codegen_config.json +1 -1
- acryl_datahub_cloud/acryl_cs_issues/acryl_customer.py +1 -1
- acryl_datahub_cloud/acryl_cs_issues/models.py +5 -3
- acryl_datahub_cloud/action_request/action_request_owner_source.py +37 -8
- acryl_datahub_cloud/datahub_forms_notifications/__init__.py +0 -0
- acryl_datahub_cloud/datahub_forms_notifications/forms_notifications_source.py +569 -0
- acryl_datahub_cloud/datahub_forms_notifications/get_feature_flag.gql +7 -0
- acryl_datahub_cloud/datahub_forms_notifications/get_search_results_total.gql +14 -0
- acryl_datahub_cloud/datahub_forms_notifications/query.py +17 -0
- acryl_datahub_cloud/datahub_forms_notifications/scroll_forms_for_notification.gql +29 -0
- acryl_datahub_cloud/datahub_forms_notifications/send_form_notification_request.gql +5 -0
- acryl_datahub_cloud/datahub_reporting/datahub_dataset.py +39 -19
- acryl_datahub_cloud/datahub_reporting/datahub_form_reporting.py +60 -25
- acryl_datahub_cloud/datahub_reporting/extract_graph.py +9 -3
- acryl_datahub_cloud/datahub_reporting/extract_sql.py +248 -52
- acryl_datahub_cloud/datahub_reporting/forms.py +1 -1
- acryl_datahub_cloud/datahub_reporting/forms_config.py +3 -2
- acryl_datahub_cloud/datahub_restore/source.py +3 -2
- acryl_datahub_cloud/datahub_usage_reporting/excluded.py +94 -0
- acryl_datahub_cloud/datahub_usage_reporting/query_builder.py +48 -8
- acryl_datahub_cloud/datahub_usage_reporting/usage_feature_reporter.py +532 -109
- acryl_datahub_cloud/elasticsearch/graph_service.py +76 -14
- acryl_datahub_cloud/graphql_utils.py +64 -0
- acryl_datahub_cloud/lineage_features/source.py +555 -49
- acryl_datahub_cloud/metadata/_urns/urn_defs.py +2390 -1938
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/actionworkflow/__init__.py +53 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/anomaly/__init__.py +2 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/application/__init__.py +19 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/assertion/__init__.py +6 -2
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/common/__init__.py +6 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/conversation/__init__.py +29 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/event/notification/settings/__init__.py +2 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/execution/__init__.py +2 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/file/__init__.py +19 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/form/__init__.py +8 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/identity/__init__.py +8 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/knowledge/__init__.py +33 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/logical/__init__.py +15 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/metadata/key/__init__.py +14 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/metadata/search/features/__init__.py +2 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/module/__init__.py +31 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/monitor/__init__.py +6 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/notification/__init__.py +19 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/platform/event/v1/__init__.py +4 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/role/__init__.py +2 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/settings/asset/__init__.py +19 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/settings/global/__init__.py +28 -0
- acryl_datahub_cloud/metadata/com/linkedin/pegasus2avro/template/__init__.py +31 -0
- acryl_datahub_cloud/metadata/schema.avsc +27843 -23200
- acryl_datahub_cloud/metadata/schema_classes.py +29901 -24310
- acryl_datahub_cloud/metadata/schemas/ActionRequestInfo.avsc +235 -2
- acryl_datahub_cloud/metadata/schemas/ActionWorkflowInfo.avsc +683 -0
- acryl_datahub_cloud/metadata/schemas/ActionWorkflowKey.avsc +21 -0
- acryl_datahub_cloud/metadata/schemas/Actors.avsc +38 -1
- acryl_datahub_cloud/metadata/schemas/ApplicationKey.avsc +31 -0
- acryl_datahub_cloud/metadata/schemas/ApplicationProperties.avsc +75 -0
- acryl_datahub_cloud/metadata/schemas/Applications.avsc +38 -0
- acryl_datahub_cloud/metadata/schemas/AssertionAnalyticsRunEvent.avsc +375 -212
- acryl_datahub_cloud/metadata/schemas/AssertionInfo.avsc +147 -20
- acryl_datahub_cloud/metadata/schemas/AssertionKey.avsc +1 -1
- acryl_datahub_cloud/metadata/schemas/AssertionRunEvent.avsc +191 -21
- acryl_datahub_cloud/metadata/schemas/{AssertionSummary.avsc → AssertionRunSummary.avsc} +15 -2
- acryl_datahub_cloud/metadata/schemas/AssertionsSummary.avsc +54 -0
- acryl_datahub_cloud/metadata/schemas/AssetSettings.avsc +63 -0
- acryl_datahub_cloud/metadata/schemas/BusinessAttributeInfo.avsc +7 -3
- acryl_datahub_cloud/metadata/schemas/ChartInfo.avsc +20 -6
- acryl_datahub_cloud/metadata/schemas/ChartKey.avsc +1 -0
- acryl_datahub_cloud/metadata/schemas/ConstraintInfo.avsc +12 -1
- acryl_datahub_cloud/metadata/schemas/ContainerKey.avsc +1 -0
- acryl_datahub_cloud/metadata/schemas/ContainerProperties.avsc +16 -5
- acryl_datahub_cloud/metadata/schemas/CorpGroupEditableInfo.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/CorpGroupInfo.avsc +7 -3
- acryl_datahub_cloud/metadata/schemas/CorpGroupKey.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/CorpGroupSettings.avsc +127 -2
- acryl_datahub_cloud/metadata/schemas/CorpUserEditableInfo.avsc +1 -1
- acryl_datahub_cloud/metadata/schemas/CorpUserInfo.avsc +18 -2
- acryl_datahub_cloud/metadata/schemas/CorpUserInvitationStatus.avsc +106 -0
- acryl_datahub_cloud/metadata/schemas/CorpUserKey.avsc +4 -1
- acryl_datahub_cloud/metadata/schemas/CorpUserSettings.avsc +304 -2
- acryl_datahub_cloud/metadata/schemas/CorpUserUsageFeatures.avsc +86 -0
- acryl_datahub_cloud/metadata/schemas/DashboardInfo.avsc +11 -5
- acryl_datahub_cloud/metadata/schemas/DashboardKey.avsc +1 -0
- acryl_datahub_cloud/metadata/schemas/DataContractKey.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/DataFlowInfo.avsc +15 -5
- acryl_datahub_cloud/metadata/schemas/DataFlowKey.avsc +1 -0
- acryl_datahub_cloud/metadata/schemas/DataHubAiConversationInfo.avsc +256 -0
- acryl_datahub_cloud/metadata/schemas/DataHubAiConversationKey.avsc +22 -0
- acryl_datahub_cloud/metadata/schemas/DataHubFileInfo.avsc +234 -0
- acryl_datahub_cloud/metadata/schemas/DataHubFileKey.avsc +22 -0
- acryl_datahub_cloud/metadata/schemas/DataHubIngestionSourceKey.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/DataHubOpenAPISchemaKey.avsc +22 -0
- acryl_datahub_cloud/metadata/schemas/DataHubPageModuleKey.avsc +21 -0
- acryl_datahub_cloud/metadata/schemas/DataHubPageModuleProperties.avsc +308 -0
- acryl_datahub_cloud/metadata/schemas/DataHubPageTemplateKey.avsc +21 -0
- acryl_datahub_cloud/metadata/schemas/DataHubPageTemplateProperties.avsc +251 -0
- acryl_datahub_cloud/metadata/schemas/DataHubPolicyInfo.avsc +12 -1
- acryl_datahub_cloud/metadata/schemas/DataJobInfo.avsc +13 -4
- acryl_datahub_cloud/metadata/schemas/DataJobInputOutput.avsc +8 -0
- acryl_datahub_cloud/metadata/schemas/DataJobKey.avsc +1 -0
- acryl_datahub_cloud/metadata/schemas/DataPlatformInfo.avsc +3 -1
- acryl_datahub_cloud/metadata/schemas/DataPlatformInstanceProperties.avsc +5 -2
- acryl_datahub_cloud/metadata/schemas/DataProcessKey.avsc +4 -0
- acryl_datahub_cloud/metadata/schemas/DataProductKey.avsc +2 -0
- acryl_datahub_cloud/metadata/schemas/DataProductProperties.avsc +6 -3
- acryl_datahub_cloud/metadata/schemas/DataTransformLogic.avsc +4 -2
- acryl_datahub_cloud/metadata/schemas/DataTypeInfo.avsc +5 -0
- acryl_datahub_cloud/metadata/schemas/DatasetKey.avsc +10 -2
- acryl_datahub_cloud/metadata/schemas/DatasetProperties.avsc +12 -5
- acryl_datahub_cloud/metadata/schemas/DatasetUsageStatistics.avsc +8 -0
- acryl_datahub_cloud/metadata/schemas/DocumentInfo.avsc +407 -0
- acryl_datahub_cloud/metadata/schemas/DocumentKey.avsc +35 -0
- acryl_datahub_cloud/metadata/schemas/DocumentSettings.avsc +79 -0
- acryl_datahub_cloud/metadata/schemas/DomainKey.avsc +2 -0
- acryl_datahub_cloud/metadata/schemas/DomainProperties.avsc +7 -3
- acryl_datahub_cloud/metadata/schemas/EditableContainerProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableDashboardProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableDataFlowProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableDataJobProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableDatasetProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableERModelRelationshipProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableMLFeatureProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableMLFeatureTableProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableMLModelGroupProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableMLModelProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableNotebookProperties.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/EditableSchemaMetadata.avsc +4 -2
- acryl_datahub_cloud/metadata/schemas/EntityTypeInfo.avsc +5 -0
- acryl_datahub_cloud/metadata/schemas/ExecutionRequestArtifactsLocation.avsc +16 -0
- acryl_datahub_cloud/metadata/schemas/ExecutionRequestKey.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/FormAssignmentStatus.avsc +36 -0
- acryl_datahub_cloud/metadata/schemas/FormInfo.avsc +6 -0
- acryl_datahub_cloud/metadata/schemas/FormKey.avsc +3 -1
- acryl_datahub_cloud/metadata/schemas/FormNotifications.avsc +69 -0
- acryl_datahub_cloud/metadata/schemas/FormSettings.avsc +30 -0
- acryl_datahub_cloud/metadata/schemas/GlobalSettingsInfo.avsc +416 -0
- acryl_datahub_cloud/metadata/schemas/GlobalTags.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/GlossaryNodeInfo.avsc +3 -1
- acryl_datahub_cloud/metadata/schemas/GlossaryNodeKey.avsc +1 -0
- acryl_datahub_cloud/metadata/schemas/GlossaryTermInfo.avsc +3 -1
- acryl_datahub_cloud/metadata/schemas/GlossaryTermKey.avsc +2 -0
- acryl_datahub_cloud/metadata/schemas/IcebergWarehouseInfo.avsc +4 -0
- acryl_datahub_cloud/metadata/schemas/IncidentActivityEvent.avsc +3 -3
- acryl_datahub_cloud/metadata/schemas/IncidentInfo.avsc +3 -3
- acryl_datahub_cloud/metadata/schemas/InferredMetadata.avsc +71 -1
- acryl_datahub_cloud/metadata/schemas/InputFields.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/InviteToken.avsc +26 -0
- acryl_datahub_cloud/metadata/schemas/LineageFeatures.avsc +67 -42
- acryl_datahub_cloud/metadata/schemas/LogicalParent.avsc +145 -0
- acryl_datahub_cloud/metadata/schemas/MLFeatureKey.avsc +4 -1
- acryl_datahub_cloud/metadata/schemas/MLFeatureTableKey.avsc +4 -1
- acryl_datahub_cloud/metadata/schemas/MLModelDeploymentKey.avsc +7 -1
- acryl_datahub_cloud/metadata/schemas/MLModelDeploymentProperties.avsc +3 -0
- acryl_datahub_cloud/metadata/schemas/MLModelGroupKey.avsc +9 -1
- acryl_datahub_cloud/metadata/schemas/MLModelKey.avsc +9 -1
- acryl_datahub_cloud/metadata/schemas/MLModelProperties.avsc +4 -2
- acryl_datahub_cloud/metadata/schemas/MLPrimaryKeyKey.avsc +4 -1
- acryl_datahub_cloud/metadata/schemas/MetadataChangeEvent.avsc +424 -97
- acryl_datahub_cloud/metadata/schemas/MetadataChangeLog.avsc +65 -44
- acryl_datahub_cloud/metadata/schemas/MetadataChangeProposal.avsc +64 -0
- acryl_datahub_cloud/metadata/schemas/MonitorAnomalyEvent.avsc +84 -29
- acryl_datahub_cloud/metadata/schemas/MonitorInfo.avsc +221 -23
- acryl_datahub_cloud/metadata/schemas/MonitorKey.avsc +9 -1
- acryl_datahub_cloud/metadata/schemas/MonitorSuiteInfo.avsc +128 -3
- acryl_datahub_cloud/metadata/schemas/NotebookInfo.avsc +5 -2
- acryl_datahub_cloud/metadata/schemas/NotebookKey.avsc +1 -0
- acryl_datahub_cloud/metadata/schemas/NotificationRequest.avsc +91 -4
- acryl_datahub_cloud/metadata/schemas/Operation.avsc +17 -0
- acryl_datahub_cloud/metadata/schemas/Ownership.avsc +71 -1
- acryl_datahub_cloud/metadata/schemas/QueryProperties.avsc +4 -2
- acryl_datahub_cloud/metadata/schemas/QuerySubjects.avsc +2 -13
- acryl_datahub_cloud/metadata/schemas/RelationshipChangeEvent.avsc +215 -0
- acryl_datahub_cloud/metadata/schemas/RoleProperties.avsc +3 -1
- acryl_datahub_cloud/metadata/schemas/SchemaFieldInfo.avsc +3 -1
- acryl_datahub_cloud/metadata/schemas/SchemaFieldKey.avsc +3 -0
- acryl_datahub_cloud/metadata/schemas/SchemaMetadata.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/SemanticContent.avsc +123 -0
- acryl_datahub_cloud/metadata/schemas/StructuredProperties.avsc +69 -0
- acryl_datahub_cloud/metadata/schemas/StructuredPropertyDefinition.avsc +15 -4
- acryl_datahub_cloud/metadata/schemas/StructuredPropertySettings.avsc +9 -0
- acryl_datahub_cloud/metadata/schemas/SubscriptionInfo.avsc +136 -5
- acryl_datahub_cloud/metadata/schemas/SubscriptionKey.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/SystemMetadata.avsc +147 -0
- acryl_datahub_cloud/metadata/schemas/TagProperties.avsc +3 -1
- acryl_datahub_cloud/metadata/schemas/TestInfo.avsc +2 -1
- acryl_datahub_cloud/metadata/schemas/UpstreamLineage.avsc +9 -0
- acryl_datahub_cloud/metadata/schemas/UsageFeatures.avsc +10 -0
- acryl_datahub_cloud/metadata/schemas/__init__.py +3 -3
- acryl_datahub_cloud/notifications/__init__.py +0 -0
- acryl_datahub_cloud/notifications/notification_recipient_builder.py +399 -0
- acryl_datahub_cloud/sdk/__init__.py +69 -0
- acryl_datahub_cloud/sdk/assertion/__init__.py +58 -0
- acryl_datahub_cloud/sdk/assertion/assertion_base.py +779 -0
- acryl_datahub_cloud/sdk/assertion/column_metric_assertion.py +191 -0
- acryl_datahub_cloud/sdk/assertion/column_value_assertion.py +431 -0
- acryl_datahub_cloud/sdk/assertion/freshness_assertion.py +201 -0
- acryl_datahub_cloud/sdk/assertion/schema_assertion.py +268 -0
- acryl_datahub_cloud/sdk/assertion/smart_column_metric_assertion.py +212 -0
- acryl_datahub_cloud/sdk/assertion/smart_freshness_assertion.py +165 -0
- acryl_datahub_cloud/sdk/assertion/smart_sql_assertion.py +156 -0
- acryl_datahub_cloud/sdk/assertion/smart_volume_assertion.py +162 -0
- acryl_datahub_cloud/sdk/assertion/sql_assertion.py +273 -0
- acryl_datahub_cloud/sdk/assertion/types.py +20 -0
- acryl_datahub_cloud/sdk/assertion/volume_assertion.py +156 -0
- acryl_datahub_cloud/sdk/assertion_client/__init__.py +0 -0
- acryl_datahub_cloud/sdk/assertion_client/column_metric.py +545 -0
- acryl_datahub_cloud/sdk/assertion_client/column_value.py +617 -0
- acryl_datahub_cloud/sdk/assertion_client/freshness.py +371 -0
- acryl_datahub_cloud/sdk/assertion_client/helpers.py +166 -0
- acryl_datahub_cloud/sdk/assertion_client/schema.py +358 -0
- acryl_datahub_cloud/sdk/assertion_client/smart_column_metric.py +540 -0
- acryl_datahub_cloud/sdk/assertion_client/smart_freshness.py +373 -0
- acryl_datahub_cloud/sdk/assertion_client/smart_sql.py +411 -0
- acryl_datahub_cloud/sdk/assertion_client/smart_volume.py +380 -0
- acryl_datahub_cloud/sdk/assertion_client/sql.py +410 -0
- acryl_datahub_cloud/sdk/assertion_client/volume.py +446 -0
- acryl_datahub_cloud/sdk/assertion_input/__init__.py +0 -0
- acryl_datahub_cloud/sdk/assertion_input/assertion_input.py +1470 -0
- acryl_datahub_cloud/sdk/assertion_input/column_assertion_constants.py +114 -0
- acryl_datahub_cloud/sdk/assertion_input/column_assertion_utils.py +284 -0
- acryl_datahub_cloud/sdk/assertion_input/column_metric_assertion_input.py +759 -0
- acryl_datahub_cloud/sdk/assertion_input/column_metric_constants.py +109 -0
- acryl_datahub_cloud/sdk/assertion_input/column_value_assertion_input.py +810 -0
- acryl_datahub_cloud/sdk/assertion_input/freshness_assertion_input.py +305 -0
- acryl_datahub_cloud/sdk/assertion_input/schema_assertion_input.py +413 -0
- acryl_datahub_cloud/sdk/assertion_input/smart_column_metric_assertion_input.py +793 -0
- acryl_datahub_cloud/sdk/assertion_input/smart_freshness_assertion_input.py +218 -0
- acryl_datahub_cloud/sdk/assertion_input/smart_sql_assertion_input.py +181 -0
- acryl_datahub_cloud/sdk/assertion_input/smart_volume_assertion_input.py +189 -0
- acryl_datahub_cloud/sdk/assertion_input/sql_assertion_input.py +320 -0
- acryl_datahub_cloud/sdk/assertion_input/volume_assertion_input.py +635 -0
- acryl_datahub_cloud/sdk/assertions_client.py +1074 -0
- acryl_datahub_cloud/sdk/entities/__init__.py +0 -0
- acryl_datahub_cloud/sdk/entities/assertion.py +439 -0
- acryl_datahub_cloud/sdk/entities/monitor.py +291 -0
- acryl_datahub_cloud/sdk/entities/subscription.py +100 -0
- acryl_datahub_cloud/sdk/errors.py +34 -0
- acryl_datahub_cloud/sdk/resolver_client.py +42 -0
- acryl_datahub_cloud/sdk/subscription_client.py +737 -0
- {acryl_datahub_cloud-0.3.10rc4.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/METADATA +49 -43
- {acryl_datahub_cloud-0.3.10rc4.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/RECORD +243 -145
- {acryl_datahub_cloud-0.3.10rc4.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/WHEEL +1 -1
- {acryl_datahub_cloud-0.3.10rc4.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/entry_points.txt +1 -0
- {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
|
+
]
|