acryl-datahub-cloud 0.3.11rc0__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/models.py +5 -3
- acryl_datahub_cloud/action_request/action_request_owner_source.py +36 -6
- 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 +37 -13
- acryl_datahub_cloud/datahub_reporting/datahub_form_reporting.py +55 -24
- acryl_datahub_cloud/datahub_reporting/extract_graph.py +4 -3
- acryl_datahub_cloud/datahub_reporting/extract_sql.py +242 -51
- 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 +518 -77
- 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 +2296 -1900
- 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 +4 -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 +12 -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/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 +25091 -20557
- acryl_datahub_cloud/metadata/schema_classes.py +29269 -23863
- 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 +353 -215
- 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 +166 -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/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/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/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/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 +418 -97
- acryl_datahub_cloud/metadata/schemas/MetadataChangeLog.avsc +62 -44
- acryl_datahub_cloud/metadata/schemas/MetadataChangeProposal.avsc +61 -0
- acryl_datahub_cloud/metadata/schemas/MonitorAnomalyEvent.avsc +54 -9
- acryl_datahub_cloud/metadata/schemas/MonitorInfo.avsc +163 -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/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 +61 -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/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.11rc0.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/METADATA +55 -49
- {acryl_datahub_cloud-0.3.11rc0.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/RECORD +235 -142
- {acryl_datahub_cloud-0.3.11rc0.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/WHEEL +1 -1
- {acryl_datahub_cloud-0.3.11rc0.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/entry_points.txt +1 -0
- acryl_datahub_cloud/_sdk_extras/__init__.py +0 -4
- acryl_datahub_cloud/_sdk_extras/assertion.py +0 -15
- acryl_datahub_cloud/_sdk_extras/assertions_client.py +0 -23
- {acryl_datahub_cloud-0.3.11rc0.dist-info → acryl_datahub_cloud-0.3.16.1rc0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import Optional, Union
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from acryl_datahub_cloud.sdk.assertion_input.assertion_input import (
|
|
8
|
+
DEFAULT_DAILY_SCHEDULE,
|
|
9
|
+
RANGE_OPERATORS,
|
|
10
|
+
SINGLE_VALUE_NUMERIC_OPERATORS,
|
|
11
|
+
AssertionIncidentBehaviorInputTypes,
|
|
12
|
+
FieldSpecType,
|
|
13
|
+
_AssertionInput,
|
|
14
|
+
)
|
|
15
|
+
from acryl_datahub_cloud.sdk.entities.assertion import (
|
|
16
|
+
AssertionInfoInputType,
|
|
17
|
+
TagsInputType,
|
|
18
|
+
)
|
|
19
|
+
from acryl_datahub_cloud.sdk.errors import SDKUsageError
|
|
20
|
+
from datahub.metadata import schema_classes as models
|
|
21
|
+
from datahub.metadata.urns import AssertionUrn, CorpUserUrn, DatasetUrn
|
|
22
|
+
from datahub.sdk.entity_client import EntityClient
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class SqlAssertionCondition(Enum):
|
|
26
|
+
IS_EQUAL_TO = "IS_EQUAL_TO" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.EQUAL_TO
|
|
27
|
+
IS_NOT_EQUAL_TO = "IS_NOT_EQUAL_TO" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.NOT_EQUAL_TO
|
|
28
|
+
IS_GREATER_THAN = "IS_GREATER_THAN" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.GREATER_THAN
|
|
29
|
+
IS_LESS_THAN = "IS_LESS_THAN" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.LESS_THAN
|
|
30
|
+
IS_WITHIN_A_RANGE = "IS_WITHIN_A_RANGE" # models.SqlAssertionTypeClass.METRIC + models.AssertionStdOperatorClass.BETWEEN
|
|
31
|
+
GROWS_AT_MOST_ABSOLUTE = "GROWS_AT_MOST_ABSOLUTE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO + models.AssertionValueChangeTypeClass.ABSOLUTE
|
|
32
|
+
GROWS_AT_MOST_PERCENTAGE = "GROWS_AT_MOST_PERCENTAGE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO + models.AssertionValueChangeTypeClass.PERCENTAGE
|
|
33
|
+
GROWS_AT_LEAST_ABSOLUTE = "GROWS_AT_LEAST_ABSOLUTE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO + models.AssertionValueChangeTypeClass.ABSOLUTE
|
|
34
|
+
GROWS_AT_LEAST_PERCENTAGE = "GROWS_AT_LEAST_PERCENTAGE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO + models.AssertionValueChangeTypeClass.PERCENTAGE
|
|
35
|
+
GROWS_WITHIN_A_RANGE_ABSOLUTE = "GROWS_WITHIN_A_RANGE_ABSOLUTE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.BETWEEN + models.AssertionValueChangeTypeClass.ABSOLUTE
|
|
36
|
+
GROWS_WITHIN_A_RANGE_PERCENTAGE = "GROWS_WITHIN_A_RANGE_PERCENTAGE" # models.SqlAssertionTypeClass.METRIC_CHANGE + models.AssertionStdOperatorClass.BETWEEN + models.AssertionValueChangeTypeClass.PERCENTAGE
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class SqlAssertionCriteria(BaseModel):
|
|
40
|
+
condition: Union[SqlAssertionCondition, str]
|
|
41
|
+
# Either a single value or a range must be provided
|
|
42
|
+
parameters: Union[Union[float, int], tuple[Union[float, int], Union[float, int]]]
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def get_type_from_condition(
|
|
46
|
+
cls, condition: Union[SqlAssertionCondition, str]
|
|
47
|
+
) -> models.SqlAssertionTypeClass:
|
|
48
|
+
condition_enum = (
|
|
49
|
+
condition
|
|
50
|
+
if isinstance(condition, SqlAssertionCondition)
|
|
51
|
+
else SqlAssertionCondition(condition)
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
if condition_enum in [
|
|
55
|
+
SqlAssertionCondition.IS_EQUAL_TO,
|
|
56
|
+
SqlAssertionCondition.IS_NOT_EQUAL_TO,
|
|
57
|
+
SqlAssertionCondition.IS_GREATER_THAN,
|
|
58
|
+
SqlAssertionCondition.IS_LESS_THAN,
|
|
59
|
+
SqlAssertionCondition.IS_WITHIN_A_RANGE,
|
|
60
|
+
]:
|
|
61
|
+
return models.SqlAssertionTypeClass.METRIC # type: ignore[return-value]
|
|
62
|
+
elif condition_enum in [
|
|
63
|
+
SqlAssertionCondition.GROWS_AT_MOST_ABSOLUTE,
|
|
64
|
+
SqlAssertionCondition.GROWS_AT_MOST_PERCENTAGE,
|
|
65
|
+
SqlAssertionCondition.GROWS_AT_LEAST_ABSOLUTE,
|
|
66
|
+
SqlAssertionCondition.GROWS_AT_LEAST_PERCENTAGE,
|
|
67
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_ABSOLUTE,
|
|
68
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_PERCENTAGE,
|
|
69
|
+
]:
|
|
70
|
+
return models.SqlAssertionTypeClass.METRIC_CHANGE # type: ignore[return-value]
|
|
71
|
+
else:
|
|
72
|
+
raise SDKUsageError(f"Unknown condition: {condition_enum}")
|
|
73
|
+
|
|
74
|
+
@classmethod
|
|
75
|
+
def get_operator_from_condition(
|
|
76
|
+
cls, condition: Union[SqlAssertionCondition, str]
|
|
77
|
+
) -> models.AssertionStdOperatorClass:
|
|
78
|
+
condition_enum = (
|
|
79
|
+
condition
|
|
80
|
+
if isinstance(condition, SqlAssertionCondition)
|
|
81
|
+
else SqlAssertionCondition(condition)
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
condition_to_operator = {
|
|
85
|
+
SqlAssertionCondition.IS_EQUAL_TO: models.AssertionStdOperatorClass.EQUAL_TO,
|
|
86
|
+
SqlAssertionCondition.IS_NOT_EQUAL_TO: models.AssertionStdOperatorClass.NOT_EQUAL_TO,
|
|
87
|
+
SqlAssertionCondition.IS_GREATER_THAN: models.AssertionStdOperatorClass.GREATER_THAN,
|
|
88
|
+
SqlAssertionCondition.IS_LESS_THAN: models.AssertionStdOperatorClass.LESS_THAN,
|
|
89
|
+
SqlAssertionCondition.IS_WITHIN_A_RANGE: models.AssertionStdOperatorClass.BETWEEN,
|
|
90
|
+
SqlAssertionCondition.GROWS_AT_MOST_ABSOLUTE: models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO,
|
|
91
|
+
SqlAssertionCondition.GROWS_AT_MOST_PERCENTAGE: models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO,
|
|
92
|
+
SqlAssertionCondition.GROWS_AT_LEAST_ABSOLUTE: models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO,
|
|
93
|
+
SqlAssertionCondition.GROWS_AT_LEAST_PERCENTAGE: models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO,
|
|
94
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_ABSOLUTE: models.AssertionStdOperatorClass.BETWEEN,
|
|
95
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_PERCENTAGE: models.AssertionStdOperatorClass.BETWEEN,
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if condition_enum not in condition_to_operator:
|
|
99
|
+
raise SDKUsageError(f"Unknown condition: {condition_enum}")
|
|
100
|
+
|
|
101
|
+
return condition_to_operator[condition_enum] # type: ignore[return-value]
|
|
102
|
+
|
|
103
|
+
@classmethod
|
|
104
|
+
def get_change_type_from_condition(
|
|
105
|
+
cls, condition: Union[SqlAssertionCondition, str]
|
|
106
|
+
) -> Optional[models.AssertionValueChangeTypeClass]:
|
|
107
|
+
condition_enum = (
|
|
108
|
+
condition
|
|
109
|
+
if isinstance(condition, SqlAssertionCondition)
|
|
110
|
+
else SqlAssertionCondition(condition)
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
if condition_enum in [
|
|
114
|
+
SqlAssertionCondition.GROWS_AT_MOST_ABSOLUTE,
|
|
115
|
+
SqlAssertionCondition.GROWS_AT_LEAST_ABSOLUTE,
|
|
116
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_ABSOLUTE,
|
|
117
|
+
]:
|
|
118
|
+
return models.AssertionValueChangeTypeClass.ABSOLUTE # type: ignore[return-value]
|
|
119
|
+
elif condition_enum in [
|
|
120
|
+
SqlAssertionCondition.GROWS_AT_MOST_PERCENTAGE,
|
|
121
|
+
SqlAssertionCondition.GROWS_AT_LEAST_PERCENTAGE,
|
|
122
|
+
SqlAssertionCondition.GROWS_WITHIN_A_RANGE_PERCENTAGE,
|
|
123
|
+
]:
|
|
124
|
+
return models.AssertionValueChangeTypeClass.PERCENTAGE # type: ignore[return-value]
|
|
125
|
+
else:
|
|
126
|
+
# Value-based conditions don't have a change type
|
|
127
|
+
return None
|
|
128
|
+
|
|
129
|
+
@classmethod
|
|
130
|
+
def get_parameters(
|
|
131
|
+
cls,
|
|
132
|
+
parameters: Union[
|
|
133
|
+
Union[float, int], tuple[Union[float, int], Union[float, int]]
|
|
134
|
+
],
|
|
135
|
+
) -> models.AssertionStdParametersClass:
|
|
136
|
+
if isinstance(parameters, (float, int)):
|
|
137
|
+
return models.AssertionStdParametersClass(
|
|
138
|
+
value=models.AssertionStdParameterClass(
|
|
139
|
+
type=models.AssertionStdParameterTypeClass.NUMBER,
|
|
140
|
+
value=str(parameters),
|
|
141
|
+
),
|
|
142
|
+
)
|
|
143
|
+
elif isinstance(parameters, tuple):
|
|
144
|
+
return models.AssertionStdParametersClass(
|
|
145
|
+
minValue=models.AssertionStdParameterClass(
|
|
146
|
+
type=models.AssertionStdParameterTypeClass.NUMBER,
|
|
147
|
+
value=str(min(parameters[0], parameters[1])),
|
|
148
|
+
),
|
|
149
|
+
maxValue=models.AssertionStdParameterClass(
|
|
150
|
+
type=models.AssertionStdParameterTypeClass.NUMBER,
|
|
151
|
+
value=str(max(parameters[0], parameters[1])),
|
|
152
|
+
),
|
|
153
|
+
)
|
|
154
|
+
else:
|
|
155
|
+
raise SDKUsageError(
|
|
156
|
+
"Either a single value or a range must be provided for the parameters of SqlAssertionCriteria"
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
@staticmethod
|
|
160
|
+
def validate(criteria: "SqlAssertionCriteria") -> "SqlAssertionCriteria":
|
|
161
|
+
operator = SqlAssertionCriteria.get_operator_from_condition(criteria.condition)
|
|
162
|
+
condition_enum = (
|
|
163
|
+
criteria.condition
|
|
164
|
+
if isinstance(criteria.condition, SqlAssertionCondition)
|
|
165
|
+
else SqlAssertionCondition(criteria.condition)
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
if operator in SINGLE_VALUE_NUMERIC_OPERATORS:
|
|
169
|
+
if not isinstance(criteria.parameters, float) and not isinstance(
|
|
170
|
+
criteria.parameters, int
|
|
171
|
+
):
|
|
172
|
+
raise SDKUsageError(
|
|
173
|
+
f"The parameter value of SqlAssertionCriteria must be a single value numeric for condition {str(condition_enum)}"
|
|
174
|
+
)
|
|
175
|
+
elif operator in RANGE_OPERATORS:
|
|
176
|
+
if not isinstance(criteria.parameters, tuple):
|
|
177
|
+
raise SDKUsageError(
|
|
178
|
+
f"The parameter value of SqlAssertionCriteria must be a tuple range for condition {str(condition_enum)}"
|
|
179
|
+
)
|
|
180
|
+
else:
|
|
181
|
+
raise SDKUsageError(
|
|
182
|
+
f"Condition {str(condition_enum)} is not supported for SqlAssertionCriteria"
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
return criteria
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class _SqlAssertionInput(_AssertionInput):
|
|
189
|
+
def _assertion_type(self) -> str:
|
|
190
|
+
"""Get the assertion type."""
|
|
191
|
+
return models.AssertionTypeClass.SQL
|
|
192
|
+
|
|
193
|
+
def __init__(
|
|
194
|
+
self,
|
|
195
|
+
*,
|
|
196
|
+
dataset_urn: Union[str, DatasetUrn],
|
|
197
|
+
entity_client: EntityClient, # Needed to get the schema field spec for the detection mechanism if needed
|
|
198
|
+
criteria: Optional[SqlAssertionCriteria],
|
|
199
|
+
statement: Optional[str],
|
|
200
|
+
urn: Optional[Union[str, AssertionUrn]] = None,
|
|
201
|
+
display_name: Optional[str] = None,
|
|
202
|
+
enabled: bool = True,
|
|
203
|
+
schedule: Optional[Union[str, models.CronScheduleClass]] = None,
|
|
204
|
+
incident_behavior: Optional[AssertionIncidentBehaviorInputTypes] = None,
|
|
205
|
+
tags: Optional[TagsInputType] = None,
|
|
206
|
+
created_by: Union[str, CorpUserUrn],
|
|
207
|
+
created_at: datetime,
|
|
208
|
+
updated_by: Union[str, CorpUserUrn],
|
|
209
|
+
updated_at: datetime,
|
|
210
|
+
):
|
|
211
|
+
_AssertionInput.__init__(
|
|
212
|
+
self,
|
|
213
|
+
dataset_urn=dataset_urn,
|
|
214
|
+
entity_client=entity_client,
|
|
215
|
+
urn=urn,
|
|
216
|
+
display_name=display_name,
|
|
217
|
+
enabled=enabled,
|
|
218
|
+
schedule=schedule,
|
|
219
|
+
incident_behavior=incident_behavior,
|
|
220
|
+
tags=tags,
|
|
221
|
+
source_type=models.AssertionSourceTypeClass.NATIVE, # Native assertions are of type native, not inferred
|
|
222
|
+
created_by=created_by,
|
|
223
|
+
created_at=created_at,
|
|
224
|
+
updated_by=updated_by,
|
|
225
|
+
updated_at=updated_at,
|
|
226
|
+
)
|
|
227
|
+
self.criteria = criteria
|
|
228
|
+
self.statement = statement
|
|
229
|
+
|
|
230
|
+
def _create_monitor_info(
|
|
231
|
+
self,
|
|
232
|
+
assertion_urn: AssertionUrn,
|
|
233
|
+
status: models.MonitorStatusClass,
|
|
234
|
+
schedule: models.CronScheduleClass,
|
|
235
|
+
) -> models.MonitorInfoClass:
|
|
236
|
+
"""
|
|
237
|
+
Create a MonitorInfoClass with all the necessary components.
|
|
238
|
+
"""
|
|
239
|
+
return models.MonitorInfoClass(
|
|
240
|
+
type=models.MonitorTypeClass.ASSERTION,
|
|
241
|
+
status=status,
|
|
242
|
+
assertionMonitor=models.AssertionMonitorClass(
|
|
243
|
+
assertions=[
|
|
244
|
+
models.AssertionEvaluationSpecClass(
|
|
245
|
+
assertion=str(assertion_urn),
|
|
246
|
+
schedule=schedule,
|
|
247
|
+
parameters=self._get_assertion_evaluation_parameters(
|
|
248
|
+
"None",
|
|
249
|
+
None, # Not used for sql assertions
|
|
250
|
+
),
|
|
251
|
+
)
|
|
252
|
+
]
|
|
253
|
+
),
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
def _create_assertion_info(
|
|
257
|
+
self,
|
|
258
|
+
filter: Optional[models.DatasetFilterClass], # Not used for sql assertions
|
|
259
|
+
) -> AssertionInfoInputType:
|
|
260
|
+
"""
|
|
261
|
+
Create a SqlAssertionInfoClass for a sql assertion.
|
|
262
|
+
|
|
263
|
+
Returns:
|
|
264
|
+
A SqlAssertionInfoClass configured for sql.
|
|
265
|
+
"""
|
|
266
|
+
# Validate required fields are present
|
|
267
|
+
if self.statement is None:
|
|
268
|
+
raise SDKUsageError("statement is required for SQL assertions")
|
|
269
|
+
if self.criteria is None:
|
|
270
|
+
raise SDKUsageError("criteria is required for SQL assertions")
|
|
271
|
+
|
|
272
|
+
SqlAssertionCriteria.validate(self.criteria)
|
|
273
|
+
|
|
274
|
+
return models.SqlAssertionInfoClass(
|
|
275
|
+
type=SqlAssertionCriteria.get_type_from_condition(self.criteria.condition),
|
|
276
|
+
entity=str(self.dataset_urn),
|
|
277
|
+
statement=self.statement,
|
|
278
|
+
changeType=SqlAssertionCriteria.get_change_type_from_condition(
|
|
279
|
+
self.criteria.condition
|
|
280
|
+
),
|
|
281
|
+
operator=SqlAssertionCriteria.get_operator_from_condition(
|
|
282
|
+
self.criteria.condition
|
|
283
|
+
),
|
|
284
|
+
parameters=SqlAssertionCriteria.get_parameters(self.criteria.parameters),
|
|
285
|
+
)
|
|
286
|
+
|
|
287
|
+
def _get_assertion_evaluation_parameters(
|
|
288
|
+
self,
|
|
289
|
+
source_type: str, # Not used for sql assertions
|
|
290
|
+
field: Optional[FieldSpecType], # Not used for sql assertions
|
|
291
|
+
) -> models.AssertionEvaluationParametersClass:
|
|
292
|
+
return models.AssertionEvaluationParametersClass(
|
|
293
|
+
type=models.AssertionEvaluationParametersTypeClass.DATASET_SQL,
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
# Not used for sql assertions
|
|
297
|
+
def _convert_assertion_source_type_and_field(
|
|
298
|
+
self,
|
|
299
|
+
) -> tuple[str, None]:
|
|
300
|
+
return "None", None
|
|
301
|
+
|
|
302
|
+
# Not used for sql assertions
|
|
303
|
+
def _create_filter_from_detection_mechanism(
|
|
304
|
+
self,
|
|
305
|
+
) -> Optional[models.DatasetFilterClass]:
|
|
306
|
+
return None
|
|
307
|
+
|
|
308
|
+
def _convert_schedule(self) -> models.CronScheduleClass:
|
|
309
|
+
"""Create a schedule for a sql assertion.
|
|
310
|
+
|
|
311
|
+
Returns:
|
|
312
|
+
A CronScheduleClass with appropriate schedule settings.
|
|
313
|
+
"""
|
|
314
|
+
if self.schedule is None:
|
|
315
|
+
return DEFAULT_DAILY_SCHEDULE
|
|
316
|
+
|
|
317
|
+
return models.CronScheduleClass(
|
|
318
|
+
cron=self.schedule.cron,
|
|
319
|
+
timezone=self.schedule.timezone,
|
|
320
|
+
)
|