benchling-sdk 1.13.0a2__py3-none-any.whl → 1.14.0a1__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.
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional, TYPE_CHECKING
3
+ from functools import cached_property
4
+ from typing import TYPE_CHECKING
4
5
 
5
6
  from benchling_api_client.v2.stable.client import Client
6
7
 
@@ -61,51 +62,6 @@ class V2StableService(BaseService):
61
62
  Namespace containing support for the V2 stable endpoints of the Benchling API.
62
63
  """
63
64
 
64
- _aa_sequence_service: Optional[AaSequenceService]
65
- _api_service: Optional[ApiService]
66
- _app_service: Optional[AppService]
67
- _assay_result_service: Optional[AssayResultService]
68
- _assay_run_service: Optional[AssayRunService]
69
- _blob_service: Optional[BlobService]
70
- _box_service: Optional[BoxService]
71
- _container_service: Optional[ContainerService]
72
- _custom_entity_service: Optional[CustomEntityService]
73
- _custom_notation_service: Optional[CustomNotationService]
74
- _dropdown_service: Optional[DropdownService]
75
- _dna_alignments_service: Optional[DnaAlignmentsService]
76
- _dna_oligo_service: Optional[DnaOligoService]
77
- _dna_sequence_service: Optional[DnaSequenceService]
78
- _entities_service: Optional[EntityService]
79
- _entries_service: Optional[EntryService]
80
- _event_service: Optional[EventService]
81
- _export_service: Optional[ExportService]
82
- _feature_library_service: Optional[FeatureLibraryService]
83
- _folder_service: Optional[FolderService]
84
- _inventory_service: Optional[InventoryService]
85
- _lab_automation_service: Optional[LabAutomationService]
86
- _label_templates_service: Optional[LabelTemplateService]
87
- _location_service: Optional[LocationService]
88
- _mixture_service: Optional[MixtureService]
89
- _molecule_service: Optional[MoleculeService]
90
- _nucleotide_alignments: Optional[NucleotideAlignmentsService]
91
- _oligo_service: Optional[OligoService]
92
- _organization_service: Optional[OrganizationService]
93
- _plate_service: Optional[PlateService]
94
- _printer_service: Optional[PrinterService]
95
- _project_service: Optional[ProjectService]
96
- _registry_service: Optional[RegistryService]
97
- _request_service: Optional[RequestService]
98
- _rna_oligo_service: Optional[RnaOligoService]
99
- _rna_sequence_service: Optional[RnaSequenceService]
100
- _schema_service: Optional[SchemaService]
101
- _task_service: Optional[TaskService]
102
- _team_service: Optional[TeamService]
103
- _user_service: Optional[UserService]
104
- _warehouse_service: Optional[WarehouseService]
105
- _workflow_output_service: Optional[WorkflowOutputService]
106
- _workflow_task_group_service: Optional[WorkflowTaskGroupService]
107
- _workflow_task_service: Optional[WorkflowTaskService]
108
-
109
65
  def __init__(self, client: Client, retry_strategy: RetryStrategy = RetryStrategy()):
110
66
  """
111
67
  Initialize a service.
@@ -114,52 +70,8 @@ class V2StableService(BaseService):
114
70
  :param retry_strategy: Retry strategy for failed HTTP calls
115
71
  """
116
72
  super().__init__(client, retry_strategy)
117
- self._aa_sequence_service = None
118
- self._api_service = None
119
- self._app_service = None
120
- self._assay_result_service = None
121
- self._assay_run_service = None
122
- self._blob_service = None
123
- self._box_service = None
124
- self._container_service = None
125
- self._custom_entity_service = None
126
- self._custom_notation_service = None
127
- self._dropdown_service = None
128
- self._dna_alignments_service = None
129
- self._dna_oligo_service = None
130
- self._dna_sequence_service = None
131
- self._entities_service = None
132
- self._entries_service = None
133
- self._event_service = None
134
- self._export_service = None
135
- self._feature_library_service = None
136
- self._folder_service = None
137
- self._inventory_service = None
138
- self._lab_automation_service = None
139
- self._label_templates_service = None
140
- self._location_service = None
141
- self._mixture_service = None
142
- self._molecule_service = None
143
- self._nucleotide_alignments = None
144
- self._oligo_service = None
145
- self._organization_service = None
146
- self._plate_service = None
147
- self._printer_service = None
148
- self._project_service = None
149
- self._registry_service = None
150
- self._request_service = None
151
- self._rna_oligo_service = None
152
- self._rna_sequence_service = None
153
- self._schema_service = None
154
- self._task_service = None
155
- self._team_service = None
156
- self._user_service = None
157
- self._warehouse_service = None
158
- self._workflow_output_service = None
159
- self._workflow_task_group_service = None
160
- self._workflow_task_service = None
161
-
162
- @property
73
+
74
+ @cached_property
163
75
  def aa_sequences(self) -> AaSequenceService:
164
76
  """
