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,62 @@
1
+ from acceldata.models.sdk.pipeline.create_pipeline_input_request import CreatePipelineInputRequest
2
+ from acceldata.models.sdk.pipeline.create_job_input import CreateJobInput, JobInputOutputRef, build_create_job_payload
3
+ from acceldata.models.sdk.pipeline.pipeline_source_type import PipelineSourceType
4
+ from acceldata.models.sdk.pipeline.pipeline_run_input import (
5
+ PipelineRunInput,
6
+ PipelineRunResult,
7
+ PipelineRunStatus,
8
+ )
9
+
10
+ # Do not import PipelineResource eagerly: it imports PipelineService, while PipelineService
11
+ # imports this package's CreatePipelineInputRequest — eager import would circularly load
12
+ # pipeline_service before PipelineService is defined.
13
+
14
+ __all__ = [
15
+ "CreatePipelineInputRequest",
16
+ "PipelineSourceType",
17
+ "CreateJobInput",
18
+ "PipelineRunInput",
19
+ "PipelineRunResult",
20
+ "PipelineRunStatus",
21
+ "JobInputOutputRef",
22
+ "build_create_job_payload",
23
+ "PipelineResource",
24
+ "PipelineRunResource",
25
+ "SpanContext",
26
+ "SpanResource",
27
+ "SpanEvent",
28
+ "LogEvent",
29
+ "GenericEvent",
30
+ ]
31
+
32
+
33
+ def __getattr__(name: str):
34
+ if name == "PipelineResource":
35
+ from acceldata.models.sdk.pipeline.pipeline_resource import PipelineResource
36
+
37
+ return PipelineResource
38
+ if name == "PipelineRunResource":
39
+ from acceldata.models.sdk.pipeline.pipeline_run_resource import PipelineRunResource
40
+
41
+ return PipelineRunResource
42
+ if name == "SpanContext":
43
+ from acceldata.models.sdk.pipeline.span_resource import SpanResource
44
+
45
+ return SpanResource
46
+ if name == "SpanResource":
47
+ from acceldata.models.sdk.pipeline.span_resource import SpanResource
48
+
49
+ return SpanResource
50
+ if name == "SpanEvent":
51
+ from acceldata.models.sdk.pipeline.events.span_event import SpanEvent
52
+
53
+ return SpanEvent
54
+ if name == "LogEvent":
55
+ from acceldata.models.sdk.pipeline.events.log_event import LogEvent
56
+
57
+ return LogEvent
58
+ if name == "GenericEvent":
59
+ from acceldata.models.sdk.pipeline.events.generic_event import GenericEvent
60
+
61
+ return GenericEvent
62
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,108 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass, field
4
+ from datetime import datetime
5
+ from typing import Any, Dict, List, Optional
6
+
7
+ from acceldata.models.api.pipeline.meta import Meta
8
+
9
+
10
+ @dataclass
11
+ class JobInputOutputRef:
12
+ """
13
+ Input/output dataset or job reference for a pipeline job (maps to API ``Identifier``).
14
+
15
+ Specify either ``asset_uid`` (``source.path`` form) or ``job_uid``, not both — same rules as the
16
+ earlier ``Node`` helper.
17
+ """
18
+
19
+ asset_uid: Optional[str] = None
20
+ job_uid: Optional[str] = None
21
+
22
+ def to_identifier_dict(self) -> Dict[str, Any]:
23
+ # Same rules as earlier ``Node`` (asset vs job reference).
24
+ if self.asset_uid is not None and self.job_uid is not None:
25
+ raise ValueError("Please do not specify both asset_uid and job_uid")
26
+ if self.asset_uid is not None:
27
+ source, asset_uid = self.asset_uid.split(".", 1)
28
+ return {"source": source, "asset_uid": asset_uid}
29
+ if self.job_uid is not None:
30
+ return {"jobUid": self.job_uid}
31
+ raise ValueError("Please specify atleast one of asset_uid or job_uid")
32
+
33
+
34
+ @dataclass
35
+ class CreateJobInput:
36
+ """
37
+ Customer-facing description of a job to create on a pipeline (replaces earlier ``CreateJob``).
38
+
39
+ Use with :class:`~acceldata.models.sdk.pipeline.pipeline_resource.PipelineResource`. It is not an
40
+ Not a wire DTO type; build API payloads via :func:`build_create_job_payload`.
41
+
42
+ When ``bounded_by_span`` is True, ``span_created_at`` / ``span_updated_at`` are sent on the
43
+ span create request (``createdAt`` / ``updatedAt``).
44
+ """
45
+
46
+ uid: str
47
+ name: str
48
+ description: Optional[str] = None
49
+ inputs: List[JobInputOutputRef] = field(default_factory=list)
50
+ outputs: List[JobInputOutputRef] = field(default_factory=list)
51
+ meta: Optional[Meta] = None
52
+ pipeline_run_id: Optional[int] = None
53
+ bounded_by_span: bool = False
54
+ span_uid: Optional[str] = None
55
+ with_explicit_time: bool = False
56
+ # When bounded_by_span is True: optional span row timestamps on create (createdAt / updatedAt).
57
+ span_created_at: Optional[datetime] = None
58
+ span_updated_at: Optional[datetime] = None
59
+ context: Optional[Dict[str, Any]] = None
60
+
61
+
62
+ def _strip_none_entries(d: Dict[str, Any]) -> Dict[str, Any]:
63
+ """Like earlier ``asdict(..., dict_factory=lambda x: {k: v for k, v in x if v is not None})``."""
64
+ return {k: v for k, v in d.items() if v is not None}
65
+
66
+
67
+ def build_create_job_payload(
68
+ job: CreateJobInput,
69
+ *,
70
+ version_id: Optional[int] = None,
71
+ ) -> Dict[str, Any]:
72
+ """Serialize ``CreateJobInput`` to the JSON body for ``PUT .../pipelines/{id}/jobs``.
73
+
74
+ Mirrors earlier ``_convert_job_to_dict``: base fields, ``meta`` as a dict, and each input/output
75
+ with ``None`` omitted (earlier code used ``asdict`` + ``dict_factory`` on I/O rows). Identifier rows
76
+ use :meth:`JobInputOutputRef.to_identifier_dict` (``Node`` semantics), then stripped.
77
+
78
+ Sends ``pipeLineRunId`` from ``pipeline_run_id`` when set, and ``version`` when ``version_id``
79
+ is provided (callers obtain it from :meth:`~acceldata.services.pipeline_service.PipelineService.get_pipeline_run`,
80
+ matching earlier behavior).
81
+ """
82
+ job_dict: Dict[str, Any] = {
83
+ "uid": job.uid,
84
+ "name": job.name,
85
+ }
86
+ if job.description is not None:
87
+ job_dict["description"] = job.description
88
+ if job.context is not None:
89
+ job_dict["context"] = job.context
90
+
91
+ if hasattr(job, "meta") and job.meta is not None:
92
+ job_dict["meta"] = job.meta.to_dict()
93
+
94
+ if job.pipeline_run_id is not None:
95
+ job_dict["pipeLineRunId"] = job.pipeline_run_id
96
+ if version_id is not None:
97
+ job_dict["version"] = version_id
98
+
99
+ input_dict: List[Dict[str, Any]] = []
100
+ for ds_in in job.inputs:
101
+ input_dict.append(_strip_none_entries(ds_in.to_identifier_dict()))
102
+ output_dict: List[Dict[str, Any]] = []
103
+ for ds_out in job.outputs:
104
+ output_dict.append(_strip_none_entries(ds_out.to_identifier_dict()))
105
+
106
+ job_dict["inputs"] = input_dict
107
+ job_dict["outputs"] = output_dict
108
+ return job_dict
@@ -0,0 +1,72 @@
1
+ # coding: utf-8
2
+
3
+ from __future__ import annotations
4
+
5
+ from datetime import datetime
6
+ from typing import Any, Dict, Optional
7
+
8
+ from acceldata.models.api.pipeline.pipeline import Meta
9
+ from acceldata.models.api.pipeline.pipeline import Pipeline
10
+ from acceldata.models.api.pipeline.pipeline_input_request import PipelineInputRequest
11
+ from acceldata.models.api.pipeline.tag import Tag
12
+ from acceldata.models.sdk.pipeline.pipeline_source_type import PipelineSourceType
13
+
14
+ _DEFAULT_SCHEDULER_TYPE = "EXTERNAL"
15
+ _DEFAULT_SOURCE_TYPE = PipelineSourceType.OTHERS
16
+
17
+
18
+ def _resolve_source_type(source_type: PipelineSourceType | str | None) -> str:
19
+ if source_type is None:
20
+ return _DEFAULT_SOURCE_TYPE.value
21
+ if isinstance(source_type, PipelineSourceType):
22
+ return source_type.value
23
+ PipelineSourceType(source_type) # fail on unknown wire values
24
+ return str(source_type)
25
+
26
+
27
+ def _meta_from_user(meta: Optional[Any]) -> Optional[Meta]:
28
+ if meta is None:
29
+ return None
30
+ owner = getattr(meta, "owner", None)
31
+ team = getattr(meta, "team", None)
32
+ code_location = getattr(meta, "codeLocation", None)
33
+ if code_location is None:
34
+ code_location = getattr(meta, "code_location", None)
35
+ return Meta(owner=owner, team=team, code_location=code_location)
36
+
37
+
38
+ class CreatePipelineInputRequest(PipelineInputRequest):
39
+ """
40
+ :class:`PipelineInputRequest` with a ``CreatePipeline``-style constructor: only the
41
+ fields below are exposed; other required ``Pipeline`` fields use SDK defaults.
42
+ """
43
+
44
+ def __init__(
45
+ self,
46
+ uid: str,
47
+ name: str,
48
+ description: Optional[str] = None,
49
+ meta: Optional[Meta] = None,
50
+ createdAt: Optional[datetime] = None,
51
+ updatedAt: Optional[datetime] = None,
52
+ sourceType: PipelineSourceType = PipelineSourceType.OTHERS,
53
+ context: Optional[Dict[str, Any]] = None,
54
+ tags: Optional[list[Tag]] = None,
55
+ ) -> None:
56
+ resolved_source_type = _resolve_source_type(sourceType)
57
+ pipeline = Pipeline(
58
+ uid=uid,
59
+ name=name,
60
+ description=description,
61
+ meta=_meta_from_user(meta),
62
+ createdAt=createdAt,
63
+ updatedAt=updatedAt,
64
+ schedulerType=_DEFAULT_SCHEDULER_TYPE,
65
+ sourceType=resolved_source_type,
66
+ context=context,
67
+ enabled=True,
68
+ interrupt=False,
69
+ scheduled=False,
70
+ tags=list(tags) if tags is not None else [],
71
+ )
72
+ super().__init__(pipeline=pipeline)
@@ -0,0 +1,5 @@
1
+ from acceldata.models.sdk.pipeline.events.generic_event import GenericEvent
2
+ from acceldata.models.sdk.pipeline.events.log_event import LogEvent
3
+ from acceldata.models.sdk.pipeline.events.span_event import SpanEvent
4
+
5
+ __all__ = ["GenericEvent", "LogEvent", "SpanEvent"]
@@ -0,0 +1,31 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import datetime
4
+ from typing import Any, Optional
5
+
6
+ from acceldata.models.sdk.pipeline.events.span_event import SpanEvent
7
+ from acceldata.models.sdk.pipeline.span_resource import SpanEventType
8
+
9
+
10
+ class GenericEvent(SpanEvent):
11
+ """
12
+ Custom span event payload for :meth:`~acceldata.models.sdk.pipeline.span_resource.SpanResource.send_event`.
13
+
14
+ Use this for **custom** ``event_uid`` values plus optional ``context_data`` (and optional
15
+ ``log_data`` when the uid is ``LOG``). This is a **separate** type from
16
+ :class:`~acceldata.models.sdk.pipeline.events.log_event.LogEvent`, which is only for
17
+ structured log lines with ``eventUid`` ``LOG``.
18
+ """
19
+
20
+ def __init__(
21
+ self,
22
+ context_data: Optional[dict[str, Any]] = None,
23
+ *,
24
+ event_uid: str = SpanEventType.LOG.value,
25
+ log_data: Optional[str] = None,
26
+ created_at: Optional[datetime] = None,
27
+ ) -> None:
28
+ self.context_data = context_data
29
+ self.event_uid = event_uid
30
+ self.log_data = log_data
31
+ self.created_at = created_at
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ from datetime import datetime
4
+ from typing import Any, Optional
5
+
6
+ from acceldata.models.sdk.pipeline.events.span_event import SpanEvent
7
+ from acceldata.models.sdk.pipeline.span_resource import SpanEventType
8
+
9
+
10
+ class LogEvent(SpanEvent):
11
+ """
12
+ Log payload for a span (``eventUid`` ``LOG``).
13
+
14
+ Distinct from :class:`~acceldata.models.sdk.pipeline.events.generic_event.GenericEvent`:
15
+ use ``LogEvent`` for log text + context; use ``GenericEvent`` for arbitrary
16
+ ``event_uid`` and context.
17
+ """
18
+
19
+ def __init__(
20
+ self,
21
+ log_data: str,
22
+ context_data: Optional[dict[str, Any]] = None,
23
+ created_at: Optional[datetime] = None,
24
+ ) -> None:
25
+ """
26
+ :param log_data: Log body for the event.
27
+ :param context_data: Optional structured context for the event.
28
+ :param created_at: Optional explicit time for the event; if omitted, the server
29
+ typically uses receive time.
30
+ """
31
+ self.log_data = log_data
32
+ self.context_data = context_data
33
+ self.event_uid = SpanEventType.LOG.value
34
+ self.created_at = created_at
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ class SpanEvent:
5
+ """
6
+ Base class for span events sent to the control plane via
7
+ :meth:`~acceldata.models.sdk.pipeline.span_resource.SpanResource.send_event`.
8
+ """
@@ -0,0 +1,171 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ from acceldata.models.api.pipeline.node import Node
6
+ from acceldata.models.api.pipeline.pipeline import Pipeline
7
+ from acceldata.models.api.pipeline.tag import Tag
8
+ from acceldata.models.api.pipeline.pipeline_response import PipelineResponse
9
+ from acceldata.models.sdk.pipeline.create_job_input import CreateJobInput, build_create_job_payload
10
+ from acceldata.models.sdk.pipeline.pipeline_run_input import PipelineRunInput
11
+ from acceldata.models.sdk.pipeline.pipeline_run_resource import PipelineRunResource
12
+ from acceldata.models.sdk.pipeline.span_resource import SpanResource
13
+ from acceldata.utils.span_helpers import ensure_span_for_job
14
+ from acceldata.services.pipeline_service import PipelineService
15
+ from acceldata.models.api.pipeline.pipeline_runs_response import PipelineRunsResponse
16
+
17
+
18
+ class PipelineResource:
19
+ """
20
+ Customer-facing pipeline operations that wrap :class:`Pipeline` without modifying it.
21
+
22
+ Holds the underlying :class:`Pipeline` and delegates HTTP calls to
23
+ :class:`~acceldata.services.pipeline_service.PipelineService` (:attr:`pipeline`);
24
+ use :meth:`to_dict` for a wire representation.
25
+ """
26
+
27
+ def __init__(self, model: Pipeline, service: PipelineService) -> None:
28
+ self._model = model
29
+ self._service = service
30
+
31
+ @property
32
+ def pipeline(self) -> Pipeline:
33
+ return self._model
34
+
35
+ def to_dict(self) -> Dict[str, Any]:
36
+ return self._model.to_dict()
37
+
38
+ @classmethod
39
+ def from_response(cls, response: PipelineResponse, service: PipelineService) -> PipelineResource:
40
+ return cls(response.pipeline, service)
41
+
42
+ def _require_pipeline_id(self) -> int:
43
+ if self._model.id is None:
44
+ raise ValueError("Pipeline id is required for this operation")
45
+ return int(self._model.id)
46
+
47
+ # --- identity (read-through to generated ``Pipeline``) ---
48
+
49
+ @property
50
+ def uid(self) -> str:
51
+ return self._model.uid
52
+
53
+ @property
54
+ def name(self) -> str:
55
+ return self._model.name
56
+
57
+ @property
58
+ def id(self) -> Optional[int]:
59
+ return self._model.id
60
+
61
+ def __eq__(self, other: object) -> bool:
62
+ if not isinstance(other, PipelineResource):
63
+ return NotImplemented
64
+ return self._model.uid == other._model.uid
65
+
66
+ def __repr__(self) -> str:
67
+ return f"PipelineResource(model={self._model!r})"
68
+
69
+ # --- API methods (``Pipeline`` parity with the earlier SDK) ---
70
+
71
+ def delete(self) -> Any:
72
+ return self._service.delete_pipeline(self._require_pipeline_id())
73
+
74
+ def update(self, pipeline: Pipeline) -> PipelineResource:
75
+ """PUT the full pipeline (e.g. after editing tags); ``pipeline.id`` must be set."""
76
+ resp = self._service.update_pipeline(pipeline)
77
+ self._model = resp.pipeline
78
+ return self
79
+
80
+ def replace_tags(self, tags: list[Tag]) -> PipelineResource:
81
+ """Replace the pipeline's tag list via GET + PUT (see :meth:`~acceldata.services.pipeline_service.PipelineService.replace_pipeline_tags`)."""
82
+ ident = self._model.uid if self._model.uid else self._require_pipeline_id()
83
+ resp = self._service.replace_pipeline_tags(ident, tags)
84
+ self._model = resp.pipeline
85
+ return self
86
+
87
+ def create_job(self, job: CreateJobInput) -> Node:
88
+ if not job.uid or not job.name or job.pipeline_run_id is None:
89
+ raise ValueError(
90
+ "To create a job, uid, name, and pipeline_run_id are required"
91
+ )
92
+ pipeline_id = self._require_pipeline_id()
93
+ pr = self._service.get_pipeline_run(pipeline_run_id=job.pipeline_run_id)
94
+ vid = pr.version_id
95
+ payload = build_create_job_payload(
96
+ job,
97
+ version_id=int(vid) if vid is not None else None,
98
+ )
99
+ node_response = self._service.create_job(payload, pipeline_id)
100
+
101
+ if job.bounded_by_span:
102
+ if job.span_uid is None:
103
+ raise ValueError(
104
+ "When bounded_by_span is True, span_uid is required"
105
+ )
106
+ ensure_span_for_job(
107
+ self._service,
108
+ pipeline_run_id=job.pipeline_run_id,
109
+ span_uid=job.span_uid,
110
+ job_uid=job.uid,
111
+ created_at=job.span_created_at,
112
+ updated_at=job.span_updated_at,
113
+ )
114
+ return node_response.node
115
+
116
+ def create_pipeline_run(
117
+ self,
118
+ request: PipelineRunInput | None = None,
119
+ ) -> PipelineRunResource:
120
+ if request is None:
121
+ request = PipelineRunInput()
122
+ run = self._service.create_pipeline_run(
123
+ self._require_pipeline_id(),
124
+ context_data=request.context_data,
125
+ continuation_id=request.continuation_id,
126
+ started_at=request.started_at,
127
+ )
128
+ return PipelineRunResource(run, self._service)
129
+
130
+ def get_latest_pipeline_run(self) -> PipelineRunResource:
131
+ run = self._service.get_latest_pipeline_run(self._require_pipeline_id())
132
+ return PipelineRunResource(run, self._service)
133
+
134
+ def get_run(
135
+ self,
136
+ pipeline_run_id: Optional[int] = None,
137
+ continuation_id: Optional[str] = None,
138
+ ) -> PipelineRunResource:
139
+ run = self._service.get_pipeline_run(
140
+ pipeline_run_id=pipeline_run_id,
141
+ continuation_id=continuation_id,
142
+ pipeline_id=self._require_pipeline_id(),
143
+ )
144
+ return PipelineRunResource(run, self._service)
145
+
146
+ def get_runs(self) -> PipelineRunsResponse:
147
+ return self._service.get_pipeline_runs(self._require_pipeline_id())
148
+
149
+ def get_root_span(
150
+ self,
151
+ pipeline_run_id: Optional[int] = None,
152
+ *,
153
+ continuation_id: Optional[str] = None,
154
+ ) -> Optional[SpanResource]:
155
+ """
156
+ Resolve the root span for a run as :class:`~acceldata.models.sdk.pipeline.span_resource.SpanResource`.
157
+
158
+ If neither ``pipeline_run_id`` nor ``continuation_id`` is given, the latest run for this
159
+ pipeline is used.
160
+ """
161
+ if pipeline_run_id is None and continuation_id is None:
162
+ run = self.get_latest_pipeline_run()
163
+ else:
164
+ run = self.get_run(
165
+ pipeline_run_id=pipeline_run_id,
166
+ continuation_id=continuation_id,
167
+ )
168
+ rid = run.id
169
+ if rid is None:
170
+ raise ValueError("Pipeline run id is required to get root span")
171
+ return self._service.get_root_span(int(rid))
@@ -0,0 +1,84 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from datetime import datetime
5
+ from enum import Enum
6
+ from typing import Any, Optional
7
+
8
+ from acceldata.models.api.pipeline.pipeline_run import PipelineRun
9
+ from acceldata.models.api.pipeline.pipeline_run_request import PipelineRunRequest
10
+
11
+
12
+ class PipelineRunResult(str, Enum):
13
+ """
14
+ Pipeline run outcome.
15
+
16
+ ``PipelineRun.result`` (wire schema)::
17
+
18
+ "result": {
19
+ "type": "string",
20
+ "description": "Allowed values at generation time: RUNNING, SUCCESS, FAILURE, CANCELLED."
21
+ }
22
+ """
23
+
24
+ RUNNING = "RUNNING"
25
+ SUCCESS = "SUCCESS"
26
+ FAILURE = "FAILURE"
27
+ CANCELLED = "CANCELLED"
28
+
29
+
30
+ class PipelineRunStatus(str, Enum):
31
+ """
32
+ Pipeline run lifecycle status.
33
+
34
+ ``PipelineRun.status`` (wire schema)::
35
+
36
+ "status": {
37
+ "type": "string",
38
+ "description": "Allowed values at generation time: STARTED, COMPLETED, FAILED, ABORTED."
39
+ }
40
+ """
41
+
42
+ STARTED = "STARTED"
43
+ COMPLETED = "COMPLETED"
44
+ FAILED = "FAILED"
45
+ ABORTED = "ABORTED"
46
+
47
+
48
+ @dataclass
49
+ class PipelineRunInput:
50
+ """
51
+ Fields you can set when creating or updating a pipeline run.
52
+
53
+ For :meth:`~acceldata.models.sdk.pipeline.pipeline_resource.PipelineResource.create_pipeline_run`,
54
+ only ``context_data``, ``continuation_id``, and ``started_at`` apply; the API always starts a run
55
+ with ``status`` ``STARTED``.
56
+
57
+ For :meth:`~acceldata.models.sdk.pipeline.pipeline_run_resource.PipelineRunResource.update_pipeline_run`,
58
+ ``result``, ``status``, and ``finished_at`` are sent when provided. Method parameters on
59
+ ``update_pipeline_run`` default to :attr:`PipelineRunResult.SUCCESS` and
60
+ :attr:`PipelineRunStatus.COMPLETED` when you omit them.
61
+
62
+ For create, build the wire body with :meth:`to_pipeline_run_request`.
63
+ """
64
+
65
+ context_data: Optional[dict[str, Any]] = None
66
+ continuation_id: Optional[str] = None
67
+ started_at: Optional[datetime] = None
68
+ finished_at: Optional[datetime] = None
69
+ result: Optional[PipelineRunResult] = None
70
+ status: Optional[PipelineRunStatus] = None
71
+
72
+ def to_pipeline_run_request(self, pipeline_id: int) -> PipelineRunRequest:
73
+ fields: dict[str, Any] = {
74
+ "pipeline_id": pipeline_id,
75
+ "status": PipelineRunStatus.STARTED.value,
76
+ }
77
+ if self.context_data is not None:
78
+ fields["args"] = self.context_data
79
+ if self.continuation_id is not None:
80
+ fields["continuation_id"] = self.continuation_id
81
+ if self.started_at is not None:
82
+ fields["started_at"] = self.started_at
83
+ run = PipelineRun.model_construct(**fields)
84
+ return PipelineRunRequest(run=run)