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
@@ -139,7 +139,8 @@ class TeamService(BaseService):
139
139
 
140
140
  @api_method
141
141
  def create(self, team: TeamCreate) -> Team:
142
- """Create team.
142
+ """
143
+ Create team.
143
144
 
144
145
  See https://benchling.com/api/reference#/Teams/createTeam
145
146
  """
@@ -148,7 +149,8 @@ class TeamService(BaseService):
148
149
 
149
150
  @api_method
150
151
  def update(self, team_id: str, team: TeamUpdate) -> Team:
151
- """Update team.
152
+ """
153
+ Update team.
152
154
 
153
155
  See https://benchling.com/api/reference#/Teams/updateTeam
154
156
  """
@@ -179,7 +181,8 @@ class TeamService(BaseService):
179
181
  role: Optional[str] = None,
180
182
  page_size: Optional[int] = None,
181
183
  ) -> PageIterator[MembershipsPaginatedList]:
182
- """Return all team memberships in the given team.
184
+ """
185
+ Return all team memberships in the given team.
183
186
 
184
187
  See https://benchling.com/api/reference#/Teams/listTeamMemberships
185
188
  """
@@ -191,7 +194,8 @@ class TeamService(BaseService):
191
194
 
192
195
  @api_method
193
196
  def get_membership(self, team_id: str, user_id: str) -> Membership:
194
- """Get team membership.
197
+ """
198
+ Get team membership.
195
199
 
196
200
  See https://benchling.com/api/reference#/Teams/getTeamMembership
197
201
  """
@@ -200,7 +204,8 @@ class TeamService(BaseService):
200
204
 
201
205
  @api_method
202
206
  def create_membership(self, team_id: str, membership: MembershipCreate) -> Membership:
203
- """Create team membership for the given user, role, and team.
207
+ """
208
+ Create team membership for the given user, role, and team.
204
209
 
205
210
  See https://benchling.com/api/reference#/Teams/createTeamMembership
206
211
  """
@@ -213,7 +218,8 @@ class TeamService(BaseService):
213
218
 
214
219
  @api_method
215
220
  def update_membership(self, team_id: str, user_id: str, membership: MembershipUpdate) -> Membership:
216
- """Update a single team membership.
221
+ """
222
+ Update a single team membership.
217
223
 
218
224
  See https://benchling.com/api/reference#/Teams/updateTeamMembership
219
225
  """
@@ -227,7 +233,8 @@ class TeamService(BaseService):
227
233
 
228
234
  @api_method
229
235
  def delete_membership(self, team_id: str, user_id: str) -> None:
230
- """Delete a single team membership.
236
+ """
237
+ Delete a single team membership.
231
238
 
232
239
  See https://benchling.com/api/reference#/Teams/deleteTeamMembership