165
77
  AA Sequences.
@@ -170,13 +82,11 @@ class V2StableService(BaseService):
170
82
 
171
83
  See https://benchling.com/api/reference#/AA%20Sequences
172
84
  """
173
- if self._aa_sequence_service is None:
174
- from benchling_sdk.services.v2.stable.aa_sequence_service import AaSequenceService
85
+ from .stable.aa_sequence_service import AaSequenceService
175
86
 
176
- self._aa_sequence_service = AaSequenceService(self._client, retry_strategy=self._retry_strategy)
177
- return self._aa_sequence_service
87
+ return self._create_service(AaSequenceService)
178
88
 
179
- @property
89
+ @cached_property
180
90
  def api(self) -> ApiService:
181
91
  """
182
92
  Make custom API calls with the underlying BenchlingApiClient.
@@ -185,13 +95,11 @@ class V2StableService(BaseService):
185
95
  release. It's capable of making more "generic" calls utilizing our authorization scheme, as well as supporting
186
96
  some simple serialization and deserialization for custom models.
187
97
  """
188
- if self._api_service is None:
189
- from benchling_sdk.services.v2.stable.api_service import ApiService
98
+ from .stable.api_service import ApiService
190
99
 
191
- self._api_service = ApiService(self._client, retry_strategy=self._retry_strategy)
192
- return self._api_service
100
+ return self._create_service(ApiService)
193
101
 
194
- @property
102
+ @cached_property
195
103
  def apps(self) -> AppService:
196
104
  """
197
105
  Apps.
@@ -202,13 +110,11 @@ class V2StableService(BaseService):
202
110
  See https://benchling.com/api/reference#/Apps
203
111
  and https://docs.benchling.com/docs/getting-started-benchling-apps
204
112
  """
205
- if self._app_service is None:
206
- from benchling_sdk.services.v2.stable.app_service import AppService
113
+ from .stable.app_service import AppService
207
114
 
208
- self._app_service = AppService(self._client, retry_strategy=self._retry_strategy)
209
- return self._app_service
115
+ return self._create_service(AppService)
210
116
 
211
- @property
117
+ @cached_property
212
118
  def assay_results(self) -> AssayResultService:
213
119
  """
214
120
  Assay Results.
@@ -218,13 +124,11 @@ class V2StableService(BaseService):
218
124
 
219
125
  See https://benchling.com/api/reference#/Assay%20Results
220
126
  """
221
- if self._assay_result_service is None:
222
- from benchling_sdk.services.v2.stable.assay_result_service import AssayResultService
127
+ from .stable.assay_result_service import AssayResultService
223
128
 
224
- self._assay_result_service = AssayResultService(self._client, retry_strategy=self._retry_strategy)
225
- return self._assay_result_service
129
+ return self._create_service(AssayResultService)
226
130
 
227
- @property
131
+ @cached_property
228
132
  def assay_runs(self) -> AssayRunService:
229
133
  """
230
134
  Assay Runs.
@@ -233,13 +137,11 @@ class V2StableService(BaseService):
233
137
 
234
138
  See https://benchling.com/api/reference#/Assay%20Runs
235
139
  """
236
- if self._assay_run_service is None:
237
- from benchling_sdk.services.v2.stable.assay_run_service import AssayRunService
140
+ from .stable.assay_run_service import AssayRunService
238
141
 
239
- self._assay_run_service = AssayRunService(self._client, retry_strategy=self._retry_strategy)
240
- return self._assay_run_service
142
+ return self._create_service(AssayRunService)
241
143
 
242
- @property
144
+ @cached_property
243
145
  def blobs(self) -> BlobService:
244
146
  """
245
147
  Blobs.
@@ -250,13 +152,11 @@ class V2StableService(BaseService):
250
152
 
251
153
  See https://benchling.com/api/reference#/Blobs
252
154
  """
253
- if self._blob_service is None:
254
- from benchling_sdk.services.v2.stable.blob_service import BlobService
155
+ from .stable.blob_service import BlobService
255
156
 
256
- self._blob_service = BlobService(self._client, retry_strategy=self._retry_strategy)
257
- return self._blob_service
157
+ return self._create_service(BlobService)
258
158
 
259
- @property
159
+ @cached_property
260
160
  def boxes(self) -> BoxService:
261
161
  """
