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.
- acceldata/__init__.py +7 -0
- acceldata/client/__init__.py +0 -0
- acceldata/client/adoc_client.py +666 -0
- acceldata/client/http_client.py +346 -0
- acceldata/client/transient_retry.py +142 -0
- acceldata/constants/__init__.py +1 -0
- acceldata/constants/constants.py +13 -0
- acceldata/exceptions/__init__.py +52 -0
- acceldata/exceptions/api_errors.py +85 -0
- acceldata/exceptions/exceptions.py +174 -0
- acceldata/exceptions/sdk_exceptions.py +98 -0
- acceldata/mappers/__init__.py +21 -0
- acceldata/mappers/catalog_executions.py +107 -0
- acceldata/models/__init__.py +0 -0
- acceldata/models/api/catalog/above_configs.py +99 -0
- acceldata/models/api/catalog/above_configs_success.py +138 -0
- acceldata/models/api/catalog/absolute_configs.py +197 -0
- acceldata/models/api/catalog/absolute_configs_fallback.py +101 -0
- acceldata/models/api/catalog/absolute_threshold_config.py +105 -0
- acceldata/models/api/catalog/analysis_job_context.py +102 -0
- acceldata/models/api/catalog/analytics_pipeline.py +385 -0
- acceldata/models/api/catalog/analytics_pipeline_endpoint.py +136 -0
- acceldata/models/api/catalog/anomaly_config.py +95 -0
- acceldata/models/api/catalog/anomaly_details.py +119 -0
- acceldata/models/api/catalog/anomaly_threshold_config.py +105 -0
- acceldata/models/api/catalog/artifact.py +92 -0
- acceldata/models/api/catalog/assembly.py +171 -0
- acceldata/models/api/catalog/asset.py +162 -0
- acceldata/models/api/catalog/asset_catalog_listing.py +159 -0
- acceldata/models/api/catalog/asset_catalog_listing_response.py +102 -0
- acceldata/models/api/catalog/asset_label_request.py +96 -0
- acceldata/models/api/catalog/asset_progress.py +96 -0
- acceldata/models/api/catalog/asset_progress_details.py +117 -0
- acceldata/models/api/catalog/asset_tag.py +124 -0
- acceldata/models/api/catalog/asset_tag_info.py +140 -0
- acceldata/models/api/catalog/asset_tag_request.py +95 -0
- acceldata/models/api/catalog/asset_tag_response.py +96 -0
- acceldata/models/api/catalog/asset_tags_response.py +102 -0
- acceldata/models/api/catalog/asset_type.py +96 -0
- acceldata/models/api/catalog/auto_anomaly_feature_analysis.py +160 -0
- acceldata/models/api/catalog/auto_anomaly_item_execution.py +133 -0
- acceldata/models/api/catalog/auto_anomaly_meta_data.py +162 -0
- acceldata/models/api/catalog/auto_anomaly_rule_execution.py +102 -0
- acceldata/models/api/catalog/auto_anomaly_summary.py +124 -0
- acceldata/models/api/catalog/backing_asset.py +126 -0
- acceldata/models/api/catalog/below_configs.py +99 -0
- acceldata/models/api/catalog/big_decimal.py +100 -0
- acceldata/models/api/catalog/big_integer.py +98 -0
- acceldata/models/api/catalog/bounds_date_time_marker_config.py +110 -0
- acceldata/models/api/catalog/bounds_file_event_marker_config.py +108 -0
- acceldata/models/api/catalog/bounds_id_marker_config.py +96 -0
- acceldata/models/api/catalog/catalog_asset_meta_data.py +128 -0
- acceldata/models/api/catalog/changes_by_config.py +105 -0
- acceldata/models/api/catalog/column_mapping.py +139 -0
- acceldata/models/api/catalog/column_metadata.py +90 -0
- acceldata/models/api/catalog/column_metric_with_anomaly_details.py +119 -0
- acceldata/models/api/catalog/column_variable.py +111 -0
- acceldata/models/api/catalog/composite_policy_execution.py +102 -0
- acceldata/models/api/catalog/composite_policy_item_execution.py +104 -0
- acceldata/models/api/catalog/connection.py +118 -0
- acceldata/models/api/catalog/connection_test_result.py +106 -0
- acceldata/models/api/catalog/connection_type.py +90 -0
- acceldata/models/api/catalog/connection_types_response.py +96 -0
- acceldata/models/api/catalog/crawler.py +88 -0
- acceldata/models/api/catalog/crawler_action_response.py +90 -0
- acceldata/models/api/catalog/crawler_execution.py +147 -0
- acceldata/models/api/catalog/crawler_execution_response.py +102 -0
- acceldata/models/api/catalog/crawler_status_response.py +90 -0
- acceldata/models/api/catalog/create_profile.py +194 -0
- acceldata/models/api/catalog/custom_sql_config.py +121 -0
- acceldata/models/api/catalog/data_bricks_spark_resource_config.py +104 -0
- acceldata/models/api/catalog/data_cadence_rule.py +236 -0
- acceldata/models/api/catalog/data_cadence_rule_details.py +125 -0
- acceldata/models/api/catalog/data_cadence_rule_execution.py +102 -0
- acceldata/models/api/catalog/data_cadence_rule_item.py +104 -0
- acceldata/models/api/catalog/data_cadence_rule_item_execution.py +158 -0
- acceldata/models/api/catalog/data_cadence_rule_response.py +98 -0
- acceldata/models/api/catalog/data_drift_execution.py +102 -0
- acceldata/models/api/catalog/data_drift_item_execution.py +121 -0
- acceldata/models/api/catalog/data_quality_engine.py +90 -0
- acceldata/models/api/catalog/data_quality_execution.py +106 -0
- acceldata/models/api/catalog/data_quality_rule.py +323 -0
- acceldata/models/api/catalog/data_quality_rule_details.py +186 -0
- acceldata/models/api/catalog/data_quality_rule_response.py +120 -0
- acceldata/models/api/catalog/data_quality_rules_response.py +102 -0
- acceldata/models/api/catalog/databricks_compute_config.py +113 -0
- acceldata/models/api/catalog/dataplane_engine.py +105 -0
- acceldata/models/api/catalog/dataplane_health_metrics.py +101 -0
- acceldata/models/api/catalog/dataplane_job.py +216 -0
- acceldata/models/api/catalog/dataplane_job_status.py +113 -0
- acceldata/models/api/catalog/dataplane_request.py +96 -0
- acceldata/models/api/catalog/dataproc_compute_config.py +106 -0
- acceldata/models/api/catalog/dataproc_spark_resource_config.py +104 -0
- acceldata/models/api/catalog/date_based_partition_marker_config.py +116 -0
- acceldata/models/api/catalog/date_partitioning_marker_config.py +113 -0
- acceldata/models/api/catalog/date_time_marker_config.py +109 -0
- acceldata/models/api/catalog/day_month_year_based_partition_marker_config.py +124 -0
- acceldata/models/api/catalog/decreased_by_config.py +105 -0
- acceldata/models/api/catalog/delete_artifact_response.py +88 -0
- acceldata/models/api/catalog/dq_rule_execution.py +248 -0
- acceldata/models/api/catalog/drift.py +121 -0
- acceldata/models/api/catalog/enable_rule_request.py +88 -0
- acceldata/models/api/catalog/engine.py +90 -0
- acceldata/models/api/catalog/execution_cancellation_response.py +92 -0
- acceldata/models/api/catalog/execution_response.py +144 -0
- acceldata/models/api/catalog/execution_result.py +126 -0
- acceldata/models/api/catalog/executions_response.py +102 -0
- acceldata/models/api/catalog/failed_asset_detail.py +90 -0
- acceldata/models/api/catalog/failed_summary.py +98 -0
- acceldata/models/api/catalog/file.py +94 -0
- acceldata/models/api/catalog/file_marker_config.py +99 -0
- acceldata/models/api/catalog/generic_config_fallback.py +101 -0
- acceldata/models/api/catalog/generic_execution.py +221 -0
- acceldata/models/api/catalog/generic_rule_execution.py +137 -0
- acceldata/models/api/catalog/global_storage_config_dto.py +172 -0
- acceldata/models/api/catalog/hosted_dp_deployment_response.py +98 -0
- acceldata/models/api/catalog/id_marker_config.py +94 -0
- acceldata/models/api/catalog/increased_by_config.py +105 -0
- acceldata/models/api/catalog/item.py +160 -0
- acceldata/models/api/catalog/item_execution.py +192 -0
- acceldata/models/api/catalog/item_segment.py +131 -0
- acceldata/models/api/catalog/job_schedule.py +118 -0
- acceldata/models/api/catalog/job_spec.py +96 -0
- acceldata/models/api/catalog/kubernetes_metrics.py +91 -0
- acceldata/models/api/catalog/label.py +97 -0
- acceldata/models/api/catalog/livy_compute_config.py +103 -0
- acceldata/models/api/catalog/livy_spark_resource_config.py +106 -0
- acceldata/models/api/catalog/look_back_config.py +90 -0
- acceldata/models/api/catalog/manual_tag_request.py +92 -0
- acceldata/models/api/catalog/mapping.py +97 -0
- acceldata/models/api/catalog/marker.py +88 -0
- acceldata/models/api/catalog/marker_config.py +349 -0
- acceldata/models/api/catalog/marker_config_fallback.py +101 -0
- acceldata/models/api/catalog/meta.py +92 -0
- acceldata/models/api/catalog/meta_data.py +92 -0
- acceldata/models/api/catalog/meta_data_item.py +94 -0
- acceldata/models/api/catalog/mini_profile_request.py +112 -0
- acceldata/models/api/catalog/notification_payload.py +114 -0
- acceldata/models/api/catalog/offset_based_marker_config.py +97 -0
- acceldata/models/api/catalog/operational_config.py +92 -0
- acceldata/models/api/catalog/pattern_configuration.py +90 -0
- acceldata/models/api/catalog/pipe_line_request.py +92 -0
- acceldata/models/api/catalog/pipeline_compute_config.py +110 -0
- acceldata/models/api/catalog/policy_execution_marker_config.py +94 -0
- acceldata/models/api/catalog/policy_execution_request.py +229 -0
- acceldata/models/api/catalog/policy_group.py +114 -0
- acceldata/models/api/catalog/policy_transform_udf.py +113 -0
- acceldata/models/api/catalog/process_metrics.py +91 -0
- acceldata/models/api/catalog/profile_anomaly_details_response.py +109 -0
- acceldata/models/api/catalog/profile_anomaly_item_execution.py +127 -0
- acceldata/models/api/catalog/profile_anomaly_rule_execution.py +102 -0
- acceldata/models/api/catalog/profile_anomaly_rule_item.py +109 -0
- acceldata/models/api/catalog/profile_cancellation_response.py +92 -0
- acceldata/models/api/catalog/profile_request.py +211 -0
- acceldata/models/api/catalog/profile_request_response.py +92 -0
- acceldata/models/api/catalog/property_template.py +178 -0
- acceldata/models/api/catalog/property_templates.py +123 -0
- acceldata/models/api/catalog/pub_sub_lookback_marker_config.py +96 -0
- acceldata/models/api/catalog/pub_sub_timestamp_marker_config.py +108 -0
- acceldata/models/api/catalog/quality_rule.py +381 -0
- acceldata/models/api/catalog/quality_rule_execution_metrics.py +114 -0
- acceldata/models/api/catalog/quality_rule_with_latest_execution.py +115 -0
- acceldata/models/api/catalog/range_configs.py +109 -0
- acceldata/models/api/catalog/reconciliation_item.py +102 -0
- acceldata/models/api/catalog/reconciliation_item_execution.py +157 -0
- acceldata/models/api/catalog/reconciliation_rule.py +339 -0
- acceldata/models/api/catalog/reconciliation_rule_details.py +225 -0
- acceldata/models/api/catalog/reconciliation_rule_execution.py +102 -0
- acceldata/models/api/catalog/reconciliation_rule_response.py +98 -0
- acceldata/models/api/catalog/reconciliation_rules_response.py +102 -0
- acceldata/models/api/catalog/relative_config.py +197 -0
- acceldata/models/api/catalog/relative_config_fallback.py +101 -0
- acceldata/models/api/catalog/relative_threshold_config.py +111 -0
- acceldata/models/api/catalog/root_cause_analysis.py +108 -0
- acceldata/models/api/catalog/rule_execution.py +327 -0
- acceldata/models/api/catalog/rule_execution_result.py +90 -0
- acceldata/models/api/catalog/rule_item_result.py +125 -0
- acceldata/models/api/catalog/rule_meta_data.py +94 -0
- acceldata/models/api/catalog/rule_spark_sql_dynamic_filter_variable_mapping.py +100 -0
- acceldata/models/api/catalog/rule_tag.py +101 -0
- acceldata/models/api/catalog/rule_threshold_configuration.py +236 -0
- acceldata/models/api/catalog/rule_threshold_configuration_fallback.py +101 -0
- acceldata/models/api/catalog/rules_with_latest_execution_response.py +102 -0
- acceldata/models/api/catalog/sample_data_api_response.py +122 -0
- acceldata/models/api/catalog/schema_drift_item_execution.py +131 -0
- acceldata/models/api/catalog/schema_drift_rule_execution.py +102 -0
- acceldata/models/api/catalog/secret_manager_configuration.py +90 -0
- acceldata/models/api/catalog/secret_manager_configuration_with_option.py +98 -0
- acceldata/models/api/catalog/security_config.py +90 -0
- acceldata/models/api/catalog/segment_metric_json.py +142 -0
- acceldata/models/api/catalog/segments_analysis.py +145 -0
- acceldata/models/api/catalog/short_segment.py +97 -0
- acceldata/models/api/catalog/simple_quality_rule_response.py +92 -0
- acceldata/models/api/catalog/snapshot_data.py +117 -0
- acceldata/models/api/catalog/source_model.py +90 -0
- acceldata/models/api/catalog/source_type.py +100 -0
- acceldata/models/api/catalog/source_types_response.py +102 -0
- acceldata/models/api/catalog/spark_job_status.py +113 -0
- acceldata/models/api/catalog/spark_resource_config.py +114 -0
- acceldata/models/api/catalog/standard_response_assembly.py +92 -0
- acceldata/models/api/catalog/standard_response_crawler_action_response.py +92 -0
- acceldata/models/api/catalog/standard_response_crawler_status_response.py +92 -0
- acceldata/models/api/catalog/standard_response_delete_artifact_response.py +92 -0
- acceldata/models/api/catalog/standard_response_list.py +96 -0
- acceldata/models/api/catalog/standard_response_map.py +88 -0
- acceldata/models/api/catalog/standard_response_meta_data.py +92 -0
- acceldata/models/api/catalog/standard_response_mini_profile_request.py +92 -0
- acceldata/models/api/catalog/standard_response_profile_request.py +92 -0
- acceldata/models/api/catalog/start_profiling_request.py +92 -0
- acceldata/models/api/catalog/tag_domain.py +116 -0
- acceldata/models/api/catalog/threshold_breach_details.py +101 -0
- acceldata/models/api/catalog/time_based_config.py +92 -0
- acceldata/models/api/catalog/time_based_threshold_config.py +105 -0
- acceldata/models/api/catalog/timestamp_based_marker_config.py +115 -0
- acceldata/models/api/catalog/udf_variable.py +97 -0
- acceldata/models/api/catalog/yunikorn_compute_config.py +133 -0
- acceldata/models/api/catalog/yunikorn_spark_resource_config.py +154 -0
- acceldata/models/api/pipeline/big_decimal.py +100 -0
- acceldata/models/api/pipeline/big_integer.py +98 -0
- acceldata/models/api/pipeline/child_span_response.py +96 -0
- acceldata/models/api/pipeline/create_span_event.py +109 -0
- acceldata/models/api/pipeline/edge.py +108 -0
- acceldata/models/api/pipeline/event_alert_object.py +95 -0
- acceldata/models/api/pipeline/generic_config_fallback.py +101 -0
- acceldata/models/api/pipeline/identifier.py +146 -0
- acceldata/models/api/pipeline/job_request.py +130 -0
- acceldata/models/api/pipeline/meta.py +107 -0
- acceldata/models/api/pipeline/meta_data.py +92 -0
- acceldata/models/api/pipeline/metric.py +103 -0
- acceldata/models/api/pipeline/node.py +201 -0
- acceldata/models/api/pipeline/node_response.py +92 -0
- acceldata/models/api/pipeline/notification_payload.py +114 -0
- acceldata/models/api/pipeline/pipeline.py +152 -0
- acceldata/models/api/pipeline/pipeline_baseline_metric.py +92 -0
- acceldata/models/api/pipeline/pipeline_details.py +118 -0
- acceldata/models/api/pipeline/pipeline_details_response.py +102 -0
- acceldata/models/api/pipeline/pipeline_input_request.py +92 -0
- acceldata/models/api/pipeline/pipeline_listing_info.py +118 -0
- acceldata/models/api/pipeline/pipeline_response.py +92 -0
- acceldata/models/api/pipeline/pipeline_run.py +136 -0
- acceldata/models/api/pipeline/pipeline_run_request.py +92 -0
- acceldata/models/api/pipeline/pipeline_runs_response.py +102 -0
- acceldata/models/api/pipeline/pipeline_summary.py +98 -0
- acceldata/models/api/pipeline/pipelines_listing_response.py +102 -0
- acceldata/models/api/pipeline/policy_summary.py +102 -0
- acceldata/models/api/pipeline/span.py +115 -0
- acceldata/models/api/pipeline/span_event.py +114 -0
- acceldata/models/api/pipeline/span_event_request.py +92 -0
- acceldata/models/api/pipeline/span_event_response.py +92 -0
- acceldata/models/api/pipeline/span_request.py +94 -0
- acceldata/models/api/pipeline/spans_response.py +96 -0
- acceldata/models/api/pipeline/tag.py +97 -0
- acceldata/models/sdk/__init__.py +0 -0
- acceldata/models/sdk/catalog/__init__.py +105 -0
- acceldata/models/sdk/catalog/asset_resource.py +112 -0
- acceldata/models/sdk/catalog/asset_source_type.py +59 -0
- acceldata/models/sdk/catalog/custom_asset_metadata.py +11 -0
- acceldata/models/sdk/catalog/datasource_resource.py +88 -0
- acceldata/models/sdk/catalog/executor.py +524 -0
- acceldata/models/sdk/catalog/policy_execution_request.py +114 -0
- acceldata/models/sdk/catalog/policy_execution_type.py +16 -0
- acceldata/models/sdk/catalog/policy_filter.py +94 -0
- acceldata/models/sdk/catalog/policy_rule_resources.py +388 -0
- acceldata/models/sdk/catalog/profile_request_resource.py +77 -0
- acceldata/models/sdk/catalog/profiling.py +82 -0
- acceldata/models/sdk/catalog/profiling_configuration_error.py +5 -0
- acceldata/models/sdk/pipeline/__init__.py +62 -0
- acceldata/models/sdk/pipeline/create_job_input.py +108 -0
- acceldata/models/sdk/pipeline/create_pipeline_input_request.py +72 -0
- acceldata/models/sdk/pipeline/events/__init__.py +5 -0
- acceldata/models/sdk/pipeline/events/generic_event.py +31 -0
- acceldata/models/sdk/pipeline/events/log_event.py +34 -0
- acceldata/models/sdk/pipeline/events/span_event.py +8 -0
- acceldata/models/sdk/pipeline/pipeline_resource.py +171 -0
- acceldata/models/sdk/pipeline/pipeline_run_input.py +84 -0
- acceldata/models/sdk/pipeline/pipeline_run_resource.py +208 -0
- acceldata/models/sdk/pipeline/pipeline_source_type.py +20 -0
- acceldata/models/sdk/pipeline/span_resource.py +327 -0
- acceldata/openapi_deserialization_patches.py +161 -0
- acceldata/openapi_repr_patches.py +62 -0
- acceldata/services/__init__.py +0 -0
- acceldata/services/api_timestamp.py +31 -0
- acceldata/services/asset_service.py +651 -0
- acceldata/services/datasource_service.py +120 -0
- acceldata/services/generic_service.py +132 -0
- acceldata/services/marker_config.py +232 -0
- acceldata/services/pipeline_big_decimal_api.py +102 -0
- acceldata/services/pipeline_response_parse.py +209 -0
- acceldata/services/pipeline_service.py +494 -0
- acceldata/services/rule_service.py +620 -0
- acceldata/urls/__init__.py +1 -0
- acceldata/urls/catalog_urls.py +137 -0
- acceldata/urls/pipeline_urls.py +55 -0
- acceldata/utils/__init__.py +6 -0
- acceldata/utils/datetime_utils.py +16 -0
- acceldata/utils/operation_ack.py +22 -0
- acceldata/utils/span_helpers.py +95 -0
- acceldata/utils/time_range_utils.py +90 -0
- acceldata_sdk_python-26.7.0.dist-info/METADATA +26 -0
- acceldata_sdk_python-26.7.0.dist-info/RECORD +303 -0
- acceldata_sdk_python-26.7.0.dist-info/WHEEL +5 -0
- acceldata_sdk_python-26.7.0.dist-info/licenses/LICENSE +22 -0
- 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,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)
|