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,339 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Catalog Control Plane API
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+ The version of the OpenAPI document: 1.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from datetime import datetime
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
22
+ from typing import Any, ClassVar, Dict, List, Optional
23
+ from acceldata.models.api.catalog.backing_asset import BackingAsset
24
+ from acceldata.models.api.catalog.custom_sql_config import CustomSqlConfig
25
+ from acceldata.models.api.catalog.label import Label
26
+ from acceldata.models.api.catalog.notification_payload import NotificationPayload
27
+ from acceldata.models.api.catalog.policy_group import PolicyGroup
28
+ from acceldata.models.api.catalog.rule_spark_sql_dynamic_filter_variable_mapping import RuleSparkSQLDynamicFilterVariableMapping
29
+ from acceldata.models.api.catalog.rule_tag import RuleTag
30
+ from acceldata.models.api.catalog.rule_threshold_configuration import RuleThresholdConfiguration
31
+ from acceldata.models.api.catalog.spark_resource_config import SparkResourceConfig
32
+ from typing import Optional, Set
33
+ from typing_extensions import Self
34
+ from pydantic_core import to_jsonable_python
35
+
36
+ class ReconciliationRule(BaseModel):
37
+ """
38
+ ReconciliationRule
39
+ """ # noqa: E501
40
+ analytics_pipeline_id: Optional[StrictInt] = Field(default=None, alias="analyticsPipelineId")
41
+ archival_reason: Optional[StrictStr] = Field(default=None, alias="archivalReason")
42
+ archived: StrictBool
43
+ auto_created: Optional[StrictBool] = Field(default=None, alias="autoCreated")
44
+ auto_retry_enabled: Optional[StrictBool] = Field(default=None, alias="autoRetryEnabled")
45
+ created_at: datetime = Field(alias="createdAt")
46
+ created_by: Optional[StrictStr] = Field(default=None, alias="createdBy")
47
+ delay_in_minutes: Optional[StrictInt] = Field(default=None, alias="delayInMinutes")
48
+ description: Optional[StrictStr] = None
49
+ enabled: StrictBool
50
+ engine_type: Optional[StrictStr] = Field(default=None, description="Allowed values at generation time: SPARK, JDBC_SQL, POD.", alias="engineType")
51
+ execution_timeout_in_minutes: Optional[StrictInt] = Field(default=None, alias="executionTimeoutInMinutes")
52
+ id: Optional[StrictInt] = None
53
+ include_in_quality_score: StrictBool = Field(alias="includeInQualityScore")
54
+ is_protected_resource: StrictBool = Field(alias="isProtectedResource")
55
+ join_type: Optional[StrictStr] = Field(default=None, description="Allowed values at generation time: INNER, LEFT, RIGHT, FULL, CROSS.", alias="joinType")
56
+ labels: Optional[List[Label]] = None
57
+ last_updated_by: Optional[StrictStr] = Field(default=None, alias="lastUpdatedBy")
58
+ left_backing_asset: BackingAsset = Field(alias="leftBackingAsset")
59
+ left_custom_sql_config: Optional[CustomSqlConfig] = Field(default=None, alias="leftCustomSqlConfig")
60
+ left_filter: Optional[StrictStr] = Field(default=None, alias="leftFilter")
61
+ left_spark_filter_selected_columns: Optional[List[StrictStr]] = Field(default=None, alias="leftSparkFilterSelectedColumns")
62
+ left_spark_sql_dynamic_filter_variable_mapping: Optional[RuleSparkSQLDynamicFilterVariableMapping] = Field(default=None, alias="leftSparkSQLDynamicFilterVariableMapping")
63
+ left_spark_sql_filter_type: StrictStr = Field(description="Allowed values at generation time: STATIC, DYNAMIC.", alias="leftSparkSQLFilterType")
64
+ name: StrictStr
65
+ notification_channels: Optional[NotificationPayload] = Field(default=None, alias="notificationChannels")
66
+ policy_groups: Optional[List[PolicyGroup]] = Field(default=None, alias="policyGroups")
67
+ resource_strategy_type: Optional[StrictStr] = Field(default=None, description="Allowed values at generation time: INVENTORY, CUSTOM.", alias="resourceStrategyType")
68
+ right_backing_asset: BackingAsset = Field(alias="rightBackingAsset")
69
+ right_custom_sql_config: Optional[CustomSqlConfig] = Field(default=None, alias="rightCustomSqlConfig")
70
+ right_engine_type: Optional[StrictStr] = Field(default=None, description="Allowed values at generation time: SPARK, JDBC_SQL, POD.", alias="rightEngineType")
71
+ right_filter: Optional[StrictStr] = Field(default=None, alias="rightFilter")
72
+ right_spark_filter_selected_columns: Optional[List[StrictStr]] = Field(default=None, alias="rightSparkFilterSelectedColumns")
73
+ right_spark_sql_dynamic_filter_variable_mapping: Optional[RuleSparkSQLDynamicFilterVariableMapping] = Field(default=None, alias="rightSparkSQLDynamicFilterVariableMapping")
74
+ right_spark_sql_filter_type: StrictStr = Field(description="Allowed values at generation time: STATIC, DYNAMIC.", alias="rightSparkSQLFilterType")
75
+ schedule: Optional[StrictStr] = None
76
+ scheduled: StrictBool
77
+ selected_resource_inventory: Optional[StrictStr] = Field(default=None, alias="selectedResourceInventory")
78
+ spark_resource_config: Optional[SparkResourceConfig] = Field(default=None, alias="sparkResourceConfig")
79
+ sub_type: Optional[StrictStr] = Field(default=None, description="Allowed values at generation time: ASSET, SQL.", alias="subType")
80
+ tags: Optional[List[RuleTag]] = None
81
+ tenant_id: Optional[StrictStr] = Field(default=None, alias="tenantId")
82
+ threshold_level: RuleThresholdConfiguration = Field(alias="thresholdLevel")
83
+ time_seconds_offset: StrictInt = Field(alias="timeSecondsOffset")
84
+ time_zone: StrictStr = Field(alias="timeZone")
85
+ total_execution_timeout_in_minutes: Optional[StrictInt] = Field(default=None, alias="totalExecutionTimeoutInMinutes")
86
+ treat_zero_rows_as_success: StrictBool = Field(alias="treatZeroRowsAsSuccess")
87
+ type: StrictStr = Field(description="Allowed values at generation time: DATA_QUALITY, RECONCILIATION, EQUALITY, DATA_DRIFT, SCHEMA_DRIFT, DATA_CADENCE, PROFILE_ANOMALY, AUTO_ANOMALY.")
88
+ updated_at: datetime = Field(alias="updatedAt")
89
+ version: StrictInt
90
+ __properties: ClassVar[List[str]] = ["analyticsPipelineId", "archivalReason", "archived", "autoCreated", "autoRetryEnabled", "createdAt", "createdBy", "delayInMinutes", "description", "enabled", "engineType", "executionTimeoutInMinutes", "id", "includeInQualityScore", "isProtectedResource", "joinType", "labels", "lastUpdatedBy", "leftBackingAsset", "leftCustomSqlConfig", "leftFilter", "leftSparkFilterSelectedColumns", "leftSparkSQLDynamicFilterVariableMapping", "leftSparkSQLFilterType", "name", "notificationChannels", "policyGroups", "resourceStrategyType", "rightBackingAsset", "rightCustomSqlConfig", "rightEngineType", "rightFilter", "rightSparkFilterSelectedColumns", "rightSparkSQLDynamicFilterVariableMapping", "rightSparkSQLFilterType", "schedule", "scheduled", "selectedResourceInventory", "sparkResourceConfig", "subType", "tags", "tenantId", "thresholdLevel", "timeSecondsOffset", "timeZone", "totalExecutionTimeoutInMinutes", "treatZeroRowsAsSuccess", "type", "updatedAt", "version"]
91
+
92
+ model_config = ConfigDict(
93
+ validate_by_name=True,
94
+ validate_by_alias=True,
95
+ validate_assignment=True,
96
+ protected_namespaces=(),
97
+ )
98
+
99
+
100
+ def to_str(self) -> str:
101
+ """Returns the string representation of the model using alias"""
102
+ return pprint.pformat(self.model_dump(by_alias=True))
103
+
104
+ def to_json(self) -> str:
105
+ """Returns the JSON representation of the model using alias"""
106
+ return json.dumps(to_jsonable_python(self.to_dict()))
107
+
108
+ @classmethod
109
+ def from_json(cls, json_str: str) -> Optional[Self]:
110
+ """Create an instance of ReconciliationRule from a JSON string"""
111
+ return cls.from_dict(json.loads(json_str))
112
+
113
+ def to_dict(self) -> Dict[str, Any]:
114
+ """Return the dictionary representation of the model using alias.
115
+
116
+ This has the following differences from calling pydantic's
117
+ `self.model_dump(by_alias=True)`:
118
+
119
+ * `None` is only added to the output dict for nullable fields that
120
+ were set at model initialization. Other fields with value `None`
121
+ are ignored.
122
+ """
123
+ excluded_fields: Set[str] = set([
124
+ ])
125
+
126
+ _dict = self.model_dump(
127
+ by_alias=True,
128
+ exclude=excluded_fields,
129
+ exclude_none=True,
130
+ )
131
+ # override the default output from pydantic by calling `to_dict()` of each item in labels (list)
132
+ _items = []
133
+ if self.labels:
134
+ for _item_labels in self.labels:
135
+ if _item_labels:
136
+ _items.append(_item_labels.to_dict())
137
+ _dict['labels'] = _items
138
+ # override the default output from pydantic by calling `to_dict()` of left_backing_asset
139
+ if self.left_backing_asset:
140
+ _dict['leftBackingAsset'] = self.left_backing_asset.to_dict()
141
+ # override the default output from pydantic by calling `to_dict()` of left_custom_sql_config
142
+ if self.left_custom_sql_config:
143
+ _dict['leftCustomSqlConfig'] = self.left_custom_sql_config.to_dict()
144
+ # override the default output from pydantic by calling `to_dict()` of left_spark_sql_dynamic_filter_variable_mapping
145
+ if self.left_spark_sql_dynamic_filter_variable_mapping:
146
+ _dict['leftSparkSQLDynamicFilterVariableMapping'] = self.left_spark_sql_dynamic_filter_variable_mapping.to_dict()
147
+ # override the default output from pydantic by calling `to_dict()` of notification_channels
148
+ if self.notification_channels:
149
+ _dict['notificationChannels'] = self.notification_channels.to_dict()
150
+ # override the default output from pydantic by calling `to_dict()` of each item in policy_groups (list)
151
+ _items = []
152
+ if self.policy_groups:
153
+ for _item_policy_groups in self.policy_groups:
154
+ if _item_policy_groups:
155
+ _items.append(_item_policy_groups.to_dict())
156
+ _dict['policyGroups'] = _items
157
+ # override the default output from pydantic by calling `to_dict()` of right_backing_asset
158
+ if self.right_backing_asset:
159
+ _dict['rightBackingAsset'] = self.right_backing_asset.to_dict()
160
+ # override the default output from pydantic by calling `to_dict()` of right_custom_sql_config
161
+ if self.right_custom_sql_config:
162
+ _dict['rightCustomSqlConfig'] = self.right_custom_sql_config.to_dict()
163
+ # override the default output from pydantic by calling `to_dict()` of right_spark_sql_dynamic_filter_variable_mapping
164
+ if self.right_spark_sql_dynamic_filter_variable_mapping:
165
+ _dict['rightSparkSQLDynamicFilterVariableMapping'] = self.right_spark_sql_dynamic_filter_variable_mapping.to_dict()
166
+ # override the default output from pydantic by calling `to_dict()` of spark_resource_config
167
+ if self.spark_resource_config:
168
+ _dict['sparkResourceConfig'] = self.spark_resource_config.to_dict()
169
+ # override the default output from pydantic by calling `to_dict()` of each item in tags (list)
170
+ _items = []
171
+ if self.tags:
172
+ for _item_tags in self.tags:
173
+ if _item_tags:
174
+ _items.append(_item_tags.to_dict())
175
+ _dict['tags'] = _items
176
+ # override the default output from pydantic by calling `to_dict()` of threshold_level
177
+ if self.threshold_level:
178
+ _dict['thresholdLevel'] = self.threshold_level.to_dict()
179
+ # set to None if archival_reason (nullable) is None
180
+ # and model_fields_set contains the field
181
+ if self.archival_reason is None and "archival_reason" in self.model_fields_set:
182
+ _dict['archivalReason'] = None
183
+
184
+ # set to None if created_by (nullable) is None
185
+ # and model_fields_set contains the field
186
+ if self.created_by is None and "created_by" in self.model_fields_set:
187
+ _dict['createdBy'] = None
188
+
189
+ # set to None if description (nullable) is None
190
+ # and model_fields_set contains the field
191
+ if self.description is None and "description" in self.model_fields_set:
192
+ _dict['description'] = None
193
+
194
+ # set to None if engine_type (nullable) is None
195
+ # and model_fields_set contains the field
196
+ if self.engine_type is None and "engine_type" in self.model_fields_set:
197
+ _dict['engineType'] = None
198
+
199
+ # set to None if join_type (nullable) is None
200
+ # and model_fields_set contains the field
201
+ if self.join_type is None and "join_type" in self.model_fields_set:
202
+ _dict['joinType'] = None
203
+
204
+ # set to None if labels (nullable) is None
205
+ # and model_fields_set contains the field
206
+ if self.labels is None and "labels" in self.model_fields_set:
207
+ _dict['labels'] = None
208
+
209
+ # set to None if last_updated_by (nullable) is None
210
+ # and model_fields_set contains the field
211
+ if self.last_updated_by is None and "last_updated_by" in self.model_fields_set:
212
+ _dict['lastUpdatedBy'] = None
213
+
214
+ # set to None if left_filter (nullable) is None
215
+ # and model_fields_set contains the field
216
+ if self.left_filter is None and "left_filter" in self.model_fields_set:
217
+ _dict['leftFilter'] = None
218
+
219
+ # set to None if left_spark_filter_selected_columns (nullable) is None
220
+ # and model_fields_set contains the field
221
+ if self.left_spark_filter_selected_columns is None and "left_spark_filter_selected_columns" in self.model_fields_set:
222
+ _dict['leftSparkFilterSelectedColumns'] = None
223
+
224
+ # set to None if policy_groups (nullable) is None
225
+ # and model_fields_set contains the field
226
+ if self.policy_groups is None and "policy_groups" in self.model_fields_set:
227
+ _dict['policyGroups'] = None
228
+
229
+ # set to None if resource_strategy_type (nullable) is None
230
+ # and model_fields_set contains the field
231
+ if self.resource_strategy_type is None and "resource_strategy_type" in self.model_fields_set:
232
+ _dict['resourceStrategyType'] = None
233
+
234
+ # set to None if right_engine_type (nullable) is None
235
+ # and model_fields_set contains the field
236
+ if self.right_engine_type is None and "right_engine_type" in self.model_fields_set:
237
+ _dict['rightEngineType'] = None
238
+
239
+ # set to None if right_filter (nullable) is None
240
+ # and model_fields_set contains the field
241
+ if self.right_filter is None and "right_filter" in self.model_fields_set:
242
+ _dict['rightFilter'] = None
243
+
244
+ # set to None if right_spark_filter_selected_columns (nullable) is None
245
+ # and model_fields_set contains the field
246
+ if self.right_spark_filter_selected_columns is None and "right_spark_filter_selected_columns" in self.model_fields_set:
247
+ _dict['rightSparkFilterSelectedColumns'] = None
248
+
249
+ # set to None if schedule (nullable) is None
250
+ # and model_fields_set contains the field
251
+ if self.schedule is None and "schedule" in self.model_fields_set:
252
+ _dict['schedule'] = None
253
+
254
+ # set to None if selected_resource_inventory (nullable) is None
255
+ # and model_fields_set contains the field
256
+ if self.selected_resource_inventory is None and "selected_resource_inventory" in self.model_fields_set:
257
+ _dict['selectedResourceInventory'] = None
258
+
259
+ # set to None if sub_type (nullable) is None
260
+ # and model_fields_set contains the field
261
+ if self.sub_type is None and "sub_type" in self.model_fields_set:
262
+ _dict['subType'] = None
263
+
264
+ # set to None if tags (nullable) is None
265
+ # and model_fields_set contains the field
266
+ if self.tags is None and "tags" in self.model_fields_set:
267
+ _dict['tags'] = None
268
+
269
+ # set to None if tenant_id (nullable) is None
270
+ # and model_fields_set contains the field
271
+ if self.tenant_id is None and "tenant_id" in self.model_fields_set:
272
+ _dict['tenantId'] = None
273
+
274
+ return _dict
275
+
276
+ @classmethod
277
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
278
+ """Create an instance of ReconciliationRule from a dict"""
279
+ if obj is None:
280
+ return None
281
+
282
+ if not isinstance(obj, dict):
283
+ return cls.model_validate(obj)
284
+
285
+ _obj = cls.model_validate({
286
+ "analyticsPipelineId": obj.get("analyticsPipelineId"),
287
+ "archivalReason": obj.get("archivalReason"),
288
+ "archived": obj.get("archived"),
289
+ "autoCreated": obj.get("autoCreated"),
290
+ "autoRetryEnabled": obj.get("autoRetryEnabled"),
291
+ "createdAt": obj.get("createdAt"),
292
+ "createdBy": obj.get("createdBy"),
293
+ "delayInMinutes": obj.get("delayInMinutes"),
294
+ "description": obj.get("description"),
295
+ "enabled": obj.get("enabled"),
296
+ "engineType": obj.get("engineType"),
297
+ "executionTimeoutInMinutes": obj.get("executionTimeoutInMinutes"),
298
+ "id": obj.get("id"),
299
+ "includeInQualityScore": obj.get("includeInQualityScore"),
300
+ "isProtectedResource": obj.get("isProtectedResource"),
301
+ "joinType": obj.get("joinType"),
302
+ "labels": [Label.from_dict(_item) for _item in obj["labels"]] if obj.get("labels") is not None else None,
303
+ "lastUpdatedBy": obj.get("lastUpdatedBy"),
304
+ "leftBackingAsset": BackingAsset.from_dict(obj["leftBackingAsset"]) if obj.get("leftBackingAsset") is not None else None,
305
+ "leftCustomSqlConfig": CustomSqlConfig.from_dict(obj["leftCustomSqlConfig"]) if obj.get("leftCustomSqlConfig") is not None else None,
306
+ "leftFilter": obj.get("leftFilter"),
307
+ "leftSparkFilterSelectedColumns": obj.get("leftSparkFilterSelectedColumns"),
308
+ "leftSparkSQLDynamicFilterVariableMapping": RuleSparkSQLDynamicFilterVariableMapping.from_dict(obj["leftSparkSQLDynamicFilterVariableMapping"]) if obj.get("leftSparkSQLDynamicFilterVariableMapping") is not None else None,
309
+ "leftSparkSQLFilterType": obj.get("leftSparkSQLFilterType"),
310
+ "name": obj.get("name"),
311
+ "notificationChannels": NotificationPayload.from_dict(obj["notificationChannels"]) if obj.get("notificationChannels") is not None else None,
312
+ "policyGroups": [PolicyGroup.from_dict(_item) for _item in obj["policyGroups"]] if obj.get("policyGroups") is not None else None,
313
+ "resourceStrategyType": obj.get("resourceStrategyType"),
314
+ "rightBackingAsset": BackingAsset.from_dict(obj["rightBackingAsset"]) if obj.get("rightBackingAsset") is not None else None,
315
+ "rightCustomSqlConfig": CustomSqlConfig.from_dict(obj["rightCustomSqlConfig"]) if obj.get("rightCustomSqlConfig") is not None else None,
316
+ "rightEngineType": obj.get("rightEngineType"),
317
+ "rightFilter": obj.get("rightFilter"),
318
+ "rightSparkFilterSelectedColumns": obj.get("rightSparkFilterSelectedColumns"),
319
+ "rightSparkSQLDynamicFilterVariableMapping": RuleSparkSQLDynamicFilterVariableMapping.from_dict(obj["rightSparkSQLDynamicFilterVariableMapping"]) if obj.get("rightSparkSQLDynamicFilterVariableMapping") is not None else None,
320
+ "rightSparkSQLFilterType": obj.get("rightSparkSQLFilterType"),
321
+ "schedule": obj.get("schedule"),
322
+ "scheduled": obj.get("scheduled"),
323
+ "selectedResourceInventory": obj.get("selectedResourceInventory"),
324
+ "sparkResourceConfig": SparkResourceConfig.from_dict(obj["sparkResourceConfig"]) if obj.get("sparkResourceConfig") is not None else None,
325
+ "subType": obj.get("subType"),
326
+ "tags": [RuleTag.from_dict(_item) for _item in obj["tags"]] if obj.get("tags") is not None else None,
327
+ "tenantId": obj.get("tenantId"),
328
+ "thresholdLevel": RuleThresholdConfiguration.from_dict(obj["thresholdLevel"]) if obj.get("thresholdLevel") is not None else None,
329
+ "timeSecondsOffset": obj.get("timeSecondsOffset"),
330
+ "timeZone": obj.get("timeZone"),
331
+ "totalExecutionTimeoutInMinutes": obj.get("totalExecutionTimeoutInMinutes"),
332
+ "treatZeroRowsAsSuccess": obj.get("treatZeroRowsAsSuccess"),
333
+ "type": obj.get("type"),
334
+ "updatedAt": obj.get("updatedAt"),
335
+ "version": obj.get("version")
336
+ })
337
+ return _obj
338
+
339
+
@@ -0,0 +1,225 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Catalog Control Plane API
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+ The version of the OpenAPI document: 1.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from acceldata.models.api.catalog.column_mapping import ColumnMapping
23
+ from acceldata.models.api.catalog.custom_sql_config import CustomSqlConfig
24
+ from acceldata.models.api.catalog.reconciliation_item import ReconciliationItem
25
+ from acceldata.models.api.catalog.rule_spark_sql_dynamic_filter_variable_mapping import RuleSparkSQLDynamicFilterVariableMapping
26
+ from acceldata.models.api.catalog.short_segment import ShortSegment
27
+ from typing import Optional, Set
28
+ from typing_extensions import Self
29
+ from pydantic_core import to_jsonable_python
30
+
31
+ class ReconciliationRuleDetails(BaseModel):
32
+ """
33
+ ReconciliationRuleDetails
34
+ """ # noqa: E501
35
+ column_mappings: List[ColumnMapping] = Field(alias="columnMappings")
36
+ continue_execution_on_failure: StrictBool = Field(alias="continueExecutionOnFailure")
37
+ delay_in_minutes: Optional[StrictInt] = Field(default=None, alias="delayInMinutes")
38
+ id: Optional[StrictInt] = None
39
+ is_composite_rule: StrictBool = Field(alias="isCompositeRule")
40
+ is_segmented: StrictBool = Field(alias="isSegmented")
41
+ items: List[ReconciliationItem]
42
+ join_type: Optional[StrictStr] = Field(default=None, description="Allowed values at generation time: INNER, LEFT, RIGHT, FULL, CROSS.", alias="joinType")
43
+ left_backing_asset_id: StrictInt = Field(alias="leftBackingAssetId")
44
+ left_custom_sql_config: Optional[CustomSqlConfig] = Field(default=None, alias="leftCustomSqlConfig")
45
+ left_engine_type: Optional[StrictStr] = Field(default=None, description="Allowed values at generation time: SPARK, JDBC_SQL, POD.", alias="leftEngineType")
46
+ left_filter: Optional[StrictStr] = Field(default=None, alias="leftFilter")
47
+ left_spark_filter_selected_columns: Optional[List[StrictStr]] = Field(default=None, alias="leftSparkFilterSelectedColumns")
48
+ left_spark_sql_dynamic_filter_variable_mapping: Optional[RuleSparkSQLDynamicFilterVariableMapping] = Field(default=None, alias="leftSparkSQLDynamicFilterVariableMapping")
49
+ left_spark_sql_filter_type: StrictStr = Field(description="Allowed values at generation time: STATIC, DYNAMIC.", alias="leftSparkSQLFilterType")
50
+ right_backing_asset_id: StrictInt = Field(alias="rightBackingAssetId")
51
+ right_custom_sql_config: Optional[CustomSqlConfig] = Field(default=None, alias="rightCustomSqlConfig")
52
+ right_engine_type: Optional[StrictStr] = Field(default=None, description="Allowed values at generation time: SPARK, JDBC_SQL, POD.", alias="rightEngineType")
53
+ right_filter: Optional[StrictStr] = Field(default=None, alias="rightFilter")
54
+ right_spark_filter_selected_columns: Optional[List[StrictStr]] = Field(default=None, alias="rightSparkFilterSelectedColumns")
55
+ right_spark_sql_dynamic_filter_variable_mapping: Optional[RuleSparkSQLDynamicFilterVariableMapping] = Field(default=None, alias="rightSparkSQLDynamicFilterVariableMapping")
56
+ right_spark_sql_filter_type: StrictStr = Field(description="Allowed values at generation time: STATIC, DYNAMIC.", alias="rightSparkSQLFilterType")
57
+ rule_id: StrictInt = Field(alias="ruleId")
58
+ rule_version: StrictInt = Field(alias="ruleVersion")
59
+ segments: Optional[List[ShortSegment]] = None
60
+ sub_type: Optional[StrictStr] = Field(default=None, description="Allowed values at generation time: ASSET, SQL.", alias="subType")
61
+ time_seconds_offset: StrictInt = Field(alias="timeSecondsOffset")
62
+ treat_zero_rows_as_success: StrictBool = Field(alias="treatZeroRowsAsSuccess")
63
+ __properties: ClassVar[List[str]] = ["columnMappings", "continueExecutionOnFailure", "delayInMinutes", "id", "isCompositeRule", "isSegmented", "items", "joinType", "leftBackingAssetId", "leftCustomSqlConfig", "leftEngineType", "leftFilter", "leftSparkFilterSelectedColumns", "leftSparkSQLDynamicFilterVariableMapping", "leftSparkSQLFilterType", "rightBackingAssetId", "rightCustomSqlConfig", "rightEngineType", "rightFilter", "rightSparkFilterSelectedColumns", "rightSparkSQLDynamicFilterVariableMapping", "rightSparkSQLFilterType", "ruleId", "ruleVersion", "segments", "subType", "timeSecondsOffset", "treatZeroRowsAsSuccess"]
64
+
65
+ model_config = ConfigDict(
66
+ validate_by_name=True,
67
+ validate_by_alias=True,
68
+ validate_assignment=True,
69
+ protected_namespaces=(),
70
+ )
71
+
72
+
73
+ def to_str(self) -> str:
74
+ """Returns the string representation of the model using alias"""
75
+ return pprint.pformat(self.model_dump(by_alias=True))
76
+
77
+ def to_json(self) -> str:
78
+ """Returns the JSON representation of the model using alias"""
79
+ return json.dumps(to_jsonable_python(self.to_dict()))
80
+
81
+ @classmethod
82
+ def from_json(cls, json_str: str) -> Optional[Self]:
83
+ """Create an instance of ReconciliationRuleDetails from a JSON string"""
84
+ return cls.from_dict(json.loads(json_str))
85
+
86
+ def to_dict(self) -> Dict[str, Any]:
87
+ """Return the dictionary representation of the model using alias.
88
+
89
+ This has the following differences from calling pydantic's
90
+ `self.model_dump(by_alias=True)`:
91
+
92
+ * `None` is only added to the output dict for nullable fields that
93
+ were set at model initialization. Other fields with value `None`
94
+ are ignored.
95
+ """
96
+ excluded_fields: Set[str] = set([
97
+ ])
98
+
99
+ _dict = self.model_dump(
100
+ by_alias=True,
101
+ exclude=excluded_fields,
102
+ exclude_none=True,
103
+ )
104
+ # override the default output from pydantic by calling `to_dict()` of each item in column_mappings (list)
105
+ _items = []
106
+ if self.column_mappings:
107
+ for _item_column_mappings in self.column_mappings:
108
+ if _item_column_mappings:
109
+ _items.append(_item_column_mappings.to_dict())
110
+ _dict['columnMappings'] = _items
111
+ # override the default output from pydantic by calling `to_dict()` of each item in items (list)
112
+ _items = []
113
+ if self.items:
114
+ for _item_items in self.items:
115
+ if _item_items:
116
+ _items.append(_item_items.to_dict())
117
+ _dict['items'] = _items
118
+ # override the default output from pydantic by calling `to_dict()` of left_custom_sql_config
119
+ if self.left_custom_sql_config:
120
+ _dict['leftCustomSqlConfig'] = self.left_custom_sql_config.to_dict()
121
+ # override the default output from pydantic by calling `to_dict()` of left_spark_sql_dynamic_filter_variable_mapping
122
+ if self.left_spark_sql_dynamic_filter_variable_mapping:
123
+ _dict['leftSparkSQLDynamicFilterVariableMapping'] = self.left_spark_sql_dynamic_filter_variable_mapping.to_dict()
124
+ # override the default output from pydantic by calling `to_dict()` of right_custom_sql_config
125
+ if self.right_custom_sql_config:
126
+ _dict['rightCustomSqlConfig'] = self.right_custom_sql_config.to_dict()
127
+ # override the default output from pydantic by calling `to_dict()` of right_spark_sql_dynamic_filter_variable_mapping
128
+ if self.right_spark_sql_dynamic_filter_variable_mapping:
129
+ _dict['rightSparkSQLDynamicFilterVariableMapping'] = self.right_spark_sql_dynamic_filter_variable_mapping.to_dict()
130
+ # override the default output from pydantic by calling `to_dict()` of each item in segments (list)
131
+ _items = []
132
+ if self.segments:
133
+ for _item_segments in self.segments:
134
+ if _item_segments:
135
+ _items.append(_item_segments.to_dict())
136
+ _dict['segments'] = _items
137
+ # set to None if join_type (nullable) is None
138
+ # and model_fields_set contains the field
139
+ if self.join_type is None and "join_type" in self.model_fields_set:
140
+ _dict['joinType'] = None
141
+
142
+ # set to None if left_engine_type (nullable) is None
143
+ # and model_fields_set contains the field
144
+ if self.left_engine_type is None and "left_engine_type" in self.model_fields_set:
145
+ _dict['leftEngineType'] = None
146
+
147
+ # set to None if left_filter (nullable) is None
148
+ # and model_fields_set contains the field
149
+ if self.left_filter is None and "left_filter" in self.model_fields_set:
150
+ _dict['leftFilter'] = None
151
+
152
+ # set to None if left_spark_filter_selected_columns (nullable) is None
153
+ # and model_fields_set contains the field
154
+ if self.left_spark_filter_selected_columns is None and "left_spark_filter_selected_columns" in self.model_fields_set:
155
+ _dict['leftSparkFilterSelectedColumns'] = None
156
+
157
+ # set to None if right_engine_type (nullable) is None
158
+ # and model_fields_set contains the field
159
+ if self.right_engine_type is None and "right_engine_type" in self.model_fields_set:
160
+ _dict['rightEngineType'] = None
161
+
162
+ # set to None if right_filter (nullable) is None
163
+ # and model_fields_set contains the field
164
+ if self.right_filter is None and "right_filter" in self.model_fields_set:
165
+ _dict['rightFilter'] = None
166
+
167
+ # set to None if right_spark_filter_selected_columns (nullable) is None
168
+ # and model_fields_set contains the field
169
+ if self.right_spark_filter_selected_columns is None and "right_spark_filter_selected_columns" in self.model_fields_set:
170
+ _dict['rightSparkFilterSelectedColumns'] = None
171
+
172
+ # set to None if segments (nullable) is None
173
+ # and model_fields_set contains the field
174
+ if self.segments is None and "segments" in self.model_fields_set:
175
+ _dict['segments'] = None
176
+
177
+ # set to None if sub_type (nullable) is None
178
+ # and model_fields_set contains the field
179
+ if self.sub_type is None and "sub_type" in self.model_fields_set:
180
+ _dict['subType'] = None
181
+
182
+ return _dict
183
+
184
+ @classmethod
185
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
186
+ """Create an instance of ReconciliationRuleDetails from a dict"""
187
+ if obj is None:
188
+ return None
189
+
190
+ if not isinstance(obj, dict):
191
+ return cls.model_validate(obj)
192
+
193
+ _obj = cls.model_validate({
194
+ "columnMappings": [ColumnMapping.from_dict(_item) for _item in obj["columnMappings"]] if obj.get("columnMappings") is not None else None,
195
+ "continueExecutionOnFailure": obj.get("continueExecutionOnFailure"),
196
+ "delayInMinutes": obj.get("delayInMinutes"),
197
+ "id": obj.get("id"),
198
+ "isCompositeRule": obj.get("isCompositeRule"),
199
+ "isSegmented": obj.get("isSegmented"),
200
+ "items": [ReconciliationItem.from_dict(_item) for _item in obj["items"]] if obj.get("items") is not None else None,
201
+ "joinType": obj.get("joinType"),
202
+ "leftBackingAssetId": obj.get("leftBackingAssetId"),
203
+ "leftCustomSqlConfig": CustomSqlConfig.from_dict(obj["leftCustomSqlConfig"]) if obj.get("leftCustomSqlConfig") is not None else None,
204
+ "leftEngineType": obj.get("leftEngineType"),
205
+ "leftFilter": obj.get("leftFilter"),
206
+ "leftSparkFilterSelectedColumns": obj.get("leftSparkFilterSelectedColumns"),
207
+ "leftSparkSQLDynamicFilterVariableMapping": RuleSparkSQLDynamicFilterVariableMapping.from_dict(obj["leftSparkSQLDynamicFilterVariableMapping"]) if obj.get("leftSparkSQLDynamicFilterVariableMapping") is not None else None,
208
+ "leftSparkSQLFilterType": obj.get("leftSparkSQLFilterType"),
209
+ "rightBackingAssetId": obj.get("rightBackingAssetId"),
210
+ "rightCustomSqlConfig": CustomSqlConfig.from_dict(obj["rightCustomSqlConfig"]) if obj.get("rightCustomSqlConfig") is not None else None,
211
+ "rightEngineType": obj.get("rightEngineType"),
212
+ "rightFilter": obj.get("rightFilter"),
213
+ "rightSparkFilterSelectedColumns": obj.get("rightSparkFilterSelectedColumns"),
214
+ "rightSparkSQLDynamicFilterVariableMapping": RuleSparkSQLDynamicFilterVariableMapping.from_dict(obj["rightSparkSQLDynamicFilterVariableMapping"]) if obj.get("rightSparkSQLDynamicFilterVariableMapping") is not None else None,
215
+ "rightSparkSQLFilterType": obj.get("rightSparkSQLFilterType"),
216
+ "ruleId": obj.get("ruleId"),
217
+ "ruleVersion": obj.get("ruleVersion"),
218
+ "segments": [ShortSegment.from_dict(_item) for _item in obj["segments"]] if obj.get("segments") is not None else None,
219
+ "subType": obj.get("subType"),
220
+ "timeSecondsOffset": obj.get("timeSecondsOffset"),
221
+ "treatZeroRowsAsSuccess": obj.get("treatZeroRowsAsSuccess")
222
+ })
223
+ return _obj
224
+
225
+