262
162
  Boxes.
@@ -271,13 +171,11 @@ class V2StableService(BaseService):
271
171
 
272
172
  See https://benchling.com/api/reference#/Boxes
273
173
  """
274
- if self._box_service is None:
275
- from benchling_sdk.services.v2.stable.box_service import BoxService
174
+ from .stable.box_service import BoxService
276
175
 
277
- self._box_service = BoxService(self._client, retry_strategy=self._retry_strategy)
278
- return self._box_service
176
+ return self._create_service(BoxService)
279
177
 
280
- @property
178
+ @cached_property
281
179
  def containers(self) -> ContainerService:
282
180
  """
283
181
  Containers.
@@ -293,13 +191,11 @@ class V2StableService(BaseService):
293
191
 
294
192
  See https://benchling.com/api/reference#/Containers
295
193
  """
296
- if self._container_service is None:
297
- from benchling_sdk.services.v2.stable.container_service import ContainerService
194
+ from .stable.container_service import ContainerService
298
195
 
299
- self._container_service = ContainerService(self._client, retry_strategy=self._retry_strategy)
300
- return self._container_service
196
+ return self._create_service(ContainerService)
301
197
 
302
- @property
198
+ @cached_property
303
199
  def custom_entities(self) -> CustomEntityService:
304
200
  """
305
201
  Custom Entities.
@@ -309,15 +205,11 @@ class V2StableService(BaseService):
309
205
 
310
206
  See https://benchling.com/api/reference#/Custom%20Entities
311
207
  """
312
- if self._custom_entity_service is None:
313
- from benchling_sdk.services.v2.stable.custom_entity_service import CustomEntityService
208
+ from .stable.custom_entity_service import CustomEntityService
314
209
 
315
- self._custom_entity_service = CustomEntityService(
316
- self._client, retry_strategy=self._retry_strategy
317
- )
318
- return self._custom_entity_service
210
+ return self._create_service(CustomEntityService)
319
211
 
320
- @property
212
+ @cached_property
321
213
  def custom_notations(self) -> CustomNotationService:
322
214
  """
323
215
  Custom Notations.
@@ -327,15 +219,11 @@ class V2StableService(BaseService):
327
219
 
328
220
  See https://benchling.com/api/reference#/Custom%20Notations
329
221
  """
330
- if self._custom_notation_service is None:
331
- from benchling_sdk.services.v2.stable.custom_notation_service import CustomNotationService
222
+ from .stable.custom_notation_service import CustomNotationService
332
223
 
333
- self._custom_notation_service = CustomNotationService(
334
- self._client, retry_strategy=self._retry_strategy
335
- )
336
- return self._custom_notation_service
224
+ return self._create_service(CustomNotationService)
337
225
 
338
- @property
226
+ @cached_property
339
227
  def dna_alignments(self) -> DnaAlignmentsService:
340
228
  """
341
229
  DNA Alignments.
@@ -344,15 +232,11 @@ class V2StableService(BaseService):
344
232
 
345
233
  See https://benchling.com/api/reference#/DNA%20Alignments
346
234
  """
347
- if self._dna_alignments_service is None:
348
- from benchling_sdk.services.v2.stable.dna_alignments_service import DnaAlignmentsService
235
+ from .stable.dna_alignments_service import DnaAlignmentsService
349
236
 
350
- self._dna_alignments_service = DnaAlignmentsService(
351
- self._client, retry_strategy=self._retry_strategy
352
- )
353
- return self._dna_alignments_service
237
+ return self._create_service(DnaAlignmentsService)
354
238
 
355
- @property
239
+ @cached_property
356
240
  def dna_oligos(self) -> DnaOligoService:
357
241
  """
358
242
  DNA Oligos.
@@ -362,13 +246,11 @@ class V2StableService(BaseService):
362
246
 
363
247
  See https://benchling.com/api/reference#/DNA%20Oligos
364
248
  """
365
- if self._dna_oligo_service is None:
366
- from benchling_sdk.services.v2.stable.dna_oligo_service import DnaOligoService
249
+ from .stable.dna_oligo_service import DnaOligoService
367
250
 
368
- self._dna_oligo_service = DnaOligoService(self._client, retry_strategy=self._retry_strategy)
369
- return self._dna_oligo_service
251
+ return self._create_service(DnaOligoService)
370
252
 
371
- @property
253
+ @cached_property
372
254
  def dna_sequences(self) -> DnaSequenceService:
373
255
  """