233
240
  """
@@ -0,0 +1,145 @@
1
+ from typing import Iterable, List, Optional
2
+
3
+ from benchling_api_client.v2.stable.api.test_orders import (
4
+ bulk_update_test_orders,
5
+ list_test_orders,
6
+ update_test_order,
7
+ )
8
+ from benchling_api_client.v2.stable.models.async_task_link import AsyncTaskLink
9
+ from benchling_api_client.v2.stable.models.list_test_orders_sort import ListTestOrdersSort
10
+ from benchling_api_client.v2.stable.models.test_order import TestOrder
11
+ from benchling_api_client.v2.stable.models.test_order_bulk_update import TestOrderBulkUpdate
12
+ from benchling_api_client.v2.stable.models.test_order_status import TestOrderStatus
13
+ from benchling_api_client.v2.stable.models.test_order_update import TestOrderUpdate
14
+ from benchling_api_client.v2.stable.models.test_orders_bulk_update_request import TestOrdersBulkUpdateRequest
15
+ from benchling_api_client.v2.stable.models.test_orders_paginated_list import TestOrdersPaginatedList
16
+ from benchling_api_client.v2.types import Response
17
+
18
+ from benchling_sdk.errors import raise_for_status
19
+ from benchling_sdk.helpers.decorators import api_method
20
+ from benchling_sdk.helpers.pagination_helpers import NextToken, PageIterator
21
+ from benchling_sdk.helpers.response_helpers import model_from_detailed
22
+ from benchling_sdk.helpers.serialization_helpers import none_as_unset
23
+ from benchling_sdk.services.v2.base_service import BaseService
24
+
25
+
26
+ class TestOrderService(BaseService):
27
+ """
28
+ Test Orders.
29
+
30
+ Test orders enable users to order tests for specific sample/container combinations that will be fulfilled in assays.
31
+
32
+ See https://benchling.com/api/reference?availability=la#/Test%20Orders/
33
+ """
34
+
35
+ @api_method
36
+ def bulk_update(self, test_orders: Iterable[TestOrderBulkUpdate]) -> AsyncTaskLink:
37
+ """
38
+ Bulk update Test Orders.
39
+
40
+ See https://benchling.com/api/reference?availability=la#/Test%20Orders/bulkUpdateTestOrders
41
+ """
42
+ body = TestOrdersBulkUpdateRequest(list(test_orders))
43
+ response = bulk_update_test_orders.sync_detailed(client=self.client, json_body=body)
44
+ return model_from_detailed(response)
45
+
46
+ @api_method
47
+ def _test_orders_page(
48
+ self,
49
+ page_size: Optional[int] = 50,
50
+ next_token: Optional[str] = None,
51
+ sort: Optional[ListTestOrdersSort] = ListTestOrdersSort.MODIFIEDATDESC,
52
+ created_atlt: Optional[str] = None,
53
+ created_atgt: Optional[str] = None,
54
+ created_atlte: Optional[str] = None,
55
+ created_atgte: Optional[str] = None,
56
+ modified_atlt: Optional[str] = None,
57
+ modified_atgt: Optional[str] = None,
58
+ modified_atlte: Optional[str] = None,
59
+ modified_atgte: Optional[str] = None,
60
+ ids: Optional[str] = None,
61
+ container_idsany_of: Optional[str] = None,
62
+ sample_idsany_of: Optional[str] = None,
63
+ status: Optional[TestOrderStatus] = None,
64
+ ) -> Response[TestOrdersPaginatedList]:
65
+ response = list_test_orders.sync_detailed(
66
+ client=self.client,
67
+ page_size=none_as_unset(page_size),
68
+ next_token=none_as_unset(next_token),
69
+ sort=none_as_unset(sort),
70
+ created_atlt=none_as_unset(created_atlt),
71
+ created_atgt=none_as_unset(created_atgt),
72
+ created_atlte=none_as_unset(created_atlte),
73
+ created_atgte=none_as_unset(created_atgte),
74
+ modified_atlt=none_as_unset(modified_atlt),
75
+ modified_atgt=none_as_unset(modified_atgt),
76
+ modified_atlte=none_as_unset(modified_atlte),
77
+ modified_atgte=none_as_unset(modified_atgte),
78
+ ids=none_as_unset(ids),
79
+ container_idsany_of=none_as_unset(container_idsany_of),
80
+ sample_idsany_of=none_as_unset(sample_idsany_of),
81
+ status=none_as_unset(status),
82
+ )
83
+ raise_for_status(response)
84
+ return response # type: ignore
85
+
86
+ def list(
87
+ self,
88
+ *,
89
+ page_size: Optional[int] = 50,
90
+ next_token: Optional[str] = None,
91
+ sort: Optional[ListTestOrdersSort] = ListTestOrdersSort.MODIFIEDATDESC,
92
+ created_atlt: Optional[str] = None,
93
+ created_atgt: Optional[str] = None,
94
+ created_atlte: Optional[str] = None,
95
+ created_atgte: Optional[str] = None,
96
+ modified_atlt: Optional[str] = None,
97
+ modified_atgt: Optional[str] = None,
98
+ modified_atlte: Optional[str] = None,
99
+ modified_atgte: Optional[str] = None,
100
+ ids: Optional[str] = None,
101
+ container_idsany_of: Optional[str] = None,
102
+ sample_idsany_of: Optional[str] = None,
103
+ status: Optional[TestOrderStatus] = None,
104
+ ) -> PageIterator[TestOrder]:
105
+ """
106
+ List Test Orders.
107
+
108
+ See https://benchling.com/api/reference?availability=la#/Test%20Orders/listTestOrders
109
+ """
110
+
111
+ def api_call(next_token: NextToken) -> Response[TestOrdersPaginatedList]:
112
+ return self._test_orders_page(
113
+ page_size=page_size,
114
+ next_token=next_token,
115
+ sort=sort,
116
+ created_atlt=created_atlt,
117
+ created_atgt=created_atgt,
118
+ created_atlte=created_atlte,
119
+ created_atgte=created_atgte,
120
+ modified_atlt=modified_atlt,
121
+ modified_atgt=modified_atgt,
122
+ modified_atlte=modified_atlte,
123
+ modified_atgte=modified_atgte,
124
+ ids=ids,
125
+ container_idsany_of=container_idsany_of,
126
+ sample_idsany_of=sample_idsany_of,
127
+ status=status,
128
+ )
129
+
130
+ def results_extractor(body: TestOrdersPaginatedList) -> Optional[List[TestOrder]]:
131
+ return body.test_orders
132
+
133
+ return PageIterator(api_call, results_extractor)
134
+
135
+ @api_method
136
+ def update(self, test_order_id: str, test_order: TestOrderUpdate) -> TestOrder:
137
+ """
138
+ Update a TestOrder.
139
+
140
+ See https://benchling.com/api/reference?availability=la#/Test%20Orders/updateTestOrder
141
+ """
142
+ response = update_test_order.sync_detailed(
143
+ client=self.client, test_order_id=test_order_id, json_body=test_order
144
+ )
145
+ return model_from_detailed(response)
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from functools import cached_property
4
- from typing import TYPE_CHECKING
4
+ from typing import Optional, TYPE_CHECKING
5
5
 
6
6
  from benchling_api_client.v2.stable.client import Client
7
7
 
@@ -26,7 +26,7 @@ class V2AlphaService(BaseService):
26
26
 
27
27
  _alpha_client: Client
28
28
 
29
- def __init__(self, client: Client, retry_strategy: RetryStrategy = RetryStrategy()):
29
+ def __init__(self, client: Client, retry_strategy: Optional[RetryStrategy] = None):
30
30
  """
