everyrow 0.1.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 (183) hide show
  1. everyrow/__init__.py +4 -0
  2. everyrow/api_utils.py +45 -0
  3. everyrow/citations.py +46 -0
  4. everyrow/constants.py +4 -0
  5. everyrow/generated/__init__.py +8 -0
  6. everyrow/generated/api/__init__.py +1 -0
  7. everyrow/generated/api/default/__init__.py +1 -0
  8. everyrow/generated/api/default/continue_task_endpoint_tasks_continue_post.py +208 -0
  9. everyrow/generated/api/default/copy_artifacts_artifacts_copy_post.py +166 -0
  10. everyrow/generated/api/default/copy_workflow_endpoint_workflows_copy_post.py +166 -0
  11. everyrow/generated/api/default/create_api_key_endpoint_api_keys_create_post.py +186 -0
  12. everyrow/generated/api/default/create_session_endpoint_sessions_create_post.py +198 -0
  13. everyrow/generated/api/default/create_workflow_from_artifact_workflows_from_artifact_post.py +174 -0
  14. everyrow/generated/api/default/export_to_google_sheets_export_post.py +168 -0
  15. everyrow/generated/api/default/generate_feedback_endpoint_tasks_generate_feedback_post.py +186 -0
  16. everyrow/generated/api/default/get_artifacts_artifacts_get.py +260 -0
  17. everyrow/generated/api/default/get_default_timeout_seconds_models_default_timeout_seconds_get.py +165 -0
  18. everyrow/generated/api/default/get_job_progress_for_task_jobs_progress_get.py +167 -0
  19. everyrow/generated/api/default/get_metrics_metrics_get.py +80 -0
  20. everyrow/generated/api/default/get_queues_stats_jobs_queues_get.py +123 -0
  21. everyrow/generated/api/default/get_task_status_endpoint_tasks_task_id_status_get.py +193 -0
  22. everyrow/generated/api/default/get_user_usage_usage_get.py +123 -0
  23. everyrow/generated/api/default/healthz_healthz_get.py +127 -0
  24. everyrow/generated/api/default/import_from_google_sheets_import_post.py +170 -0
  25. everyrow/generated/api/default/interrupt_chat_task_tasks_chat_interrupt_post.py +172 -0
  26. everyrow/generated/api/default/list_api_keys_endpoint_api_keys_get.py +186 -0
  27. everyrow/generated/api/default/re_execute_task_endpoint_tasks_re_execute_post.py +192 -0
  28. everyrow/generated/api/default/revoke_api_key_endpoint_api_keys_key_id_revoke_post.py +181 -0
  29. everyrow/generated/api/default/revoke_jobs_for_task_jobs_revoke_post.py +164 -0
  30. everyrow/generated/api/default/rollback_to_message_endpoint_tasks_chat_rollback_post.py +186 -0
  31. everyrow/generated/api/default/submit_chat_task_tasks_chat_post.py +164 -0
  32. everyrow/generated/api/default/submit_task_tasks_post.py +172 -0
  33. everyrow/generated/api/default/task_resource_estimation_task_resource_estimation_post.py +319 -0
  34. everyrow/generated/api/default/trigger_workflow_execution_endpoint_workflows_trigger_post.py +166 -0
  35. everyrow/generated/api/default/whoami_whoami_get.py +127 -0
  36. everyrow/generated/client.py +268 -0
  37. everyrow/generated/errors.py +16 -0
  38. everyrow/generated/models/__init__.py +281 -0
  39. everyrow/generated/models/agent_improvement_instruction.py +69 -0
  40. everyrow/generated/models/agent_query_params.py +362 -0
  41. everyrow/generated/models/agent_query_params_system_prompt_kind_type_0.py +10 -0
  42. everyrow/generated/models/agent_task_args.py +163 -0
  43. everyrow/generated/models/agent_task_args_processing_mode.py +9 -0
  44. everyrow/generated/models/allowed_suggestions.py +8 -0
  45. everyrow/generated/models/api_key_info.py +163 -0
  46. everyrow/generated/models/artifact_changed_payload.py +89 -0
  47. everyrow/generated/models/artifact_group_record.py +330 -0
  48. everyrow/generated/models/artifact_group_record_metadata_type_0.py +46 -0
  49. everyrow/generated/models/artifact_group_record_trace_mapping_type_0.py +46 -0
  50. everyrow/generated/models/artifact_status.py +14 -0
  51. everyrow/generated/models/auto_cohort_conversation_message.py +533 -0
  52. everyrow/generated/models/aux_data.py +128 -0
  53. everyrow/generated/models/aux_data_source_bank.py +59 -0
  54. everyrow/generated/models/chat_completion_message_tool_call.py +46 -0
  55. everyrow/generated/models/chat_message_metadata.py +193 -0
  56. everyrow/generated/models/concatenate_query_params.py +46 -0
  57. everyrow/generated/models/concatenate_request.py +306 -0
  58. everyrow/generated/models/continue_reason.py +9 -0
  59. everyrow/generated/models/continue_task_request.py +133 -0
  60. everyrow/generated/models/controller_improvement_round.py +79 -0
  61. everyrow/generated/models/conversation_changed_payload.py +89 -0
  62. everyrow/generated/models/copy_artifacts_request.py +70 -0
  63. everyrow/generated/models/copy_artifacts_response.py +70 -0
  64. everyrow/generated/models/copy_workflow_request.py +62 -0
  65. everyrow/generated/models/copy_workflow_response.py +70 -0
  66. everyrow/generated/models/create_api_key_request.py +95 -0
  67. everyrow/generated/models/create_api_key_response.py +96 -0
  68. everyrow/generated/models/create_group_query_params.py +61 -0
  69. everyrow/generated/models/create_group_request.py +305 -0
  70. everyrow/generated/models/create_query_params.py +61 -0
  71. everyrow/generated/models/create_request.py +305 -0
  72. everyrow/generated/models/create_session_request.py +62 -0
  73. everyrow/generated/models/create_session_response.py +63 -0
  74. everyrow/generated/models/create_workflow_from_artifact_request.py +92 -0
  75. everyrow/generated/models/create_workflow_from_artifact_response.py +70 -0
  76. everyrow/generated/models/data_frame_method.py +18 -0
  77. everyrow/generated/models/date_cutoffs.py +145 -0
  78. everyrow/generated/models/dedupe_mode.py +9 -0
  79. everyrow/generated/models/dedupe_query_params.py +174 -0
  80. everyrow/generated/models/dedupe_request_params.py +311 -0
  81. everyrow/generated/models/deep_merge_public_params.py +143 -0
  82. everyrow/generated/models/deep_merge_request.py +313 -0
  83. everyrow/generated/models/deep_rank_public_params.py +99 -0
  84. everyrow/generated/models/deep_rank_request.py +313 -0
  85. everyrow/generated/models/deep_screen_public_params.py +122 -0
  86. everyrow/generated/models/deep_screen_request.py +313 -0
  87. everyrow/generated/models/derive_expression.py +69 -0
  88. everyrow/generated/models/derive_query_params.py +75 -0
  89. everyrow/generated/models/derive_request.py +307 -0
  90. everyrow/generated/models/document_query_tool.py +12 -0
  91. everyrow/generated/models/drop_columns_query_params.py +61 -0
  92. everyrow/generated/models/drop_columns_request.py +305 -0
  93. everyrow/generated/models/embedding_models.py +9 -0
  94. everyrow/generated/models/event_type.py +14 -0
  95. everyrow/generated/models/execution_metadata.py +146 -0
  96. everyrow/generated/models/export_request.py +75 -0
  97. everyrow/generated/models/export_request_token_data.py +46 -0
  98. everyrow/generated/models/export_to_google_sheets_export_post_response_export_to_google_sheets_export_post.py +46 -0
  99. everyrow/generated/models/filter_query_params.py +91 -0
  100. everyrow/generated/models/filter_request.py +305 -0
  101. everyrow/generated/models/flatten_query_params.py +46 -0
  102. everyrow/generated/models/flatten_request.py +305 -0
  103. everyrow/generated/models/generate_feedback_request.py +62 -0
  104. everyrow/generated/models/group_by_query_params.py +62 -0
  105. everyrow/generated/models/group_by_request.py +305 -0
  106. everyrow/generated/models/healthz_healthz_get_response_healthz_healthz_get.py +46 -0
  107. everyrow/generated/models/http_validation_error.py +79 -0
  108. everyrow/generated/models/image_chat_content_part.py +80 -0
  109. everyrow/generated/models/image_chat_content_part_image_url.py +46 -0
  110. everyrow/generated/models/import_from_google_sheets_import_post_response_import_from_google_sheets_import_post.py +46 -0
  111. everyrow/generated/models/import_request.py +83 -0
  112. everyrow/generated/models/import_request_token_data.py +46 -0
  113. everyrow/generated/models/insufficient_balance_error.py +81 -0
  114. everyrow/generated/models/join_query_params.py +73 -0
  115. everyrow/generated/models/join_request.py +305 -0
  116. everyrow/generated/models/llm_enum.py +54 -0
  117. everyrow/generated/models/map_agent_request_params.py +313 -0
  118. everyrow/generated/models/map_multi_agent_request_params.py +313 -0
  119. everyrow/generated/models/message_created_payload.py +98 -0
  120. everyrow/generated/models/multi_agent_effort_level.py +10 -0
  121. everyrow/generated/models/multi_agent_query_params.py +264 -0
  122. everyrow/generated/models/multi_modal_chat_message.py +160 -0
  123. everyrow/generated/models/multi_modal_chat_message_role.py +10 -0
  124. everyrow/generated/models/preview_metadata.py +144 -0
  125. everyrow/generated/models/processing_mode.py +10 -0
  126. everyrow/generated/models/progress_status.py +83 -0
  127. everyrow/generated/models/queue_stats.py +77 -0
  128. everyrow/generated/models/reduce_agent_request_params.py +305 -0
  129. everyrow/generated/models/reduce_multi_agent_request_params.py +305 -0
  130. everyrow/generated/models/resource_estimation_response.py +85 -0
  131. everyrow/generated/models/response_schema_type.py +9 -0
  132. everyrow/generated/models/revoke_api_key_response.py +61 -0
  133. everyrow/generated/models/rollback_to_message_request.py +62 -0
  134. everyrow/generated/models/rollback_to_message_response.py +77 -0
  135. everyrow/generated/models/session_changed_payload.py +69 -0
  136. everyrow/generated/models/simple_chat_message.py +121 -0
  137. everyrow/generated/models/simple_chat_message_role.py +10 -0
  138. everyrow/generated/models/simple_chat_message_with_tool_calls.py +156 -0
  139. everyrow/generated/models/source_database_entry.py +92 -0
  140. everyrow/generated/models/standalone_artifact_record.py +278 -0
  141. everyrow/generated/models/standalone_artifact_record_metadata_type_0.py +46 -0
  142. everyrow/generated/models/standalone_artifact_record_trace_mapping_type_0.py +46 -0
  143. everyrow/generated/models/status_count.py +71 -0
  144. everyrow/generated/models/status_count_status.py +13 -0
  145. everyrow/generated/models/submit_chat_task_body.py +497 -0
  146. everyrow/generated/models/submit_chat_task_body_selected_task_type_type_0.py +11 -0
  147. everyrow/generated/models/submit_task_body.py +745 -0
  148. everyrow/generated/models/task_changed_payload.py +105 -0
  149. everyrow/generated/models/task_effort.py +10 -0
  150. everyrow/generated/models/task_id_request.py +62 -0
  151. everyrow/generated/models/task_insert.py +725 -0
  152. everyrow/generated/models/task_insert_query_params.py +46 -0
  153. everyrow/generated/models/task_metadata.py +323 -0
  154. everyrow/generated/models/task_metadata_cols_to_rename_type_0.py +46 -0
  155. everyrow/generated/models/task_response.py +62 -0
  156. everyrow/generated/models/task_status.py +12 -0
  157. everyrow/generated/models/task_status_response.py +112 -0
  158. everyrow/generated/models/task_type.py +31 -0
  159. everyrow/generated/models/text_chat_content_part.py +74 -0
  160. everyrow/generated/models/tool_response_message.py +127 -0
  161. everyrow/generated/models/toolkit_constants.py +80 -0
  162. everyrow/generated/models/trace_changed_payload.py +94 -0
  163. everyrow/generated/models/trace_info.py +78 -0
  164. everyrow/generated/models/trigger_workflow_execution_request.py +112 -0
  165. everyrow/generated/models/trigger_workflow_execution_request_task_params.py +65 -0
  166. everyrow/generated/models/trigger_workflow_execution_request_task_params_additional_property.py +46 -0
  167. everyrow/generated/models/trigger_workflow_execution_response.py +69 -0
  168. everyrow/generated/models/upload_csv_payload.py +310 -0
  169. everyrow/generated/models/upload_csv_query_params.py +114 -0
  170. everyrow/generated/models/usage_response.py +77 -0
  171. everyrow/generated/models/validation_error.py +90 -0
  172. everyrow/generated/models/whoami_whoami_get_response_whoami_whoami_get.py +46 -0
  173. everyrow/generated/models/workflow_leaf_node_input.py +70 -0
  174. everyrow/generated/py.typed +1 -0
  175. everyrow/generated/types.py +54 -0
  176. everyrow/ops.py +672 -0
  177. everyrow/result.py +25 -0
  178. everyrow/session.py +53 -0
  179. everyrow/task.py +143 -0
  180. everyrow-0.1.0.dist-info/METADATA +238 -0
  181. everyrow-0.1.0.dist-info/RECORD +183 -0
  182. everyrow-0.1.0.dist-info/WHEEL +4 -0
  183. everyrow-0.1.0.dist-info/licenses/LICENSE.txt +21 -0