374
256
  DNA Sequences.
@@ -378,13 +260,11 @@ class V2StableService(BaseService):
378
260
 
379
261
  See https://benchling.com/api/reference#/DNA%20Sequences
380
262
  """
381
- if self._dna_sequence_service is None:
382
- from benchling_sdk.services.v2.stable.dna_sequence_service import DnaSequenceService
263
+ from .stable.dna_sequence_service import DnaSequenceService
383
264
 
384
- self._dna_sequence_service = DnaSequenceService(self._client, retry_strategy=self._retry_strategy)
385
- return self._dna_sequence_service
265
+ return self._create_service(DnaSequenceService)
386
266
 
387
- @property
267
+ @cached_property
388
268
  def rna_sequences(self) -> RnaSequenceService:
389
269
  """
390
270
  RNA Sequences.
@@ -393,13 +273,11 @@ class V2StableService(BaseService):
393
273
 
394
274
  See https://benchling.com/api/reference#/RNA%20Sequences
395
275
  """
396
- if self._rna_sequence_service is None:
397
- from benchling_sdk.services.v2.stable.rna_sequence_service import RnaSequenceService
276
+ from .stable.rna_sequence_service import RnaSequenceService
398
277
 
399
- self._rna_sequence_service = RnaSequenceService(self._client, retry_strategy=self._retry_strategy)
400
- return self._rna_sequence_service
278
+ return self._create_service(RnaSequenceService)
401
279
 
402
- @property
280
+ @cached_property
403
281
  def dropdowns(self) -> DropdownService:
404
282
  """
405
283
  Dropdowns.
@@ -409,13 +287,11 @@ class V2StableService(BaseService):
409
287
 
410
288
  See https://benchling.com/api/reference#/Dropdowns
411
289
  """
412
- if self._dropdown_service is None:
413
- from benchling_sdk.services.v2.stable.dropdown_service import DropdownService
290
+ from .stable.dropdown_service import DropdownService
414
291
 
415
- self._dropdown_service = DropdownService(self._client, retry_strategy=self._retry_strategy)
416
- return self._dropdown_service
292
+ return self._create_service(DropdownService)
417
293
 
418
- @property
294
+ @cached_property
419
295
  def entities(self) -> EntityService:
420
296
  """
421
297
  Entities.
@@ -426,13 +302,11 @@ class V2StableService(BaseService):
426
302
 
427
303
  See https://benchling.com/api/reference#/Entities
428
304
  """
429
- if self._entities_service is None:
430
- from benchling_sdk.services.v2.stable.entity_service import EntityService
305
+ from .stable.entity_service import EntityService
431
306
 
432
- self._entities_service = EntityService(self._client, retry_strategy=self._retry_strategy)
433
- return self._entities_service
307
+ return self._create_service(EntityService)
434
308
 
435
- @property
309
+ @cached_property
436
310
  def entries(self) -> EntryService:
437
311
  """
438
312
  Entries.
@@ -441,13 +315,11 @@ class V2StableService(BaseService):
441
315
 
442
316
  See https://benchling.com/api/reference#/Entries
443
317
  """
444
- if self._entries_service is None:
445
- from benchling_sdk.services.v2.stable.entry_service import EntryService
318
+ from .stable.entry_service import EntryService
446
319
 
447
- self._entries_service = EntryService(self._client, retry_strategy=self._retry_strategy)
448
- return self._entries_service
320
+ return self._create_service(EntryService)
449
321
 
450
- @property
322
+ @cached_property
451
323
  def events(self) -> EventService:
452
324
  """
453
325
  Events.
@@ -457,13 +329,11 @@ class V2StableService(BaseService):
457
329
 
458
330
  See https://benchling.com/api/reference#/Events
459
331
  """
460
- if self._event_service is None:
461
- from benchling_sdk.services.v2.stable.event_service import EventService
332
+ from .stable.event_service import EventService
462
333
 
463
- self._event_service = EventService(self._client, retry_strategy=self._retry_strategy)
464
- return self._event_service
334
+ return self._create_service(EventService)
465
335
 
466
- @property
336
+ @cached_property
467
337
  def exports(self) -> ExportService:
468
338
  """
469
339
  Exports.
@@ -472,13 +342,11 @@ class V2StableService(BaseService):
472
342
 
473
343
  See https://benchling.com/api/reference#/Exports
