acceldata-sdk-python 26.7.0__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.
Files changed (303) hide show
  1. acceldata/__init__.py +7 -0
  2. acceldata/client/__init__.py +0 -0
  3. acceldata/client/adoc_client.py +666 -0
  4. acceldata/client/http_client.py +346 -0
  5. acceldata/client/transient_retry.py +142 -0
  6. acceldata/constants/__init__.py +1 -0
  7. acceldata/constants/constants.py +13 -0
  8. acceldata/exceptions/__init__.py +52 -0
  9. acceldata/exceptions/api_errors.py +85 -0
  10. acceldata/exceptions/exceptions.py +174 -0
  11. acceldata/exceptions/sdk_exceptions.py +98 -0
  12. acceldata/mappers/__init__.py +21 -0
  13. acceldata/mappers/catalog_executions.py +107 -0
  14. acceldata/models/__init__.py +0 -0
  15. acceldata/models/api/catalog/above_configs.py +99 -0
  16. acceldata/models/api/catalog/above_configs_success.py +138 -0
  17. acceldata/models/api/catalog/absolute_configs.py +197 -0
  18. acceldata/models/api/catalog/absolute_configs_fallback.py +101 -0
  19. acceldata/models/api/catalog/absolute_threshold_config.py +105 -0
  20. acceldata/models/api/catalog/analysis_job_context.py +102 -0
  21. acceldata/models/api/catalog/analytics_pipeline.py +385 -0
  22. acceldata/models/api/catalog/analytics_pipeline_endpoint.py +136 -0
  23. acceldata/models/api/catalog/anomaly_config.py +95 -0
  24. acceldata/models/api/catalog/anomaly_details.py +119 -0
  25. acceldata/models/api/catalog/anomaly_threshold_config.py +105 -0
  26. acceldata/models/api/catalog/artifact.py +92 -0
  27. acceldata/models/api/catalog/assembly.py +171 -0
  28. acceldata/models/api/catalog/asset.py +162 -0
  29. acceldata/models/api/catalog/asset_catalog_listing.py +159 -0
  30. acceldata/models/api/catalog/asset_catalog_listing_response.py +102 -0
  31. acceldata/models/api/catalog/asset_label_request.py +96 -0
  32. acceldata/models/api/catalog/asset_progress.py +96 -0
  33. acceldata/models/api/catalog/asset_progress_details.py +117 -0
  34. acceldata/models/api/catalog/asset_tag.py +124 -0
  35. acceldata/models/api/catalog/asset_tag_info.py +140 -0
  36. acceldata/models/api/catalog/asset_tag_request.py +95 -0
  37. acceldata/models/api/catalog/asset_tag_response.py +96 -0
  38. acceldata/models/api/catalog/asset_tags_response.py +102 -0
  39. acceldata/models/api/catalog/asset_type.py +96 -0
  40. acceldata/models/api/catalog/auto_anomaly_feature_analysis.py +160 -0
  41. acceldata/models/api/catalog/auto_anomaly_item_execution.py +133 -0
  42. acceldata/models/api/catalog/auto_anomaly_meta_data.py +162 -0
  43. acceldata/models/api/catalog/auto_anomaly_rule_execution.py +102 -0
  44. acceldata/models/api/catalog/auto_anomaly_summary.py +124 -0
  45. acceldata/models/api/catalog/backing_asset.py +126 -0
  46. acceldata/models/api/catalog/below_configs.py +99 -0
  47. acceldata/models/api/catalog/big_decimal.py +100 -0
  48. acceldata/models/api/catalog/big_integer.py +98 -0
  49. acceldata/models/api/catalog/bounds_date_time_marker_config.py +110 -0
  50. acceldata/models/api/catalog/bounds_file_event_marker_config.py +108 -0
  51. acceldata/models/api/catalog/bounds_id_marker_config.py +96 -0
  52. acceldata/models/api/catalog/catalog_asset_meta_data.py +128 -0
  53. acceldata/models/api/catalog/changes_by_config.py +105 -0
  54. acceldata/models/api/catalog/column_mapping.py +139 -0
  55. acceldata/models/api/catalog/column_metadata.py +90 -0
  56. acceldata/models/api/catalog/column_metric_with_anomaly_details.py +119 -0
  57. acceldata/models/api/catalog/column_variable.py +111 -0
  58. acceldata/models/api/catalog/composite_policy_execution.py +102 -0
  59. acceldata/models/api/catalog/composite_policy_item_execution.py +104 -0
  60. acceldata/models/api/catalog/connection.py +118 -0
  61. acceldata/models/api/catalog/connection_test_result.py +106 -0
  62. acceldata/models/api/catalog/connection_type.py +90 -0
  63. acceldata/models/api/catalog/connection_types_response.py +96 -0
  64. acceldata/models/api/catalog/crawler.py +88 -0
  65. acceldata/models/api/catalog/crawler_action_response.py +90 -0
  66. acceldata/models/api/catalog/crawler_execution.py +147 -0
  67. acceldata/models/api/catalog/crawler_execution_response.py +102 -0
  68. acceldata/models/api/catalog/crawler_status_response.py +90 -0
  69. acceldata/models/api/catalog/create_profile.py +194 -0
  70. acceldata/models/api/catalog/custom_sql_config.py +121 -0
  71. acceldata/models/api/catalog/data_bricks_spark_resource_config.py +104 -0
  72. acceldata/models/api/catalog/data_cadence_rule.py +236 -0
  73. acceldata/models/api/catalog/data_cadence_rule_details.py +125 -0
  74. acceldata/models/api/catalog/data_cadence_rule_execution.py +102 -0
  75. acceldata/models/api/catalog/data_cadence_rule_item.py +104 -0
  76. acceldata/models/api/catalog/data_cadence_rule_item_execution.py +158 -0
  77. acceldata/models/api/catalog/data_cadence_rule_response.py +98 -0
  78. acceldata/models/api/catalog/data_drift_execution.py +102 -0
  79. acceldata/models/api/catalog/data_drift_item_execution.py +121 -0
  80. acceldata/models/api/catalog/data_quality_engine.py +90 -0
  81. acceldata/models/api/catalog/data_quality_execution.py +106 -0
  82. acceldata/models/api/catalog/data_quality_rule.py +323 -0
  83. acceldata/models/api/catalog/data_quality_rule_details.py +186 -0
  84. acceldata/models/api/catalog/data_quality_rule_response.py +120 -0
  85. acceldata/models/api/catalog/data_quality_rules_response.py +102 -0
  86. acceldata/models/api/catalog/databricks_compute_config.py +113 -0
  87. acceldata/models/api/catalog/dataplane_engine.py +105 -0
  88. acceldata/models/api/catalog/dataplane_health_metrics.py +101 -0
  89. acceldata/models/api/catalog/dataplane_job.py +216 -0
  90. acceldata/models/api/catalog/dataplane_job_status.py +113 -0
  91. acceldata/models/api/catalog/dataplane_request.py +96 -0
  92. acceldata/models/api/catalog/dataproc_compute_config.py +106 -0
  93. acceldata/models/api/catalog/dataproc_spark_resource_config.py +104 -0
  94. acceldata/models/api/catalog/date_based_partition_marker_config.py +116 -0
  95. acceldata/models/api/catalog/date_partitioning_marker_config.py +113 -0
  96. acceldata/models/api/catalog/date_time_marker_config.py +109 -0
  97. acceldata/models/api/catalog/day_month_year_based_partition_marker_config.py +124 -0
  98. acceldata/models/api/catalog/decreased_by_config.py +105 -0
  99. acceldata/models/api/catalog/delete_artifact_response.py +88 -0
  100. acceldata/models/api/catalog/dq_rule_execution.py +248 -0
  101. acceldata/models/api/catalog/drift.py +121 -0
  102. acceldata/models/api/catalog/enable_rule_request.py +88 -0
  103. acceldata/models/api/catalog/engine.py +90 -0
  104. acceldata/models/api/catalog/execution_cancellation_response.py +92 -0
  105. acceldata/models/api/catalog/execution_response.py +144 -0
  106. acceldata/models/api/catalog/execution_result.py +126 -0
  107. acceldata/models/api/catalog/executions_response.py +102 -0
  108. acceldata/models/api/catalog/failed_asset_detail.py +90 -0
  109. acceldata/models/api/catalog/failed_summary.py +98 -0
  110. acceldata/models/api/catalog/file.py +94 -0
  111. acceldata/models/api/catalog/file_marker_config.py +99 -0
  112. acceldata/models/api/catalog/generic_config_fallback.py +101 -0
  113. acceldata/models/api/catalog/generic_execution.py +221 -0
  114. acceldata/models/api/catalog/generic_rule_execution.py +137 -0
  115. acceldata/models/api/catalog/global_storage_config_dto.py +172 -0
  116. acceldata/models/api/catalog/hosted_dp_deployment_response.py +98 -0
  117. acceldata/models/api/catalog/id_marker_config.py +94 -0
  118. acceldata/models/api/catalog/increased_by_config.py +105 -0
  119. acceldata/models/api/catalog/item.py +160 -0
  120. acceldata/models/api/catalog/item_execution.py +192 -0
  121. acceldata/models/api/catalog/item_segment.py +131 -0
  122. acceldata/models/api/catalog/job_schedule.py +118 -0
  123. acceldata/models/api/catalog/job_spec.py +96 -0
  124. acceldata/models/api/catalog/kubernetes_metrics.py +91 -0
  125. acceldata/models/api/catalog/label.py +97 -0
  126. acceldata/models/api/catalog/livy_compute_config.py +103 -0
  127. acceldata/models/api/catalog/livy_spark_resource_config.py +106 -0
  128. acceldata/models/api/catalog/look_back_config.py +90 -0
  129. acceldata/models/api/catalog/manual_tag_request.py +92 -0
  130. acceldata/models/api/catalog/mapping.py +97 -0
  131. acceldata/models/api/catalog/marker.py +88 -0
  132. acceldata/models/api/catalog/marker_config.py +349 -0
  133. acceldata/models/api/catalog/marker_config_fallback.py +101 -0
  134. acceldata/models/api/catalog/meta.py +92 -0
  135. acceldata/models/api/catalog/meta_data.py +92 -0
  136. acceldata/models/api/catalog/meta_data_item.py +94 -0
  137. acceldata/models/api/catalog/mini_profile_request.py +112 -0
  138. acceldata/models/api/catalog/notification_payload.py +114 -0
  139. acceldata/models/api/catalog/offset_based_marker_config.py +97 -0
  140. acceldata/models/api/catalog/operational_config.py +92 -0
  141. acceldata/models/api/catalog/pattern_configuration.py +90 -0
  142. acceldata/models/api/catalog/pipe_line_request.py +92 -0
  143. acceldata/models/api/catalog/pipeline_compute_config.py +110 -0
  144. acceldata/models/api/catalog/policy_execution_marker_config.py +94 -0
  145. acceldata/models/api/catalog/policy_execution_request.py +229 -0
  146. acceldata/models/api/catalog/policy_group.py +114 -0
  147. acceldata/models/api/catalog/policy_transform_udf.py +113 -0
  148. acceldata/models/api/catalog/process_metrics.py +91 -0
  149. acceldata/models/api/catalog/profile_anomaly_details_response.py +109 -0
  150. acceldata/models/api/catalog/profile_anomaly_item_execution.py +127 -0
  151. acceldata/models/api/catalog/profile_anomaly_rule_execution.py +102 -0
  152. acceldata/models/api/catalog/profile_anomaly_rule_item.py +109 -0
  153. acceldata/models/api/catalog/profile_cancellation_response.py +92 -0
  154. acceldata/models/api/catalog/profile_request.py +211 -0
  155. acceldata/models/api/catalog/profile_request_response.py +92 -0
  156. acceldata/models/api/catalog/property_template.py +178 -0
  157. acceldata/models/api/catalog/property_templates.py +123 -0
  158. acceldata/models/api/catalog/pub_sub_lookback_marker_config.py +96 -0
  159. acceldata/models/api/catalog/pub_sub_timestamp_marker_config.py +108 -0
  160. acceldata/models/api/catalog/quality_rule.py +381 -0
  161. acceldata/models/api/catalog/quality_rule_execution_metrics.py +114 -0
  162. acceldata/models/api/catalog/quality_rule_with_latest_execution.py +115 -0
  163. acceldata/models/api/catalog/range_configs.py +109 -0
  164. acceldata/models/api/catalog/reconciliation_item.py +102 -0
  165. acceldata/models/api/catalog/reconciliation_item_execution.py +157 -0
  166. acceldata/models/api/catalog/reconciliation_rule.py +339 -0
  167. acceldata/models/api/catalog/reconciliation_rule_details.py +225 -0
  168. acceldata/models/api/catalog/reconciliation_rule_execution.py +102 -0
  169. acceldata/models/api/catalog/reconciliation_rule_response.py +98 -0
  170. acceldata/models/api/catalog/reconciliation_rules_response.py +102 -0
  171. acceldata/models/api/catalog/relative_config.py +197 -0
  172. acceldata/models/api/catalog/relative_config_fallback.py +101 -0
  173. acceldata/models/api/catalog/relative_threshold_config.py +111 -0
  174. acceldata/models/api/catalog/root_cause_analysis.py +108 -0
  175. acceldata/models/api/catalog/rule_execution.py +327 -0
  176. acceldata/models/api/catalog/rule_execution_result.py +90 -0
  177. acceldata/models/api/catalog/rule_item_result.py +125 -0
  178. acceldata/models/api/catalog/rule_meta_data.py +94 -0
  179. acceldata/models/api/catalog/rule_spark_sql_dynamic_filter_variable_mapping.py +100 -0
  180. acceldata/models/api/catalog/rule_tag.py +101 -0
  181. acceldata/models/api/catalog/rule_threshold_configuration.py +236 -0
  182. acceldata/models/api/catalog/rule_threshold_configuration_fallback.py +101 -0
  183. acceldata/models/api/catalog/rules_with_latest_execution_response.py +102 -0
  184. acceldata/models/api/catalog/sample_data_api_response.py +122 -0
  185. acceldata/models/api/catalog/schema_drift_item_execution.py +131 -0
  186. acceldata/models/api/catalog/schema_drift_rule_execution.py +102 -0
  187. acceldata/models/api/catalog/secret_manager_configuration.py +90 -0
  188. acceldata/models/api/catalog/secret_manager_configuration_with_option.py +98 -0
  189. acceldata/models/api/catalog/security_config.py +90 -0
  190. acceldata/models/api/catalog/segment_metric_json.py +142 -0
  191. acceldata/models/api/catalog/segments_analysis.py +145 -0
  192. acceldata/models/api/catalog/short_segment.py +97 -0
  193. acceldata/models/api/catalog/simple_quality_rule_response.py +92 -0
  194. acceldata/models/api/catalog/snapshot_data.py +117 -0
  195. acceldata/models/api/catalog/source_model.py +90 -0
  196. acceldata/models/api/catalog/source_type.py +100 -0
  197. acceldata/models/api/catalog/source_types_response.py +102 -0
  198. acceldata/models/api/catalog/spark_job_status.py +113 -0
  199. acceldata/models/api/catalog/spark_resource_config.py +114 -0
  200. acceldata/models/api/catalog/standard_response_assembly.py +92 -0
  201. acceldata/models/api/catalog/standard_response_crawler_action_response.py +92 -0
  202. acceldata/models/api/catalog/standard_response_crawler_status_response.py +92 -0
  203. acceldata/models/api/catalog/standard_response_delete_artifact_response.py +92 -0
  204. acceldata/models/api/catalog/standard_response_list.py +96 -0
  205. acceldata/models/api/catalog/standard_response_map.py +88 -0
  206. acceldata/models/api/catalog/standard_response_meta_data.py +92 -0
  207. acceldata/models/api/catalog/standard_response_mini_profile_request.py +92 -0
  208. acceldata/models/api/catalog/standard_response_profile_request.py +92 -0
  209. acceldata/models/api/catalog/start_profiling_request.py +92 -0
  210. acceldata/models/api/catalog/tag_domain.py +116 -0
  211. acceldata/models/api/catalog/threshold_breach_details.py +101 -0
  212. acceldata/models/api/catalog/time_based_config.py +92 -0
  213. acceldata/models/api/catalog/time_based_threshold_config.py +105 -0
  214. acceldata/models/api/catalog/timestamp_based_marker_config.py +115 -0
  215. acceldata/models/api/catalog/udf_variable.py +97 -0
  216. acceldata/models/api/catalog/yunikorn_compute_config.py +133 -0
  217. acceldata/models/api/catalog/yunikorn_spark_resource_config.py +154 -0
  218. acceldata/models/api/pipeline/big_decimal.py +100 -0
  219. acceldata/models/api/pipeline/big_integer.py +98 -0
  220. acceldata/models/api/pipeline/child_span_response.py +96 -0
  221. acceldata/models/api/pipeline/create_span_event.py +109 -0
  222. acceldata/models/api/pipeline/edge.py +108 -0
  223. acceldata/models/api/pipeline/event_alert_object.py +95 -0
  224. acceldata/models/api/pipeline/generic_config_fallback.py +101 -0
  225. acceldata/models/api/pipeline/identifier.py +146 -0
  226. acceldata/models/api/pipeline/job_request.py +130 -0
  227. acceldata/models/api/pipeline/meta.py +107 -0
  228. acceldata/models/api/pipeline/meta_data.py +92 -0
  229. acceldata/models/api/pipeline/metric.py +103 -0
  230. acceldata/models/api/pipeline/node.py +201 -0
  231. acceldata/models/api/pipeline/node_response.py +92 -0
  232. acceldata/models/api/pipeline/notification_payload.py +114 -0
  233. acceldata/models/api/pipeline/pipeline.py +152 -0
  234. acceldata/models/api/pipeline/pipeline_baseline_metric.py +92 -0
  235. acceldata/models/api/pipeline/pipeline_details.py +118 -0
  236. acceldata/models/api/pipeline/pipeline_details_response.py +102 -0
  237. acceldata/models/api/pipeline/pipeline_input_request.py +92 -0
  238. acceldata/models/api/pipeline/pipeline_listing_info.py +118 -0
  239. acceldata/models/api/pipeline/pipeline_response.py +92 -0
  240. acceldata/models/api/pipeline/pipeline_run.py +136 -0
  241. acceldata/models/api/pipeline/pipeline_run_request.py +92 -0
  242. acceldata/models/api/pipeline/pipeline_runs_response.py +102 -0
  243. acceldata/models/api/pipeline/pipeline_summary.py +98 -0
  244. acceldata/models/api/pipeline/pipelines_listing_response.py +102 -0
  245. acceldata/models/api/pipeline/policy_summary.py +102 -0
  246. acceldata/models/api/pipeline/span.py +115 -0
  247. acceldata/models/api/pipeline/span_event.py +114 -0
  248. acceldata/models/api/pipeline/span_event_request.py +92 -0
  249. acceldata/models/api/pipeline/span_event_response.py +92 -0
  250. acceldata/models/api/pipeline/span_request.py +94 -0
  251. acceldata/models/api/pipeline/spans_response.py +96 -0
  252. acceldata/models/api/pipeline/tag.py +97 -0
  253. acceldata/models/sdk/__init__.py +0 -0
  254. acceldata/models/sdk/catalog/__init__.py +105 -0
  255. acceldata/models/sdk/catalog/asset_resource.py +112 -0
  256. acceldata/models/sdk/catalog/asset_source_type.py +59 -0
  257. acceldata/models/sdk/catalog/custom_asset_metadata.py +11 -0
  258. acceldata/models/sdk/catalog/datasource_resource.py +88 -0
  259. acceldata/models/sdk/catalog/executor.py +524 -0
  260. acceldata/models/sdk/catalog/policy_execution_request.py +114 -0
  261. acceldata/models/sdk/catalog/policy_execution_type.py +16 -0
  262. acceldata/models/sdk/catalog/policy_filter.py +94 -0
  263. acceldata/models/sdk/catalog/policy_rule_resources.py +388 -0
  264. acceldata/models/sdk/catalog/profile_request_resource.py +77 -0
  265. acceldata/models/sdk/catalog/profiling.py +82 -0
  266. acceldata/models/sdk/catalog/profiling_configuration_error.py +5 -0
  267. acceldata/models/sdk/pipeline/__init__.py +62 -0
  268. acceldata/models/sdk/pipeline/create_job_input.py +108 -0
  269. acceldata/models/sdk/pipeline/create_pipeline_input_request.py +72 -0
  270. acceldata/models/sdk/pipeline/events/__init__.py +5 -0
  271. acceldata/models/sdk/pipeline/events/generic_event.py +31 -0
  272. acceldata/models/sdk/pipeline/events/log_event.py +34 -0
  273. acceldata/models/sdk/pipeline/events/span_event.py +8 -0
  274. acceldata/models/sdk/pipeline/pipeline_resource.py +171 -0
  275. acceldata/models/sdk/pipeline/pipeline_run_input.py +84 -0
  276. acceldata/models/sdk/pipeline/pipeline_run_resource.py +208 -0
  277. acceldata/models/sdk/pipeline/pipeline_source_type.py +20 -0
  278. acceldata/models/sdk/pipeline/span_resource.py +327 -0
  279. acceldata/openapi_deserialization_patches.py +161 -0
  280. acceldata/openapi_repr_patches.py +62 -0
  281. acceldata/services/__init__.py +0 -0
  282. acceldata/services/api_timestamp.py +31 -0
  283. acceldata/services/asset_service.py +651 -0
  284. acceldata/services/datasource_service.py +120 -0
  285. acceldata/services/generic_service.py +132 -0
  286. acceldata/services/marker_config.py +232 -0
  287. acceldata/services/pipeline_big_decimal_api.py +102 -0
  288. acceldata/services/pipeline_response_parse.py +209 -0
  289. acceldata/services/pipeline_service.py +494 -0
  290. acceldata/services/rule_service.py +620 -0
  291. acceldata/urls/__init__.py +1 -0
  292. acceldata/urls/catalog_urls.py +137 -0
  293. acceldata/urls/pipeline_urls.py +55 -0
  294. acceldata/utils/__init__.py +6 -0
  295. acceldata/utils/datetime_utils.py +16 -0
  296. acceldata/utils/operation_ack.py +22 -0
  297. acceldata/utils/span_helpers.py +95 -0
  298. acceldata/utils/time_range_utils.py +90 -0
  299. acceldata_sdk_python-26.7.0.dist-info/METADATA +26 -0
  300. acceldata_sdk_python-26.7.0.dist-info/RECORD +303 -0
  301. acceldata_sdk_python-26.7.0.dist-info/WHEEL +5 -0
  302. acceldata_sdk_python-26.7.0.dist-info/licenses/LICENSE +22 -0
  303. acceldata_sdk_python-26.7.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,94 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from enum import Enum, auto
