cyberdesk 1.8.0__py3-none-any.whl → 1.9.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.

Potentially problematic release.


This version of cyberdesk might be problematic. Click here for more details.

Files changed (39) hide show
  1. cyberdesk/__init__.py +11 -1
  2. cyberdesk/client.py +188 -0
  3. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/METADATA +39 -17
  4. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/RECORD +39 -13
  5. openapi_client/cyberdesk_cloud_client/api/computer/fs_list_v1_computer_machine_id_fs_list_get.py +188 -0
  6. openapi_client/cyberdesk_cloud_client/api/computer/fs_read_v1_computer_machine_id_fs_read_get.py +188 -0
  7. openapi_client/cyberdesk_cloud_client/api/computer/fs_write_v1_computer_machine_id_fs_write_post.py +201 -0
  8. openapi_client/cyberdesk_cloud_client/api/computer/powershell_exec_v1_computer_machine_id_shell_powershell_exec_post.py +219 -0
  9. openapi_client/cyberdesk_cloud_client/api/computer/powershell_session_v1_computer_machine_id_shell_powershell_session_post.py +219 -0
  10. openapi_client/cyberdesk_cloud_client/api/run_attachments/__init__.py +1 -0
  11. openapi_client/cyberdesk_cloud_client/api/run_attachments/create_run_attachment_v1_run_attachments_post.py +184 -0
  12. openapi_client/cyberdesk_cloud_client/api/run_attachments/delete_run_attachment_v1_run_attachments_attachment_id_delete.py +170 -0
  13. openapi_client/cyberdesk_cloud_client/api/run_attachments/download_run_attachment_v1_run_attachments_attachment_id_download_get.py +170 -0
  14. openapi_client/cyberdesk_cloud_client/api/run_attachments/get_run_attachment_v1_run_attachments_attachment_id_get.py +172 -0
  15. openapi_client/cyberdesk_cloud_client/api/run_attachments/list_run_attachments_v1_run_attachments_get.py +240 -0
  16. openapi_client/cyberdesk_cloud_client/api/run_attachments/update_run_attachment_v1_run_attachments_attachment_id_put.py +194 -0
  17. openapi_client/cyberdesk_cloud_client/models/__init__.py +38 -0
  18. openapi_client/cyberdesk_cloud_client/models/attachment_type.py +9 -0
  19. openapi_client/cyberdesk_cloud_client/models/file_input.py +99 -0
  20. openapi_client/cyberdesk_cloud_client/models/file_write_request.py +78 -0
  21. openapi_client/cyberdesk_cloud_client/models/fs_list_v1_computer_machine_id_fs_list_get_response_fs_list_v1_computer_machine_id_fs_list_get.py +44 -0
  22. openapi_client/cyberdesk_cloud_client/models/fs_read_v1_computer_machine_id_fs_read_get_response_fs_read_v1_computer_machine_id_fs_read_get.py +44 -0
  23. openapi_client/cyberdesk_cloud_client/models/fs_write_v1_computer_machine_id_fs_write_post_response_fs_write_v1_computer_machine_id_fs_write_post.py +44 -0
  24. openapi_client/cyberdesk_cloud_client/models/paginated_response_run_attachment_response.py +97 -0
  25. openapi_client/cyberdesk_cloud_client/models/power_shell_exec_request.py +110 -0
  26. openapi_client/cyberdesk_cloud_client/models/power_shell_session_request.py +81 -0
  27. openapi_client/cyberdesk_cloud_client/models/powershell_exec_v1_computer_machine_id_shell_powershell_exec_post_response_powershell_exec_v1_computer_machine_id_shell_powershell_exec_post.py +47 -0
  28. openapi_client/cyberdesk_cloud_client/models/powershell_session_v1_computer_machine_id_shell_powershell_session_post_response_powershell_session_v1_computer_machine_id_shell_powershell_session_post.py +47 -0
  29. openapi_client/cyberdesk_cloud_client/models/run_attachment_create.py +157 -0
  30. openapi_client/cyberdesk_cloud_client/models/run_attachment_response.py +189 -0
  31. openapi_client/cyberdesk_cloud_client/models/run_attachment_update.py +84 -0
  32. openapi_client/cyberdesk_cloud_client/models/run_create.py +41 -0
  33. openapi_client/cyberdesk_cloud_client/models/run_response.py +26 -0
  34. openapi_client/cyberdesk_cloud_client/models/workflow_create.py +9 -0
  35. openapi_client/cyberdesk_cloud_client/models/workflow_response.py +9 -0
  36. openapi_client/cyberdesk_cloud_client/models/workflow_update.py +20 -0
  37. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/WHEEL +0 -0
  38. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/licenses/LICENSE +0 -0
  39. {cyberdesk-1.8.0.dist-info → cyberdesk-1.9.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,189 @@
1
+ import datetime
2
+ from collections.abc import Mapping
3
+ from typing import Any, TypeVar, Union, cast
4
+ from uuid import UUID
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+ from dateutil.parser import isoparse
9
+
10
+ from ..models.attachment_type import AttachmentType
11
+ from ..types import UNSET, Unset
12
+
13
+ T = TypeVar("T", bound="RunAttachmentResponse")
14
+
15
+
16
+ @_attrs_define
17
+ class RunAttachmentResponse:
18
+ """Run attachment response schema
19
+
20
+ Attributes:
21
+ filename (str):
22
+ content_type (str):
23
+ attachment_type (AttachmentType):
24
+ id (UUID):
25
+ user_id (UUID):
26
+ run_id (UUID):
27
+ size_bytes (int):
28
+ storage_path (str):
29
+ created_at (datetime.datetime):
30
+ target_path (Union[None, Unset, str]):
31
+ cleanup_imports_after_run (Union[Unset, bool]): Default: False.
32
+ expires_at (Union[None, Unset, datetime.datetime]):
33
+ """
34
+
35
+ filename: str
36
+ content_type: str
37
+ attachment_type: AttachmentType
38
+ id: UUID
39
+ user_id: UUID
40
+ run_id: UUID
41
+ size_bytes: int
42
+ storage_path: str
43
+ created_at: datetime.datetime
44
+ target_path: Union[None, Unset, str] = UNSET
45
+ cleanup_imports_after_run: Union[Unset, bool] = False
46
+ expires_at: Union[None, Unset, datetime.datetime] = UNSET
47
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
48
+
49
+ def to_dict(self) -> dict[str, Any]:
50
+ filename = self.filename
51
+
52
+ content_type = self.content_type
53
+
54
+ attachment_type = self.attachment_type.value
55
+
56
+ id = str(self.id)
57
+
58
+ user_id = str(self.user_id)
59
+
60
+ run_id = str(self.run_id)
61
+
62
+ size_bytes = self.size_bytes
63
+
64
+ storage_path = self.storage_path
65
+
66
+ created_at = self.created_at.isoformat()
67
+
68
+ target_path: Union[None, Unset, str]
69
+ if isinstance(self.target_path, Unset):
70
+ target_path = UNSET
71
+ else:
72
+ target_path = self.target_path
73
+
74
+ cleanup_imports_after_run = self.cleanup_imports_after_run
75
+
76
+ expires_at: Union[None, Unset, str]
77
+ if isinstance(self.expires_at, Unset):
78
+ expires_at = UNSET
79
+ elif isinstance(self.expires_at, datetime.datetime):
80
+ expires_at = self.expires_at.isoformat()
81
+ else:
82
+ expires_at = self.expires_at
83
+
84
+ field_dict: dict[str, Any] = {}
85
+ field_dict.update(self.additional_properties)
86
+ field_dict.update(
87
+ {
88
+ "filename": filename,
89
+ "content_type": content_type,
90
+ "attachment_type": attachment_type,
91
+ "id": id,
92
+ "user_id": user_id,
93
+ "run_id": run_id,
94
+ "size_bytes": size_bytes,
95
+ "storage_path": storage_path,
96
+ "created_at": created_at,
97
+ }
98
+ )
99
+ if target_path is not UNSET:
100
+ field_dict["target_path"] = target_path
101
+ if cleanup_imports_after_run is not UNSET:
102
+ field_dict["cleanup_imports_after_run"] = cleanup_imports_after_run
103
+ if expires_at is not UNSET:
104
+ field_dict["expires_at"] = expires_at
105
+
106
+ return field_dict
107
+
108
+ @classmethod
109
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
110
+ d = dict(src_dict)
111
+ filename = d.pop("filename")
112
+
113
+ content_type = d.pop("content_type")
114
+
115
+ attachment_type = AttachmentType(d.pop("attachment_type"))
116
+
117
+ id = UUID(d.pop("id"))
118
+
119
+ user_id = UUID(d.pop("user_id"))
120
+
121
+ run_id = UUID(d.pop("run_id"))
122
+
123
+ size_bytes = d.pop("size_bytes")
124
+
125
+ storage_path = d.pop("storage_path")
126
+
127
+ created_at = isoparse(d.pop("created_at"))
128
+
129
+ def _parse_target_path(data: object) -> Union[None, Unset, str]:
130
+ if data is None:
131
+ return data
132
+ if isinstance(data, Unset):
133
+ return data
134
+ return cast(Union[None, Unset, str], data)
135
+
136
+ target_path = _parse_target_path(d.pop("target_path", UNSET))
137
+
138
+ cleanup_imports_after_run = d.pop("cleanup_imports_after_run", UNSET)
139
+
140
+ def _parse_expires_at(data: object) -> Union[None, Unset, datetime.datetime]:
141
+ if data is None:
142
+ return data
143
+ if isinstance(data, Unset):
144
+ return data
145
+ try:
146
+ if not isinstance(data, str):
147
+ raise TypeError()
148
+ expires_at_type_0 = isoparse(data)
149
+
150
+ return expires_at_type_0
151
+ except: # noqa: E722
152
+ pass
153
+ return cast(Union[None, Unset, datetime.datetime], data)
154
+
155
+ expires_at = _parse_expires_at(d.pop("expires_at", UNSET))
156
+
157
+ run_attachment_response = cls(
158
+ filename=filename,
159
+ content_type=content_type,
160
+ attachment_type=attachment_type,
161
+ id=id,
162
+ user_id=user_id,
163
+ run_id=run_id,
164
+ size_bytes=size_bytes,
165
+ storage_path=storage_path,
166
+ created_at=created_at,
167
+ target_path=target_path,
168
+ cleanup_imports_after_run=cleanup_imports_after_run,
169
+ expires_at=expires_at,
170
+ )
171
+
172
+ run_attachment_response.additional_properties = d
173
+ return run_attachment_response
174
+
175
+ @property
176
+ def additional_keys(self) -> list[str]:
177
+ return list(self.additional_properties.keys())
178
+
179
+ def __getitem__(self, key: str) -> Any:
180
+ return self.additional_properties[key]
181
+
182
+ def __setitem__(self, key: str, value: Any) -> None:
183
+ self.additional_properties[key] = value
184
+
185
+ def __delitem__(self, key: str) -> None:
186
+ del self.additional_properties[key]
187
+
188
+ def __contains__(self, key: str) -> bool:
189
+ return key in self.additional_properties
@@ -0,0 +1,84 @@
1
+ import datetime
2
+ from collections.abc import Mapping
3
+ from typing import Any, TypeVar, Union, cast
4
+
5
+ from attrs import define as _attrs_define
6
+ from attrs import field as _attrs_field
7
+ from dateutil.parser import isoparse
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ T = TypeVar("T", bound="RunAttachmentUpdate")
12
+
13
+
14
+ @_attrs_define
15
+ class RunAttachmentUpdate:
16
+ """Schema for updating a run attachment
17
+
18
+ Attributes:
19
+ expires_at (Union[None, Unset, datetime.datetime]):
20
+ """
21
+
22
+ expires_at: Union[None, Unset, datetime.datetime] = UNSET
23
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
24
+
25
+ def to_dict(self) -> dict[str, Any]:
26
+ expires_at: Union[None, Unset, str]
27
+ if isinstance(self.expires_at, Unset):
28
+ expires_at = UNSET
29
+ elif isinstance(self.expires_at, datetime.datetime):
30
+ expires_at = self.expires_at.isoformat()
31
+ else:
32
+ expires_at = self.expires_at
33
+
34
+ field_dict: dict[str, Any] = {}
35
+ field_dict.update(self.additional_properties)
36
+ field_dict.update({})
37
+ if expires_at is not UNSET:
38
+ field_dict["expires_at"] = expires_at
39
+
40
+ return field_dict
41
+
42
+ @classmethod
43
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
44
+ d = dict(src_dict)
45
+
46
+ def _parse_expires_at(data: object) -> Union[None, Unset, datetime.datetime]:
47
+ if data is None:
48
+ return data
49
+ if isinstance(data, Unset):
50
+ return data
51
+ try:
52
+ if not isinstance(data, str):
53
+ raise TypeError()
54
+ expires_at_type_0 = isoparse(data)
55
+
56
+ return expires_at_type_0
57
+ except: # noqa: E722
58
+ pass
59
+ return cast(Union[None, Unset, datetime.datetime], data)
60
+
61
+ expires_at = _parse_expires_at(d.pop("expires_at", UNSET))
62
+
63
+ run_attachment_update = cls(
64
+ expires_at=expires_at,
65
+ )
66
+
67
+ run_attachment_update.additional_properties = d
68
+ return run_attachment_update
69
+
70
+ @property
71
+ def additional_keys(self) -> list[str]:
72
+ return list(self.additional_properties.keys())
73
+
74
+ def __getitem__(self, key: str) -> Any:
75
+ return self.additional_properties[key]
76
+
77
+ def __setitem__(self, key: str, value: Any) -> None:
78
+ self.additional_properties[key] = value
79
+
80
+ def __delitem__(self, key: str) -> None:
81
+ del self.additional_properties[key]
82
+
83
+ def __contains__(self, key: str) -> bool:
84
+ return key in self.additional_properties
@@ -8,6 +8,7 @@ from attrs import field as _attrs_field
8
8
  from ..types import UNSET, Unset
9
9
 
10
10
  if TYPE_CHECKING:
11
+ from ..models.file_input import FileInput
11
12
  from ..models.run_create_input_values_type_0 import RunCreateInputValuesType0
12
13
 
13
14
 
@@ -23,11 +24,13 @@ class RunCreate:
23
24
  machine_id (Union[None, UUID, Unset]): Machine ID. If not provided, an available machine will be automatically
24
25
  selected.
25
26
  input_values (Union['RunCreateInputValuesType0', None, Unset]): Input values for workflow variables
27
+ file_inputs (Union[None, Unset, list['FileInput']]): Files to upload to the machine
26
28
  """
27
29
 
28
30
  workflow_id: UUID
29
31
  machine_id: Union[None, UUID, Unset] = UNSET
30
32
  input_values: Union["RunCreateInputValuesType0", None, Unset] = UNSET
33
+ file_inputs: Union[None, Unset, list["FileInput"]] = UNSET
31
34
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
32
35
 
33
36
  def to_dict(self) -> dict[str, Any]:
@@ -51,6 +54,18 @@ class RunCreate:
51
54
  else:
52
55
  input_values = self.input_values
53
56
 
57
+ file_inputs: Union[None, Unset, list[dict[str, Any]]]
58
+ if isinstance(self.file_inputs, Unset):
59
+ file_inputs = UNSET
60
+ elif isinstance(self.file_inputs, list):
61
+ file_inputs = []
62
+ for file_inputs_type_0_item_data in self.file_inputs:
63
+ file_inputs_type_0_item = file_inputs_type_0_item_data.to_dict()
64
+ file_inputs.append(file_inputs_type_0_item)
65
+
66
+ else:
67
+ file_inputs = self.file_inputs
68
+
54
69
  field_dict: dict[str, Any] = {}
55
70
  field_dict.update(self.additional_properties)
56
71
  field_dict.update(
@@ -62,11 +77,14 @@ class RunCreate:
62
77
  field_dict["machine_id"] = machine_id
63
78
  if input_values is not UNSET:
64
79
  field_dict["input_values"] = input_values
80
+ if file_inputs is not UNSET:
81
+ field_dict["file_inputs"] = file_inputs
65
82
 
66
83
  return field_dict
67
84
 
68
85
  @classmethod
69
86
  def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
87
+ from ..models.file_input import FileInput
70
88
  from ..models.run_create_input_values_type_0 import RunCreateInputValuesType0
71
89
 
72
90
  d = dict(src_dict)
@@ -106,10 +124,33 @@ class RunCreate:
106
124
 
107
125
  input_values = _parse_input_values(d.pop("input_values", UNSET))
108
126
 
127
+ def _parse_file_inputs(data: object) -> Union[None, Unset, list["FileInput"]]:
128
+ if data is None:
129
+ return data
130
+ if isinstance(data, Unset):
131
+ return data
132
+ try:
133
+ if not isinstance(data, list):
134
+ raise TypeError()
135
+ file_inputs_type_0 = []
136
+ _file_inputs_type_0 = data
137
+ for file_inputs_type_0_item_data in _file_inputs_type_0:
138
+ file_inputs_type_0_item = FileInput.from_dict(file_inputs_type_0_item_data)
139
+
140
+ file_inputs_type_0.append(file_inputs_type_0_item)
141
+
142
+ return file_inputs_type_0
143
+ except: # noqa: E722
144
+ pass
145
+ return cast(Union[None, Unset, list["FileInput"]], data)
146
+
147
+ file_inputs = _parse_file_inputs(d.pop("file_inputs", UNSET))
148
+
109
149
  run_create = cls(
110
150
  workflow_id=workflow_id,
111
151
  machine_id=machine_id,
112
152
  input_values=input_values,
153
+ file_inputs=file_inputs,
113
154
  )
114
155
 
115
156
  run_create.additional_properties = d
@@ -30,6 +30,7 @@ class RunResponse:
30
30
  status (RunStatus):
31
31
  error (Union[None, list[str]]):
32
32
  output_data (Union['RunResponseOutputDataType0', None]):
33
+ input_attachment_ids (Union[None, list[str]]):
33
34
  output_attachment_ids (Union[None, list[str]]):
34
35
  run_message_history (Union[None, list['RunResponseRunMessageHistoryType0Item']]):
35
36
  input_values (Union['RunResponseInputValuesType0', None]):
@@ -43,6 +44,7 @@ class RunResponse:
43
44
  status: RunStatus
44
45
  error: Union[None, list[str]]
45
46
  output_data: Union["RunResponseOutputDataType0", None]
47
+ input_attachment_ids: Union[None, list[str]]
46
48
  output_attachment_ids: Union[None, list[str]]
47
49
  run_message_history: Union[None, list["RunResponseRunMessageHistoryType0Item"]]
48
50
  input_values: Union["RunResponseInputValuesType0", None]
@@ -80,6 +82,13 @@ class RunResponse:
80
82
  else:
81
83
  output_data = self.output_data
82
84
 
85
+ input_attachment_ids: Union[None, list[str]]
86
+ if isinstance(self.input_attachment_ids, list):
87
+ input_attachment_ids = self.input_attachment_ids
88
+
89
+ else:
90
+ input_attachment_ids = self.input_attachment_ids
91
+
83
92
  output_attachment_ids: Union[None, list[str]]
84
93
  if isinstance(self.output_attachment_ids, list):
85
94
  output_attachment_ids = self.output_attachment_ids
@@ -116,6 +125,7 @@ class RunResponse:
116
125
  "status": status,
117
126
  "error": error,
118
127
  "output_data": output_data,
128
+ "input_attachment_ids": input_attachment_ids,
119
129
  "output_attachment_ids": output_attachment_ids,
120
130
  "run_message_history": run_message_history,
121
131
  "input_values": input_values,
@@ -185,6 +195,21 @@ class RunResponse:
185
195
 
186
196
  output_data = _parse_output_data(d.pop("output_data"))
187
197
 
198
+ def _parse_input_attachment_ids(data: object) -> Union[None, list[str]]:
199
+ if data is None:
200
+ return data
201
+ try:
202
+ if not isinstance(data, list):
203
+ raise TypeError()
204
+ input_attachment_ids_type_0 = cast(list[str], data)
205
+
206
+ return input_attachment_ids_type_0
207
+ except: # noqa: E722
208
+ pass
209
+ return cast(Union[None, list[str]], data)
210
+
211
+ input_attachment_ids = _parse_input_attachment_ids(d.pop("input_attachment_ids"))
212
+
188
213
  def _parse_output_attachment_ids(data: object) -> Union[None, list[str]]:
189
214
  if data is None:
190
215
  return data
@@ -247,6 +272,7 @@ class RunResponse:
247
272
  status=status,
248
273
  error=error,
249
274
  output_data=output_data,
275
+ input_attachment_ids=input_attachment_ids,
250
276
  output_attachment_ids=output_attachment_ids,
251
277
  run_message_history=run_message_history,
252
278
  input_values=input_values,
@@ -17,11 +17,13 @@ class WorkflowCreate:
17
17
  main_prompt (str):
18
18
  name (Union[None, Unset, str]):
19
19
  output_schema (Union[None, Unset, str]): JSON schema for output data transformation
20
+ includes_file_exports (Union[Unset, bool]): Enable AI-based file export detection Default: False.
20
21
  """
21
22
 
22
23
  main_prompt: str
23
24
  name: Union[None, Unset, str] = UNSET
24
25
  output_schema: Union[None, Unset, str] = UNSET
26
+ includes_file_exports: Union[Unset, bool] = False
25
27
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
26
28
 
27
29
  def to_dict(self) -> dict[str, Any]:
@@ -39,6 +41,8 @@ class WorkflowCreate:
39
41
  else:
40
42
  output_schema = self.output_schema
41
43
 
44
+ includes_file_exports = self.includes_file_exports
45
+
42
46
  field_dict: dict[str, Any] = {}
43
47
  field_dict.update(self.additional_properties)
44
48
  field_dict.update(
@@ -50,6 +54,8 @@ class WorkflowCreate:
50
54
  field_dict["name"] = name
51
55
  if output_schema is not UNSET:
52
56
  field_dict["output_schema"] = output_schema
57
+ if includes_file_exports is not UNSET:
58
+ field_dict["includes_file_exports"] = includes_file_exports
53
59
 
54
60
  return field_dict
55
61
 
@@ -76,10 +82,13 @@ class WorkflowCreate:
76
82
 
77
83
  output_schema = _parse_output_schema(d.pop("output_schema", UNSET))
78
84
 
85
+ includes_file_exports = d.pop("includes_file_exports", UNSET)
86
+
79
87
  workflow_create = cls(
80
88
  main_prompt=main_prompt,
81
89
  name=name,
82
90
  output_schema=output_schema,
91
+ includes_file_exports=includes_file_exports,
83
92
  )
84
93
 
85
94
  workflow_create.additional_properties = d
@@ -28,6 +28,7 @@ class WorkflowResponse:
28
28
  updated_at (datetime.datetime):
29
29
  name (Union[None, Unset, str]):
30
30
  output_schema (Union[None, Unset, str]): JSON schema for output data transformation
31
+ includes_file_exports (Union[Unset, bool]): Enable AI-based file export detection Default: False.
31
32
  includes_input_variables (Union[Unset, bool]): Default: False.
32
33
  old_versions (Union[None, Unset, list['WorkflowResponseOldVersionsType0Item']]):
33
34
  """
@@ -39,6 +40,7 @@ class WorkflowResponse:
39
40
  updated_at: datetime.datetime
40
41
  name: Union[None, Unset, str] = UNSET
41
42
  output_schema: Union[None, Unset, str] = UNSET
43
+ includes_file_exports: Union[Unset, bool] = False
42
44
  includes_input_variables: Union[Unset, bool] = False
43
45
  old_versions: Union[None, Unset, list["WorkflowResponseOldVersionsType0Item"]] = UNSET
44
46
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
@@ -66,6 +68,8 @@ class WorkflowResponse:
66
68
  else:
67
69
  output_schema = self.output_schema
68
70
 
71
+ includes_file_exports = self.includes_file_exports
72
+
69
73
  includes_input_variables = self.includes_input_variables
70
74
 
71
75
  old_versions: Union[None, Unset, list[dict[str, Any]]]
@@ -95,6 +99,8 @@ class WorkflowResponse:
95
99
  field_dict["name"] = name
96
100
  if output_schema is not UNSET:
97
101
  field_dict["output_schema"] = output_schema
102
+ if includes_file_exports is not UNSET:
103
+ field_dict["includes_file_exports"] = includes_file_exports
98
104
  if includes_input_variables is not UNSET:
99
105
  field_dict["includes_input_variables"] = includes_input_variables
100
106
  if old_versions is not UNSET:
@@ -135,6 +141,8 @@ class WorkflowResponse:
135
141
 
136
142
  output_schema = _parse_output_schema(d.pop("output_schema", UNSET))
137
143
 
144
+ includes_file_exports = d.pop("includes_file_exports", UNSET)
145
+
138
146
  includes_input_variables = d.pop("includes_input_variables", UNSET)
139
147
 
140
148
  def _parse_old_versions(data: object) -> Union[None, Unset, list["WorkflowResponseOldVersionsType0Item"]]:
@@ -169,6 +177,7 @@ class WorkflowResponse:
169
177
  updated_at=updated_at,
170
178
  name=name,
171
179
  output_schema=output_schema,
180
+ includes_file_exports=includes_file_exports,
172
181
  includes_input_variables=includes_input_variables,
173
182
  old_versions=old_versions,
174
183
  )
@@ -17,11 +17,13 @@ class WorkflowUpdate:
17
17
  name (Union[None, Unset, str]):
18
18
  main_prompt (Union[None, Unset, str]):
19
19
  output_schema (Union[None, Unset, str]): JSON schema for output data transformation
20
+ includes_file_exports (Union[None, Unset, bool]): Enable AI-based file export detection
20
21
  """
21
22
 
22
23
  name: Union[None, Unset, str] = UNSET
23
24
  main_prompt: Union[None, Unset, str] = UNSET
24
25
  output_schema: Union[None, Unset, str] = UNSET
26
+ includes_file_exports: Union[None, Unset, bool] = UNSET
25
27
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
26
28
 
27
29
  def to_dict(self) -> dict[str, Any]:
@@ -43,6 +45,12 @@ class WorkflowUpdate:
43
45
  else:
44
46
  output_schema = self.output_schema
45
47
 
48
+ includes_file_exports: Union[None, Unset, bool]
49
+ if isinstance(self.includes_file_exports, Unset):
50
+ includes_file_exports = UNSET
51
+ else:
52
+ includes_file_exports = self.includes_file_exports
53
+
46
54
  field_dict: dict[str, Any] = {}
47
55
  field_dict.update(self.additional_properties)
48
56
  field_dict.update({})
@@ -52,6 +60,8 @@ class WorkflowUpdate:
52
60
  field_dict["main_prompt"] = main_prompt
53
61
  if output_schema is not UNSET:
54
62
  field_dict["output_schema"] = output_schema
63
+ if includes_file_exports is not UNSET:
64
+ field_dict["includes_file_exports"] = includes_file_exports
55
65
 
56
66
  return field_dict
57
67
 
@@ -86,10 +96,20 @@ class WorkflowUpdate:
86
96
 
87
97
  output_schema = _parse_output_schema(d.pop("output_schema", UNSET))
88
98
 
99
+ def _parse_includes_file_exports(data: object) -> Union[None, Unset, bool]:
100
+ if data is None:
101
+ return data
102
+ if isinstance(data, Unset):
103
+ return data
104
+ return cast(Union[None, Unset, bool], data)
105
+
106
+ includes_file_exports = _parse_includes_file_exports(d.pop("includes_file_exports", UNSET))
107
+
89
108
  workflow_update = cls(
90
109
  name=name,
91
110
  main_prompt=main_prompt,
92
111
  output_schema=output_schema,
112
+ includes_file_exports=includes_file_exports,
93
113
  )
94
114
 
95
115
  workflow_update.additional_properties = d