474
344
  """
475
- if self._export_service is None:
476
- from benchling_sdk.services.v2.stable.export_service import ExportService
345
+ from .stable.export_service import ExportService
477
346
 
478
- self._export_service = ExportService(self._client, retry_strategy=self._retry_strategy)
479
- return self._export_service
347
+ return self._create_service(ExportService)
480
348
 
481
- @property
349
+ @cached_property
482
350
  def feature_libraries(self) -> FeatureLibraryService:
483
351
  """
484
352
  Feature Libraries.
@@ -488,15 +356,11 @@ class V2StableService(BaseService):
488
356
 
489
357
  See https://benchling.com/api/reference#/Feature%20Libraries
490
358
  """
491
- if self._feature_library_service is None:
492
- from benchling_sdk.services.v2.stable.feature_library_service import FeatureLibraryService
359
+ from .stable.feature_library_service import FeatureLibraryService
493
360
 
494
- self._feature_library_service = FeatureLibraryService(
495
- self._client, retry_strategy=self._retry_strategy
496
- )
497
- return self._feature_library_service
361
+ return self._create_service(FeatureLibraryService)
498
362
 
499
- @property
363
+ @cached_property
500
364
  def folders(self) -> FolderService:
501
365
  """
502
366
  Folders.
@@ -505,13 +369,11 @@ class V2StableService(BaseService):
505
369
 
506
370
  See https://benchling.com/api/reference#/Folders
507
371
  """
508
- if self._folder_service is None:
509
- from benchling_sdk.services.v2.stable.folder_service import FolderService
372
+ from .stable.folder_service import FolderService
510
373
 
511
- self._folder_service = FolderService(self._client, retry_strategy=self._retry_strategy)
512
- return self._folder_service
374
+ return self._create_service(FolderService)
513
375
 
514
- @property
376
+ @cached_property
515
377
  def inventory(self) -> InventoryService:
516
378
  """
517
379
  Inventory.
@@ -520,13 +382,11 @@ class V2StableService(BaseService):
520
382
 
521
383
  See https://benchling.com/api/reference#/Inventory
522
384
  """
523
- if self._inventory_service is None:
524
- from benchling_sdk.services.v2.stable.inventory_service import InventoryService
385
+ from .stable.inventory_service import InventoryService
525
386
 
526
- self._inventory_service = InventoryService(self._client, retry_strategy=self._retry_strategy)
527
- return self._inventory_service
387
+ return self._create_service(InventoryService)
528
388
 
529
- @property
389
+ @cached_property
530
390
  def lab_automation(self) -> LabAutomationService:
531
391
  """
532
392
  Lab Automation.
@@ -536,15 +396,11 @@ class V2StableService(BaseService):
536
396
 
537
397
  See https://benchling.com/api/reference#/Lab%20Automation
538
398
  """
539
- if self._lab_automation_service is None:
540
- from benchling_sdk.services.v2.stable.lab_automation_service import LabAutomationService
399
+ from .stable.lab_automation_service import LabAutomationService
541
400
 
542
- self._lab_automation_service = LabAutomationService(
543
- self._client, retry_strategy=self._retry_strategy
544
- )
545
- return self._lab_automation_service
401
+ return self._create_service(LabAutomationService)
546
402
 
547
- @property
403
+ @cached_property
548
404
  def label_templates(self) -> LabelTemplateService:
549
405
  """
550
406
  Label Templates.
@@ -553,15 +409,11 @@ class V2StableService(BaseService):
553
409
 
554
410
  See https://benchling.com/api/reference#/Label%20Templates
555
411
  """
556
- if self._label_templates_service is None:
557
- from benchling_sdk.services.v2.stable.label_template_service import LabelTemplateService
412
+ from .stable.label_template_service import LabelTemplateService
558
413
 
559
- self._label_templates_service = LabelTemplateService(
560
- self._client, retry_strategy=self._retry_strategy
561
- )
562
- return self._label_templates_service
414
+ return self._create_service(LabelTemplateService)
563
415
 
564
- @property
416
+ @cached_property
565
417
  def locations(self) -> LocationService:
566
418
  """
567
419
  Locations.
@@ -570,13 +422,11 @@ class V2StableService(BaseService):
570
422
 
571
423
  See https://benchling.com/api/reference#/Locations
572
424
  """
573
- if self._location_service is None:
574
- from benchling_sdk.services.v2.stable.location_service import LocationService
425
+ from .stable.location_service import LocationService
575
426
 
576
- self._location_service = LocationService(self._client, retry_strategy=self._retry_strategy)
577
- return self._location_service
427
+ return self._create_service(LocationService)
578
428
 
579
- @property
429
+ @cached_property
580
430
  def mixtures(self) -> MixtureService:
581
431
  """