@@ -0,0 +1,163 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime
4
+ from collections.abc import Mapping
5
+ from typing import Any, TypeVar, cast
6
+ from uuid import UUID
7
+
8
+ from attrs import define as _attrs_define
9
+ from attrs import field as _attrs_field
10
+ from dateutil.parser import isoparse
11
+
12
+ T = TypeVar("T", bound="APIKeyInfo")
13
+
14
+
15
+ @_attrs_define
16
+ class APIKeyInfo:
17
+ """
18
+ Attributes:
19
+ id (UUID):
20
+ name (str):
21
+ key_prefix (str):
22
+ created_at (datetime.datetime):
23
+ last_used_at (datetime.datetime | None):
24
+ expires_at (datetime.datetime | None):
25
+ revoked_at (datetime.datetime | None):
26
+ """
27
+
28
+ id: UUID
29
+ name: str
30
+ key_prefix: str
31
+ created_at: datetime.datetime
32
+ last_used_at: datetime.datetime | None
33
+ expires_at: datetime.datetime | None
34
+ revoked_at: datetime.datetime | None
35
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
36
+
37
+ def to_dict(self) -> dict[str, Any]:
38
+ id = str(self.id)
39
+
40
+ name = self.name
41
+
42
+ key_prefix = self.key_prefix
43
+
44
+ created_at = self.created_at.isoformat()
45
+
46
+ last_used_at: None | str
47
+ if isinstance(self.last_used_at, datetime.datetime):
48
+ last_used_at = self.last_used_at.isoformat()
49
+ else:
50
+ last_used_at = self.last_used_at
51
+
52
+ expires_at: None | str
53
+ if isinstance(self.expires_at, datetime.datetime):
54
+ expires_at = self.expires_at.isoformat()
55
+ else:
56
+ expires_at = self.expires_at
57
+
58
+ revoked_at: None | str
59
+ if isinstance(self.revoked_at, datetime.datetime):
60
+ revoked_at = self.revoked_at.isoformat()
61
+ else:
62
+ revoked_at = self.revoked_at
63
+
64
+ field_dict: dict[str, Any] = {}
65
+ field_dict.update(self.additional_properties)
66
+ field_dict.update(
67
+ {
68
+ "id": id,
69
+ "name": name,
70
+ "key_prefix": key_prefix,
71
+ "created_at": created_at,
72
+ "last_used_at": last_used_at,
73
+ "expires_at": expires_at,
74
+ "revoked_at": revoked_at,
75
+ }
76
+ )
77
+
78
+ return field_dict
79
+
80
+ @classmethod
81
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
82
+ d = dict(src_dict)
83
+ id = UUID(d.pop("id"))
84
+
85
+ name = d.pop("name")
86
+
87
+ key_prefix = d.pop("key_prefix")
88
+
89
+ created_at = isoparse(d.pop("created_at"))
90
+
91
+ def _parse_last_used_at(data: object) -> datetime.datetime | None:
92
+ if data is None:
93
+ return data
94
+ try:
95
+ if not isinstance(data, str):
96
+ raise TypeError()
97
+ last_used_at_type_0 = isoparse(data)
98
+
99
+ return last_used_at_type_0
100
+ except (TypeError, ValueError, AttributeError, KeyError):
101
+ pass
102
+ return cast(datetime.datetime | None, data)
103
+
104
+ last_used_at = _parse_last_used_at(d.pop("last_used_at"))
105
+
106
+ def _parse_expires_at(data: object) -> datetime.datetime | None:
107
+ if data is None:
108
+ return data
109
+ try:
110
+ if not isinstance(data, str):
111
+ raise TypeError()
112
+ expires_at_type_0 = isoparse(data)
113
+
114
+ return expires_at_type_0
115
+ except (TypeError, ValueError, AttributeError, KeyError):
116
+ pass
117
+ return cast(datetime.datetime | None, data)
118
+
119
+ expires_at = _parse_expires_at(d.pop("expires_at"))
120
+
121
+ def _parse_revoked_at(data: object) -> datetime.datetime | None:
122
+ if data is None:
123
+ return data
124
+ try:
125
+ if not isinstance(data, str):
126
+ raise TypeError()
127
+ revoked_at_type_0 = isoparse(data)
128
+
129
+ return revoked_at_type_0
130
+ except (TypeError, ValueError, AttributeError, KeyError):
131
+ pass
132
+ return cast(datetime.datetime | None, data)
133
+
134
+ revoked_at = _parse_revoked_at(d.pop("revoked_at"))
135
+
136
+ api_key_info = cls(
137
+ id=id,
138
+ name=name,
139
+ key_prefix=key_prefix,
140
+ created_at=created_at,
141
+ last_used_at=last_used_at,
142
+ expires_at=expires_at,
143
+ revoked_at=revoked_at,
144
+ )
145
+
146
+ api_key_info.additional_properties = d
147
+ return api_key_info
148
+
149
+ @property
150
+ def additional_keys(self) -> list[str]:
151
+ return list(self.additional_properties.keys())
152
+
153
+ def __getitem__(self, key: str) -> Any:
154
+ return self.additional_properties[key]
155
+
156
+ def __setitem__(self, key: str, value: Any) -> None:
157
+ self.additional_properties[key] = value
158
+
159
+ def __delitem__(self, key: str) -> None:
160
+ del self.additional_properties[key]
161
+
162
+ def __contains__(self, key: str) -> bool:
163
+ return key in self.additional_properties
@@ -0,0 +1,89 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar
5
+ from uuid import UUID
6
+
7
+ from attrs import define as _attrs_define
8
+ from attrs import field as _attrs_field
9
+
10
+ from ..models.event_type import EventType
11
+ from ..types import UNSET, Unset
12
+
13
+ T = TypeVar("T", bound="ArtifactChangedPayload")
14
+
15
+
16
+ @_attrs_define
17
+ class ArtifactChangedPayload:
18
+ """
19
+ Attributes:
20
+ artifact_ids (list[UUID]):
21
+ event_type (EventType | Unset):
22
+ """
23
+
24
+ artifact_ids: list[UUID]
25
+ event_type: EventType | Unset = UNSET
26
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
27
+
28
+ def to_dict(self) -> dict[str, Any]:
29
+ artifact_ids = []
30
+ for artifact_ids_item_data in self.artifact_ids:
31
+ artifact_ids_item = str(artifact_ids_item_data)
32
+ artifact_ids.append(artifact_ids_item)
33
+
34
+ event_type: str | Unset = UNSET
35
+ if not isinstance(self.event_type, Unset):
36
+ event_type = self.event_type.value
37
+
38
+ field_dict: dict[str, Any] = {}
39
+ field_dict.update(self.additional_properties)
40
+ field_dict.update(
41
+ {
42
+ "artifact_ids": artifact_ids,
43
+ }
44
+ )
45
+ if event_type is not UNSET:
46
+ field_dict["event_type"] = event_type
47
+
48
+ return field_dict
49
+
50
+ @classmethod
51
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
52
+ d = dict(src_dict)
53
+ artifact_ids = []
54
+ _artifact_ids = d.pop("artifact_ids")
55
+ for artifact_ids_item_data in _artifact_ids:
56
+ artifact_ids_item = UUID(artifact_ids_item_data)
57
+
58
+ artifact_ids.append(artifact_ids_item)
59
+
60
+ _event_type = d.pop("event_type", UNSET)
61
+ event_type: EventType | Unset
62
+ if isinstance(_event_type, Unset):
63
+ event_type = UNSET
64
+ else:
65
+ event_type = EventType(_event_type)
66
+
67
+ artifact_changed_payload = cls(
68
+ artifact_ids=artifact_ids,
69
+ event_type=event_type,
70
+ )
71
+
72
+ artifact_changed_payload.additional_properties = d
73
+ return artifact_changed_payload
74
+
75
+ @property
76
+ def additional_keys(self) -> list[str]:
77
+ return list(self.additional_properties.keys())
78
+
79
+ def __getitem__(self, key: str) -> Any:
80
+ return self.additional_properties[key]
81
+
82
+ def __setitem__(self, key: str, value: Any) -> None:
83
+ self.additional_properties[key] = value
84
+
85
+ def __delitem__(self, key: str) -> None:
86
+ del self.additional_properties[key]
87
+
88
+ def __contains__(self, key: str) -> bool:
89
+ return key in self.additional_properties
@@ -0,0 +1,330 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, Literal, TypeVar, cast
5
+ from uuid import UUID
6
+
7
+ from attrs import define as _attrs_define
8
+ from attrs import field as _attrs_field
9
+
10
+ from ..models.artifact_status import ArtifactStatus
11
+ from ..types import UNSET, Unset
12
+
13
+ if TYPE_CHECKING:
14
+ from ..models.artifact_group_record_metadata_type_0 import ArtifactGroupRecordMetadataType0
15
+ from ..models.artifact_group_record_trace_mapping_type_0 import ArtifactGroupRecordTraceMappingType0
16
+ from ..models.aux_data import AuxData
17
+ from ..models.standalone_artifact_record import StandaloneArtifactRecord
18
+
19
+
20
+ T = TypeVar("T", bound="ArtifactGroupRecord")
21
+
22
+
23
+ @_attrs_define
24
+ class ArtifactGroupRecord:
25
+ """A group of artifacts that can be processed together.
26
+
27
+ An artifact group is itself an artifact, so it can be used as input to tasks.
28
+
29
+ Attributes:
30
+ uid (UUID):
31
+ type_ (Literal['group']):
32
+ artifacts (list[ArtifactGroupRecord | StandaloneArtifactRecord]):
33
+ data (Any):
34
+ metadata (ArtifactGroupRecordMetadataType0 | None | Unset):
35
+ label (None | str | Unset):
36
+ aux_data (AuxData | Unset):
37
+ status (ArtifactStatus | Unset):
38
+ trace_mapping (ArtifactGroupRecordTraceMappingType0 | None | Unset):
39
+ description (str | Unset): Default: ''.
40
+ original_id (None | Unset | UUID):
41
+ index_in_group (int | None | Unset):
42
+ current_iteration (int | None | Unset):
43
+ """
44
+
45
+ uid: UUID
46
+ type_: Literal["group"]
47
+ artifacts: list[ArtifactGroupRecord | StandaloneArtifactRecord]
48
+ data: Any
49
+ metadata: ArtifactGroupRecordMetadataType0 | None | Unset = UNSET
50
+ label: None | str | Unset = UNSET
51
+ aux_data: AuxData | Unset = UNSET
52
+ status: ArtifactStatus | Unset = UNSET
53
+ trace_mapping: ArtifactGroupRecordTraceMappingType0 | None | Unset = UNSET
54
+ description: str | Unset = ""
55
+ original_id: None | Unset | UUID = UNSET
56
+ index_in_group: int | None | Unset = UNSET
57
+ current_iteration: int | None | Unset = UNSET
58
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
59
+
60
+ def to_dict(self) -> dict[str, Any]:
61
+ from ..models.artifact_group_record_metadata_type_0 import ArtifactGroupRecordMetadataType0
62
+ from ..models.artifact_group_record_trace_mapping_type_0 import ArtifactGroupRecordTraceMappingType0
63
+ from ..models.standalone_artifact_record import StandaloneArtifactRecord
64
+
65
+ uid = str(self.uid)
66
+
67
+ type_ = self.type_
68
+
69
+ artifacts = []
70
+ for artifacts_item_data in self.artifacts:
71
+ artifacts_item: dict[str, Any]
72
+ if isinstance(artifacts_item_data, StandaloneArtifactRecord):
73
+ artifacts_item = artifacts_item_data.to_dict()
74
+ else:
75
+ artifacts_item = artifacts_item_data.to_dict()
76
+
77
+ artifacts.append(artifacts_item)
78
+
79
+ data = self.data
80
+
81
+ metadata: dict[str, Any] | None | Unset
82
+ if isinstance(self.metadata, Unset):
83
+ metadata = UNSET
84
+ elif isinstance(self.metadata, ArtifactGroupRecordMetadataType0):
85
+ metadata = self.metadata.to_dict()
86
+ else:
87
+ metadata = self.metadata
88
+
89
+ label: None | str | Unset
90
+ if isinstance(self.label, Unset):
91
+ label = UNSET
92
+ else:
93
+ label = self.label
94
+
95
+ aux_data: dict[str, Any] | Unset = UNSET
96
+ if not isinstance(self.aux_data, Unset):
97
+ aux_data = self.aux_data.to_dict()
98
+
99
+ status: str | Unset = UNSET
100
+ if not isinstance(self.status, Unset):
101
+ status = self.status.value
102
+
103
+ trace_mapping: dict[str, Any] | None | Unset
104
+ if isinstance(self.trace_mapping, Unset):
105
+ trace_mapping = UNSET
106
+ elif isinstance(self.trace_mapping, ArtifactGroupRecordTraceMappingType0):
107
+ trace_mapping = self.trace_mapping.to_dict()
108
+ else:
109
+ trace_mapping = self.trace_mapping
110
+
111
+ description = self.description
112
+
113
+ original_id: None | str | Unset
114
+ if isinstance(self.original_id, Unset):
115
+ original_id = UNSET
116
+ elif isinstance(self.original_id, UUID):
117
+ original_id = str(self.original_id)
118
+ else:
119
+ original_id = self.original_id
120
+
121
+ index_in_group: int | None | Unset
122
+ if isinstance(self.index_in_group, Unset):
123
+ index_in_group = UNSET
124
+ else:
125
+ index_in_group = self.index_in_group
126
+
127
+ current_iteration: int | None | Unset
128
+ if isinstance(self.current_iteration, Unset):
129
+ current_iteration = UNSET
130
+ else:
131
+ current_iteration = self.current_iteration
132
+
133
+ field_dict: dict[str, Any] = {}
134
+ field_dict.update(self.additional_properties)
135
+ field_dict.update(
136
+ {
137
+ "uid": uid,
138
+ "type": type_,
139
+ "artifacts": artifacts,
140
+ "data": data,
141
+ }
142
+ )
143
+ if metadata is not UNSET:
144
+ field_dict["metadata"] = metadata
145
+ if label is not UNSET:
146
+ field_dict["label"] = label
147
+ if aux_data is not UNSET:
148
+ field_dict["aux_data"] = aux_data
149
+ if status is not UNSET:
150
+ field_dict["status"] = status
151
+ if trace_mapping is not UNSET:
152
+ field_dict["trace_mapping"] = trace_mapping
153
+ if description is not UNSET:
154
+ field_dict["description"] = description
155
+ if original_id is not UNSET:
156
+ field_dict["original_id"] = original_id
157
+ if index_in_group is not UNSET:
158
+ field_dict["index_in_group"] = index_in_group
159
+ if current_iteration is not UNSET:
160
+ field_dict["current_iteration"] = current_iteration
161
+
162
+ return field_dict
163
+
164
+ @classmethod
165
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
166
+ from ..models.artifact_group_record_metadata_type_0 import ArtifactGroupRecordMetadataType0
167
+ from ..models.artifact_group_record_trace_mapping_type_0 import ArtifactGroupRecordTraceMappingType0
168
+ from ..models.aux_data import AuxData
169
+ from ..models.standalone_artifact_record import StandaloneArtifactRecord
170
+
171
+ d = dict(src_dict)
172
+ uid = UUID(d.pop("uid"))
173
+
174
+ type_ = cast(Literal["group"], d.pop("type"))
175
+ if type_ != "group":
176
+ raise ValueError(f"type must match const 'group', got '{type_}'")
177
+
178
+ artifacts = []
179
+ _artifacts = d.pop("artifacts")
180
+ for artifacts_item_data in _artifacts:
181
+
182
+ def _parse_artifacts_item(data: object) -> ArtifactGroupRecord | StandaloneArtifactRecord:
183
+ try:
184
+ if not isinstance(data, dict):
185
+ raise TypeError()
186
+ artifacts_item_type_0 = StandaloneArtifactRecord.from_dict(data)
187
+
188
+ return artifacts_item_type_0
189
+ except (TypeError, ValueError, AttributeError, KeyError):
190
+ pass
191
+ if not isinstance(data, dict):
192
+ raise TypeError()
193
+ artifacts_item_type_1 = ArtifactGroupRecord.from_dict(data)
194
+
195
+ return artifacts_item_type_1
196
+
197
+ artifacts_item = _parse_artifacts_item(artifacts_item_data)
198
+
199
+ artifacts.append(artifacts_item)
200
+
201
+ data = d.pop("data")
202
+
203
+ def _parse_metadata(data: object) -> ArtifactGroupRecordMetadataType0 | None | Unset:
204
+ if data is None:
205
+ return data
206
+ if isinstance(data, Unset):
207
+ return data
208
+ try:
209
+ if not isinstance(data, dict):
210
+ raise TypeError()
211
+ metadata_type_0 = ArtifactGroupRecordMetadataType0.from_dict(data)
212
+
213
+ return metadata_type_0
214
+ except (TypeError, ValueError, AttributeError, KeyError):
215
+ pass
216
+ return cast(ArtifactGroupRecordMetadataType0 | None | Unset, data)
217
+
218
+ metadata = _parse_metadata(d.pop("metadata", UNSET))
219
+
220
+ def _parse_label(data: object) -> None | str | Unset:
221
+ if data is None:
222
+ return data
223
+ if isinstance(data, Unset):
224
+ return data
225
+ return cast(None | str | Unset, data)
226
+
227
+ label = _parse_label(d.pop("label", UNSET))
228
+
229
+ _aux_data = d.pop("aux_data", UNSET)
230
+ aux_data: AuxData | Unset
231
+ if isinstance(_aux_data, Unset):
232
+ aux_data = UNSET
233
+ else:
234
+ aux_data = AuxData.from_dict(_aux_data)
235
+
236
+ _status = d.pop("status", UNSET)
237
+ status: ArtifactStatus | Unset
238
+ if isinstance(_status, Unset):
239
+ status = UNSET
240
+ else:
241
+ status = ArtifactStatus(_status)
242
+
243
+ def _parse_trace_mapping(data: object) -> ArtifactGroupRecordTraceMappingType0 | None | Unset:
244
+ if data is None:
245
+ return data
246
+ if isinstance(data, Unset):
247
+ return data
248
+ try:
249
+ if not isinstance(data, dict):
250
+ raise TypeError()
251
+ trace_mapping_type_0 = ArtifactGroupRecordTraceMappingType0.from_dict(data)
252
+
253
+ return trace_mapping_type_0
254
+ except (TypeError, ValueError, AttributeError, KeyError):
255
+ pass
256
+ return cast(ArtifactGroupRecordTraceMappingType0 | None | Unset, data)
257
+
258
+ trace_mapping = _parse_trace_mapping(d.pop("trace_mapping", UNSET))
259
+
260
+ description = d.pop("description", UNSET)
261
+
262
+ def _parse_original_id(data: object) -> None | Unset | UUID:
263
+ if data is None:
264
+ return data
265
+ if isinstance(data, Unset):
266
+ return data
267
+ try:
268
+ if not isinstance(data, str):
269
+ raise TypeError()
270
+ original_id_type_0 = UUID(data)
271
+
272
+ return original_id_type_0
273
+ except (TypeError, ValueError, AttributeError, KeyError):
274
+ pass
275
+ return cast(None | Unset | UUID, data)
276
+
277
+ original_id = _parse_original_id(d.pop("original_id", UNSET))
278
+
279
+ def _parse_index_in_group(data: object) -> int | None | Unset:
280
+ if data is None:
281
+ return data
282
+ if isinstance(data, Unset):
283
+ return data
284
+ return cast(int | None | Unset, data)
285
+
286
+ index_in_group = _parse_index_in_group(d.pop("index_in_group", UNSET))
287
+
288
+ def _parse_current_iteration(data: object) -> int | None | Unset:
289
+ if data is None:
290
+ return data
291
+ if isinstance(data, Unset):
292
+ return data
293
+ return cast(int | None | Unset, data)
294
+
295
+ current_iteration = _parse_current_iteration(d.pop("current_iteration", UNSET))
296
+
297
+ artifact_group_record = cls(
298
+ uid=uid,
299
+ type_=type_,
300
+ artifacts=artifacts,
301
+ data=data,
302
+ metadata=metadata,
303
+ label=label,
304
+ aux_data=aux_data,
305
+ status=status,
306
+ trace_mapping=trace_mapping,
307
+ description=description,
308
+ original_id=original_id,
309
+ index_in_group=index_in_group,
310
+ current_iteration=current_iteration,
311
+ )
312
+
313
+ artifact_group_record.additional_properties = d
314
+ return artifact_group_record
315
+
316
+ @property
317
+ def additional_keys(self) -> list[str]:
318
+ return list(self.additional_properties.keys())
319
+
320
+ def __getitem__(self, key: str) -> Any:
321
+ return self.additional_properties[key]
322
+
323
+ def __setitem__(self, key: str, value: Any) -> None:
324
+ self.additional_properties[key] = value
325
+
326
+ def __delitem__(self, key: str) -> None:
327
+ del self.additional_properties[key]
328
+
329
+ def __contains__(self, key: str) -> bool:
330
+ return key in self.additional_properties
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ T = TypeVar("T", bound="ArtifactGroupRecordMetadataType0")
10
+
11
+
12
+ @_attrs_define
13
+ class ArtifactGroupRecordMetadataType0:
14
+ """ """
15
+
16
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
17
+
18
+ def to_dict(self) -> dict[str, Any]:
19
+ field_dict: dict[str, Any] = {}
20
+ field_dict.update(self.additional_properties)
21
+
22
+ return field_dict
23
+
24
+ @classmethod
25
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
26
+ d = dict(src_dict)
27
+ artifact_group_record_metadata_type_0 = cls()
28
+
29
+ artifact_group_record_metadata_type_0.additional_properties = d
30
+ return artifact_group_record_metadata_type_0
31
+
32
+ @property
33
+ def additional_keys(self) -> list[str]:
34
+ return list(self.additional_properties.keys())
35
+
36
+ def __getitem__(self, key: str) -> Any:
37
+ return self.additional_properties[key]
38
+
39
+ def __setitem__(self, key: str, value: Any) -> None:
40
+ self.additional_properties[key] = value
41
+
42
+ def __delitem__(self, key: str) -> None:
43
+ del self.additional_properties[key]
44
+
45
+ def __contains__(self, key: str) -> bool:
46
+ return key in self.additional_properties
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ T = TypeVar("T", bound="ArtifactGroupRecordTraceMappingType0")
10
+
11
+
12
+ @_attrs_define
13
+ class ArtifactGroupRecordTraceMappingType0:
14
+ """ """
15
+
16
+ additional_properties: dict[str, str] = _attrs_field(init=False, factory=dict)
17
+
18
+ def to_dict(self) -> dict[str, Any]:
19
+ field_dict: dict[str, Any] = {}
20
+ field_dict.update(self.additional_properties)
21
+
22
+ return field_dict
23
+
24
+ @classmethod
25
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
26
+ d = dict(src_dict)
27
+ artifact_group_record_trace_mapping_type_0 = cls()
28
+
29
+ artifact_group_record_trace_mapping_type_0.additional_properties = d
30
+ return artifact_group_record_trace_mapping_type_0
31
+
32
+ @property
33
+ def additional_keys(self) -> list[str]:
34
+ return list(self.additional_properties.keys())
35
+
36
+ def __getitem__(self, key: str) -> str:
37
+ return self.additional_properties[key]
38
+
39
+ def __setitem__(self, key: str, value: str) -> None:
40
+ self.additional_properties[key] = value
41
+
42
+ def __delitem__(self, key: str) -> None:
43
+ del self.additional_properties[key]
44
+
45
+ def __contains__(self, key: str) -> bool:
46
+ return key in self.additional_properties
@@ -0,0 +1,14 @@
1
+ from enum import Enum
2
+
3
+
4
+ class ArtifactStatus(str, Enum):
5
+ COMPLETED = "completed"
6
+ FAILED = "failed"
7
+ OMITTED_FROM_PREVIEW = "omitted_from_preview"
8
+ PENDING = "pending"
9
+ REVOKED = "revoked"
10
+ RUNNING = "running"
11
+ UNDER_REVIEW = "under_review"
12
+
13
+ def __str__(self) -> str:
14
+ return str(self.value)