31
31
  Initialize a v2-alpha service.
32
32
 
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from functools import cached_property
4
- from typing import TYPE_CHECKING
4
+ from typing import Optional, TYPE_CHECKING
5
5
 
6
6
  from benchling_api_client.v2.stable.client import Client
7
7
 
@@ -14,7 +14,6 @@ if TYPE_CHECKING:
14
14
  from benchling_sdk.services.v2.beta.v2_beta_analysis_service import V2BetaAnalysisService
15
15
  from benchling_sdk.services.v2.beta.v2_beta_app_definition_service import V2BetaAppDefinitionService
16
16
  from benchling_sdk.services.v2.beta.v2_beta_app_service import V2BetaAppService
17
- from benchling_sdk.services.v2.beta.v2_beta_audit_service import V2BetaAuditService
18
17
  from benchling_sdk.services.v2.beta.v2_beta_collaboration_service import V2BetaCollaborationService
19
18
  from benchling_sdk.services.v2.beta.v2_beta_entry_service import V2BetaEntryService
20
19
  from benchling_sdk.services.v2.beta.v2_beta_folder_service import V2BetaFolderService
@@ -33,7 +32,7 @@ class V2BetaService(BaseService):
33
32
 
34
33
  _beta_client: Client
35
34
 
36
- def __init__(self, client: Client, retry_strategy: RetryStrategy = RetryStrategy()):
35
+ def __init__(self, client: Client, retry_strategy: Optional[RetryStrategy] = None):
37
36
  """
38
37
  Initialize a v2-beta service.
39
38
 
@@ -82,19 +81,6 @@ class V2BetaService(BaseService):
82
81
 
83
82
  return self._create_service(V2BetaAppDefinitionService)
84
83
 
85
- @cached_property
86
- def audit(self) -> V2BetaAuditService:
87
- """
88
- V2-Beta Audit.
89
-
90
- Export audit log data for Benchling objects.
91
-
92
- https://benchling.com/api/v2-beta/reference#/Audit
93
- """
94
- from .beta.v2_beta_audit_service import V2BetaAuditService
95
-
96
- return self._create_service(V2BetaAuditService)
97
-
98
84
  @cached_property
99
85
  def collaborations(self) -> V2BetaCollaborationService:
100
86
  """
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from functools import cached_property
4
- from typing import TYPE_CHECKING
4
+ from typing import Optional, TYPE_CHECKING
5
5
 