582
432
  Mixtures.
@@ -586,13 +436,11 @@ class V2StableService(BaseService):
586
436
 
587
437
  See https://benchling.com/api/reference#/Mixtures
588
438
  """
589
- if self._mixture_service is None:
590
- from benchling_sdk.services.v2.stable.mixture_service import MixtureService
439
+ from .stable.mixture_service import MixtureService
591
440
 
592
- self._mixture_service = MixtureService(self._client, retry_strategy=self._retry_strategy)
593
- return self._mixture_service
441
+ return self._create_service(MixtureService)
594
442
 
595
- @property
443
+ @cached_property
596
444
  def molecules(self) -> MoleculeService:
597
445
  """
598
446
  Molecules.
@@ -602,13 +450,11 @@ class V2StableService(BaseService):
602
450
 
603
451
  See https://benchling.com/api/reference#/Molecules
604
452
  """
605
- if self._molecule_service is None:
606
- from benchling_sdk.services.v2.stable.molecule_service import MoleculeService
453
+ from .stable.molecule_service import MoleculeService
607
454
 
608
- self._molecule_service = MoleculeService(self._client, retry_strategy=self._retry_strategy)
609
- return self._molecule_service
455
+ return self._create_service(MoleculeService)
610
456
 
611
- @property
457
+ @cached_property
612
458
  def nucleotide_alignments(self) -> NucleotideAlignmentsService:
613
459
  """
614
460
  Nucleotide Alignments.
@@ -617,17 +463,11 @@ class V2StableService(BaseService):
617
463
 
618
464
  See https://benchling.com/api/reference#/Nucleotide%20Alignments
619
465
  """
620
- if self._nucleotide_alignments is None:
621
- from benchling_sdk.services.v2.stable.nucleotide_alignments_service import (
622
- NucleotideAlignmentsService,
623
- )
466
+ from .stable.nucleotide_alignments_service import NucleotideAlignmentsService
624
467
 
625
- self._nucleotide_alignments = NucleotideAlignmentsService(
626
- self._client, retry_strategy=self._retry_strategy
627
- )
628
- return self._nucleotide_alignments
468
+ return self._create_service(NucleotideAlignmentsService)
629
469
 
630
- @property
470
+ @cached_property
631
471
  def oligos(self) -> OligoService:
632
472
  """
633
473
  Oligos.
@@ -639,13 +479,11 @@ class V2StableService(BaseService):
639
479
 
640
480
  See https://benchling.com/api/reference#/Oligos
641
481
  """
642
- if self._oligo_service is None:
643
- from benchling_sdk.services.v2.stable.oligo_service import OligoService
482
+ from .stable.oligo_service import OligoService
644
483
 
645
- self._oligo_service = OligoService(self._client, retry_strategy=self._retry_strategy)
646
- return self._oligo_service
484
+ return self._create_service(OligoService)
647
485
 
648
- @property
486
+ @cached_property
649
487
  def organizations(self) -> OrganizationService:
650
488
  """
651
489
  Organizations.
@@ -654,15 +492,11 @@ class V2StableService(BaseService):
654
492
 
655
493
  See https://benchling.com/api/reference#/Organizations
656
494
  """
657
- if self._organization_service is None:
658
- from benchling_sdk.services.v2.stable.organization_service import OrganizationService
495
+ from .stable.organization_service import OrganizationService
659
496
 
660
- self._organization_service = OrganizationService(
661
- self._client, retry_strategy=self._retry_strategy
662
- )
663
- return self._organization_service
497
+ return self._create_service(OrganizationService)
664
498
 
665
- @property
499
+ @cached_property
666
500
  def plates(self) -> PlateService:
667
501
  """
668
502
  Plates.
@@ -679,13 +513,11 @@ class V2StableService(BaseService):
679
513
 
680
514
  See https://benchling.com/api/reference#/Plates
681
515
  """
682
- if self._plate_service is None:
683
- from benchling_sdk.services.v2.stable.plate_service import PlateService
516
+ from .stable.plate_service import PlateService
684
517
 
685
- self._plate_service = PlateService(self._client, retry_strategy=self._retry_strategy)
686
- return self._plate_service
518
+ return self._create_service(PlateService)
687
519
 
688
- @property
520
+ @cached_property
689
521
  def printers(self) -> PrinterService:
690
522
  """
