benchling-sdk 1.15.0a1__py3-none-any.whl → 1.17.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.
- benchling_sdk/benchling.py +38 -0
- benchling_sdk/errors.py +2 -1
- benchling_sdk/models/__init__.py +110 -0
- benchling_sdk/models/webhooks/v0/__init__.py +12 -36
- benchling_sdk/services/v2/stable/aa_sequence_service.py +63 -6
- benchling_sdk/services/v2/stable/codon_usage_table_service.py +73 -0
- benchling_sdk/services/v2/stable/dna_sequence_service.py +12 -0
- benchling_sdk/services/v2/stable/enzyme_service.py +72 -0
- benchling_sdk/services/v2/stable/monomer_service.py +144 -0
- benchling_sdk/services/v2/stable/organization_service.py +104 -2
- benchling_sdk/services/v2/stable/team_service.py +120 -2
- benchling_sdk/services/v2/v2_stable_service.py +44 -0
- {benchling_sdk-1.15.0a1.dist-info → benchling_sdk-1.17.0.dist-info}/METADATA +3 -3
- {benchling_sdk-1.15.0a1.dist-info → benchling_sdk-1.17.0.dist-info}/RECORD +16 -13
- {benchling_sdk-1.15.0a1.dist-info → benchling_sdk-1.17.0.dist-info}/LICENSE +0 -0
- {benchling_sdk-1.15.0a1.dist-info → benchling_sdk-1.17.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,73 @@
|
|
1
|
+
from typing import Iterable, Optional
|
2
|
+
|
3
|
+
from benchling_api_client.v2.stable.api.codon_usage_tables import list_codon_usage_tables
|
4
|
+
from benchling_api_client.v2.types import Response
|
5
|
+
|
6
|
+
from benchling_sdk.errors import raise_for_status
|
7
|
+
from benchling_sdk.helpers.decorators import api_method
|
8
|
+
from benchling_sdk.helpers.pagination_helpers import NextToken, PageIterator
|
9
|
+
from benchling_sdk.helpers.serialization_helpers import none_as_unset, optional_array_query_param
|
10
|
+
from benchling_sdk.models import CodonUsageTable, CodonUsageTablesPaginatedList, ListCodonUsageTablesSort
|
11
|
+
from benchling_sdk.services.v2.base_service import BaseService
|
12
|
+
|
13
|
+
|
14
|
+
class CodonUsageTableService(BaseService):
|
15
|
+
"""
|
16
|
+
Codon Usage Tables.
|
17
|
+
|
18
|
+
Benchling curates codon usage data for a variety of organisms to support operations such as Codon
|
19
|
+
Optimization and Back Translation.
|
20
|
+
|
21
|
+
See https://benchling.com/api/reference#/Codon%20Usage%20Tables
|
22
|
+
"""
|
23
|
+
|
24
|
+
@api_method
|
25
|
+
def _list_page(
|
26
|
+
self,
|
27
|
+
sort: Optional[ListCodonUsageTablesSort] = None,
|
28
|
+
ids: Optional[Iterable[str]] = None,
|
29
|
+
name: Optional[str] = None,
|
30
|
+
name_includes: Optional[str] = None,
|
31
|
+
names_any_of: Optional[Iterable[str]] = [],
|
32
|
+
page_size: Optional[int] = None,
|
33
|
+
next_token: NextToken = None,
|
34
|
+
) -> Response[CodonUsageTablesPaginatedList]:
|
35
|
+
response = list_codon_usage_tables.sync_detailed(
|
36
|
+
client=self.client,
|
37
|
+
ids=none_as_unset(optional_array_query_param(ids)),
|
38
|
+
name=none_as_unset(name),
|
39
|
+
name_includes=none_as_unset(name_includes),
|
40
|
+
namesany_of=none_as_unset(optional_array_query_param(names_any_of)),
|
41
|
+
next_token=none_as_unset(next_token),
|
42
|
+
page_size=none_as_unset(page_size),
|
43
|
+
sort=none_as_unset(sort),
|
44
|
+
)
|
45
|
+
return raise_for_status(response)
|
46
|
+
|
47
|
+
def list(
|
48
|
+
self,
|
49
|
+
sort: Optional[ListCodonUsageTablesSort] = None,
|
50
|
+
ids: Optional[Iterable[str]] = None,
|
51
|
+
name: Optional[str] = None,
|
52
|
+
name_includes: Optional[str] = None,
|
53
|
+
names_any_of: Optional[Iterable[str]] = None,
|
54
|
+
page_size: Optional[int] = None,
|
55
|
+
) -> PageIterator[CodonUsageTable]:
|
56
|
+
"""
|
57
|
+
List codon usage tables.
|
58
|
+
|
59
|
+
See https://benchling.com/api/reference#/Codon%20Usage%20Tables/listCodonUsageTables
|
60
|
+
"""
|
61
|
+
|
62
|
+
def api_call(next_token: NextToken) -> Response[CodonUsageTablesPaginatedList]:
|
63
|
+
return self._list_page(
|
64
|
+
sort=sort,
|
65
|
+
ids=ids,
|
66
|
+
name=name,
|
67
|
+
name_includes=name_includes,
|
68
|
+
names_any_of=names_any_of,
|
69
|
+
page_size=page_size,
|
70
|
+
next_token=next_token,
|
71
|
+
)
|
72
|
+
|
73
|
+
return PageIterator(api_call, lambda result: result.codon_usage_tables)
|
@@ -15,6 +15,7 @@ from benchling_api_client.v2.stable.api.dna_sequences import (
|
|
15
15
|
get_dna_sequence,
|
16
16
|
list_dna_sequences,
|
17
17
|
match_bases_dna_sequences,
|
18
|
+
optimize_codons,
|
18
19
|
search_dna_sequences,
|
19
20
|
unarchive_dna_sequences,
|
20
21
|
update_dna_sequence,
|
@@ -54,6 +55,7 @@ from benchling_sdk.models import (
|
|
54
55
|
EntityArchiveReason,
|
55
56
|
ListDNASequencesSort,
|
56
57
|
MatchBasesRequest,
|
58
|
+
OptimizeCodons,
|
57
59
|
SearchBasesRequest,
|
58
60
|
)
|
59
61
|
from benchling_sdk.services.v2.base_service import BaseService
|
@@ -398,3 +400,13 @@ class DnaSequenceService(BaseService):
|
|
398
400
|
client=self.client, json_body=find_matching_region
|
399
401
|
)
|
400
402
|
return model_from_detailed(response)
|
403
|
+
|
404
|
+
@api_method
|
405
|
+
def optimize_codons(self, optimize_request: OptimizeCodons) -> AsyncTaskLink:
|
406
|
+
"""
|
407
|
+
Create codon-optimized DNA sequences.
|
408
|
+
|
409
|
+
See https://benchling.com/api/reference#/DNA%20Sequences/optimizeCodons
|
410
|
+
"""
|
411
|
+
response = optimize_codons.sync_detailed(client=self.client, json_body=optimize_request)
|
412
|
+
return model_from_detailed(response)
|
@@ -0,0 +1,72 @@
|
|
1
|
+
from typing import Iterable, Optional
|
2
|
+
|
3
|
+
from benchling_api_client.v2.stable.api.enzymes import list_enzymes
|
4
|
+
from benchling_api_client.v2.types import Response
|
5
|
+
|
6
|
+
from benchling_sdk.errors import raise_for_status
|
7
|
+
from benchling_sdk.helpers.decorators import api_method
|
8
|
+
from benchling_sdk.helpers.pagination_helpers import NextToken, PageIterator
|
9
|
+
from benchling_sdk.helpers.serialization_helpers import none_as_unset, optional_array_query_param
|
10
|
+
from benchling_sdk.models import Enzyme, EnzymesPaginatedList, ListEnzymesSort
|
11
|
+
from benchling_sdk.services.v2.base_service import BaseService
|
12
|
+
|
13
|
+
|
14
|
+
class EnzymeService(BaseService):
|
15
|
+
"""
|
16
|
+
Enzymes.
|
17
|
+
|
18
|
+
Restriction enzymes are curated by Benchling for operations such as Digests and Codon Optimization.
|
19
|
+
|
20
|
+
See https://benchling.com/api/reference#/Enzymes
|
21
|
+
"""
|
22
|
+
|
23
|
+
@api_method
|
24
|
+
def _list_page(
|
25
|
+
self,
|
26
|
+
sort: Optional[ListEnzymesSort] = None,
|
27
|
+
ids: Optional[Iterable[str]] = None,
|
28
|
+
name: Optional[str] = None,
|
29
|
+
name_includes: Optional[str] = None,
|
30
|
+
names_any_of: Optional[Iterable[str]] = [],
|
31
|
+
page_size: Optional[int] = None,
|
32
|
+
next_token: NextToken = None,
|
33
|
+
) -> Response[EnzymesPaginatedList]:
|
34
|
+
response = list_enzymes.sync_detailed(
|
35
|
+
client=self.client,
|
36
|
+
ids=none_as_unset(optional_array_query_param(ids)),
|
37
|
+
name=none_as_unset(name),
|
38
|
+
name_includes=none_as_unset(name_includes),
|
39
|
+
namesany_of=none_as_unset(optional_array_query_param(names_any_of)),
|
40
|
+
next_token=none_as_unset(next_token),
|
41
|
+
page_size=none_as_unset(page_size),
|
42
|
+
sort=none_as_unset(sort),
|
43
|
+
)
|
44
|
+
return raise_for_status(response)
|
45
|
+
|
46
|
+
def list(
|
47
|
+
self,
|
48
|
+
sort: Optional[ListEnzymesSort] = None,
|
49
|
+
ids: Optional[Iterable[str]] = None,
|
50
|
+
name: Optional[str] = None,
|
51
|
+
name_includes: Optional[str] = None,
|
52
|
+
names_any_of: Optional[Iterable[str]] = None,
|
53
|
+
page_size: Optional[int] = None,
|
54
|
+
) -> PageIterator[Enzyme]:
|
55
|
+
"""
|
56
|
+
List enzymes.
|
57
|
+
|
58
|
+
See https://benchling.com/api/reference#/Enzymes/listEnzymes
|
59
|
+
"""
|
60
|
+
|
61
|
+
def api_call(next_token: NextToken) -> Response[EnzymesPaginatedList]:
|
62
|
+
return self._list_page(
|
63
|
+
sort=sort,
|
64
|
+
ids=ids,
|
65
|
+
name=name,
|
66
|
+
name_includes=name_includes,
|
67
|
+
names_any_of=names_any_of,
|
68
|
+
page_size=page_size,
|
69
|
+
next_token=next_token,
|
70
|
+
)
|
71
|
+
|
72
|
+
return PageIterator(api_call, lambda result: result.enzymes)
|
@@ -0,0 +1,144 @@
|
|
1
|
+
from typing import Iterable, Optional
|
2
|
+
|
3
|
+
from benchling_api_client.v2.stable.api.monomers import (
|
4
|
+
archive_monomers,
|
5
|
+
create_monomer,
|
6
|
+
list_monomers,
|
7
|
+
unarchive_monomers,
|
8
|
+
update_monomer,
|
9
|
+
)
|
10
|
+
from benchling_api_client.v2.types import Response
|
11
|
+
|
12
|
+
from benchling_sdk.errors import raise_for_status
|
13
|
+
from benchling_sdk.helpers.decorators import api_method
|
14
|
+
from benchling_sdk.helpers.pagination_helpers import NextToken, PageIterator
|
15
|
+
from benchling_sdk.helpers.response_helpers import model_from_detailed
|
16
|
+
from benchling_sdk.helpers.serialization_helpers import none_as_unset, optional_array_query_param
|
17
|
+
from benchling_sdk.models import (
|
18
|
+
Monomer,
|
19
|
+
MonomerCreate,
|
20
|
+
MonomersArchivalChange,
|
21
|
+
MonomersArchive,
|
22
|
+
MonomersArchiveReason,
|
23
|
+
MonomersPaginatedList,
|
24
|
+
MonomersUnarchive,
|
25
|
+
MonomerUpdate,
|
26
|
+
)
|
27
|
+
from benchling_sdk.services.v2.base_service import BaseService
|
28
|
+
|
29
|
+
|
30
|
+
class MonomerService(BaseService):
|
31
|
+
"""
|
32
|
+
Monomers.
|
33
|
+
|
34
|
+
Monomers are chemical building blocks with specified structures used to compose modified
|
35
|
+
nucleotides. Note that monomer write endpoints require tenant admin permissions.
|
36
|
+
|
37
|
+
See https://benchling.com/api/reference#/Monomers
|
38
|
+
"""
|
39
|
+
|
40
|
+
@api_method
|
41
|
+
def _list_page(
|
42
|
+
self,
|
43
|
+
page_size: Optional[int] = None,
|
44
|
+
next_token: NextToken = None,
|
45
|
+
returning: Optional[Iterable[str]] = None,
|
46
|
+
) -> Response[MonomersPaginatedList]:
|
47
|
+
response = list_monomers.sync_detailed(
|
48
|
+
client=self.client,
|
49
|
+
next_token=none_as_unset(next_token),
|
50
|
+
page_size=none_as_unset(page_size),
|
51
|
+
returning=none_as_unset(optional_array_query_param(returning)),
|
52
|
+
)
|
53
|
+
return raise_for_status(response)
|
54
|
+
|
55
|
+
def list(
|
56
|
+
self,
|
57
|
+
page_size: Optional[int] = None,
|
58
|
+
returning: Optional[Iterable[str]] = None,
|
59
|
+
) -> PageIterator[Monomer]:
|
60
|
+
"""
|
61
|
+
List monomers.
|
62
|
+
|
63
|
+
See https://benchling.com/api/reference#/Monomers/listMonomers
|
64
|
+
"""
|
65
|
+
|
66
|
+
def api_call(next_token: NextToken) -> Response[MonomersPaginatedList]:
|
67
|
+
return self._list_page(
|
68
|
+
page_size=page_size,
|
69
|
+
next_token=next_token,
|
70
|
+
returning=returning,
|
71
|
+
)
|
72
|
+
|
73
|
+
return PageIterator(api_call, lambda result: result.monomers)
|
74
|
+
|
75
|
+
@api_method
|
76
|
+
def create(
|
77
|
+
self,
|
78
|
+
monomer: MonomerCreate,
|
79
|
+
returning: Optional[Iterable[str]] = None,
|
80
|
+
) -> Monomer:
|
81
|
+
"""
|
82
|
+
Create a monomer.
|
83
|
+
|
84
|
+
See https://benchling.com/api/reference#/Monomers/createMonomer
|
85
|
+
"""
|
86
|
+
response = create_monomer.sync_detailed(
|
87
|
+
client=self.client,
|
88
|
+
json_body=monomer,
|
89
|
+
returning=none_as_unset(optional_array_query_param(returning)),
|
90
|
+
)
|
91
|
+
return model_from_detailed(response)
|
92
|
+
|
93
|
+
@api_method
|
94
|
+
def update(
|
95
|
+
self,
|
96
|
+
monomer_id: str,
|
97
|
+
monomer: MonomerUpdate,
|
98
|
+
returning: Optional[Iterable[str]] = None,
|
99
|
+
) -> Monomer:
|
100
|
+
"""
|
101
|
+
Update a Monomer.
|
102
|
+
|
103
|
+
See https://benchling.com/api/reference#/Monomers/updateMonomer
|
104
|
+
"""
|
105
|
+
response = update_monomer.sync_detailed(
|
106
|
+
client=self.client,
|
107
|
+
monomer_id=monomer_id,
|
108
|
+
json_body=monomer,
|
109
|
+
returning=none_as_unset(optional_array_query_param(returning)),
|
110
|
+
)
|
111
|
+
return model_from_detailed(response)
|
112
|
+
|
113
|
+
@api_method
|
114
|
+
def archive(
|
115
|
+
self,
|
116
|
+
monomer_ids: Iterable[str],
|
117
|
+
reason: MonomersArchiveReason,
|
118
|
+
) -> MonomersArchivalChange:
|
119
|
+
"""
|
120
|
+
Archive Monomers.
|
121
|
+
|
122
|
+
See https://benchling.com/api/reference#/Monomers/archiveMonomers
|
123
|
+
"""
|
124
|
+
response = archive_monomers.sync_detailed(
|
125
|
+
client=self.client,
|
126
|
+
json_body=MonomersArchive(monomer_ids=list(monomer_ids), reason=reason),
|
127
|
+
)
|
128
|
+
return model_from_detailed(response)
|
129
|
+
|
130
|
+
@api_method
|
131
|
+
def unarchive(
|
132
|
+
self,
|
133
|
+
monomer_ids: Iterable[str],
|
134
|
+
) -> MonomersArchivalChange:
|
135
|
+
"""
|
136
|
+
Unarchive Monomers.
|
137
|
+
|
138
|
+
See https://benchling.com/api/reference#/Monomers/unarchiveMonomers
|
139
|
+
"""
|
140
|
+
response = unarchive_monomers.sync_detailed(
|
141
|
+
client=self.client,
|
142
|
+
json_body=MonomersUnarchive(monomer_ids=list(monomer_ids)),
|
143
|
+
)
|
144
|
+
return model_from_detailed(response)
|
@@ -1,6 +1,14 @@
|
|
1
1
|
from typing import Iterable, List, Optional, Union
|
2
2
|
|
3
|
-
from benchling_api_client.v2.stable.api.organizations import
|
3
|
+
from benchling_api_client.v2.stable.api.organizations import (
|
4
|
+
create_organization_membership,
|
5
|
+
delete_organization_membership,
|
6
|
+
get_organization,
|
7
|
+
get_organization_membership,
|
8
|
+
list_organization_memberships,
|
9
|
+
list_organizations,
|
10
|
+
update_organization_membership,
|
11
|
+
)
|
4
12
|
from benchling_api_client.v2.types import Response
|
5
13
|
|
6
14
|
from benchling_sdk.errors import raise_for_status
|
@@ -10,7 +18,15 @@ from benchling_sdk.helpers.logging_helpers import log_not_implemented
|
|
10
18
|
from benchling_sdk.helpers.pagination_helpers import NextToken, PageIterator
|
11
19
|
from benchling_sdk.helpers.response_helpers import model_from_detailed
|
12
20
|
from benchling_sdk.helpers.serialization_helpers import none_as_unset, optional_array_query_param
|
13
|
-
from benchling_sdk.models import
|
21
|
+
from benchling_sdk.models import (
|
22
|
+
ListOrganizationsSort,
|
23
|
+
Membership,
|
24
|
+
MembershipCreate,
|
25
|
+
MembershipsPaginatedList,
|
26
|
+
MembershipUpdate,
|
27
|
+
Organization,
|
28
|
+
OrganizationsPaginatedList,
|
29
|
+
)
|
14
30
|
from benchling_sdk.services.v2.base_service import BaseService
|
15
31
|
|
16
32
|
|
@@ -116,3 +132,89 @@ class OrganizationService(BaseService):
|
|
116
132
|
return body.organizations
|
117
133
|
|
118
134
|
return PageIterator(api_call, results_extractor)
|
135
|
+
|
136
|
+
@api_method
|
137
|
+
def _list_memberships_page(
|
138
|
+
self,
|
139
|
+
organization_id: str,
|
140
|
+
role: Optional[str],
|
141
|
+
page_size: Optional[int],
|
142
|
+
next_token: NextToken,
|
143
|
+
) -> Response[MembershipsPaginatedList]:
|
144
|
+
response = list_organization_memberships.sync_detailed(
|
145
|
+
client=self.client,
|
146
|
+
organization_id=organization_id,
|
147
|
+
page_size=none_as_unset(page_size),
|
148
|
+
next_token=next_token,
|
149
|
+
role=none_as_unset(role),
|
150
|
+
)
|
151
|
+
raise_for_status(response)
|
152
|
+
return response # type: ignore
|
153
|
+
|
154
|
+
def list_memberships(
|
155
|
+
self,
|
156
|
+
organization_id: str,
|
157
|
+
role: Optional[str] = None,
|
158
|
+
page_size: Optional[int] = None,
|
159
|
+
) -> PageIterator[MembershipsPaginatedList]:
|
160
|
+
"""Return all organization memberships in the given organization.
|
161
|
+
|
162
|
+
See https://benchling.com/api/reference#/Organizations/listOrganizationMemberships
|
163
|
+
"""
|
164
|
+
|
165
|
+
def api_call(next_token: NextToken) -> Response[MembershipsPaginatedList]:
|
166
|
+
return self._list_memberships_page(organization_id, role, page_size, next_token)
|
167
|
+
|
168
|
+
return PageIterator(api_call, lambda body: body.memberships)
|
169
|
+
|
170
|
+
@api_method
|
171
|
+
def get_membership(self, organization_id: str, user_id: str) -> Membership:
|
172
|
+
"""Get organization membership.
|
173
|
+
|
174
|
+
See https://benchling.com/api/reference#/Organizations/getOrganizationMembership
|
175
|
+
"""
|
176
|
+
response = get_organization_membership.sync_detailed(
|
177
|
+
client=self.client, organization_id=organization_id, user_id=user_id
|
178
|
+
)
|
179
|
+
return model_from_detailed(response)
|
180
|
+
|
181
|
+
@api_method
|
182
|
+
def create_membership(self, organization_id: str, membership: MembershipCreate) -> Membership:
|
183
|
+
"""Create organization membership.
|
184
|
+
|
185
|
+
See https://benchling.com/api/reference#/Organizations/createOrganizationMembership
|
186
|
+
"""
|
187
|
+
response = create_organization_membership.sync_detailed(
|
188
|
+
client=self.client,
|
189
|
+
organization_id=organization_id,
|
190
|
+
json_body=membership,
|
191
|
+
)
|
192
|
+
return model_from_detailed(response)
|
193
|
+
|
194
|
+
@api_method
|
195
|
+
def update_membership(
|
196
|
+
self, organization_id: str, user_id: str, membership: MembershipUpdate
|
197
|
+
) -> Membership:
|
198
|
+
"""Update organization membership by user ID and organization ID.
|
199
|
+
|
200
|
+
See https://benchling.com/api/reference#/Organizations/updateOrganizationMembership
|
201
|
+
"""
|
202
|
+
response = update_organization_membership.sync_detailed(
|
203
|
+
client=self.client,
|
204
|
+
organization_id=organization_id,
|
205
|
+
user_id=user_id,
|
206
|
+
json_body=membership,
|
207
|
+
)
|
208
|
+
return model_from_detailed(response)
|
209
|
+
|
210
|
+
@api_method
|
211
|
+
def delete_membership(self, organization_id: str, user_id: str) -> None:
|
212
|
+
"""Delete a single team membership.
|
213
|
+
|
214
|
+
See https://benchling.com/api/reference#/Organizations/deleteOrganizationMembership
|
215
|
+
"""
|
216
|
+
raise_for_status(
|
217
|
+
delete_organization_membership.sync_detailed(
|
218
|
+
client=self.client, organization_id=organization_id, user_id=user_id
|
219
|
+
)
|
220
|
+
)
|
@@ -1,6 +1,16 @@
|
|
1
1
|
from typing import Iterable, List, Optional, Union
|
2
2
|
|
3
|
-
from benchling_api_client.v2.stable.api.teams import
|
3
|
+
from benchling_api_client.v2.stable.api.teams import (
|
4
|
+
create_team,
|
5
|
+
create_team_membership,
|
6
|
+
delete_team_membership,
|
7
|
+
get_team,
|
8
|
+
get_team_membership,
|
9
|
+
list_team_memberships,
|
10
|
+
list_teams,
|
11
|
+
update_team,
|
12
|
+
update_team_membership,
|
13
|
+
)
|
4
14
|
from benchling_api_client.v2.types import Response
|
5
15
|
|
6
16
|
from benchling_sdk.errors import raise_for_status
|
@@ -9,7 +19,17 @@ from benchling_sdk.helpers.decorators import api_method
|
|
9
19
|
from benchling_sdk.helpers.pagination_helpers import NextToken, PageIterator
|
10
20
|
from benchling_sdk.helpers.response_helpers import model_from_detailed
|
11
21
|
from benchling_sdk.helpers.serialization_helpers import none_as_unset, optional_array_query_param
|
12
|
-
from benchling_sdk.models import
|
22
|
+
from benchling_sdk.models import (
|
23
|
+
ListTeamsSort,
|
24
|
+
Membership,
|
25
|
+
MembershipCreate,
|
26
|
+
MembershipsPaginatedList,
|
27
|
+
MembershipUpdate,
|
28
|
+
Team,
|
29
|
+
TeamCreate,
|
30
|
+
TeamsPaginatedList,
|
31
|
+
TeamUpdate,
|
32
|
+
)
|
13
33
|
from benchling_sdk.services.v2.base_service import BaseService
|
14
34
|
|
15
35
|
|
@@ -116,3 +136,101 @@ class TeamService(BaseService):
|
|
116
136
|
return body.teams
|
117
137
|
|
118
138
|
return PageIterator(api_call, results_extractor)
|
139
|
+
|
140
|
+
@api_method
|
141
|
+
def create(self, team: TeamCreate) -> Team:
|
142
|
+
"""Create team.
|
143
|
+
|
144
|
+
See https://benchling.com/api/reference#/Teams/createTeam
|
145
|
+
"""
|
146
|
+
response = create_team.sync_detailed(client=self.client, json_body=team)
|
147
|
+
return model_from_detailed(response)
|
148
|
+
|
149
|
+
@api_method
|
150
|
+
def update(self, team_id: str, team: TeamUpdate) -> Team:
|
151
|
+
"""Update team.
|
152
|
+
|
153
|
+
See https://benchling.com/api/reference#/Teams/updateTeam
|
154
|
+
"""
|
155
|
+
response = update_team.sync_detailed(client=self.client, team_id=team_id, json_body=team)
|
156
|
+
return model_from_detailed(response)
|
157
|
+
|
158
|
+
@api_method
|
159
|
+
def _list_memberships_page(
|
160
|
+
self,
|
161
|
+
team_id: str,
|
162
|
+
role: Optional[str],
|
163
|
+
page_size: Optional[int],
|
164
|
+
next_token: NextToken,
|
165
|
+
) -> Response[MembershipsPaginatedList]:
|
166
|
+
response = list_team_memberships.sync_detailed(
|
167
|
+
client=self.client,
|
168
|
+
team_id=team_id,
|
169
|
+
page_size=none_as_unset(page_size),
|
170
|
+
next_token=next_token,
|
171
|
+
role=none_as_unset(role),
|
172
|
+
)
|
173
|
+
raise_for_status(response)
|
174
|
+
return response # type: ignore
|
175
|
+
|
176
|
+
def list_memberships(
|
177
|
+
self,
|
178
|
+
team_id: str,
|
179
|
+
role: Optional[str] = None,
|
180
|
+
page_size: Optional[int] = None,
|
181
|
+
) -> PageIterator[MembershipsPaginatedList]:
|
182
|
+
"""Return all team memberships in the given team.
|
183
|
+
|
184
|
+
See https://benchling.com/api/reference#/Teams/listTeamMemberships
|
185
|
+
"""
|
186
|
+
|
187
|
+
def api_call(next_token: NextToken) -> Response[MembershipsPaginatedList]:
|
188
|
+
return self._list_memberships_page(team_id, role, page_size, next_token)
|
189
|
+
|
190
|
+
return PageIterator(api_call, lambda body: body.memberships)
|
191
|
+
|
192
|
+
@api_method
|
193
|
+
def get_membership(self, team_id: str, user_id: str) -> Membership:
|
194
|
+
"""Get team membership.
|
195
|
+
|
196
|
+
See https://benchling.com/api/reference#/Teams/getTeamMembership
|
197
|
+
"""
|
198
|
+
response = get_team_membership.sync_detailed(client=self.client, team_id=team_id, user_id=user_id)
|
199
|
+
return model_from_detailed(response)
|
200
|
+
|
201
|
+
@api_method
|
202
|
+
def create_membership(self, team_id: str, membership: MembershipCreate) -> Membership:
|
203
|
+
"""Create team membership for the given user, role, and team.
|
204
|
+
|
205
|
+
See https://benchling.com/api/reference#/Teams/createTeamMembership
|
206
|
+
"""
|
207
|
+
response = create_team_membership.sync_detailed(
|
208
|
+
client=self.client,
|
209
|
+
team_id=team_id,
|
210
|
+
json_body=membership,
|
211
|
+
)
|
212
|
+
return model_from_detailed(response)
|
213
|
+
|
214
|
+
@api_method
|
215
|
+
def update_membership(self, team_id: str, user_id: str, membership: MembershipUpdate) -> Membership:
|
216
|
+
"""Update a single team membership.
|
217
|
+
|
218
|
+
See https://benchling.com/api/reference#/Teams/updateTeamMembership
|
219
|
+
"""
|
220
|
+
response = update_team_membership.sync_detailed(
|
221
|
+
client=self.client,
|
222
|
+
team_id=team_id,
|
223
|
+
user_id=user_id,
|
224
|
+
json_body=membership,
|
225
|
+
)
|
226
|
+
return model_from_detailed(response)
|
227
|
+
|
228
|
+
@api_method
|
229
|
+
def delete_membership(self, team_id: str, user_id: str) -> None:
|
230
|
+
"""Delete a single team membership.
|
231
|
+
|
232
|
+
See https://benchling.com/api/reference#/Teams/deleteTeamMembership
|
233
|
+
"""
|
234
|
+
raise_for_status(
|
235
|
+
delete_team_membership.sync_detailed(client=self.client, team_id=team_id, user_id=user_id)
|
236
|
+
)
|
@@ -16,6 +16,7 @@ if TYPE_CHECKING:
|
|
16
16
|
from benchling_sdk.services.v2.stable.assay_run_service import AssayRunService
|
17
17
|
from benchling_sdk.services.v2.stable.blob_service import BlobService
|
18
18
|
from benchling_sdk.services.v2.stable.box_service import BoxService
|
19
|
+
from benchling_sdk.services.v2.stable.codon_usage_table_service import CodonUsageTableService
|
19
20
|
from benchling_sdk.services.v2.stable.container_service import ContainerService
|
20
21
|
from benchling_sdk.services.v2.stable.custom_entity_service import CustomEntityService
|
21
22
|
from benchling_sdk.services.v2.stable.custom_notation_service import CustomNotationService
|
@@ -25,6 +26,7 @@ if TYPE_CHECKING:
|
|
25
26
|
from benchling_sdk.services.v2.stable.dropdown_service import DropdownService
|
26
27
|
from benchling_sdk.services.v2.stable.entity_service import EntityService
|
27
28
|
from benchling_sdk.services.v2.stable.entry_service import EntryService
|
29
|
+
from benchling_sdk.services.v2.stable.enzyme_service import EnzymeService
|
28
30
|
from benchling_sdk.services.v2.stable.event_service import EventService
|
29
31
|
from benchling_sdk.services.v2.stable.export_service import ExportService
|
30
32
|
from benchling_sdk.services.v2.stable.feature_library_service import FeatureLibraryService
|
@@ -35,6 +37,7 @@ if TYPE_CHECKING:
|
|
35
37
|
from benchling_sdk.services.v2.stable.location_service import LocationService
|
36
38
|
from benchling_sdk.services.v2.stable.mixture_service import MixtureService
|
37
39
|
from benchling_sdk.services.v2.stable.molecule_service import MoleculeService
|
40
|
+
from benchling_sdk.services.v2.stable.monomer_service import MonomerService
|
38
41
|
from benchling_sdk.services.v2.stable.nucleotide_alignments_service import NucleotideAlignmentsService
|
39
42
|
from benchling_sdk.services.v2.stable.oligo_service import OligoService
|
40
43
|
from benchling_sdk.services.v2.stable.organization_service import OrganizationService
|
@@ -179,6 +182,20 @@ class V2StableService(BaseService):
|
|
179
182
|
|
180
183
|
return self._create_service(BoxService)
|
181
184
|
|
185
|
+
@cached_property
|
186
|
+
def codon_usage_tables(self) -> CodonUsageTableService:
|
187
|
+
"""
|
188
|
+
Codon Usage Tables.
|
189
|
+
|
190
|
+
Benchling curates codon usage data for a variety of organisms to support operations such as Codon
|
191
|
+
Optimization and Back Translation.
|
192
|
+
|
193
|
+
See https://benchling.com/api/reference#/Codon%20Usage%20Tables
|
194
|
+
"""
|
195
|
+
from .stable.codon_usage_table_service import CodonUsageTableService
|
196
|
+
|
197
|
+
return self._create_service(CodonUsageTableService)
|
198
|
+
|
182
199
|
@cached_property
|
183
200
|
def containers(self) -> ContainerService:
|
184
201
|
"""
|
@@ -323,6 +340,19 @@ class V2StableService(BaseService):
|
|
323
340
|
|
324
341
|
return self._create_service(EntryService)
|
325
342
|
|
343
|
+
@cached_property
|
344
|
+
def enzymes(self) -> EnzymeService:
|
345
|
+
"""
|
346
|
+
Enzymes.
|
347
|
+
|
348
|
+
Restriction enzymes are curated by Benchling for operations such as Digests and Codon Optimization.
|
349
|
+
|
350
|
+
See https://benchling.com/api/reference#/Enzymes
|
351
|
+
"""
|
352
|
+
from .stable.enzyme_service import EnzymeService
|
353
|
+
|
354
|
+
return self._create_service(EnzymeService)
|
355
|
+
|
326
356
|
@cached_property
|
327
357
|
def events(self) -> EventService:
|
328
358
|
"""
|
@@ -444,6 +474,20 @@ class V2StableService(BaseService):
|
|
444
474
|
|
445
475
|
return self._create_service(MixtureService)
|
446
476
|
|
477
|
+
@cached_property
|
478
|
+
def monomers(self) -> MonomerService:
|
479
|
+
"""
|
480
|
+
Monomers.
|
481
|
+
|
482
|
+
Monomers are chemical building blocks with specified structures used to compose modified
|
483
|
+
nucleotides. Note that monomer write endpoints require tenant admin permissions.
|
484
|
+
|
485
|
+
See https://benchling.com/api/reference#/Monomers
|
486
|
+
"""
|
487
|
+
from .stable.monomer_service import MonomerService
|
488
|
+
|
489
|
+
return self._create_service(MonomerService)
|
490
|
+
|
447
491
|
@cached_property
|
448
492
|
def molecules(self) -> MoleculeService:
|
449
493
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: benchling-sdk
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.17.0
|
4
4
|
Summary: SDK for interacting with the Benchling Platform.
|
5
5
|
License: Apache-2.0
|
6
6
|
Author: Benchling Support
|
@@ -15,9 +15,9 @@ Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Provides-Extra: cryptography
|
16
16
|
Provides-Extra: python-jose
|
17
17
|
Requires-Dist: PyYAML (>=6.0,<7.0)
|
18
|
-
Requires-Dist: attrs (>=20.1.0
|
18
|
+
Requires-Dist: attrs (>=20.1.0)
|
19
19
|
Requires-Dist: backoff (>=1.10.0,<3)
|
20
|
-
Requires-Dist: benchling-api-client (==2.0.
|
20
|
+
Requires-Dist: benchling-api-client (==2.0.317)
|
21
21
|
Requires-Dist: certifi (>=2022.12.7)
|
22
22
|
Requires-Dist: cryptography (>=42.0.0) ; extra == "cryptography"
|
23
23
|
Requires-Dist: dataclasses-json (>=0.5.2,<0.6.0)
|