6
6
  from benchling_api_client.v2.stable.client import Client
7
7
 
@@ -14,12 +14,16 @@ if TYPE_CHECKING:
14
14
  from benchling_sdk.services.v2.stable.app_service import AppService
15
15
  from benchling_sdk.services.v2.stable.assay_result_service import AssayResultService
16
16
  from benchling_sdk.services.v2.stable.assay_run_service import AssayRunService
17
+ from benchling_sdk.services.v2.stable.audit_service import AuditService
17
18
  from benchling_sdk.services.v2.stable.blob_service import BlobService
18
19
  from benchling_sdk.services.v2.stable.box_service import BoxService
19
20
  from benchling_sdk.services.v2.stable.codon_usage_table_service import CodonUsageTableService
21
+ from benchling_sdk.services.v2.stable.connect_service import ConnectService
20
22
  from benchling_sdk.services.v2.stable.container_service import ContainerService
21
23
  from benchling_sdk.services.v2.stable.custom_entity_service import CustomEntityService
22
24
  from benchling_sdk.services.v2.stable.custom_notation_service import CustomNotationService
25
+ from benchling_sdk.services.v2.stable.data_frame_service import DataFrameService
26
+ from benchling_sdk.services.v2.stable.dataset_service import DatasetService
23
27
  from benchling_sdk.services.v2.stable.dna_alignments_service import DnaAlignmentsService
24
28
  from benchling_sdk.services.v2.stable.dna_oligo_service import DnaOligoService
25
29
  from benchling_sdk.services.v2.stable.dna_sequence_service import DnaSequenceService
@@ -30,11 +34,13 @@ if TYPE_CHECKING:
30
34
  from benchling_sdk.services.v2.stable.event_service import EventService
31
35
  from benchling_sdk.services.v2.stable.export_service import ExportService
32
36
  from benchling_sdk.services.v2.stable.feature_library_service import FeatureLibraryService
37
+ from benchling_sdk.services.v2.stable.file_service import FileService
33
38
  from benchling_sdk.services.v2.stable.folder_service import FolderService
34
39
  from benchling_sdk.services.v2.stable.instrument_query_service import InstrumentQueryService
35
40
  from benchling_sdk.services.v2.stable.inventory_service import InventoryService
36
41
  from benchling_sdk.services.v2.stable.lab_automation_service import LabAutomationService
37
42
  from benchling_sdk.services.v2.stable.label_template_service import LabelTemplateService
43
+ from benchling_sdk.services.v2.stable.legacy_request_service import LegacyRequestService
38
44
  from benchling_sdk.services.v2.stable.location_service import LocationService
39
45
  from benchling_sdk.services.v2.stable.mixture_service import MixtureService
40
46
  from benchling_sdk.services.v2.stable.molecule_service import MoleculeService
@@ -46,12 +52,12 @@ if TYPE_CHECKING:
46
52
  from benchling_sdk.services.v2.stable.printer_service import PrinterService
47
53
  from benchling_sdk.services.v2.stable.project_service import ProjectService
48
54
  from benchling_sdk.services.v2.stable.registry_service import RegistryService
49
- from benchling_sdk.services.v2.stable.request_service import RequestService
50
55
  from benchling_sdk.services.v2.stable.rna_oligo_service import RnaOligoService
51
56
  from benchling_sdk.services.v2.stable.rna_sequence_service import RnaSequenceService