691
523
  Printers.
@@ -694,13 +526,11 @@ class V2StableService(BaseService):
694
526
 
695
527
  See https://benchling.com/api/reference#/Printers
696
528
  """
697
- if self._printer_service is None:
698
- from benchling_sdk.services.v2.stable.printer_service import PrinterService
529
+ from .stable.printer_service import PrinterService
699
530
 
700
- self._printer_service = PrinterService(self._client, retry_strategy=self._retry_strategy)
701
- return self._printer_service
531
+ return self._create_service(PrinterService)
702
532
 
703
- @property
533
+ @cached_property
704
534
  def projects(self) -> ProjectService:
705
535
  """
706
536
  Projects.
@@ -709,13 +539,11 @@ class V2StableService(BaseService):
709
539
 
710
540
  See https://benchling.com/api/reference#/Projects
711
541
  """
712
- if self._project_service is None:
713
- from benchling_sdk.services.v2.stable.project_service import ProjectService
542
+ from .stable.project_service import ProjectService
714
543
 
715
- self._project_service = ProjectService(self._client, retry_strategy=self._retry_strategy)
716
- return self._project_service
544
+ return self._create_service(ProjectService)
717
545
 
718
- @property
546
+ @cached_property
719
547
  def registry(self) -> RegistryService:
720
548
  """
721
549
  Registry.
@@ -724,13 +552,11 @@ class V2StableService(BaseService):
724
552
 
725
553
  See https://benchling.com/api/reference#/Registry
726
554
  """
727
- if self._registry_service is None:
728
- from benchling_sdk.services.v2.stable.registry_service import RegistryService
555
+ from .stable.registry_service import RegistryService
729
556
 
730
- self._registry_service = RegistryService(self._client, retry_strategy=self._retry_strategy)
731
- return self._registry_service
557
+ return self._create_service(RegistryService)
732
558
 
733
- @property
559
+ @cached_property
734
560
  def requests(self) -> RequestService:
735
561
  """
736
562
  Requests.
@@ -739,13 +565,11 @@ class V2StableService(BaseService):
739
565
 
740
566
  See https://benchling.com/api/reference#/Requests
741
567
  """
742
- if self._request_service is None:
743
- from benchling_sdk.services.v2.stable.request_service import RequestService
568
+ from .stable.request_service import RequestService
744
569
 
745
- self._request_service = RequestService(self._client, retry_strategy=self._retry_strategy)
746
- return self._request_service
570
+ return self._create_service(RequestService)
747
571
 
748
- @property
572
+ @cached_property
749
573
  def rna_oligos(self) -> RnaOligoService:
750
574
  """
751
575
  RNA Oligos.
@@ -755,13 +579,11 @@ class V2StableService(BaseService):
755
579
 
756
580
  See https://benchling.com/api/reference#/RNA%20Oligos
757
581
  """
758
- if self._rna_oligo_service is None:
759
- from benchling_sdk.services.v2.stable.rna_oligo_service import RnaOligoService
582
+ from .stable.rna_oligo_service import RnaOligoService
760
583
 
761
- self._rna_oligo_service = RnaOligoService(self._client, retry_strategy=self._retry_strategy)
762
- return self._rna_oligo_service
584
+ return self._create_service(RnaOligoService)
763
585
 
764
- @property
586
+ @cached_property
765
587
  def schemas(self) -> SchemaService:
766
588
  """
767
589
  Schemas.
@@ -771,13 +593,11 @@ class V2StableService(BaseService):
771
593
 
772
594
  See https://benchling.com/api/reference#/Schemas
773
595
  """
774
- if self._schema_service is None:
775
- from benchling_sdk.services.v2.stable.schema_service import SchemaService
596
+ from .stable.schema_service import SchemaService
776
597
 
777
- self._schema_service = SchemaService(self._client, retry_strategy=self._retry_strategy)
778
- return self._schema_service
598
+ return self._create_service(SchemaService)
779
599
 
780
- @property
600
+ @cached_property
781
601
  def tasks(self) -> TaskService:
782
602
  """
783
603
  Tasks.
@@ -793,13 +613,11 @@ class V2StableService(BaseService):
793
613
 
794
614
  See https://benchling.com/api/reference#/Tasks
795
615
  """
796
- if self._task_service is None:
797
- from benchling_sdk.services.v2.stable.task_service import TaskService
616
+ from .stable.task_service import TaskService
798
617
 
799
- self._task_service = TaskService(self._client, retry_strategy=self._retry_strategy)
800
- return self._task_service
618
+ return self._create_service(TaskService)
801
619
 
802
- @property
620
+ @cached_property
803
621
  def teams(self) -> TeamService:
804
622
  """
