benchling-sdk 1.17.0a0__py3-none-any.whl → 1.18.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 +50 -0
- benchling_sdk/errors.py +2 -1
- benchling_sdk/models/__init__.py +159 -3
- benchling_sdk/models/webhooks/v0/__init__.py +27 -37
- benchling_sdk/services/v2/alpha/v2_alpha_assembly_service.py +62 -0
- benchling_sdk/services/v2/beta/v2_beta_analysis_service.py +46 -0
- benchling_sdk/services/v2/beta/v2_beta_app_definition_service.py +45 -0
- benchling_sdk/services/v2/beta/v2_beta_app_service.py +1 -1
- benchling_sdk/services/v2/beta/v2_beta_audit_service.py +41 -0
- benchling_sdk/services/v2/beta/v2_beta_entry_service.py +13 -8
- 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/instrument_query_service.py +28 -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_alpha_service.py +15 -0
- benchling_sdk/services/v2/v2_beta_service.py +43 -1
- benchling_sdk/services/v2/v2_stable_service.py +58 -0
- {benchling_sdk-1.17.0a0.dist-info → benchling_sdk-1.18.0.dist-info}/METADATA +3 -3
- {benchling_sdk-1.17.0a0.dist-info → benchling_sdk-1.18.0.dist-info}/RECORD +25 -19
- benchling_sdk/apps/config/helpers.py +0 -157
- benchling_sdk/apps/config/mock_config.py +0 -635
- {benchling_sdk-1.17.0a0.dist-info → benchling_sdk-1.18.0.dist-info}/LICENSE +0 -0
- {benchling_sdk-1.17.0a0.dist-info → benchling_sdk-1.18.0.dist-info}/WHEEL +0 -0
@@ -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,28 @@
|
|
1
|
+
from benchling_api_client.v2.stable.api.instrument_queries import get_instrument_query
|
2
|
+
|
3
|
+
from benchling_sdk.helpers.decorators import api_method
|
4
|
+
from benchling_sdk.helpers.response_helpers import model_from_detailed
|
5
|
+
from benchling_sdk.models import InstrumentQuery
|
6
|
+
from benchling_sdk.services.v2.base_service import BaseService
|
7
|
+
|
8
|
+
|
9
|
+
class InstrumentQueryService(BaseService):
|
10
|
+
"""
|
11
|
+
Instrument Queries.
|
12
|
+
|
13
|
+
Instrument Queries are used to query the instrument service.
|
14
|
+
|
15
|
+
See https://benchling.com/api/reference#/Instrument%20Queries
|
16
|
+
"""
|
17
|
+
|
18
|
+
@api_method
|
19
|
+
def get_by_id(self, instrument_query_id: str) -> InstrumentQuery:
|
20
|
+
"""
|
21
|
+
Get an instrument query.
|
22
|
+
|
23
|
+
See https://benchling.com/api/reference#/Instrument%20Queries/getInstrumentQuery
|
24
|
+
"""
|
25
|
+
response = get_instrument_query.sync_detailed(
|
26
|
+
client=self.client, instrument_query_id=instrument_query_id
|
27
|
+
)
|
28
|
+
return model_from_detailed(response)
|
@@ -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
|
+
)
|
@@ -10,6 +10,7 @@ from benchling_sdk.helpers.retry_helpers import RetryStrategy
|
|
10
10
|
|
11
11
|
if TYPE_CHECKING:
|
12
12
|
from benchling_sdk.services.v2.alpha.v2_alpha_app_service import V2AlphaAppService
|
13
|
+
from benchling_sdk.services.v2.alpha.v2_alpha_assembly_service import V2AlphaAssemblyService
|
13
14
|
|
14
15
|
from benchling_sdk.services.v2.base_service import BaseService
|
15
16
|
|
@@ -48,6 +49,20 @@ class V2AlphaService(BaseService):
|
|
48
49
|
|
49
50
|
return self._create_service(V2AlphaAppService)
|
50
51
|
|
52
|
+
@cached_property
|
53
|
+
def assemblies(self) -> V2AlphaAssemblyService:
|
54
|
+
"""
|
55
|
+
V2-Alpha Assemblies.
|
56
|
+
|
57
|
+
In Benchling, Assemblies are records of a process in which many fragment sequences are
|
58
|
+
assembled in silico to create new construct sequences.
|
59
|
+
|
60
|
+
https://benchling.com/api/v2-alpha/reference#/Assemblies
|
61
|
+
"""
|
62
|
+
from .alpha.v2_alpha_assembly_service import V2AlphaAssemblyService
|
63
|
+
|
64
|
+
return self._create_service(V2AlphaAssemblyService)
|
65
|
+
|
51
66
|
def _create_service(self, cls):
|
52
67
|
"""Instantiate a service using the alpha client."""
|
53
68
|
return cls(self._alpha_client, self._retry_strategy)
|
@@ -11,7 +11,10 @@ from benchling_sdk.services.v2.base_service import BaseService
|
|
11
11
|
from benchling_sdk.services.v2.beta.v2_beta_data_frame_service import V2BetaDataFrameService
|
12
12
|
|
13
13
|
if TYPE_CHECKING:
|
14
|
+
from benchling_sdk.services.v2.beta.v2_beta_analysis_service import V2BetaAnalysisService
|
15
|
+
from benchling_sdk.services.v2.beta.v2_beta_app_definition_service import V2BetaAppDefinitionService
|
14
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
|
15
18
|
from benchling_sdk.services.v2.beta.v2_beta_collaboration_service import V2BetaCollaborationService
|
16
19
|
from benchling_sdk.services.v2.beta.v2_beta_entry_service import V2BetaEntryService
|
17
20
|
from benchling_sdk.services.v2.beta.v2_beta_folder_service import V2BetaFolderService
|
@@ -40,6 +43,19 @@ class V2BetaService(BaseService):
|
|
40
43
|
super().__init__(client, retry_strategy)
|
41
44
|
self._beta_client = v2_beta_client(self.client)
|
42
45
|
|
46
|
+
@cached_property
|
47
|
+
def analyses(self) -> V2BetaAnalysisService:
|
48
|
+
"""
|
49
|
+
V2-Beta Analyses.
|
50
|
+
|
51
|
+
Analyses allow experimental data to be viewed, analyzed, and visualized.
|
52
|
+
|
53
|
+
https://benchling.com/api/v2-beta/reference#/Analyses
|
54
|
+
"""
|
55
|
+
from .beta.v2_beta_analysis_service import V2BetaAnalysisService
|
56
|
+
|
57
|
+
return self._create_service(V2BetaAnalysisService)
|
58
|
+
|
43
59
|
@cached_property
|
44
60
|
def apps(self) -> V2BetaAppService:
|
45
61
|
"""
|
@@ -47,12 +63,38 @@ class V2BetaService(BaseService):
|
|
47
63
|
|
48
64
|
Create and manage Apps on your tenant.
|
49
65
|
|
50
|
-
https://benchling.com/api/v2-beta/reference
|
66
|
+
https://benchling.com/api/v2-beta/reference#/Apps
|
51
67
|
"""
|
52
68
|
from .beta.v2_beta_app_service import V2BetaAppService
|
53
69
|
|
54
70
|
return self._create_service(V2BetaAppService)
|
55
71
|
|
72
|
+
@cached_property
|
73
|
+
def app_definitions(self) -> V2BetaAppDefinitionService:
|
74
|
+
"""
|
75
|
+
V2-Beta App Definitions.
|
76
|
+
|
77
|
+
Create and manage Benchling app definitions on your tenant.
|
78
|
+
|
79
|
+
https://benchling.com/api/v2-beta/reference#/App%20Definitions
|
80
|
+
"""
|
81
|
+
from .beta.v2_beta_app_definition_service import V2BetaAppDefinitionService
|
82
|
+
|
83
|
+
return self._create_service(V2BetaAppDefinitionService)
|
84
|
+
|
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
|
+
|
56
98
|
@cached_property
|
57
99
|
def collaborations(self) -> V2BetaCollaborationService:
|
58
100
|
"""
|