52
57
  from benchling_sdk.services.v2.stable.schema_service import SchemaService
53
58
  from benchling_sdk.services.v2.stable.task_service import TaskService
54
59
  from benchling_sdk.services.v2.stable.team_service import TeamService
60
+ from benchling_sdk.services.v2.stable.test_order_service import TestOrderService
55
61
  from benchling_sdk.services.v2.stable.user_service import UserService
56
62
  from benchling_sdk.services.v2.stable.warehouse_service import WarehouseService
57
63
  from benchling_sdk.services.v2.stable.workflow_flowchart_config_version_service import (
@@ -70,7 +76,7 @@ class V2StableService(BaseService):
70
76
  Namespace containing support for the V2 stable endpoints of the Benchling API.
71
77
  """
72
78
 
73
- def __init__(self, client: Client, retry_strategy: RetryStrategy = RetryStrategy()):
79
+ def __init__(self, client: Client, retry_strategy: Optional[RetryStrategy] = None):
74
80
  """
75
81
  Initialize a service.
76
82
 
@@ -117,7 +123,7 @@ class V2StableService(BaseService):
117
123
 
118
124
  See https://benchling.com/api/reference#/Apps
119
125
  and https://docs.benchling.com/docs/getting-started-benchling-apps
120
- """
126
+ """ # noqa:RUF002 # Ruff gets confused by a trailing apostrophe with a plural noun
121
127
  from .stable.app_service import AppService
122
128
 
123
129
  return self._create_service(AppService)
@@ -149,6 +155,19 @@ class V2StableService(BaseService):
149
155
 
150
156
  return self._create_service(AssayRunService)
151
157
 
158
+ @cached_property
159
+ def audit(self) -> AuditService:
160
+ """
161
+ Audits.
162
+
163
+ Export audit log data for Benchling objects.
164
+
165
+ https://benchling.com/api/reference#/Audit
166
+ """
167
+ from .stable.audit_service import AuditService
168
+
169
+ return self._create_service(AuditService)
170
+
152
171
  @cached_property
153
172
  def blobs(self) -> BlobService:
154
173
  """
@@ -197,6 +216,19 @@ class V2StableService(BaseService):
197
216
 
198
217
  return self._create_service(CodonUsageTableService)
199
218
 
219
+ @cached_property
220
+ def connect(self) -> ConnectService:
221
+ """
222
+ Connect.
223
+
224
+ Connect endpoints support Benchling Connect actions, like instrument data conversion.
225
+
226
+ See https://benchling.com/api/reference#/Connect
227
+ """
228
+ from .stable.connect_service import ConnectService
229
+
230
+ return self._create_service(ConnectService)
231
+
200
232
  @cached_property
201
233
  def containers(self) -> ContainerService:
202
234
  """
@@ -245,6 +277,33 @@ class V2StableService(BaseService):
245
277
 
246
278
  return self._create_service(CustomNotationService)
247
279
 
280
+ @cached_property
281
+ def data_frames(self) -> DataFrameService:
282
+ """
283
+ DataFrames.
284
+
285
+ DataFrames are Benchling objects that represent tabular data with typed columns and rows of data.
286
+
287
+ See https://benchling.com/api/v2/reference#/Data%20Frames
288
+ """
289
+ from .stable.data_frame_service import DataFrameService
290
+
291
+ return self._create_service(DataFrameService)
292
+
293
+ @cached_property
294
+ def datasets(self) -> DatasetService:
295
+ """
296
+ Datasets.
297
+
298
+ Datasets are Benchling objects that represent tabular data with typed columns and rows of data. Unlike
299
+ Data Frames, Datasets are located in folders and can be searched in the UI.
300
+
301
+ See https://benchling.com/api/v2/reference#/Datasets
302
+ """
303
+ from .stable.dataset_service import DatasetService
304
+
305
+ return self._create_service(DatasetService)
306
+
248
307
  @cached_property
249
308
  def dna_alignments(self) -> DnaAlignmentsService:
250
309
  """
@@ -395,6 +454,21 @@ class V2StableService(BaseService):
395
454
 
396
455
  return self._create_service(FeatureLibraryService)
397
456
 
457
+ @cached_property
458
+ def files(self) -> FileService:
459
+ """
460
+ Files.
461
+
462
+ Files are Benchling objects that represent files and their metadata. Compared to Blobs, which are used
463
+ by most Benchling products for attachments, Files are primarily used in the Analysis and Connect
464
+ product.
465
+
466
+ See https://benchling.com/api/v2/reference#/Files
467
+ """
468
+ from .stable.file_service import FileService
469
+
470
+ return self._create_service(FileService)
471
+
398
472
  @cached_property
399
473
  def folders(self) -> FolderService:
400
474
  """
@@ -461,6 +535,19 @@ class V2StableService(BaseService):
461
535
 
462
536
  return self._create_service(LabelTemplateService)
463
537
 
538
+ @cached_property
539
+ def legacy_requests(self) -> LegacyRequestService:
540
+ """
541
+ Legacy Requests.
542
+
543
+ Legacy Requests allow scientists and teams to collaborate around experimental assays and workflows.
544
+
545
+ See https://benchling.com/api/reference#/Legacy%20Requests
546
+ """
547
+ from .stable.legacy_request_service import LegacyRequestService
548
+
549
+ return self._create_service(LegacyRequestService)
550
+
464
551
  @cached_property
465
552
  def locations(self) -> LocationService:
466
553
  """
@@ -618,19 +705,6 @@ class V2StableService(BaseService):
618
705
 
619
706
  return self._create_service(RegistryService)
620
707
 
621
- @cached_property
622
- def requests(self) -> RequestService:
623
- """
624
- Requests.
625
-
626
- Requests allow scientists and teams to collaborate around experimental assays and workflows.
627
-
628
- See https://benchling.com/api/reference#/Requests
629
- """
630
- from .stable.request_service import RequestService
631
-
632
- return self._create_service(RequestService)
633
-
634
708
  @cached_property
635
709
  def rna_oligos(self) -> RnaOligoService:
636
710
  """
@@ -692,6 +766,19 @@ class V2StableService(BaseService):
692
766
 
693
767
  return self._create_service(TeamService)
694
768
 
769
+ @cached_property
770
+ def test_orders(self) -> TestOrderService:
771
+ """
772
+ Test Orders.
773
+
774
+ Test orders enable users to order tests for specific sample/container combinations that will be fulfilled in assays.
775
+
776
+ See https://benchling.com/api/reference?availability=la#/Test%20Orders/
777
+ """
778
+ from .stable.test_order_service import TestOrderService
779
+
780
+ return self._create_service(TestOrderService)
781
+
695
782
  @cached_property
696
783
  def users(self) -> UserService:
697
784
  """
@@ -25,7 +25,7 @@ class V2Service(BaseService):
25
25
  _v2_alpha_service: Optional[V2AlphaService]
26
26
  _v2_beta_service: Optional[V2BetaService]
27
27
 
28
- def __init__(self, client: Client, retry_strategy: RetryStrategy = RetryStrategy()):
28
+ def __init__(self, client: Client, retry_strategy: Optional[RetryStrategy] = None):
29
29
  """
30
30
  Initialize a service.
31
31
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: benchling-sdk
3
- Version: 1.21.1
3
+ Version: 1.22.0
4
4
  Summary: SDK for interacting with the Benchling Platform.
5
5
  License: Apache-2.0
6
6
  Author: Benchling Support
@@ -16,7 +16,7 @@ Provides-Extra: python-jose
16
16
  Requires-Dist: PyYAML (>=6.0,<7.0)
17
17
  Requires-Dist: attrs (>=20.1.0)
18
18
  Requires-Dist: backoff (>=1.10.0,<3)
19
- Requires-Dist: benchling-api-client (==2.0.342)
19
+ Requires-Dist: benchling-api-client (==2.0.390)
20
20
  Requires-Dist: certifi (>=2022.12.7)
21
21
  Requires-Dist: cryptography (>=42.0.0) ; extra == "cryptography"
22
22
  Requires-Dist: dataclasses-json (>=0.5.2,<0.6.0)