805
623
  Teams.
@@ -808,26 +626,22 @@ class V2StableService(BaseService):
808
626
 
809
627
  See https://benchling.com/api/reference#/Teams
810
628
  """
811
- if self._team_service is None:
812
- from benchling_sdk.services.v2.stable.team_service import TeamService
629
+ from .stable.team_service import TeamService
813
630
 
814
- self._team_service = TeamService(self._client, retry_strategy=self._retry_strategy)
815
- return self._team_service
631
+ return self._create_service(TeamService)
816
632
 
817
- @property
633
+ @cached_property
818
634
  def users(self) -> UserService:
819
635
  """
820
636
  Benchling users.
821
637
 
822
638
  See https://benchling.com/api/reference#/Users
823
639
  """
824
- if self._user_service is None:
825
- from benchling_sdk.services.v2.stable.user_service import UserService
640
+ from .stable.user_service import UserService
826
641
 
827
- self._user_service = UserService(self._client, retry_strategy=self._retry_strategy)
828
- return self._user_service
642
+ return self._create_service(UserService)
829
643
 
830
- @property
644
+ @cached_property
831
645
  def warehouse(self) -> WarehouseService:
832
646
  """
833
647
  Warehouse.
@@ -836,13 +650,11 @@ class V2StableService(BaseService):
836
650
 
837
651
  See https://benchling.com/api/reference#/Warehouse
838
652
  """
839
- if self._warehouse_service is None:
840
- from benchling_sdk.services.v2.stable.warehouse_service import WarehouseService
653
+ from .stable.warehouse_service import WarehouseService
841
654
 
842
- self._warehouse_service = WarehouseService(self._client, retry_strategy=self._retry_strategy)
843
- return self._warehouse_service
655
+ return self._create_service(WarehouseService)
844
656
 
845
- @property
657
+ @cached_property
846
658
  def workflow_outputs(self) -> WorkflowOutputService:
847
659
  """
848
660
  Workflow Outputs.
@@ -851,15 +663,11 @@ class V2StableService(BaseService):
851
663
 
852
664
  See https://benchling.com/api/reference#/Workflow%20Outputs
853
665
  """
854
- if self._workflow_output_service is None:
855
- from benchling_sdk.services.v2.stable.workflow_output_service import WorkflowOutputService
666
+ from .stable.workflow_output_service import WorkflowOutputService
856
667
 
857
- self._workflow_output_service = WorkflowOutputService(
858
- self._client, retry_strategy=self._retry_strategy
859
- )
860
- return self._workflow_output_service
668
+ return self._create_service(WorkflowOutputService)
861
669
 
862
- @property
670
+ @cached_property
863
671
  def workflow_task_groups(self) -> WorkflowTaskGroupService:
864
672
  """
865
673
  Workflow Tasks Groups.
@@ -868,15 +676,11 @@ class V2StableService(BaseService):
868
676
 
869
677
  See https://benchling.com/api/reference#/Workflow%20Task%20Groups
870
678
  """
871
- if self._workflow_task_group_service is None:
872
- from benchling_sdk.services.v2.stable.workflow_task_group_service import WorkflowTaskGroupService
679
+ from .stable.workflow_task_group_service import WorkflowTaskGroupService
873
680
 
874
- self._workflow_task_group_service = WorkflowTaskGroupService(
875
- self._client, retry_strategy=self._retry_strategy
876
- )
877
- return self._workflow_task_group_service
681
+ return self._create_service(WorkflowTaskGroupService)
878
682
 
879
- @property
683
+ @cached_property
880
684
  def workflow_tasks(self) -> WorkflowTaskService:
881
685
  """
882
686
  Workflow Tasks.
@@ -885,10 +689,6 @@ class V2StableService(BaseService):
885
689
 
886
690
  See https://benchling.com/api/reference#/Workflow%20Tasks
887
691
  """
888
- if self._workflow_task_service is None:
889
- from benchling_sdk.services.v2.stable.workflow_task_service import WorkflowTaskService
692
+ from .stable.workflow_task_service import WorkflowTaskService
890
693
 
891
- self._workflow_task_service = WorkflowTaskService(
892
- self._client, retry_strategy=self._retry_strategy
893
- )
894
- return self._workflow_task_service
694
+ return self._create_service(WorkflowTaskService)