acryl-datahub-cloud 0.3.12.1rc3__py3-none-any.whl → 0.3.12.2__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.

@@ -11,7 +11,6 @@ from acryl_datahub_cloud.sdk.assertion_input.assertion_input import (
11
11
  AssertionIncidentBehaviorInputTypes,
12
12
  FieldSpecType,
13
13
  _AssertionInput,
14
- _try_parse_and_validate_schema_classes_enum,
15
14
  )
16
15
  from acryl_datahub_cloud.sdk.entities.assertion import (
17
16
  AssertionInfoInputType,
@@ -23,62 +22,110 @@ from datahub.metadata.urns import AssertionUrn, CorpUserUrn, DatasetUrn
23
22
  from datahub.sdk.entity_client import EntityClient
24
23
 
25
24
 
26
- class SqlAssertionType(Enum):
27
- METRIC_CHANGE = models.SqlAssertionTypeClass.METRIC_CHANGE
28
- METRIC = models.SqlAssertionTypeClass.METRIC
29
-
30
-
31
- class SqlAssertionChangeType(Enum):
32
- ABSOLUTE = models.AssertionValueChangeTypeClass.ABSOLUTE
33
- PERCENTAGE = models.AssertionValueChangeTypeClass.PERCENTAGE
34
-
35
-
36
- class SqlAssertionOperator(Enum):
37
- EQUAL_TO = models.AssertionStdOperatorClass.EQUAL_TO
38
- NOT_EQUAL_TO = models.AssertionStdOperatorClass.NOT_EQUAL_TO
39
- GREATER_THAN = models.AssertionStdOperatorClass.GREATER_THAN
40
- LESS_THAN = models.AssertionStdOperatorClass.LESS_THAN
41
- GREATER_THAN_OR_EQUAL_TO = models.AssertionStdOperatorClass.GREATER_THAN_OR_EQUAL_TO
42
- LESS_THAN_OR_EQUAL_TO = models.AssertionStdOperatorClass.LESS_THAN_OR_EQUAL_TO
43
- BETWEEN = models.AssertionStdOperatorClass.BETWEEN
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
44
37
 
45
38
 
46
39
  class SqlAssertionCriteria(BaseModel):
47
- type: Union[SqlAssertionType, str]
48
- change_type: Optional[Union[SqlAssertionChangeType, str]]
49
- operator: Union[SqlAssertionOperator, str]
40
+ condition: Union[SqlAssertionCondition, str]
50
41
  # Either a single value or a range must be provided
51
42
  parameters: Union[Union[float, int], tuple[Union[float, int], Union[float, int]]]
52
43
 
53
44
  @classmethod
54
- def get_type(
55
- cls, type: Union[SqlAssertionType, str]
45
+ def get_type_from_condition(
46
+ cls, condition: Union[SqlAssertionCondition, str]
56
47
  ) -> models.SqlAssertionTypeClass:
57
- return _try_parse_and_validate_schema_classes_enum(
58
- type if isinstance(type, str) else str(type.value),
59
- models.SqlAssertionTypeClass,
48
+ condition_enum = (
49
+ condition
50
+ if isinstance(condition, SqlAssertionCondition)
51
+ else SqlAssertionCondition(condition)
60
52
  )
61
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
+
62
74
  @classmethod
63
- def get_change_type(
64
- cls, change_type: Optional[Union[SqlAssertionChangeType, str]]
65
- ) -> Optional[models.AssertionValueChangeTypeClass]:
66
- if change_type is None:
67
- return None
68
- return _try_parse_and_validate_schema_classes_enum(
69
- change_type if isinstance(change_type, str) else str(change_type.value),
70
- models.AssertionValueChangeTypeClass,
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)
71
82
  )
72
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
+
73
103
  @classmethod
74
- def get_operator(
75
- cls, operator: Union[SqlAssertionOperator, str]
76
- ) -> models.AssertionStdOperatorClass:
77
- return _try_parse_and_validate_schema_classes_enum(
78
- operator if isinstance(operator, str) else str(operator.value),
79
- models.AssertionStdOperatorClass,
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)
80
111
  )
81
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
+
82
129
  @classmethod
83
130
  def get_parameters(
84
131
  cls,
@@ -111,36 +158,30 @@ class SqlAssertionCriteria(BaseModel):
111
158
 
112
159
  @staticmethod
113
160
  def validate(criteria: "SqlAssertionCriteria") -> "SqlAssertionCriteria":
114
- operator = SqlAssertionCriteria.get_operator(criteria.operator)
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
+
115
168
  if operator in SINGLE_VALUE_NUMERIC_OPERATORS:
116
169
  if not isinstance(criteria.parameters, float) and not isinstance(
117
170
  criteria.parameters, int
118
171
  ):
119
172
  raise SDKUsageError(
120
- f"The parameter value of SqlAssertionCriteria must be a single value numeric for operator {str(operator)}"
173
+ f"The parameter value of SqlAssertionCriteria must be a single value numeric for condition {str(condition_enum)}"
121
174
  )
122
175
  elif operator in RANGE_OPERATORS:
123
176
  if not isinstance(criteria.parameters, tuple):
124
177
  raise SDKUsageError(
125
- f"The parameter value of SqlAssertionCriteria must be a tuple range for operator {str(operator)}"
178
+ f"The parameter value of SqlAssertionCriteria must be a tuple range for condition {str(condition_enum)}"
126
179
  )
127
180
  else:
128
181
  raise SDKUsageError(
129
- f"Operator {str(operator)} is not supported for SqlAssertionCriteria"
182
+ f"Condition {str(condition_enum)} is not supported for SqlAssertionCriteria"
130
183
  )
131
184
 
132
- if (
133
- criteria.type == SqlAssertionType.METRIC_CHANGE
134
- and criteria.change_type is None
135
- ):
136
- raise SDKUsageError("Change type is required for metric change assertions")
137
-
138
- if (
139
- criteria.type == SqlAssertionType.METRIC
140
- and criteria.change_type is not None
141
- ):
142
- raise SDKUsageError("Change type is not allowed for metric assertions")
143
-
144
185
  return criteria
145
186
 
146
187
 
@@ -227,11 +268,15 @@ class _SqlAssertionInput(_AssertionInput):
227
268
  SqlAssertionCriteria.validate(self.criteria)
228
269
 
229
270
  return models.SqlAssertionInfoClass(
230
- type=SqlAssertionCriteria.get_type(self.criteria.type),
271
+ type=SqlAssertionCriteria.get_type_from_condition(self.criteria.condition),
231
272
  entity=str(self.dataset_urn),
232
273
  statement=self.statement,
233
- changeType=SqlAssertionCriteria.get_change_type(self.criteria.change_type),
234
- operator=SqlAssertionCriteria.get_operator(self.criteria.operator),
274
+ changeType=SqlAssertionCriteria.get_change_type_from_condition(
275
+ self.criteria.condition
276
+ ),
277
+ operator=SqlAssertionCriteria.get_operator_from_condition(
278
+ self.criteria.condition
279
+ ),
235
280
  parameters=SqlAssertionCriteria.get_parameters(self.criteria.parameters),
236
281
  )
237
282
 
@@ -262,7 +307,6 @@ class _SqlAssertionInput(_AssertionInput):
262
307
  Returns:
263
308
  A CronScheduleClass with appropriate schedule settings.
264
309
  """
265
- print(f"self.schedule: {self.schedule}")
266
310
  if self.schedule is None:
267
311
  return DEFAULT_EVERY_SIX_HOURS_SCHEDULE
268
312