5
+ from typing import TYPE_CHECKING
6
+
7
+ if TYPE_CHECKING:
8
+ from acceldata.models.api.catalog.asset import Asset
9
+ from acceldata.models.api.catalog.assembly import Assembly
10
+
11
+
12
+ class ExecutionPeriod(Enum):
13
+ """Time window for filtering rules by last execution time."""
14
+
15
+ Last15minutes = auto()
16
+ Last30minutes = auto()
17
+ Last1hour = auto()
18
+ Last3hours = auto()
19
+ Last6hours = auto()
20
+ Last12hours = auto()
21
+ Last24hours = auto()
22
+ Today = auto()
23
+ Yesterday = auto()
24
+ Last7days = auto()
25
+ Thismonth = auto()
26
+ Last1month = auto()
27
+ Last3month = auto()
28
+
29
+
30
+ class RuleType(Enum):
31
+ """Catalog rule kind; query params use the enum member name (e.g. ``DATA_QUALITY``)."""
32
+
33
+ DATA_QUALITY = auto()
34
+ RECONCILIATION = auto()
35
+ EQUALITY = auto()
36
+ DATA_DRIFT = auto()
37
+ SCHEMA_DRIFT = auto()
38
+ DATA_CADENCE = auto()
39
+
40
+
41
+ class PolicyType(Enum):
42
+ """Policy kind for :meth:`~acceldata.client.adoc_client.AdocClient.get_policy` routing."""
43
+
44
+ DATA_QUALITY = "DATA-QUALITY"
45
+ RECONCILIATION = "RECONCILIATION"
46
+ DATA_CADENCE = "DATA_CADENCE"
47
+
48
+
49
+ class RuleResultStatus(Enum):
50
+ """Filter by last execution outcome."""
51
+
52
+ STARTED = auto()
53
+ RUNNING = auto()
54
+ ERRORED = auto()
55
+ WARNING = auto()
56
+ SUCCESSFUL = auto()
57
+ ABORTED = auto()
58
+ WAITING = auto()
59
+
60
+
61
+ class RuleExecutionStatus(str, Enum):
62
+ """Status strings on :class:`~acceldata.models.api.catalog.generic_rule_execution.GenericRuleExecution` (API responses)."""
63
+
64
+ STARTED = "STARTED"
65
+ RUNNING = "RUNNING"
66
+ ERRORED = "ERRORED"
67
+ WARNING = "WARNING"
68
+ SUCCESSFUL = "SUCCESSFUL"
69
+ ABORTED = "ABORTED"
70
+ SKIPPED = "SKIPPED"
71
+ WAITING = "WAITING"
72
+ ANOMALY_DETECTION = "ANOMALY_DETECTION"
73
+ EXECUTION_RESULT = "EXECUTION_RESULT"
74
+
75
+
76
+ @dataclass
77
+ class PolicyFilter:
78
+ """
79
+ Filter for listing catalog rules (``GET /rules``).
80
+
81
+ Uses :class:`~acceldata.models.api.catalog.asset.Asset` and
82
+ :class:`~acceldata.models.api.catalog.assembly.Assembly` for asset / datasource scoping.
83
+
84
+ Constructor arguments use the field names below (snake_case), e.g. ``policy_type``, not ``policyType``.
85
+ """
86
+
87
+ period: ExecutionPeriod | None = None
88
+ tags: str | None = None
89
+ last_execution_result: RuleResultStatus | None = None
90
+ assets: list[Asset] | None = None
91
+ policy_type: RuleType | None = None
92
+ enable: bool | None = None
93
+ active: bool | None = None
94
+ data_sources: list[Assembly] | None = None
@@ -0,0 +1,388 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Dict
4
+
5
+ from acceldata.client.transient_retry import RetryConfig
6
+ from acceldata.models.api.catalog.data_cadence_rule_execution import DataCadenceRuleExecution
7
+ from acceldata.models.api.catalog.data_cadence_rule_response import DataCadenceRuleResponse
8
+ from acceldata.models.api.catalog.data_quality_execution import DataQualityExecution
9
+ from acceldata.models.api.catalog.data_quality_rule_response import DataQualityRuleResponse
10
+ from acceldata.models.api.catalog.executions_response import ExecutionsResponse
11
+ from acceldata.models.api.catalog.execution_cancellation_response import ExecutionCancellationResponse
12
+ from acceldata.models.api.catalog.execution_result import ExecutionResult
13
+ from acceldata.models.api.catalog.generic_execution import GenericExecution
14
+ from acceldata.models.api.catalog.reconciliation_rule_execution import ReconciliationRuleExecution
15
+ from acceldata.models.sdk.catalog.policy_execution_request import PolicyExecutionRequestInput
16
+ from acceldata.models.api.catalog.quality_rule import QualityRule
17
+ from acceldata.models.api.catalog.reconciliation_rule_response import ReconciliationRuleResponse
18
+ from acceldata.models.sdk.catalog.executor import (
19
+ POLICY_POLL_UNLIMITED_RETRIES,
20
+ Executor,
21
+ FailureStrategy,
22
+ )
23
+ from acceldata.models.sdk.catalog.policy_filter import RuleExecutionStatus, RuleType
24
+
25
+
26
+ class DataQualityRuleResource:
27
+ """Typed handle for a data quality (DQ) policy rule: GET, executions, enable/disable, and :class:`~acceldata.models.sdk.catalog.executor.Executor` helpers."""
28
+
29
+ def __init__(
30
+ self,
31
+ client: Any,
32
+ model: DataQualityRuleResponse,
33
+ identifier: str | int | None = None,
34
+ ) -> None:
35
+ self._client = client
36
+ self._model = model
37
+ self._identifier = identifier
38
+
39
+ def to_dict(self) -> Dict[str, Any]:
40
+ return self._model.to_dict()
41
+
42
+ @property
43
+ def rule_response(self) -> DataQualityRuleResponse:
44
+ return self._model
45
+
46
+ def __repr__(self) -> str:
47
+ return f"DataQualityRuleResource(model={self._model!r})"
48
+
49
+ def _rule_id(self) -> str | int:
50
+ rid = self._model.rule.id
51
+ if rid is not None:
52
+ return rid
53
+ if self._identifier is not None:
54
+ return self._identifier
55
+ raise ValueError("Rule id is not available; fetch the rule again.")
56
+
57
+ def refresh(self) -> DataQualityRuleResource:
58
+ self._model = self._client.rule_service.get_dq_rule(self._rule_id())
59
+ return self
60
+
61
+ def execute(
62
+ self,
63
+ policy_execution_request: PolicyExecutionRequestInput,
64
+ ) -> GenericExecution:
65
+ return self._client.execute_dq_rule(
66
+ self._rule_id(),
67
+ policy_execution_request,
68
+ )
69
+
70
+ def policy_executions(
71
+ self,
72
+ page: int = 0,
73
+ size: int = 25,
74
+ sort_by: str = "finishedAt:DESC",
75
+ ) -> ExecutionsResponse:
76
+ return self._client.policy_executions(self._rule_id(), RuleType.DATA_QUALITY, page=page, size=size, sort_by=sort_by)
77
+
78
+ def enable(self) -> QualityRule:
79
+ return self._client.enable_rule(self._rule_id())
80
+
81
+ def disable(self) -> QualityRule:
82
+ return self._client.disable_rule(self._rule_id())
83
+
84
+ def get_execution_details(self, execution_id: str | int) -> DataQualityExecution:
85
+ return self._client.get_dq_rule_execution_details(execution_id)
86
+
87
+ def get_result(self, execution_id: str | int) -> ExecutionResult:
88
+ return self._client.get_dq_rule_result(execution_id)
89
+
90
+ def cancel_execution(self, execution_id: str | int) -> ExecutionCancellationResponse:
91
+ return self._client.cancel_rule_execution(execution_id)
92
+
93
+ def execute_policy(
94
+ self,
95
+ policy_execution_request: PolicyExecutionRequestInput,
96
+ *,
97
+ sync: bool = True,
98
+ failure_strategy: FailureStrategy = FailureStrategy.DoNotFail,
99
+ sleep_interval: float = 5.0,
100
+ total_retries: int = POLICY_POLL_UNLIMITED_RETRIES,
101
+ transient_retry: RetryConfig | None = None,
102
+ pipeline_run_id: int | None = None,
103
+ ) -> Executor:
104
+ return self._client.execute_policy(
105
+ RuleType.DATA_QUALITY,
106
+ self._rule_id(),
107
+ policy_execution_request,
108
+ sync=sync,
109
+ failure_strategy=failure_strategy,
110
+ sleep_interval=sleep_interval,
111
+ total_retries=total_retries,
112
+ transient_retry=transient_retry,
113
+ pipeline_run_id=pipeline_run_id,
114
+ )
115
+
116
+ def get_policy_execution_status(
117
+ self,
118
+ execution_id: str | int,
119
+ *,
120
+ transient_retry: RetryConfig | None = None,
121
+ ) -> RuleExecutionStatus:
122
+ return self._client.get_policy_execution_status(
123
+ RuleType.DATA_QUALITY,
124
+ execution_id,
125
+ transient_retry=transient_retry,
126
+ )
127
+
128
+ def get_policy_execution_result(
129
+ self,
130
+ execution_id: str | int,
131
+ *,
132
+ failure_strategy: FailureStrategy = FailureStrategy.DoNotFail,
133
+ transient_retry: RetryConfig | None = None,
134
+ ) -> ExecutionResult:
135
+ return self._client.get_policy_execution_result(
136
+ RuleType.DATA_QUALITY,
137
+ execution_id,
138
+ failure_strategy=failure_strategy,
139
+ transient_retry=transient_retry,
140
+ )
141
+
142
+
143
+ class ReconciliationRuleResource:
144
+ """Typed handle for a reconciliation (recon) policy rule (left/right compare); same surface as :class:`DataQualityRuleResource` for executions and results."""
145
+
146
+ def __init__(
147
+ self,
148
+ client: Any,
149
+ model: ReconciliationRuleResponse,
150
+ identifier: str | int | None = None,
151
+ ) -> None:
152
+ self._client = client
153
+ self._model = model
154
+ self._identifier = identifier
155
+
156
+ def to_dict(self) -> Dict[str, Any]:
157
+ return self._model.to_dict()
158
+
159
+ @property
160
+ def rule_response(self) -> ReconciliationRuleResponse:
161
+ return self._model
162
+
163
+ def __repr__(self) -> str:
164
+ return f"ReconciliationRuleResource(model={self._model!r})"
165
+
166
+ def _rule_id(self) -> str | int:
167
+ rid = self._model.rule.id
168
+ if rid is not None:
169
+ return rid
170
+ if self._identifier is not None:
171
+ return self._identifier
172
+ raise ValueError("Rule id is not available; fetch the rule again.")
173
+
174
+ def refresh(self) -> ReconciliationRuleResource:
175
+ self._model = self._client.rule_service.get_reconciliation_rule(self._rule_id())
176
+ return self
177
+
178
+ def execute(
179
+ self,
180
+ policy_execution_request: PolicyExecutionRequestInput,
181
+ ) -> GenericExecution:
182
+ return self._client.execute_reconciliation_rule(
183
+ self._rule_id(),
184
+ policy_execution_request,
185
+ )
186
+
187
+ def policy_executions(
188
+ self,
189
+ page: int = 0,
190
+ size: int = 25,
191
+ sort_by: str = "finishedAt:DESC",
192
+ ) -> ExecutionsResponse:
193
+ return self._client.policy_executions(
194
+ self._rule_id(), RuleType.RECONCILIATION, page=page, size=size, sort_by=sort_by
195
+ )
196
+
197
+ def enable(self) -> QualityRule:
198
+ return self._client.enable_rule(self._rule_id())
199
+
200
+ def disable(self) -> QualityRule:
201
+ return self._client.disable_rule(self._rule_id())
202
+
203
+ def get_execution_details(
204
+ self, execution_id: str | int
205
+ ) -> ReconciliationRuleExecution:
206
+ return self._client.get_reconciliation_rule_execution_details(execution_id)
207
+
208
+ def get_result(self, execution_id: str | int) -> ExecutionResult:
209
+ return self._client.get_reconciliation_rule_result(execution_id)
210
+
211
+ def cancel_execution(self, execution_id: str | int) -> ExecutionCancellationResponse:
212
+ return self._client.cancel_rule_execution(execution_id)
213
+
214
+ def execute_policy(
215
+ self,
216
+ policy_execution_request: PolicyExecutionRequestInput,
217
+ *,
218
+ sync: bool = True,
219
+ failure_strategy: FailureStrategy = FailureStrategy.DoNotFail,
220
+ sleep_interval: float = 5.0,
221
+ total_retries: int = POLICY_POLL_UNLIMITED_RETRIES,
222
+ transient_retry: RetryConfig | None = None,
223
+ pipeline_run_id: int | None = None,
224
+ ) -> Executor:
225
+ return self._client.execute_policy(
226
+ RuleType.RECONCILIATION,
227
+ self._rule_id(),
228
+ policy_execution_request,
229
+ sync=sync,
230
+ failure_strategy=failure_strategy,
231
+ sleep_interval=sleep_interval,
232
+ total_retries=total_retries,
233
+ transient_retry=transient_retry,
234
+ pipeline_run_id=pipeline_run_id,
235
+ )
236
+
237
+ def get_policy_execution_status(
238
+ self,
239
+ execution_id: str | int,
240
+ *,
241
+ transient_retry: RetryConfig | None = None,
242
+ ) -> RuleExecutionStatus:
243
+ return self._client.get_policy_execution_status(
244
+ RuleType.RECONCILIATION,
245
+ execution_id,
246
+ transient_retry=transient_retry,
247
+ )
248
+
249
+ def get_policy_execution_result(
250
+ self,
251
+ execution_id: str | int,
252
+ *,
253
+ failure_strategy: FailureStrategy = FailureStrategy.DoNotFail,
254
+ transient_retry: RetryConfig | None = None,
255
+ ) -> ExecutionResult:
256
+ return self._client.get_policy_execution_result(
257
+ RuleType.RECONCILIATION,
258
+ execution_id,
259
+ failure_strategy=failure_strategy,
260
+ transient_retry=transient_retry,
261
+ )
262
+
263
+
264
+ class DataCadenceRuleResource:
265
+ """Typed handle for a data cadence (freshness) policy rule; API path kind ``DATA_CADENCE``."""
266
+
267
+ def __init__(
268
+ self,
269
+ client: Any,
270
+ model: DataCadenceRuleResponse,
271
+ identifier: str | int | None = None,
272
+ ) -> None:
273
+ self._client = client
274
+ self._model = model
275
+ self._identifier = identifier
276
+
277
+ def to_dict(self) -> Dict[str, Any]:
278
+ return self._model.to_dict()
279
+
280
+ @property
281
+ def rule_response(self) -> DataCadenceRuleResponse:
282
+ return self._model
283
+
284
+ def __repr__(self) -> str:
285
+ return f"DataCadenceRuleResource(model={self._model!r})"
286
+
287
+ def _rule_id(self) -> str | int:
288
+ rid = self._model.rule.id
289
+ if rid is not None:
290
+ return rid
291
+ if self._identifier is not None:
292
+ return self._identifier
293
+ raise ValueError("Rule id is not available; fetch the rule again.")
294
+
295
+ def refresh(self) -> DataCadenceRuleResource:
296
+ self._model = self._client.rule_service.get_freshness_rule(self._rule_id())
297
+ return self
298
+
299
+ def execute(
300
+ self,
301
+ policy_execution_request: PolicyExecutionRequestInput,
302
+ ) -> GenericExecution:
303
+ return self._client.execute_freshness_rule(
304
+ self._rule_id(),
305
+ policy_execution_request,
306
+ )
307
+
308
+ def policy_executions(
309
+ self,
310
+ page: int = 0,
311
+ size: int = 25,
312
+ sort_by: str = "finishedAt:DESC",
313
+ ) -> ExecutionsResponse:
314
+ return self._client.policy_executions(
315
+ self._rule_id(), RuleType.DATA_CADENCE, page=page, size=size, sort_by=sort_by
316
+ )
317
+
318
+ def enable(self) -> QualityRule:
319
+ return self._client.enable_rule(self._rule_id())
320
+
321
+ def disable(self) -> QualityRule:
322
+ return self._client.disable_rule(self._rule_id())
323
+
324
+ def get_execution_details(self, execution_id: str | int) -> DataCadenceRuleExecution:
325
+ return self._client.get_data_cadence_rule_execution_details(execution_id)
326
+
327
+ def get_result(self, execution_id: str | int) -> ExecutionResult:
328
+ return self._client.get_freshness_rule_result(execution_id)
329
+
330
+ def cancel_execution(self, execution_id: str | int) -> ExecutionCancellationResponse:
331
+ return self._client.cancel_rule_execution(execution_id)
332
+
333
+ def execute_policy(
334
+ self,
335
+ policy_execution_request: PolicyExecutionRequestInput,
336
+ *,
337
+ sync: bool = True,
338
+ failure_strategy: FailureStrategy = FailureStrategy.DoNotFail,
339
+ sleep_interval: float = 5.0,
340
+ total_retries: int = POLICY_POLL_UNLIMITED_RETRIES,
341
+ transient_retry: RetryConfig | None = None,
342
+ pipeline_run_id: int | None = None,
343
+ ) -> Executor:
344
+ return self._client.execute_policy(
345
+ RuleType.DATA_CADENCE,
346
+ self._rule_id(),
347
+ policy_execution_request,
348
+ sync=sync,
349
+ failure_strategy=failure_strategy,
350
+ sleep_interval=sleep_interval,
351
+ total_retries=total_retries,
352
+ transient_retry=transient_retry,
353
+ pipeline_run_id=pipeline_run_id,
354
+ )
355
+
356
+ def get_policy_execution_status(
357
+ self,
358
+ execution_id: str | int,
359
+ *,
360
+ transient_retry: RetryConfig | None = None,
361
+ ) -> RuleExecutionStatus:
362
+ return self._client.get_policy_execution_status(
363
+ RuleType.DATA_CADENCE,
364
+ execution_id,
365
+ transient_retry=transient_retry,
366
+ )
367
+
368
+ def get_policy_execution_result(
369
+ self,
370
+ execution_id: str | int,
371
+ *,
372
+ failure_strategy: FailureStrategy = FailureStrategy.DoNotFail,
373
+ transient_retry: RetryConfig | None = None,
374
+ ) -> ExecutionResult:
375
+ return self._client.get_policy_execution_result(
376
+ RuleType.DATA_CADENCE,
377
+ execution_id,
378
+ failure_strategy=failure_strategy,
379
+ transient_retry=transient_retry,
380
+ )
381
+
382
+
383
+ # Naming aliases (import-friendly).
384
+ DQPolicyResource = DataQualityRuleResource
385
+ ReconPolicyResource = ReconciliationRuleResource
386
+ CadencePolicyResource = DataCadenceRuleResource
387
+ # Backward-compatible alias.
388
+ ReconRuleResource = ReconciliationRuleResource
@@ -0,0 +1,77 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Any, Dict, Optional
4
+
5
+ from acceldata.models.api.catalog.profile_cancellation_response import (
6
+ ProfileCancellationResponse,
7
+ )
8
+ from acceldata.models.api.catalog.profile_request import ProfileRequest
9
+
10
+ if TYPE_CHECKING:
11
+ from acceldata.services.asset_service import AssetService
12
+
13
+
14
+ class ProfileRequestResource:
15
+ """
16
+ SDK wrapper around the generated :class:`~acceldata.models.api.catalog.profile_request.ProfileRequest`
17
+ for cancel and status calls that need an :class:`~acceldata.services.asset_service.AssetService`.
18
+ """
19
+
20
+ def __init__(
21
+ self,
22
+ asset_service: AssetService,
23
+ model: ProfileRequest,
24
+ *,
25
+ operation_message: str | None = None,
26
+ ) -> None:
27
+ self._asset_service = asset_service
28
+ self._model = model
29
+ self._operation_message = operation_message
30
+
31
+ @property
32
+ def asset_service(self) -> AssetService:
33
+ return self._asset_service
34
+
35
+ @property
36
+ def profile_request(self) -> ProfileRequest:
37
+ return self._model
38
+
39
+ def to_dict(self) -> Dict[str, Any]:
40
+ return self._model.to_dict()
41
+
42
+ @property
43
+ def id(self) -> int:
44
+ return int(self._model.id)
45
+
46
+ @property
47
+ def asset_id(self) -> int:
48
+ return int(self._model.asset_id)
49
+
50
+ def __repr__(self) -> str:
51
+ return f"ProfileRequestResource(model={self._model!r})"
52
+
53
+ @property
54
+ def message(self) -> str:
55
+ if self._operation_message:
56
+ return self._operation_message
57
+ status = self._model.status or "UNKNOWN"
58
+ return (
59
+ f"Profile request {self.id} for asset {self.asset_id} is currently {status}."
60
+ )
61
+
62
+ def cancel(self) -> Optional[ProfileCancellationResponse]:
63
+ return self._asset_service.cancel_profile(self.id)
64
+
65
+ def get_status(self) -> ProfileRequestResource:
66
+ self._model = self._asset_service.get_profile_request_details(
67
+ asset_id=self._model.asset_id, req_id=self.id
68
+ )
69
+ status = self._model.status or "UNKNOWN"
70
+ self._operation_message = (
71
+ f"Profile request {self.id} for asset {self.asset_id} is currently {status}."
72
+ )
73
+ return self
74
+
75
+
76
+ # Preferred name aligned with other *Resource wrappers.
77
+ ProfileResource = ProfileRequestResource
@@ -0,0 +1,82 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from enum import Enum
5
+ from typing import TYPE_CHECKING, Optional
6
+
7
+ if TYPE_CHECKING:
8
+ from acceldata.models.api.catalog.start_profiling_request import (
9
+ StartProfilingRequest,
10
+ )
11
+
12
+ from acceldata.services.marker_config import (
13
+ MarkerConfigInput,
14
+ prepare_marker_config_for_request,
15
+ )
16
+
17
+
18
+ class ProfilingType(str, Enum):
19
+ """Profiling mode for :meth:`~acceldata.models.sdk.catalog.asset_resource.AssetResource.start_profile`."""
20
+
21
+ FULL = "FULL"
22
+ SELECTIVE = "SELECTIVE"
23
+ INCREMENTAL = "INCREMENTAL"
24
+
25
+ def needs_asset_marker(self) -> bool:
26
+ """True when profiling must include a marker configuration (incremental runs)."""
27
+ return self is ProfilingType.INCREMENTAL
28
+
29
+
30
+ class ExecutionType(str, Enum):
31
+ """Same string values as catalog ``profilingType`` for execution classification."""
32
+
33
+ SELECTIVE = "SELECTIVE"
34
+ FULL = "FULL"
35
+ INCREMENTAL = "INCREMENTAL"
36
+
37
+
38
+ @dataclass
39
+ class AssetProfilingParams:
40
+ """
41
+ Narrow input for :class:`~acceldata.models.api.catalog.start_profiling_request.StartProfilingRequest`:
42
+ only ``profilingType`` and ``markerConfig`` are set; other fields use catalog defaults.
43
+
44
+ Unrelated to pipeline span events; those use :class:`~acceldata.models.sdk.pipeline.events.log_event.LogEvent`
45
+ or :class:`~acceldata.models.sdk.pipeline.events.generic_event.GenericEvent` with
46
+ :meth:`~acceldata.models.sdk.pipeline.span_resource.SpanResource.send_event` depending on the case.
47
+ """
48
+
49
+ profiling_type: ProfilingType
50
+ marker_config: Optional[MarkerConfigInput] = None
51
+
52
+ def validate(self) -> None:
53
+ from acceldata.models.sdk.catalog.profiling_configuration_error import (
54
+ ProfilingConfigurationError,
55
+ )
56
+
57
+ if self.profiling_type == ProfilingType.SELECTIVE and not self.marker_config:
58
+ raise ProfilingConfigurationError(
59
+ "markerConfig is a mandatory parameter for execution type "
60
+ f"{ProfilingType.SELECTIVE.value}"
61
+ )
62
+ if self.profiling_type.needs_asset_marker() and not self.marker_config:
63
+ raise ProfilingConfigurationError(
64
+ "markerConfig is a mandatory parameter for execution type "
65
+ f"{self.profiling_type.value}"
66
+ )
67
+
68
+ def to_start_profiling_request(self) -> "StartProfilingRequest":
69
+ from acceldata.models.api.catalog.create_profile import CreateProfile
70
+ from acceldata.models.api.catalog.start_profiling_request import (
71
+ StartProfilingRequest,
72
+ )
73
+
74
+ self.validate()
75
+ # Required by CreateProfile; match generated-model defaults and CreateProfile.from_dict fallbacks.
76
+ create = CreateProfile(
77
+ profiling_type=self.profiling_type.value,
78
+ marker_config=prepare_marker_config_for_request(self.marker_config),
79
+ execution_mode="MANUAL",
80
+ job_type="profile",
81
+ )
82
+ return StartProfilingRequest(data=create)
@@ -0,0 +1,5 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ class ProfilingConfigurationError(ValueError):
5
+ """Raised when asset profiling parameters are invalid or incomplete."""