benchling-sdk 1.21.1__py3-none-any.whl → 1.22.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 (49) hide show
  1. benchling_sdk/apps/canvas/types.py +8 -0
  2. benchling_sdk/apps/config/framework.py +2 -2
  3. benchling_sdk/apps/config/helpers.py +6 -5
  4. benchling_sdk/apps/config/mock_config.py +4 -4
  5. benchling_sdk/apps/helpers/webhook_helpers.py +2 -2
  6. benchling_sdk/apps/status/framework.py +5 -5
  7. benchling_sdk/apps/status/helpers.py +2 -0
  8. benchling_sdk/auth/client_credentials_oauth2.py +5 -4
  9. benchling_sdk/benchling.py +90 -14
  10. benchling_sdk/errors.py +4 -3
  11. benchling_sdk/helpers/retry_helpers.py +1 -1
  12. benchling_sdk/helpers/serialization_helpers.py +6 -3
  13. benchling_sdk/helpers/task_helpers.py +12 -9
  14. benchling_sdk/models/__init__.py +1335 -329
  15. benchling_sdk/models/webhooks/v0/__init__.py +24 -4
  16. benchling_sdk/services/v2/base_service.py +5 -4
  17. benchling_sdk/services/v2/beta/v2_beta_data_frame_service.py +16 -8
  18. benchling_sdk/services/v2/stable/aa_sequence_service.py +4 -0
  19. benchling_sdk/services/v2/{beta/v2_beta_audit_service.py → stable/audit_service.py} +6 -6
  20. benchling_sdk/services/v2/stable/blob_service.py +6 -3
  21. benchling_sdk/services/v2/stable/box_service.py +4 -0
  22. benchling_sdk/services/v2/stable/connect_service.py +79 -0
  23. benchling_sdk/services/v2/stable/container_service.py +4 -0
  24. benchling_sdk/services/v2/stable/custom_entity_service.py +4 -0
  25. benchling_sdk/services/v2/stable/data_frame_service.py +323 -0
  26. benchling_sdk/services/v2/stable/dataset_service.py +192 -0
  27. benchling_sdk/services/v2/stable/dna_oligo_service.py +4 -0
  28. benchling_sdk/services/v2/stable/dna_sequence_service.py +4 -0
  29. benchling_sdk/services/v2/stable/file_service.py +191 -0
  30. benchling_sdk/services/v2/stable/{request_service.py → legacy_request_service.py} +25 -25
  31. benchling_sdk/services/v2/stable/location_service.py +4 -0
  32. benchling_sdk/services/v2/stable/mixture_service.py +4 -0
  33. benchling_sdk/services/v2/stable/molecule_service.py +4 -0
  34. benchling_sdk/services/v2/stable/nucleotide_alignments_service.py +4 -0
  35. benchling_sdk/services/v2/stable/organization_service.py +10 -5
  36. benchling_sdk/services/v2/stable/plate_service.py +4 -0
  37. benchling_sdk/services/v2/stable/rna_oligo_service.py +4 -0
  38. benchling_sdk/services/v2/stable/rna_sequence_service.py +4 -0
  39. benchling_sdk/services/v2/stable/task_service.py +1 -7
  40. benchling_sdk/services/v2/stable/team_service.py +14 -7
  41. benchling_sdk/services/v2/stable/test_order_service.py +145 -0
  42. benchling_sdk/services/v2/v2_alpha_service.py +2 -2
  43. benchling_sdk/services/v2/v2_beta_service.py +2 -16
  44. benchling_sdk/services/v2/v2_stable_service.py +104 -17
  45. benchling_sdk/services/v2_service.py +1 -1
  46. {benchling_sdk-1.21.1.dist-info → benchling_sdk-1.22.0.dist-info}/METADATA +2 -2
  47. {benchling_sdk-1.21.1.dist-info → benchling_sdk-1.22.0.dist-info}/RECORD +49 -44
  48. {benchling_sdk-1.21.1.dist-info → benchling_sdk-1.22.0.dist-info}/LICENSE +0 -0
  49. {benchling_sdk-1.21.1.dist-info → benchling_sdk-1.22.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,191 @@
1
+ from typing import Iterable, List, Optional
2
+
3
+ from benchling_api_client.v2.stable.api.files import (
4
+ archive_files as api_client_archive_files,
5
+ create_file,
6
+ get_file,
7
+ list_files,
8
+ patch_file,
9
+ unarchive_files,
10
+ )
11
+ from benchling_api_client.v2.stable.models.file import File
12
+ from benchling_api_client.v2.stable.models.file_create import FileCreate
13
+ from benchling_api_client.v2.stable.models.file_update import FileUpdate
14
+ from benchling_api_client.v2.stable.models.files_archival_change import FilesArchivalChange
15
+ from benchling_api_client.v2.stable.models.files_archive import FilesArchive
16
+ from benchling_api_client.v2.stable.models.files_archive_reason import FilesArchiveReason
17
+ from benchling_api_client.v2.stable.models.files_paginated_list import FilesPaginatedList
18
+ from benchling_api_client.v2.stable.models.files_unarchive import FilesUnarchive
19
+ from benchling_api_client.v2.types import Response
20
+
21
+ from benchling_sdk.errors import raise_for_status
22
+ from benchling_sdk.helpers.decorators import api_method
23
+ from benchling_sdk.helpers.pagination_helpers import NextToken, PageIterator
24
+ from benchling_sdk.helpers.response_helpers import model_from_detailed
25
+ from benchling_sdk.helpers.serialization_helpers import none_as_unset
26
+ from benchling_sdk.models import ListFilesSort
27
+ from benchling_sdk.services.v2.base_service import BaseService
28
+
29
+
30
+ class FileService(BaseService):
31
+ """
32
+ Files.
33
+
34
+ Files are Benchling objects that represent files and their metadata. Compared to Blobs, which are used by
35
+ most Benchling products for attachments, Files are primarily used in the Analysis and Connect product.
36
+
37
+ See https://benchling.com/api/v2/reference#/Files
38
+ """
39
+
40
+ @api_method
41
+ def archive_files(
42
+ self, file_ids: Iterable[str], reason: FilesArchiveReason
43
+ ) -> FilesArchivalChange:
44
+ """
45
+ Archive Files.
46
+
47
+ See https://benchling.com/api/reference#/Files/archiveFiles
48
+ """
49
+ archive_request = FilesArchive(reason=reason, file_ids=list(file_ids))
50
+ response = api_client_archive_files.sync_detailed(
51
+ client=self.client,
52
+ json_body=archive_request,
53
+ )
54
+ return model_from_detailed(response)
55
+
56
+ @api_method
57
+ def create(self, file: FileCreate) -> File:
58
+ """
59
+ Create a file.
60
+
61
+ See https://benchling.com/api/v2/reference#/Files/createFile
62
+ """
63
+ response = create_file.sync_detailed(client=self.client, json_body=file)
64
+ return model_from_detailed(response)
65
+
66
+ @api_method
67
+ def get_by_id(self, file_id: str) -> File:
68
+ """
69
+ Get a file.
70
+
71
+ See https://benchling.com/api/v2/reference#/Files/getFile
72
+ """
73
+ response = get_file.sync_detailed(client=self.client, file_id=file_id)
74
+ return model_from_detailed(response)
75
+
76
+ @api_method
77
+ def _files_page(
78
+ self,
79
+ page_size: Optional[int] = 50,
80
+ next_token: Optional[str] = None,
81
+ sort: Optional[ListFilesSort] = ListFilesSort.MODIFIEDAT,
82
+ archive_reason: Optional[str] = None,
83
+ created_at: Optional[str] = None,
84
+ creator_ids: Optional[str] = None,
85
+ folder_id: Optional[str] = None,
86
+ mentioned_in: Optional[str] = None,
87
+ modified_at: Optional[str] = None,
88
+ name: Optional[str] = None,
89
+ name_includes: Optional[str] = None,
90
+ namesany_ofcase_sensitive: Optional[str] = None,
91
+ namesany_of: Optional[str] = None,
92
+ origin_ids: Optional[str] = None,
93
+ ids: Optional[str] = None,
94
+ display_ids: Optional[str] = None,
95
+ returning: Optional[str] = None,
96
+ ) -> Response[FilesPaginatedList]:
97
+ response = list_files.sync_detailed(
98
+ client=self.client,
99
+ page_size=none_as_unset(page_size),
100
+ next_token=none_as_unset(next_token),
101
+ sort=none_as_unset(sort),
102
+ archive_reason=none_as_unset(archive_reason),
103
+ created_at=none_as_unset(created_at),
104
+ creator_ids=none_as_unset(creator_ids),
105
+ folder_id=none_as_unset(folder_id),
106
+ mentioned_in=none_as_unset(mentioned_in),
107
+ modified_at=none_as_unset(modified_at),
108
+ name=none_as_unset(name),
109
+ name_includes=none_as_unset(name_includes),
110
+ namesany_ofcase_sensitive=none_as_unset(namesany_ofcase_sensitive),
111
+ namesany_of=none_as_unset(namesany_of),
112
+ origin_ids=none_as_unset(origin_ids),
113
+ ids=none_as_unset(ids),
114
+ display_ids=none_as_unset(display_ids),
115
+ returning=none_as_unset(returning),
116
+ )
117
+ raise_for_status(response)
118
+ return response # type: ignore
119
+
120
+ def list(
121
+ self,
122
+ *,
123
+ page_size: Optional[int] = 50,
124
+ sort: Optional[ListFilesSort] = ListFilesSort.MODIFIEDAT,
125
+ archive_reason: Optional[str] = None,
126
+ created_at: Optional[str] = None,
127
+ creator_ids: Optional[str] = None,
128
+ folder_id: Optional[str] = None,
129
+ mentioned_in: Optional[str] = None,
130
+ modified_at: Optional[str] = None,
131
+ name: Optional[str] = None,
132
+ name_includes: Optional[str] = None,
133
+ namesany_ofcase_sensitive: Optional[str] = None,
134
+ namesany_of: Optional[str] = None,
135
+ origin_ids: Optional[str] = None,
136
+ ids: Optional[str] = None,
137
+ display_ids: Optional[str] = None,
138
+ returning: Optional[str] = None,
139
+ ) -> PageIterator[File]:
140
+ """
141
+ List Files.
142
+
143
+ See https://benchling.com/api/v2/reference#/Files/listFiles
144
+ """
145
+
146
+ def api_call(next_token: NextToken) -> Response[FilesPaginatedList]:
147
+ return self._files_page(
148
+ page_size=page_size,
149
+ next_token=next_token,
150
+ sort=sort,
151
+ archive_reason=archive_reason,
152
+ created_at=created_at,
153
+ creator_ids=creator_ids,
154
+ folder_id=folder_id,
155
+ mentioned_in=mentioned_in,
156
+ modified_at=modified_at,
157
+ name=name,
158
+ name_includes=name_includes,
159
+ namesany_ofcase_sensitive=namesany_ofcase_sensitive,
160
+ namesany_of=namesany_of,
161
+ origin_ids=origin_ids,
162
+ ids=ids,
163
+ display_ids=display_ids,
164
+ returning=returning,
165
+ )
166
+
167
+ def results_extractor(body: FilesPaginatedList) -> Optional[List[File]]:
168
+ return body.files
169
+
170
+ return PageIterator(api_call, results_extractor)
171
+
172
+ @api_method
173
+ def update(self, file_id: str, file: FileUpdate) -> File:
174
+ """
175
+ Update a File.
176
+
177
+ See https://benchling.com/api/reference#/Files/updateFile
178
+ """
179
+ response = patch_file.sync_detailed(client=self.client, file_id=file_id, json_body=file)
180
+ return model_from_detailed(response)
181
+
182
+ @api_method
183
+ def unarchive(self, file_ids: Iterable[str]) -> FilesArchivalChange:
184
+ """
185
+ Unarchive one or more Files.
186
+
187
+ See https://benchling.com/api/reference#/Files/unarchiveFiles
188
+ """
189
+ unarchive_request = FilesUnarchive(file_ids=list(file_ids))
190
+ response = unarchive_files.sync_detailed(client=self.client, json_body=unarchive_request)
191
+ return model_from_detailed(response)
@@ -1,6 +1,6 @@
1
1
  from typing import Iterable, List, Optional
2
2
 
3
- from benchling_api_client.v2.stable.api.requests import (
3
+ from benchling_api_client.v2.stable.api.legacy_requests import (
4
4
  bulk_create_request_tasks,
5
5
  bulk_get_requests,
6
6
  bulk_update_request_tasks,
@@ -40,21 +40,21 @@ from benchling_sdk.models import (
40
40
  from benchling_sdk.services.v2.base_service import BaseService
41
41
 
42
42
 
43
- class RequestService(BaseService):
43
+ class LegacyRequestService(BaseService):
44
44
  """
45
- Requests.
45
+ Legacy Requests.
46
46
 
47
- Requests allow scientists and teams to collaborate around experimental assays and workflows.
47
+ Legacy Requests allow scientists and teams to collaborate around experimental assays and workflows.
48
48
 
49
- See https://benchling.com/api/reference#/Requests
49
+ See https://benchling.com/api/reference#/Legacy%20Requests
50
50
  """
51
51
 
52
52
  @api_method
53
53
  def get_by_id(self, request_id: str, returning: Optional[Iterable[str]] = None) -> Request:
54
54
  """
55
- Get a Request by ID.
55
+ Get a Legacy Request by ID.
56
56
 
57
- See https://benchling.com/api/reference#/Requests/getRequest
57
+ See https://benchling.com/api/reference#/Legacy%20Requests/getRequest
58
58
  """
59
59
  returning_string = optional_array_query_param(returning)
60
60
  response = get_request.sync_detailed(
@@ -98,7 +98,7 @@ class RequestService(BaseService):
98
98
  """
99
99
  List Requests.
100
100
 
101
- See https://benchling.com/api/reference#/Requests/listRequests
101
+ See https://benchling.com/api/reference#/Legacy%20Requests/listRequests
102
102
  """
103
103
 
104
104
  def api_call(next_token: NextToken) -> Response[RequestsPaginatedList]:
@@ -128,7 +128,7 @@ class RequestService(BaseService):
128
128
  """
129
129
  Bulk get Requests.
130
130
 
131
- See https://benchling.com/api/reference#/Requests/bulkGetRequests
131
+ See https://benchling.com/api/reference#/Legacy%20Requests/bulkGetRequests
132
132
  """
133
133
  request_id_string = optional_array_query_param(request_ids)
134
134
  display_id_string = optional_array_query_param(display_ids)
@@ -145,9 +145,9 @@ class RequestService(BaseService):
145
145
  @api_method
146
146
  def request_response(self, request_id: str) -> RequestResponse:
147
147
  """
148
- Get a Request's response.
148
+ Get a Legacy Request's response.
149
149
 
150
- See https://benchling.com/api/reference#/Requests/getRequestResponse
150
+ See https://benchling.com/api/reference#/Legacy%20Requests/getRequestResponse
151
151
  """
152
152
  response = get_request_response.sync_detailed(client=self.client, request_id=request_id)
153
153
  return model_from_detailed(response)
@@ -155,9 +155,9 @@ class RequestService(BaseService):
155
155
  @api_method
156
156
  def create(self, request: RequestCreate) -> Request:
157
157
  """
158
- Create a Request.
158
+ Create a Legacy Request.
159
159
 
160
- See https://benchling.com/api/reference#/Requests/createRequest
160
+ See https://benchling.com/api/reference#/Legacy%20Requests/createRequest
161
161
  """
162
162
  response = create_request.sync_detailed(client=self.client, json_body=request)
163
163
  return model_from_detailed(response)
@@ -165,9 +165,9 @@ class RequestService(BaseService):
165
165
  @api_method
166
166
  def update(self, request_id: str, request: RequestUpdate) -> Request:
167
167
  """
168
- Update a Request.
168
+ Update a Legacy Request.
169
169
 
170
- See https://benchling.com/api/reference#/Requests/patchRequest
170
+ See https://benchling.com/api/reference#/Legacy%20Requests/patchRequest
171
171
  """
172
172
  response = patch_request.sync_detailed(client=self.client, request_id=request_id, json_body=request)
173
173
  return model_from_detailed(response)
@@ -175,9 +175,9 @@ class RequestService(BaseService):
175
175
  @api_method
176
176
  def execute_sample_groups(self, request_id: str, sample_groups: SampleGroupsStatusUpdate) -> None:
177
177
  """
178
- Update the status of sample groups in a Request.
178
+ Update the status of sample groups in a Legacy Request.
179
179
 
180
- See https://benchling.com/api/reference#/Requests/executeRequestsSampleGroups
180
+ See https://benchling.com/api/reference#/Legacy%20Requests/executeRequestsSampleGroups
181
181
  """
182
182
  response = execute_requests_sample_groups.sync_detailed(
183
183
  client=self.client, request_id=request_id, json_body=sample_groups
@@ -187,9 +187,9 @@ class RequestService(BaseService):
187
187
  @api_method
188
188
  def request_fulfillment(self, request_fulfillment_id: str) -> RequestFulfillment:
189
189
  """
190
- Get a Request's fulfillment.
190
+ Get a Legacy Request's fulfillment.
191
191
 
192
- See https://benchling.com/api/reference#/Requests/getRequestFulfillment
192
+ See https://benchling.com/api/reference#/Legacy%20Requests/getRequestFulfillment
193
193
  """
194
194
  response = get_request_fulfillment.sync_detailed(
195
195
  client=self.client, request_fulfillment_id=request_fulfillment_id
@@ -218,9 +218,9 @@ class RequestService(BaseService):
218
218
  self, entry_id: str, modified_at: Optional[str] = None, page_size: Optional[int] = None
219
219
  ) -> PageIterator[RequestFulfillment]:
220
220
  """
221
- List Request Fulfillments.
221
+ List Legacy Request Fulfillments.
222
222
 
223
- See https://benchling.com/api/reference#/Requests/listRequestFulfillments
223
+ See https://benchling.com/api/reference#/Legacy%20Requests/listRequestFulfillments
224
224
  """
225
225
 
226
226
  def api_call(next_token: NextToken) -> Response[RequestFulfillmentsPaginatedList]:
@@ -241,9 +241,9 @@ class RequestService(BaseService):
241
241
  self, request_id: str, tasks: Iterable[RequestTasksBulkCreate]
242
242
  ) -> RequestTasksBulkCreateResponse:
243
243
  """
244
- Create tasks for a Request.
244
+ Create tasks for a Legacy Request.
245
245
 
246
- See https://benchling.com/api/reference#/Requests/bulkCreateRequestTasks
246
+ See https://benchling.com/api/reference#/Legacy%20Requests/bulkCreateRequestTasks
247
247
  """
248
248
  create = RequestTasksBulkCreateRequest(tasks=list(tasks))
249
249
  response = bulk_create_request_tasks.sync_detailed(
@@ -256,9 +256,9 @@ class RequestService(BaseService):
256
256
  self, request_id: str, tasks: Iterable[RequestTaskBase]
257
257
  ) -> RequestTasksBulkUpdateResponse:
258
258
  """
259
- Update tasks for a Request.
259
+ Update tasks for a Legacy Request.
260
260
 
261
- See https://benchling.com/api/reference#/Requests/bulkUpdateRequestTasks
261
+ See https://benchling.com/api/reference#/Legacy%20Requests/bulkUpdateRequestTasks
262
262
  """
263
263
  update = RequestTasksBulkUpdateRequest(tasks=list(tasks))
264
264
  response = bulk_update_request_tasks.sync_detailed(
@@ -63,6 +63,7 @@ class LocationService(BaseService):
63
63
  sort: Optional[ListLocationsSort] = None,
64
64
  schema_id: Optional[str] = None,
65
65
  modified_at: Optional[str] = None,
66
+ created_at: Optional[str] = None,
66
67
  name: Optional[str] = None,
67
68
  name_includes: Optional[str] = None,
68
69
  ancestor_storage_id: Optional[str] = None,
@@ -79,6 +80,7 @@ class LocationService(BaseService):
79
80
  sort=none_as_unset(sort),
80
81
  schema_id=none_as_unset(schema_id),
81
82
  modified_at=none_as_unset(modified_at),
83
+ created_at=none_as_unset(created_at),
82
84
  name=none_as_unset(name),
83
85
  name_includes=none_as_unset(name_includes),
84
86
  ancestor_storage_id=none_as_unset(ancestor_storage_id),
@@ -101,6 +103,7 @@ class LocationService(BaseService):
101
103
  sort: Optional[Union[str, ListLocationsSort]] = None,
102
104
  schema_id: Optional[str] = None,
103
105
  modified_at: Optional[str] = None,
106
+ created_at: Optional[str] = None,
104
107
  name: Optional[str] = None,
105
108
  name_includes: Optional[str] = None,
106
109
  ancestor_storage_id: Optional[str] = None,
@@ -124,6 +127,7 @@ class LocationService(BaseService):
124
127
  sort=_translate_to_string_enum(ListLocationsSort, sort),
125
128
  schema_id=schema_id,
126
129
  modified_at=modified_at,
130
+ created_at=created_at,
127
131
  name=name,
128
132
  name_includes=name_includes,
129
133
  ancestor_storage_id=ancestor_storage_id,
@@ -65,6 +65,7 @@ class MixtureService(BaseService):
65
65
  def _mixtures_page(
66
66
  self,
67
67
  modified_at: Optional[str] = None,
68
+ created_at: Optional[str] = None,
68
69
  name: Optional[str] = None,
69
70
  name_includes: Optional[str] = None,
70
71
  folder_id: Optional[str] = None,
@@ -89,6 +90,7 @@ class MixtureService(BaseService):
89
90
  response = list_mixtures.sync_detailed(
90
91
  client=self.client,
91
92
  modified_at=none_as_unset(modified_at),
93
+ created_at=none_as_unset(created_at),
92
94
  name=none_as_unset(name),
93
95
  name_includes=none_as_unset(name_includes),
94
96
  folder_id=none_as_unset(folder_id),
@@ -120,6 +122,7 @@ class MixtureService(BaseService):
120
122
  def list(
121
123
  self,
122
124
  modified_at: Optional[str] = None,
125
+ created_at: Optional[str] = None,
123
126
  name: Optional[str] = None,
124
127
  name_includes: Optional[str] = None,
125
128
  folder_id: Optional[str] = None,
@@ -151,6 +154,7 @@ class MixtureService(BaseService):
151
154
  def api_call(next_token: NextToken) -> Response[MixturesPaginatedList]:
152
155
  return self._mixtures_page(
153
156
  modified_at=modified_at,
157
+ created_at=created_at,
154
158
  name=name,
155
159
  name_includes=name_includes,
156
160
  folder_id=folder_id,
@@ -69,6 +69,7 @@ class MoleculeService(BaseService):
69
69
  def _molecules_page(
70
70
  self,
71
71
  modified_at: Optional[str] = None,
72
+ created_at: Optional[str] = None,
72
73
  name: Optional[str] = None,
73
74
  name_includes: Optional[str] = None,
74
75
  folder_id: Optional[str] = None,
@@ -92,6 +93,7 @@ class MoleculeService(BaseService):
92
93
  response = list_molecules.sync_detailed(
93
94
  client=self.client,
94
95
  modified_at=none_as_unset(modified_at),
96
+ created_at=none_as_unset(created_at),
95
97
  name=none_as_unset(name),
96
98
  name_includes=none_as_unset(name_includes),
97
99
  folder_id=none_as_unset(folder_id),
@@ -118,6 +120,7 @@ class MoleculeService(BaseService):
118
120
  def list(
119
121
  self,
120
122
  modified_at: Optional[str] = None,
123
+ created_at: Optional[str] = None,
121
124
  name: Optional[str] = None,
122
125
  name_includes: Optional[str] = None,
123
126
  folder_id: Optional[str] = None,
@@ -148,6 +151,7 @@ class MoleculeService(BaseService):
148
151
  def api_call(next_token: NextToken) -> Response[MoleculesPaginatedList]:
149
152
  return self._molecules_page(
150
153
  modified_at=modified_at,
154
+ created_at=created_at,
151
155
  name=name,
152
156
  name_includes=name_includes,
153
157
  folder_id=folder_id,
@@ -50,6 +50,7 @@ class NucleotideAlignmentsService(BaseService):
50
50
  def _nucleotide_alignments_page(
51
51
  self,
52
52
  modified_at: Optional[str] = None,
53
+ created_at: Optional[str] = None,
53
54
  name: Optional[str] = None,
54
55
  name_includes: Optional[str] = None,
55
56
  ids: Optional[List[str]] = None,
@@ -63,6 +64,7 @@ class NucleotideAlignmentsService(BaseService):
63
64
  response = list_nucleotide_alignments.sync_detailed(
64
65
  client=self.client,
65
66
  modified_at=none_as_unset(modified_at),
67
+ created_at=none_as_unset(created_at),
66
68
  name=none_as_unset(name),
67
69
  name_includes=none_as_unset(name_includes),
68
70
  ids=none_as_unset(optional_array_query_param(ids)),
@@ -79,6 +81,7 @@ class NucleotideAlignmentsService(BaseService):
79
81
  def list(
80
82
  self,
81
83
  modified_at: Optional[str] = None,
84
+ created_at: Optional[str] = None,
82
85
  name: Optional[str] = None,
83
86
  name_includes: Optional[str] = None,
84
87
  ids: Optional[List[str]] = None,
@@ -97,6 +100,7 @@ class NucleotideAlignmentsService(BaseService):
97
100
  def api_call(next_token: NextToken) -> Response[NucleotideAlignmentsPaginatedList]:
98
101
  return self._nucleotide_alignments_page(
99
102
  modified_at=modified_at,
103
+ created_at=created_at,
100
104
  name=name,
101
105
  name_includes=name_includes,
102
106
  ids=ids,
@@ -157,7 +157,8 @@ class OrganizationService(BaseService):
157
157
  role: Optional[str] = None,
158
158
  page_size: Optional[int] = None,
159
159
  ) -> PageIterator[MembershipsPaginatedList]:
160
- """Return all organization memberships in the given organization.
160
+ """
161
+ Return all organization memberships in the given organization.
161
162
 
162
163
  See https://benchling.com/api/reference#/Organizations/listOrganizationMemberships
163
164
  """
@@ -169,7 +170,8 @@ class OrganizationService(BaseService):
169
170
 
170
171
  @api_method
171
172
  def get_membership(self, organization_id: str, user_id: str) -> Membership:
172
- """Get organization membership.
173
+ """
174
+ Get organization membership.
173
175
 
174
176
  See https://benchling.com/api/reference#/Organizations/getOrganizationMembership
175
177
  """
@@ -180,7 +182,8 @@ class OrganizationService(BaseService):
180
182
 
181
183
  @api_method
182
184
  def create_membership(self, organization_id: str, membership: MembershipCreate) -> Membership:
183
- """Create organization membership.
185
+ """
186
+ Create organization membership.
184
187
 
185
188
  See https://benchling.com/api/reference#/Organizations/createOrganizationMembership
186
189
  """
@@ -195,7 +198,8 @@ class OrganizationService(BaseService):
195
198
  def update_membership(
196
199
  self, organization_id: str, user_id: str, membership: MembershipUpdate
197
200
  ) -> Membership:
198
- """Update organization membership by user ID and organization ID.
201
+ """
202
+ Update organization membership by user ID and organization ID.
199
203
 
200
204
  See https://benchling.com/api/reference#/Organizations/updateOrganizationMembership
201
205
  """
@@ -209,7 +213,8 @@ class OrganizationService(BaseService):
209
213
 
210
214
  @api_method
211
215
  def delete_membership(self, organization_id: str, user_id: str) -> None:
212
- """Delete a single team membership.
216
+ """
217
+ Delete a single team membership.
213
218
 
214
219
  See https://benchling.com/api/reference#/Organizations/deleteOrganizationMembership
215
220
  """
@@ -78,6 +78,7 @@ class PlateService(BaseService):
78
78
  sort: Optional[ListPlatesSort] = None,
79
79
  schema_id: Optional[str] = None,
80
80
  modified_at: Optional[str] = None,
81
+ created_at: Optional[str] = None,
81
82
  name: Optional[str] = None,
82
83
  name_includes: Optional[str] = None,
83
84
  ancestor_storage_id: Optional[str] = None,
@@ -109,6 +110,7 @@ class PlateService(BaseService):
109
110
  sort=none_as_unset(sort),
110
111
  schema_id=none_as_unset(schema_id),
111
112
  modified_at=none_as_unset(modified_at),
113
+ created_at=none_as_unset(created_at),
112
114
  name=none_as_unset(name),
113
115
  name_includes=none_as_unset(name_includes),
114
116
  ancestor_storage_id=none_as_unset(ancestor_storage_id),
@@ -144,6 +146,7 @@ class PlateService(BaseService):
144
146
  sort: Optional[Union[str, ListPlatesSort]] = None,
145
147
  schema_id: Optional[str] = None,
146
148
  modified_at: Optional[str] = None,
149
+ created_at: Optional[str] = None,
147
150
  name: Optional[str] = None,
148
151
  name_includes: Optional[str] = None,
149
152
  ancestor_storage_id: Optional[str] = None,
@@ -188,6 +191,7 @@ class PlateService(BaseService):
188
191
  sort=_translate_to_string_enum(ListPlatesSort, sort),
189
192
  schema_id=schema_id,
190
193
  modified_at=modified_at,
194
+ created_at=created_at,
191
195
  name=name,
192
196
  name_includes=name_includes,
193
197
  ancestor_storage_id=ancestor_storage_id,
@@ -80,6 +80,7 @@ class RnaOligoService(BaseService):
80
80
  def _rna_oligos_page(
81
81
  self,
82
82
  modified_at: Optional[str] = None,
83
+ created_at: Optional[str] = None,
83
84
  name: Optional[str] = None,
84
85
  bases: Optional[str] = None,
85
86
  folder_id: Optional[str] = None,
@@ -106,6 +107,7 @@ class RnaOligoService(BaseService):
106
107
  response = list_rna_oligos.sync_detailed(
107
108
  client=self.client,
108
109
  modified_at=none_as_unset(modified_at),
110
+ created_at=none_as_unset(created_at),
109
111
  name=none_as_unset(name),
110
112
  bases=none_as_unset(bases),
111
113
  folder_id=none_as_unset(folder_id),
@@ -135,6 +137,7 @@ class RnaOligoService(BaseService):
135
137
  def list(
136
138
  self,
137
139
  modified_at: Optional[str] = None,
140
+ created_at: Optional[str] = None,
138
141
  name: Optional[str] = None,
139
142
  bases: Optional[str] = None,
140
143
  folder_id: Optional[str] = None,
@@ -166,6 +169,7 @@ class RnaOligoService(BaseService):
166
169
  def api_call(next_token: NextToken) -> Response[RnaOligosPaginatedList]:
167
170
  return self._rna_oligos_page(
168
171
  modified_at=modified_at,
172
+ created_at=created_at,
169
173
  name=name,
170
174
  bases=bases,
171
175
  folder_id=folder_id,
@@ -86,6 +86,7 @@ class RnaSequenceService(BaseService):
86
86
  def _rna_sequences_page(
87
87
  self,
88
88
  modified_at: Optional[str] = None,
89
+ created_at: Optional[str] = None,
89
90
  name: Optional[str] = None,
90
91
  bases: Optional[str] = None,
91
92
  folder_id: Optional[str] = None,
@@ -112,6 +113,7 @@ class RnaSequenceService(BaseService):
112
113
  response = list_rna_sequences.sync_detailed(
113
114
  client=self.client,
114
115
  modified_at=none_as_unset(modified_at),
116
+ created_at=none_as_unset(created_at),
115
117
  name=none_as_unset(name),
116
118
  bases=none_as_unset(bases),
117
119
  folder_id=none_as_unset(folder_id),
@@ -141,6 +143,7 @@ class RnaSequenceService(BaseService):
141
143
  def list(
142
144
  self,
143
145
  modified_at: Optional[str] = None,
146
+ created_at: Optional[str] = None,
144
147
  name: Optional[str] = None,
145
148
  bases: Optional[str] = None,
146
149
  folder_id: Optional[str] = None,
@@ -174,6 +177,7 @@ class RnaSequenceService(BaseService):
174
177
  def api_call(next_token: NextToken) -> Response[RnaSequencesPaginatedList]:
175
178
  return self._rna_sequences_page(
176
179
  modified_at=modified_at,
180
+ created_at=created_at,
177
181
  name=name,
178
182
  bases=bases,
179
183
  folder_id=folder_id,
@@ -103,13 +103,7 @@ def _deserialize_task_from_instance(task_instance) -> AsyncTask:
103
103
  return AsyncTask.from_dict(serialized)
104
104
  except (NotPresentErrorAlpha, NotPresentErrorBeta, NotPresentError):
105
105
  pass
106
+
106
107
  serialized = task_instance.to_dict()
107
- # AsyncErrors data is always in additional_properties,
108
- # It has no modeled properties of its own. They don't copy over properly so manually move them
109
- try:
110
- if hasattr(task_instance, "errors") and task_instance.errors is not None:
111
- serialized["errors"] = task_instance.errors.additional_properties
112
- except (NotPresentErrorAlpha, NotPresentErrorBeta, NotPresentError):
113
- pass
114
108
  serialized["response"] = UNSET
115
109
  return AsyncTask.from_dict(serialized)