benchling-sdk 1.13.0a2__py3-none-any.whl → 1.14.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.
@@ -50,6 +50,7 @@ __all__ = [
50
50
  "LifecycleDeactivateWebhookV0Beta",
51
51
  "LifecycleDeactivateWebhookV0BetaType",
52
52
  "LifecycleDeactivateWebhookV0Type",
53
+ "MessageBase",
53
54
  "MessageBaseV0",
54
55
  "RequestCreatedWebhookV2",
55
56
  "RequestCreatedWebhookV2Type",
@@ -162,6 +163,7 @@ if TYPE_CHECKING:
162
163
  import benchling_api_client.webhooks.v0.stable.models.lifecycle_deactivate_webhook_v0_beta
163
164
  import benchling_api_client.webhooks.v0.stable.models.lifecycle_deactivate_webhook_v0_beta_type
164
165
  import benchling_api_client.webhooks.v0.stable.models.lifecycle_deactivate_webhook_v0_type
166
+ import benchling_api_client.webhooks.v0.stable.models.message_base
165
167
  import benchling_api_client.webhooks.v0.stable.models.message_base_v0
166
168
  import benchling_api_client.webhooks.v0.stable.models.request_created_webhook_v2
167
169
  import benchling_api_client.webhooks.v0.stable.models.request_created_webhook_v2_type
@@ -354,6 +356,7 @@ if TYPE_CHECKING:
354
356
  LifecycleDeactivateWebhookV0Type = (
355
357
  benchling_api_client.webhooks.v0.stable.models.lifecycle_deactivate_webhook_v0_type.LifecycleDeactivateWebhookV0Type
356
358
  )
359
+ MessageBase = benchling_api_client.webhooks.v0.stable.models.message_base.MessageBase
357
360
  MessageBaseV0 = benchling_api_client.webhooks.v0.stable.models.message_base_v0.MessageBaseV0
358
361
  RequestCreatedWebhookV2 = (
359
362
  benchling_api_client.webhooks.v0.stable.models.request_created_webhook_v2.RequestCreatedWebhookV2
@@ -596,6 +599,7 @@ else:
596
599
  "LifecycleDeactivateWebhookV0Beta": "benchling_api_client.webhooks.v0.stable.models.lifecycle_deactivate_webhook_v0_beta",
597
600
  "LifecycleDeactivateWebhookV0BetaType": "benchling_api_client.webhooks.v0.stable.models.lifecycle_deactivate_webhook_v0_beta_type",
598
601
  "LifecycleDeactivateWebhookV0Type": "benchling_api_client.webhooks.v0.stable.models.lifecycle_deactivate_webhook_v0_type",
602
+ "MessageBase": "benchling_api_client.webhooks.v0.stable.models.message_base",
599
603
  "MessageBaseV0": "benchling_api_client.webhooks.v0.stable.models.message_base_v0",
600
604
  "RequestCreatedWebhookV2": "benchling_api_client.webhooks.v0.stable.models.request_created_webhook_v2",
601
605
  "RequestCreatedWebhookV2Type": "benchling_api_client.webhooks.v0.stable.models.request_created_webhook_v2_type",
@@ -30,3 +30,10 @@ class BaseService(ABC):
30
30
  def retry_strategy(self) -> RetryStrategy:
31
31
  """Provide access to the underlying user-specified RetryStrategy."""
32
32
  return self._retry_strategy
33
+
34
+ def _create_service(self, cls):
35
+ """Instantiate a service that derives from BaseService, with the same properties as this service.
36
+
37
+ Override this in alpha and beta services that use a client other than self._client.
38
+ """
39
+ return cls(self._client, self._retry_strategy)
@@ -8,6 +8,7 @@ from benchling_api_client.v2.stable.api.aa_sequences import (
8
8
  bulk_update_aa_sequences,
9
9
  bulk_upsert_aa_sequences,
10
10
  create_aa_sequence,
11
+ find_matching_regions_aa_sequences,
11
12
  get_aa_sequence,
12
13
  list_aa_sequences,
13
14
  unarchive_aa_sequences,
@@ -37,6 +38,7 @@ from benchling_sdk.models import (
37
38
  AaSequencesBulkCreateRequest,
38
39
  AaSequencesBulkUpdateRequest,
39
40
  AaSequencesBulkUpsertRequest,
41
+ AaSequencesFindMatchingRegion,
40
42
  AaSequencesPaginatedList,
41
43
  AaSequencesUnarchive,
42
44
  AaSequenceUpdate,
@@ -312,3 +314,15 @@ class AaSequenceService(BaseService):
312
314
  client=self.client, json_body=body, returning=none_as_unset(returning_string)
313
315
  )
314
316
  return model_from_detailed(response)
317
+
318
+ @api_method
319
+ def find_matching_regions(self, find_matching_region: AaSequencesFindMatchingRegion) -> AsyncTaskLink:
320
+ """
321
+ Find matching regions for AA sequences.
322
+
323
+ See https://benchling.com/api/v2/reference#/AA%20Sequences/findMatchingRegionsAaSequences
324
+ """
325
+ response = find_matching_regions_aa_sequences.sync_detailed(
326
+ client=self.client, json_body=find_matching_region
327
+ )
328
+ return model_from_detailed(response)
@@ -11,6 +11,7 @@ from benchling_api_client.v2.stable.api.dna_sequences import (
11
11
  bulk_update_dna_sequences,
12
12
  bulk_upsert_dna_sequences,
13
13
  create_dna_sequence,
14
+ find_matching_regions_dna_sequences,
14
15
  get_dna_sequence,
15
16
  list_dna_sequences,
16
17
  match_bases_dna_sequences,
@@ -45,6 +46,7 @@ from benchling_sdk.models import (
45
46
  DnaSequencesBulkCreateRequest,
46
47
  DnaSequencesBulkUpdateRequest,
47
48
  DnaSequencesBulkUpsertRequest,
49
+ DnaSequencesFindMatchingRegion,
48
50
  DnaSequencesPaginatedList,
49
51
  DnaSequencesUnarchive,
50
52
  DnaSequenceUpdate,
@@ -384,3 +386,15 @@ class DnaSequenceService(BaseService):
384
386
  json_body=search_bases_request,
385
387
  )
386
388
  return model_from_detailed(response)
389
+
390
+ @api_method
391
+ def find_matching_regions(self, find_matching_region: DnaSequencesFindMatchingRegion) -> AsyncTaskLink:
392
+ """
393
+ Find matching regions for DNA sequences.
394
+
395
+ See https://benchling.com/api/v2/reference#/DNA%20Sequences/findMatchingRegionsDnaSequences
396
+ """
397
+ response = find_matching_regions_dna_sequences.sync_detailed(
398
+ client=self.client, json_body=find_matching_region
399
+ )
400
+ return model_from_detailed(response)
@@ -11,6 +11,7 @@ from benchling_api_client.v2.stable.api.entries import (
11
11
  list_entry_templates,
12
12
  unarchive_entries,
13
13
  update_entry,
14
+ update_entry_template,
14
15
  )
15
16
  from benchling_api_client.v2.types import Response
16
17
 
@@ -31,6 +32,7 @@ from benchling_sdk.models import (
31
32
  EntryExternalFile,
32
33
  EntryTemplate,
33
34
  EntryTemplatesPaginatedList,
35
+ EntryTemplateUpdate,
34
36
  EntryUpdate,
35
37
  ListEntriesReviewStatus,
36
38
  ListEntriesSort,
@@ -332,3 +334,24 @@ class EntryService(BaseService):
332
334
  client=self.client, entry_template_id=entry_template_id, returning=none_as_unset(returning_string)
333
335
  )
334
336
  return model_from_detailed(response)
337
+
338
+ @api_method
339
+ def update_entry_template(
340
+ self,
341
+ entry_template_id: str,
342
+ entry_template: EntryTemplateUpdate,
343
+ returning: Optional[Iterable[str]] = None,
344
+ ) -> EntryTemplate:
345
+ """
346
+ Update a notebook entry template's metadata.
347
+
348
+ See https://benchling.com/api/reference#/Entries/updateEntryTemplate
349
+ """
350
+ returning_string = optional_array_query_param(returning)
351
+ response = update_entry_template.sync_detailed(
352
+ client=self.client,
353
+ entry_template_id=entry_template_id,
354
+ json_body=entry_template,
355
+ returning=none_as_unset(returning_string),
356
+ )
357
+ return model_from_detailed(response)
@@ -0,0 +1,32 @@
1
+ from benchling_api_client.v2.stable.api.workflow_flowchart_config_versions import (
2
+ get_workflow_flowchart_config_version,
3
+ )
4
+
5
+ from benchling_sdk.helpers.decorators import api_method
6
+ from benchling_sdk.helpers.response_helpers import model_from_detailed
7
+ from benchling_sdk.models import WorkflowFlowchartConfigVersion
8
+ from benchling_sdk.services.v2.base_service import BaseService
9
+
10
+
11
+ class WorkflowFlowchartConfigVersionService(BaseService):
12
+ """
13
+ Workflow Flowchart Config Versions.
14
+
15
+ Workflow flowchart config versions are versioned graphs of flowchart configurations.
16
+
17
+ See https://benchling.com/api/reference#/Workflow%20Flowchart%20Config%20Versions
18
+ """
19
+
20
+ @api_method
21
+ def get_by_id(self, workflow_flowchart_config_version_id: str) -> WorkflowFlowchartConfigVersion:
22
+ """
23
+ Get a workflow flowchart config version.
24
+
25
+ If there is a template flowchart, serializes that flowchart in the same format as the workflow_flowcharts service.
26
+
27
+ See https://benchling.com/api/reference#/Workflow%20Flowcharts/getWorkflowConfigVersion
28
+ """
29
+ response = get_workflow_flowchart_config_version.sync_detailed(
30
+ client=self.client, workflow_flowchart_config_version_id=workflow_flowchart_config_version_id
31
+ )
32
+ return model_from_detailed(response)
@@ -0,0 +1,85 @@
1
+ import datetime
2
+ from typing import Iterable, List, Optional
3
+
4
+ from benchling_api_client.v2.stable.api.workflow_flowcharts import (
5
+ get_workflow_flowchart,
6
+ list_workflow_flowcharts,
7
+ )
8
+ from benchling_api_client.v2.types import Response
9
+
10
+ from benchling_sdk.errors import raise_for_status
11
+ from benchling_sdk.helpers.decorators import api_method
12
+ from benchling_sdk.helpers.pagination_helpers import NextToken, PageIterator
13
+ from benchling_sdk.helpers.response_helpers import model_from_detailed
14
+ from benchling_sdk.helpers.serialization_helpers import none_as_unset, optional_array_query_param
15
+ from benchling_sdk.models import ListWorkflowFlowchartsSort, WorkflowFlowchart, WorkflowFlowchartPaginatedList
16
+ from benchling_sdk.services.v2.base_service import BaseService
17
+
18
+
19
+ class WorkflowFlowchartService(BaseService):
20
+ """
21
+ Workflow Flowcharts.
22
+
23
+ Workflow flowcharts represent the nodes and edges that a flowchart is comprised of.
24
+
25
+ See https://benchling.com/api/reference#/Workflow%20Flowcharts
26
+ """
27
+
28
+ @api_method
29
+ def get_by_id(self, workflow_flowchart_id: str) -> WorkflowFlowchart:
30
+ """
31
+ Get a workflow flowchart.
32
+
33
+ See https://benchling.com/api/reference#/Workflow%20Flowcharts/getWorkflowFlowchart
34
+ """
35
+ response = get_workflow_flowchart.sync_detailed(
36
+ client=self.client, workflow_flowchart_id=workflow_flowchart_id
37
+ )
38
+ return model_from_detailed(response)
39
+
40
+ @api_method
41
+ def _workflow_tasks_page(
42
+ self,
43
+ sort: Optional[ListWorkflowFlowchartsSort] = None,
44
+ ids: Optional[Iterable[str]] = None,
45
+ created_at: Optional[datetime.date] = None,
46
+ page_size: Optional[int] = None,
47
+ next_token: NextToken = None,
48
+ ) -> Response[WorkflowFlowchartPaginatedList]:
49
+ response = list_workflow_flowcharts.sync_detailed(
50
+ client=self.client,
51
+ ids=none_as_unset(optional_array_query_param(ids)),
52
+ created_at=none_as_unset(created_at),
53
+ next_token=none_as_unset(next_token),
54
+ page_size=none_as_unset(page_size),
55
+ sort=none_as_unset(sort),
56
+ )
57
+ raise_for_status(response)
58
+ return response # type: ignore
59
+
60
+ def list(
61
+ self,
62
+ sort: Optional[ListWorkflowFlowchartsSort] = None,
63
+ ids: Optional[Iterable[str]] = None,
64
+ created_at: Optional[datetime.date] = None,
65
+ page_size: Optional[int] = None,
66
+ ) -> PageIterator[WorkflowFlowchart]:
67
+ """
68
+ List workflow flowcharts.
69
+
70
+ See https://benchling.com/api/reference#/Workflow%20Tasks/listWorkflowFlowcharts
71
+ """
72
+
73
+ def api_call(next_token: NextToken) -> Response[WorkflowFlowchartPaginatedList]:
74
+ return self._workflow_tasks_page(
75
+ sort=sort,
76
+ ids=ids,
77
+ created_at=created_at,
78
+ page_size=page_size,
79
+ next_token=next_token,
80
+ )
81
+
82
+ def results_extractor(body: WorkflowFlowchartPaginatedList) -> Optional[List[WorkflowFlowchart]]:
83
+ return body.workflow_flowcharts
84
+
85
+ return PageIterator(api_call, results_extractor)
@@ -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
 
@@ -9,7 +10,6 @@ from benchling_sdk.helpers.retry_helpers import RetryStrategy
9
10
 
10
11
  if TYPE_CHECKING:
11
12
  from benchling_sdk.services.v2.alpha.v2_alpha_app_service import V2AlphaAppService
12
- from benchling_sdk.services.v2.alpha.v2_alpha_dna_sequence_service import V2AlphaDnaSequenceService
13
13
 
14
14
  from benchling_sdk.services.v2.base_service import BaseService
15
15
 
@@ -23,8 +23,6 @@ class V2AlphaService(BaseService):
23
23
  See https://benchling.com/api/v2-alpha/reference
24
24
  """
25
25
 
26
- _app_service: Optional[V2AlphaAppService]
27
- _dna_sequence_service: Optional[V2AlphaDnaSequenceService]
28
26
  _alpha_client: Client
29
27
 
30
28
  def __init__(self, client: Client, retry_strategy: RetryStrategy = RetryStrategy()):
@@ -36,10 +34,8 @@ class V2AlphaService(BaseService):
36
34
  """
37
35
  super().__init__(client, retry_strategy)
38
36
  self._alpha_client = v2_alpha_client(self.client)
39
- self._app_service = None
40
- self._dna_sequence_service = None
41
37
 
42
- @property
38
+ @cached_property
43
39
  def apps(self) -> V2AlphaAppService:
44
40
  """
45
41
  V2-Alpha Apps.
@@ -48,26 +44,10 @@ class V2AlphaService(BaseService):
48
44
 
49
45
  https://benchling.com/api/v2-alpha/reference?stability=not-available#/Apps
50
46
  """
51
- if self._app_service is None:
52
- from benchling_sdk.services.v2.alpha.v2_alpha_app_service import V2AlphaAppService
47
+ from .alpha.v2_alpha_app_service import V2AlphaAppService
53
48
 
54
- self._app_service = V2AlphaAppService(self._alpha_client, self._retry_strategy)
55
- return self._app_service
49
+ return self._create_service(V2AlphaAppService)
56
50
 
57
- @property
58
- def dna_sequences(self) -> V2AlphaDnaSequenceService:
59
- """
60
- V2-Alpha DNA Sequences.
61
-
62
- DNA sequences are the bread and butter of the Benchling Molecular Biology suite. On Benchling, these are
63
- comprised of a string of nucleotides and collections of other attributes, such as annotations and primers.
64
-
65
- See https://benchling.com/api/v2-alpha/reference#/DNA%20Sequences
66
- """
67
- if self._dna_sequence_service is None:
68
- from benchling_sdk.services.v2.alpha.v2_alpha_dna_sequence_service import (
69
- V2AlphaDnaSequenceService,
70
- )
71
-
72
- self._dna_sequence_service = V2AlphaDnaSequenceService(self._alpha_client, self._retry_strategy)
73
- return self._dna_sequence_service
51
+ def _create_service(self, cls):
52
+ """Instantiate a service using the alpha client."""
53
+ return cls(self._alpha_client, self._retry_strategy)
@@ -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
 
@@ -10,7 +11,6 @@ from benchling_sdk.services.v2.base_service import BaseService
10
11
  from benchling_sdk.services.v2.beta.v2_beta_data_frame_service import V2BetaDataFrameService
11
12
 
12
13
  if TYPE_CHECKING:
13
- from benchling_sdk.services.v2.beta.v2_beta_aa_sequence_service import V2BetaAaSequenceService
14
14
  from benchling_sdk.services.v2.beta.v2_beta_app_service import V2BetaAppService
15
15
  from benchling_sdk.services.v2.beta.v2_beta_collaboration_service import V2BetaCollaborationService
16
16
  from benchling_sdk.services.v2.beta.v2_beta_entry_service import V2BetaEntryService
@@ -28,14 +28,6 @@ class V2BetaService(BaseService):
28
28
  See https://benchling.com/api/v2-beta/reference
29
29
  """
30
30
 
31
- _aa_sequence_service: Optional[V2BetaAaSequenceService]
32
- _app_service: Optional[V2BetaAppService]
33
- _collaboration_service: Optional[V2BetaCollaborationService]
34
- _data_frame_service: Optional[V2BetaDataFrameService]
35
- _entry_service: Optional[V2BetaEntryService]
36
- _folder_service: Optional[V2BetaFolderService]
37
- _project_service: Optional[V2BetaProjectService]
38
- _worklist_service: Optional[V2BetaWorklistService]
39
31
  _beta_client: Client
40
32
 
41
33
  def __init__(self, client: Client, retry_strategy: RetryStrategy = RetryStrategy()):
@@ -47,33 +39,8 @@ class V2BetaService(BaseService):
47
39
  """
48
40
  super().__init__(client, retry_strategy)
49
41
  self._beta_client = v2_beta_client(self.client)
50
- self._aa_sequence_service = None
51
- self._app_service = None
52
- self._collaboration_service = None
53
- self._data_frame_service = None
54
- self._entry_service = None
55
- self._folder_service = None
56
- self._project_service = None
57
- self._worklist_service = None
58
42
 
59
- @property
60
- def aa_sequences(self) -> V2BetaAaSequenceService:
61
- """
62
- V2-Beta AA Sequences.
63
-
64
- AA Sequences are the working units of cells that make everything run (they help make structures, catalyze
65
- reactions and allow for signaling - a kind of internal cell communication). On Benchling, these are comprised
66
- of a string of amino acids and collections of other attributes, such as annotations.
67
-
68
- See https://benchling.com/api/v2-beta/reference#/AA%20Sequences
69
- """
70
- if self._aa_sequence_service is None:
71
- from benchling_sdk.services.v2.beta.v2_beta_aa_sequence_service import V2BetaAaSequenceService
72
-
73
- self._aa_sequence_service = V2BetaAaSequenceService(self._beta_client, self.retry_strategy)
74
- return self._aa_sequence_service
75
-
76
- @property
43
+ @cached_property
77
44
  def apps(self) -> V2BetaAppService:
78
45
  """
79
46
  V2-Beta Apps.
@@ -82,13 +49,11 @@ class V2BetaService(BaseService):
82
49
 
83
50
  https://benchling.com/api/v2-beta/reference?stability=not-available#/Apps
84
51
  """
85
- if self._app_service is None:
86
- from benchling_sdk.services.v2.beta.v2_beta_app_service import V2BetaAppService
52
+ from .beta.v2_beta_app_service import V2BetaAppService
87
53
 
88
- self._app_service = V2BetaAppService(self._beta_client, self.retry_strategy)
89
- return self._app_service
54
+ return self._create_service(V2BetaAppService)
90
55
 
91
- @property
56
+ @cached_property
92
57
  def collaborations(self) -> V2BetaCollaborationService:
93
58
  """
94
59
  V2-Beta Collaborations.
@@ -97,15 +62,11 @@ class V2BetaService(BaseService):
97
62
 
98
63
  See https://benchling.com/api/v2-beta/reference?showLA=true#/Collaborations
99
64
  """
100
- if self._collaboration_service is None:
101
- from benchling_sdk.services.v2.beta.v2_beta_collaboration_service import (
102
- V2BetaCollaborationService,
103
- )
65
+ from .beta.v2_beta_collaboration_service import V2BetaCollaborationService
104
66
 
105
- self._collaboration_service = V2BetaCollaborationService(self._beta_client, self.retry_strategy)
106
- return self._collaboration_service
67
+ return self._create_service(V2BetaCollaborationService)
107
68
 
108
- @property
69
+ @cached_property
109
70
  def data_frames(self) -> V2BetaDataFrameService:
110
71
  """
111
72
  V2-Beta DataFrames.
@@ -114,13 +75,11 @@ class V2BetaService(BaseService):
114
75
 
115
76
  See https://benchling.com/api/v2-beta/reference#/Data%20Frames
116
77
  """
117
- if self._data_frame_service is None:
118
- from benchling_sdk.services.v2.beta.v2_beta_data_frame_service import V2BetaDataFrameService
78
+ from .beta.v2_beta_data_frame_service import V2BetaDataFrameService
119
79
 
120
- self._data_frame_service = V2BetaDataFrameService(self._beta_client, self.retry_strategy)
121
- return self._data_frame_service
80
+ return self._create_service(V2BetaDataFrameService)
122
81
 
123
- @property
82
+ @cached_property
124
83
  def entries(self) -> V2BetaEntryService:
125
84
  """
126
85
  V2-Beta Entries.
@@ -129,13 +88,11 @@ class V2BetaService(BaseService):
129
88
 
130
89
  https://benchling.com/api/v2-beta/reference#/Entries
131
90
  """
132
- if self._entry_service is None:
133
- from benchling_sdk.services.v2.beta.v2_beta_entry_service import V2BetaEntryService
91
+ from .beta.v2_beta_entry_service import V2BetaEntryService
134
92
 
135
- self._entry_service = V2BetaEntryService(self._beta_client, self.retry_strategy)
136
- return self._entry_service
93
+ return self._create_service(V2BetaEntryService)
137
94
 
138
- @property
95
+ @cached_property
139
96
  def folders(self) -> V2BetaFolderService:
140
97
  """
141
98
  V2-Beta Folders.
@@ -144,13 +101,11 @@ class V2BetaService(BaseService):
144
101
 
145
102
  https://benchling.com/api/v2-beta/reference?showLA=true#/Folders
146
103
  """
147
- if self._folder_service is None:
148
- from benchling_sdk.services.v2.beta.v2_beta_folder_service import V2BetaFolderService
104
+ from .beta.v2_beta_folder_service import V2BetaFolderService
149
105
 
150
- self._folder_service = V2BetaFolderService(self._beta_client, self.retry_strategy)
151
- return self._folder_service
106
+ return self._create_service(V2BetaFolderService)
152
107
 
153
- @property
108
+ @cached_property
154
109
  def projects(self) -> V2BetaProjectService:
155
110
  """
156
111
  V2-Beta Projects.
@@ -159,13 +114,11 @@ class V2BetaService(BaseService):
159
114
 
160
115
  See https://benchling.com/api/v2-beta/reference?#/Projects
161
116
  """
162
- if self._project_service is None:
163
- from benchling_sdk.services.v2.beta.v2_beta_project_service import V2BetaProjectService
117
+ from .beta.v2_beta_project_service import V2BetaProjectService
164
118
 
165
- self._project_service = V2BetaProjectService(self._beta_client, self.retry_strategy)
166
- return self._project_service
119
+ return self._create_service(V2BetaProjectService)
167
120
 
168
- @property
121
+ @cached_property
169
122
  def worklists(self) -> V2BetaWorklistService:
170
123
  """
171
124
  V2-Beta Worklists.
@@ -175,8 +128,10 @@ class V2BetaService(BaseService):
175
128
 
176
129
  See https://benchling.com/api/v2-beta/reference#/Worklists
177
130
  """
178
- if self._worklist_service is None:
179
- from benchling_sdk.services.v2.beta.v2_beta_worklist_service import V2BetaWorklistService
131
+ from .beta.v2_beta_worklist_service import V2BetaWorklistService
132
+
133
+ return self._create_service(V2BetaWorklistService)
180
134
 
181
- self._worklist_service = V2BetaWorklistService(self._beta_client, self.retry_strategy)
182
- return self._worklist_service
135
+ def _create_service(self, cls):
136
+ """Instantiate a service using the beta client."""
137
+ return cls(self._beta_client, self._retry_strategy)