benchling-api-client 2.0.417__py3-none-any.whl → 2.0.419__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. benchling_api_client/models/back_translate.py +85 -1
  2. benchling_api_client/models/back_translate_gc_content_range.py +98 -0
  3. benchling_api_client/models/back_translate_method.py +21 -0
  4. benchling_api_client/models/optimize_codons.py +85 -1
  5. benchling_api_client/models/optimize_codons_gc_content_range.py +98 -0
  6. benchling_api_client/models/optimize_codons_method.py +21 -0
  7. benchling_api_client/models/reduced_pattern.py +3 -1
  8. benchling_api_client/v2/alpha/models/benchling_app_manifest_feature_canvas_locations.py +1 -0
  9. benchling_api_client/v2/alpha/openapi.yaml +1 -0
  10. benchling_api_client/v2/beta/models/benchling_app_manifest_feature_canvas_locations.py +1 -0
  11. benchling_api_client/v2/beta/models/entry_beta_review_record.py +49 -0
  12. benchling_api_client/v2/beta/models/entry_review_process.py +252 -0
  13. benchling_api_client/v2/beta/models/entry_review_process_completion_status.py +27 -0
  14. benchling_api_client/v2/beta/models/entry_review_process_stages_item.py +211 -0
  15. benchling_api_client/v2/beta/models/entry_review_process_stages_item_action_label.py +27 -0
  16. benchling_api_client/v2/beta/models/entry_review_process_stages_item_reviewers_item.py +195 -0
  17. benchling_api_client/v2/beta/models/entry_review_process_stages_item_reviewers_item_status.py +25 -0
  18. benchling_api_client/v2/beta/models/entry_review_process_type.py +22 -0
  19. benchling_api_client/v2/beta/models/worksheet_review_changes_review_record.py +49 -0
  20. benchling_api_client/v2/beta/openapi.yaml +77 -0
  21. benchling_api_client/v2/stable/models/back_translate.py +85 -1
  22. benchling_api_client/v2/stable/models/back_translate_gc_content_range.py +98 -0
  23. benchling_api_client/v2/stable/models/back_translate_method.py +21 -0
  24. benchling_api_client/v2/stable/models/optimize_codons.py +85 -1
  25. benchling_api_client/v2/stable/models/optimize_codons_gc_content_range.py +98 -0
  26. benchling_api_client/v2/stable/models/optimize_codons_method.py +21 -0
  27. benchling_api_client/v2/stable/models/reduced_pattern.py +3 -1
  28. benchling_api_client/v2/stable/openapi.yaml +78 -11
  29. {benchling_api_client-2.0.417.dist-info → benchling_api_client-2.0.419.dist-info}/METADATA +1 -1
  30. {benchling_api_client-2.0.417.dist-info → benchling_api_client-2.0.419.dist-info}/RECORD +32 -17
  31. {benchling_api_client-2.0.417.dist-info → benchling_api_client-2.0.419.dist-info}/LICENSE +0 -0
  32. {benchling_api_client-2.0.417.dist-info → benchling_api_client-2.0.419.dist-info}/WHEEL +0 -0
@@ -0,0 +1,195 @@
1
+ from typing import Any, cast, Dict, List, Optional, Type, TypeVar, Union
2
+
3
+ import attr
4
+
5
+ from ..extensions import NotPresentError
6
+ from ..models.entry_review_process_stages_item_reviewers_item_status import (
7
+ EntryReviewProcessStagesItemReviewersItemStatus,
8
+ )
9
+ from ..types import UNSET, Unset
10
+
11
+ T = TypeVar("T", bound="EntryReviewProcessStagesItemReviewersItem")
12
+
13
+
14
+ @attr.s(auto_attribs=True, repr=False)
15
+ class EntryReviewProcessStagesItemReviewersItem:
16
+ """ """
17
+
18
+ _status: Union[Unset, EntryReviewProcessStagesItemReviewersItemStatus] = UNSET
19
+ _handle: Union[Unset, str] = UNSET
20
+ _id: Union[Unset, str] = UNSET
21
+ _name: Union[Unset, str] = UNSET
22
+ additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
23
+
24
+ def __repr__(self):
25
+ fields = []
26
+ fields.append("status={}".format(repr(self._status)))
27
+ fields.append("handle={}".format(repr(self._handle)))
28
+ fields.append("id={}".format(repr(self._id)))
29
+ fields.append("name={}".format(repr(self._name)))
30
+ fields.append("additional_properties={}".format(repr(self.additional_properties)))
31
+ return "EntryReviewProcessStagesItemReviewersItem({})".format(", ".join(fields))
32
+
33
+ def to_dict(self) -> Dict[str, Any]:
34
+ status: Union[Unset, int] = UNSET
35
+ if not isinstance(self._status, Unset):
36
+ status = self._status.value
37
+
38
+ handle = self._handle
39
+ id = self._id
40
+ name = self._name
41
+
42
+ field_dict: Dict[str, Any] = {}
43
+ field_dict.update(self.additional_properties)
44
+ # Allow the model to serialize even if it was created outside of the constructor, circumventing validation
45
+ if status is not UNSET:
46
+ field_dict["status"] = status
47
+ if handle is not UNSET:
48
+ field_dict["handle"] = handle
49
+ if id is not UNSET:
50
+ field_dict["id"] = id
51
+ if name is not UNSET:
52
+ field_dict["name"] = name
53
+
54
+ return field_dict
55
+
56
+ @classmethod
57
+ def from_dict(cls: Type[T], src_dict: Dict[str, Any], strict: bool = False) -> T:
58
+ d = src_dict.copy()
59
+
60
+ def get_status() -> Union[Unset, EntryReviewProcessStagesItemReviewersItemStatus]:
61
+ status = UNSET
62
+ _status = d.pop("status")
63
+ if _status is not None and _status is not UNSET:
64
+ try:
65
+ status = EntryReviewProcessStagesItemReviewersItemStatus(_status)
66
+ except ValueError:
67
+ status = EntryReviewProcessStagesItemReviewersItemStatus.of_unknown(_status)
68
+
69
+ return status
70
+
71
+ try:
72
+ status = get_status()
73
+ except KeyError:
74
+ if strict:
75
+ raise
76
+ status = cast(Union[Unset, EntryReviewProcessStagesItemReviewersItemStatus], UNSET)
77
+
78
+ def get_handle() -> Union[Unset, str]:
79
+ handle = d.pop("handle")
80
+ return handle
81
+
82
+ try:
83
+ handle = get_handle()
84
+ except KeyError:
85
+ if strict:
86
+ raise
87
+ handle = cast(Union[Unset, str], UNSET)
88
+
89
+ def get_id() -> Union[Unset, str]:
90
+ id = d.pop("id")
91
+ return id
92
+
93
+ try:
94
+ id = get_id()
95
+ except KeyError:
96
+ if strict:
97
+ raise
98
+ id = cast(Union[Unset, str], UNSET)
99
+
100
+ def get_name() -> Union[Unset, str]:
101
+ name = d.pop("name")
102
+ return name
103
+
104
+ try:
105
+ name = get_name()
106
+ except KeyError:
107
+ if strict:
108
+ raise
109
+ name = cast(Union[Unset, str], UNSET)
110
+
111
+ entry_review_process_stages_item_reviewers_item = cls(
112
+ status=status,
113
+ handle=handle,
114
+ id=id,
115
+ name=name,
116
+ )
117
+
118
+ entry_review_process_stages_item_reviewers_item.additional_properties = d
119
+ return entry_review_process_stages_item_reviewers_item
120
+
121
+ @property
122
+ def additional_keys(self) -> List[str]:
123
+ return list(self.additional_properties.keys())
124
+
125
+ def __getitem__(self, key: str) -> Any:
126
+ return self.additional_properties[key]
127
+
128
+ def __setitem__(self, key: str, value: Any) -> None:
129
+ self.additional_properties[key] = value
130
+
131
+ def __delitem__(self, key: str) -> None:
132
+ del self.additional_properties[key]
133
+
134
+ def __contains__(self, key: str) -> bool:
135
+ return key in self.additional_properties
136
+
137
+ def get(self, key, default=None) -> Optional[Any]:
138
+ return self.additional_properties.get(key, default)
139
+
140
+ @property
141
+ def status(self) -> EntryReviewProcessStagesItemReviewersItemStatus:
142
+ """ Status of the Reviewer """
143
+ if isinstance(self._status, Unset):
144
+ raise NotPresentError(self, "status")
145
+ return self._status
146
+
147
+ @status.setter
148
+ def status(self, value: EntryReviewProcessStagesItemReviewersItemStatus) -> None:
149
+ self._status = value
150
+
151
+ @status.deleter
152
+ def status(self) -> None:
153
+ self._status = UNSET
154
+
155
+ @property
156
+ def handle(self) -> str:
157
+ if isinstance(self._handle, Unset):
158
+ raise NotPresentError(self, "handle")
159
+ return self._handle
160
+
161
+ @handle.setter
162
+ def handle(self, value: str) -> None:
163
+ self._handle = value
164
+
165
+ @handle.deleter
166
+ def handle(self) -> None:
167
+ self._handle = UNSET
168
+
169
+ @property
170
+ def id(self) -> str:
171
+ if isinstance(self._id, Unset):
172
+ raise NotPresentError(self, "id")
173
+ return self._id
174
+
175
+ @id.setter
176
+ def id(self, value: str) -> None:
177
+ self._id = value
178
+
179
+ @id.deleter
180
+ def id(self) -> None:
181
+ self._id = UNSET
182
+
183
+ @property
184
+ def name(self) -> str:
185
+ if isinstance(self._name, Unset):
186
+ raise NotPresentError(self, "name")
187
+ return self._name
188
+
189
+ @name.setter
190
+ def name(self, value: str) -> None:
191
+ self._name = value
192
+
193
+ @name.deleter
194
+ def name(self) -> None:
195
+ self._name = UNSET
@@ -0,0 +1,25 @@
1
+ from enum import Enum
2
+ from functools import lru_cache
3
+ from typing import cast
4
+
5
+ from ..extensions import Enums
6
+
7
+
8
+ class EntryReviewProcessStagesItemReviewersItemStatus(Enums.KnownString):
9
+ BLOCKED = "BLOCKED"
10
+ PENDING = "PENDING"
11
+ FINISHED = "FINISHED"
12
+ REJECTED = "REJECTED"
13
+
14
+ def __str__(self) -> str:
15
+ return str(self.value)
16
+
17
+ @staticmethod
18
+ @lru_cache(maxsize=None)
19
+ def of_unknown(val: str) -> "EntryReviewProcessStagesItemReviewersItemStatus":
20
+ if not isinstance(val, str):
21
+ raise ValueError(
22
+ f"Value of EntryReviewProcessStagesItemReviewersItemStatus must be a string (encountered: {val})"
23
+ )
24
+ newcls = Enum("EntryReviewProcessStagesItemReviewersItemStatus", {"_UNKNOWN": val}, type=Enums.UnknownString) # type: ignore
25
+ return cast(EntryReviewProcessStagesItemReviewersItemStatus, getattr(newcls, "_UNKNOWN"))
@@ -0,0 +1,22 @@
1
+ from enum import Enum
2
+ from functools import lru_cache
3
+ from typing import cast
4
+
5
+ from ..extensions import Enums
6
+
7
+
8
+ class EntryReviewProcessType(Enums.KnownString):
9
+ SELF_REVIEW = "SELF_REVIEW"
10
+ SEQUENTIAL = "SEQUENTIAL"
11
+ PARALLEL = "PARALLEL"
12
+
13
+ def __str__(self) -> str:
14
+ return str(self.value)
15
+
16
+ @staticmethod
17
+ @lru_cache(maxsize=None)
18
+ def of_unknown(val: str) -> "EntryReviewProcessType":
19
+ if not isinstance(val, str):
20
+ raise ValueError(f"Value of EntryReviewProcessType must be a string (encountered: {val})")
21
+ newcls = Enum("EntryReviewProcessType", {"_UNKNOWN": val}, type=Enums.UnknownString) # type: ignore
22
+ return cast(EntryReviewProcessType, getattr(newcls, "_UNKNOWN"))
@@ -3,6 +3,7 @@ from typing import Any, cast, Dict, List, Optional, Type, TypeVar, Union
3
3
  import attr
4
4
 
5
5
  from ..extensions import NotPresentError
6
+ from ..models.entry_review_process import EntryReviewProcess
6
7
  from ..models.review_change import ReviewChange
7
8
  from ..models.worksheet_review_changes_review_record_status import WorksheetReviewChangesReviewRecordStatus
8
9
  from ..types import UNSET, Unset
@@ -16,6 +17,7 @@ class WorksheetReviewChangesReviewRecord:
16
17
 
17
18
  _comment: Union[Unset, str] = UNSET
18
19
  _review_changes: Union[Unset, List[ReviewChange]] = UNSET
20
+ _review_processes: Union[Unset, None, List[EntryReviewProcess]] = UNSET
19
21
  _status: Union[Unset, WorksheetReviewChangesReviewRecordStatus] = UNSET
20
22
  additional_properties: Dict[str, Any] = attr.ib(init=False, factory=dict)
21
23
 
@@ -23,6 +25,7 @@ class WorksheetReviewChangesReviewRecord:
23
25
  fields = []
24
26
  fields.append("comment={}".format(repr(self._comment)))
25
27
  fields.append("review_changes={}".format(repr(self._review_changes)))
28
+ fields.append("review_processes={}".format(repr(self._review_processes)))
26
29
  fields.append("status={}".format(repr(self._status)))
27
30
  fields.append("additional_properties={}".format(repr(self.additional_properties)))
28
31
  return "WorksheetReviewChangesReviewRecord({})".format(", ".join(fields))
@@ -37,6 +40,17 @@ class WorksheetReviewChangesReviewRecord:
37
40
 
38
41
  review_changes.append(review_changes_item)
39
42
 
43
+ review_processes: Union[Unset, None, List[Any]] = UNSET
44
+ if not isinstance(self._review_processes, Unset):
45
+ if self._review_processes is None:
46
+ review_processes = None
47
+ else:
48
+ review_processes = []
49
+ for review_processes_item_data in self._review_processes:
50
+ review_processes_item = review_processes_item_data.to_dict()
51
+
52
+ review_processes.append(review_processes_item)
53
+
40
54
  status: Union[Unset, int] = UNSET
41
55
  if not isinstance(self._status, Unset):
42
56
  status = self._status.value
@@ -48,6 +62,8 @@ class WorksheetReviewChangesReviewRecord:
48
62
  field_dict["comment"] = comment
49
63
  if review_changes is not UNSET:
50
64
  field_dict["reviewChanges"] = review_changes
65
+ if review_processes is not UNSET:
66
+ field_dict["reviewProcesses"] = review_processes
51
67
  if status is not UNSET:
52
68
  field_dict["status"] = status
53
69
 
@@ -85,6 +101,23 @@ class WorksheetReviewChangesReviewRecord:
85
101
  raise
86
102
  review_changes = cast(Union[Unset, List[ReviewChange]], UNSET)
87
103
 
104
+ def get_review_processes() -> Union[Unset, None, List[EntryReviewProcess]]:
105
+ review_processes = []
106
+ _review_processes = d.pop("reviewProcesses")
107
+ for review_processes_item_data in _review_processes or []:
108
+ review_processes_item = EntryReviewProcess.from_dict(review_processes_item_data, strict=False)
109
+
110
+ review_processes.append(review_processes_item)
111
+
112
+ return review_processes
113
+
114
+ try:
115
+ review_processes = get_review_processes()
116
+ except KeyError:
117
+ if strict:
118
+ raise
119
+ review_processes = cast(Union[Unset, None, List[EntryReviewProcess]], UNSET)
120
+
88
121
  def get_status() -> Union[Unset, WorksheetReviewChangesReviewRecordStatus]:
89
122
  status = UNSET
90
123
  _status = d.pop("status")
@@ -106,6 +139,7 @@ class WorksheetReviewChangesReviewRecord:
106
139
  worksheet_review_changes_review_record = cls(
107
140
  comment=comment,
108
141
  review_changes=review_changes,
142
+ review_processes=review_processes,
109
143
  status=status,
110
144
  )
111
145
 
@@ -161,6 +195,21 @@ class WorksheetReviewChangesReviewRecord:
161
195
  def review_changes(self) -> None:
162
196
  self._review_changes = UNSET
163
197
 
198
+ @property
199
+ def review_processes(self) -> Optional[List[EntryReviewProcess]]:
200
+ """ Review Processes associated with the Worksheet """
201
+ if isinstance(self._review_processes, Unset):
202
+ raise NotPresentError(self, "review_processes")
203
+ return self._review_processes
204
+
205
+ @review_processes.setter
206
+ def review_processes(self, value: Optional[List[EntryReviewProcess]]) -> None:
207
+ self._review_processes = value
208
+
209
+ @review_processes.deleter
210
+ def review_processes(self) -> None:
211
+ self._review_processes = UNSET
212
+
164
213
  @property
165
214
  def status(self) -> WorksheetReviewChangesReviewRecordStatus:
166
215
  """ Review Status of the worksheet """
@@ -3414,6 +3414,7 @@ components:
3414
3414
  enum:
3415
3415
  - ENTRY
3416
3416
  - ENTRY_TEMPLATE
3417
+ - APP_HOME
3417
3418
  type: string
3418
3419
  BoxCreationTableNotePart:
3419
3420
  allOf:
@@ -5045,6 +5046,12 @@ components:
5045
5046
  items:
5046
5047
  $ref: '#/components/schemas/ReviewChange'
5047
5048
  type: array
5049
+ reviewProcesses:
5050
+ description: Review Processes associated with the Entry
5051
+ items:
5052
+ $ref: '#/components/schemas/EntryReviewProcess'
5053
+ nullable: true
5054
+ type: array
5048
5055
  status:
5049
5056
  description: Review Status of the entry
5050
5057
  enum:
@@ -5184,6 +5191,70 @@ components:
5184
5191
  - $ref: '#/components/schemas/ChartNotePart'
5185
5192
  - $ref: '#/components/schemas/AppCanvasNotePart'
5186
5193
  type: object
5194
+ EntryReviewProcess:
5195
+ properties:
5196
+ completionStatus:
5197
+ description: State of the Entry at the end of the Review Process
5198
+ enum:
5199
+ - APPROVED
5200
+ - COMPLETED
5201
+ - ACCEPTED
5202
+ - REVIEWED
5203
+ - WITNESSED
5204
+ - SELF_REVIEWED
5205
+ type: string
5206
+ id:
5207
+ description: ID of the Review Process
5208
+ type: string
5209
+ name:
5210
+ description: Name of the Review Process
5211
+ type: string
5212
+ stages:
5213
+ description: Array of Stages for the Review Process
5214
+ items:
5215
+ properties:
5216
+ actionLabel:
5217
+ description: Action reviewer is doing during the review
5218
+ enum:
5219
+ - APPROVE
5220
+ - COMPLETE
5221
+ - ACCEPT
5222
+ - REVIEW
5223
+ - WITNESS
5224
+ - SELF_REVIEW
5225
+ type: string
5226
+ id:
5227
+ description: ID of the Review Stage
5228
+ type: string
5229
+ name:
5230
+ description: Name of the Review Stage
5231
+ type: string
5232
+ reviewers:
5233
+ description: Reviewers for the Review Stage
5234
+ items:
5235
+ allOf:
5236
+ - $ref: '#/components/schemas/PartySummary'
5237
+ - properties:
5238
+ status:
5239
+ description: Status of the Reviewer
5240
+ enum:
5241
+ - BLOCKED
5242
+ - PENDING
5243
+ - FINISHED
5244
+ - REJECTED
5245
+ type: string
5246
+ type: object
5247
+ type: array
5248
+ type: object
5249
+ type: array
5250
+ type:
5251
+ description: Type of the Review Process
5252
+ enum:
5253
+ - SELF_REVIEW
5254
+ - SEQUENTIAL
5255
+ - PARALLEL
5256
+ type: string
5257
+ type: object
5187
5258
  EntrySchema:
5188
5259
  description: Entry schema
5189
5260
  properties:
@@ -7810,6 +7881,12 @@ components:
7810
7881
  items:
7811
7882
  $ref: '#/components/schemas/ReviewChange'
7812
7883
  type: array
7884
+ reviewProcesses:
7885
+ description: Review Processes associated with the Worksheet
7886
+ items:
7887
+ $ref: '#/components/schemas/EntryReviewProcess'
7888
+ nullable: true
7889
+ type: array
7813
7890
  status:
7814
7891
  description: Review Status of the worksheet
7815
7892
  enum:
@@ -4,7 +4,9 @@ import attr
4
4
 
5
5
  from ..extensions import NotPresentError
6
6
  from ..models.back_translate_gc_content import BackTranslateGcContent
7
+ from ..models.back_translate_gc_content_range import BackTranslateGcContentRange
7
8
  from ..models.back_translate_hairpin_parameters import BackTranslateHairpinParameters
9
+ from ..models.back_translate_method import BackTranslateMethod
8
10
  from ..models.reduced_pattern import ReducedPattern
9
11
  from ..types import UNSET, Unset
10
12
 
@@ -20,7 +22,9 @@ class BackTranslate:
20
22
  _avoided_cutsite_enzyme_ids: Union[Unset, List[str]] = UNSET
21
23
  _codon_usage_table_id: Union[Unset, str] = UNSET
22
24
  _gc_content: Union[Unset, BackTranslateGcContent] = BackTranslateGcContent.ANY
25
+ _gc_content_range: Union[Unset, BackTranslateGcContentRange] = UNSET
23
26
  _hairpin_parameters: Union[Unset, BackTranslateHairpinParameters] = UNSET
27
+ _method: Union[Unset, BackTranslateMethod] = BackTranslateMethod.MATCH_CODON_USAGE
24
28
  _reduced_patterns: Union[Unset, List[ReducedPattern]] = UNSET
25
29
  _schema_id: Union[Unset, str] = UNSET
26
30
  _should_deplete_uridine: Union[Unset, bool] = False
@@ -32,7 +36,9 @@ class BackTranslate:
32
36
  fields.append("avoided_cutsite_enzyme_ids={}".format(repr(self._avoided_cutsite_enzyme_ids)))
33
37
  fields.append("codon_usage_table_id={}".format(repr(self._codon_usage_table_id)))
34
38
  fields.append("gc_content={}".format(repr(self._gc_content)))
39
+ fields.append("gc_content_range={}".format(repr(self._gc_content_range)))
35
40
  fields.append("hairpin_parameters={}".format(repr(self._hairpin_parameters)))
41
+ fields.append("method={}".format(repr(self._method)))
36
42
  fields.append("reduced_patterns={}".format(repr(self._reduced_patterns)))
37
43
  fields.append("schema_id={}".format(repr(self._schema_id)))
38
44
  fields.append("should_deplete_uridine={}".format(repr(self._should_deplete_uridine)))
@@ -51,10 +57,18 @@ class BackTranslate:
51
57
  if not isinstance(self._gc_content, Unset):
52
58
  gc_content = self._gc_content.value
53
59
 
60
+ gc_content_range: Union[Unset, Dict[str, Any]] = UNSET
61
+ if not isinstance(self._gc_content_range, Unset):
62
+ gc_content_range = self._gc_content_range.to_dict()
63
+
54
64
  hairpin_parameters: Union[Unset, Dict[str, Any]] = UNSET
55
65
  if not isinstance(self._hairpin_parameters, Unset):
56
66
  hairpin_parameters = self._hairpin_parameters.to_dict()
57
67
 
68
+ method: Union[Unset, int] = UNSET
69
+ if not isinstance(self._method, Unset):
70
+ method = self._method.value
71
+
58
72
  reduced_patterns: Union[Unset, List[Any]] = UNSET
59
73
  if not isinstance(self._reduced_patterns, Unset):
60
74
  reduced_patterns = []
@@ -78,8 +92,12 @@ class BackTranslate:
78
92
  field_dict["codonUsageTableId"] = codon_usage_table_id
79
93
  if gc_content is not UNSET:
80
94
  field_dict["gcContent"] = gc_content
95
+ if gc_content_range is not UNSET:
96
+ field_dict["gcContentRange"] = gc_content_range
81
97
  if hairpin_parameters is not UNSET:
82
98
  field_dict["hairpinParameters"] = hairpin_parameters
99
+ if method is not UNSET:
100
+ field_dict["method"] = method
83
101
  if reduced_patterns is not UNSET:
84
102
  field_dict["reducedPatterns"] = reduced_patterns
85
103
  if schema_id is not UNSET:
@@ -157,6 +175,22 @@ class BackTranslate:
157
175
  raise
158
176
  gc_content = cast(Union[Unset, BackTranslateGcContent], UNSET)
159
177
 
178
+ def get_gc_content_range() -> Union[Unset, BackTranslateGcContentRange]:
179
+ gc_content_range: Union[Unset, Union[Unset, BackTranslateGcContentRange]] = UNSET
180
+ _gc_content_range = d.pop("gcContentRange")
181
+
182
+ if not isinstance(_gc_content_range, Unset):
183
+ gc_content_range = BackTranslateGcContentRange.from_dict(_gc_content_range)
184
+
185
+ return gc_content_range
186
+
187
+ try:
188
+ gc_content_range = get_gc_content_range()
189
+ except KeyError:
190
+ if strict:
191
+ raise
192
+ gc_content_range = cast(Union[Unset, BackTranslateGcContentRange], UNSET)
193
+
160
194
  def get_hairpin_parameters() -> Union[Unset, BackTranslateHairpinParameters]:
161
195
  hairpin_parameters: Union[Unset, Union[Unset, BackTranslateHairpinParameters]] = UNSET
162
196
  _hairpin_parameters = d.pop("hairpinParameters")
@@ -173,6 +207,24 @@ class BackTranslate:
173
207
  raise
174
208
  hairpin_parameters = cast(Union[Unset, BackTranslateHairpinParameters], UNSET)
175
209
 
210
+ def get_method() -> Union[Unset, BackTranslateMethod]:
211
+ method = UNSET
212
+ _method = d.pop("method")
213
+ if _method is not None and _method is not UNSET:
214
+ try:
215
+ method = BackTranslateMethod(_method)
216
+ except ValueError:
217
+ method = BackTranslateMethod.of_unknown(_method)
218
+
219
+ return method
220
+
221
+ try:
222
+ method = get_method()
223
+ except KeyError:
224
+ if strict:
225
+ raise
226
+ method = cast(Union[Unset, BackTranslateMethod], UNSET)
227
+
176
228
  def get_reduced_patterns() -> Union[Unset, List[ReducedPattern]]:
177
229
  reduced_patterns = []
178
230
  _reduced_patterns = d.pop("reducedPatterns")
@@ -218,7 +270,9 @@ class BackTranslate:
218
270
  avoided_cutsite_enzyme_ids=avoided_cutsite_enzyme_ids,
219
271
  codon_usage_table_id=codon_usage_table_id,
220
272
  gc_content=gc_content,
273
+ gc_content_range=gc_content_range,
221
274
  hairpin_parameters=hairpin_parameters,
275
+ method=method,
222
276
  reduced_patterns=reduced_patterns,
223
277
  schema_id=schema_id,
224
278
  should_deplete_uridine=should_deplete_uridine,
@@ -280,7 +334,7 @@ class BackTranslate:
280
334
 
281
335
  @property
282
336
  def gc_content(self) -> BackTranslateGcContent:
283
- """The amount of GC content in the back-translated sequence. If not specified, the back-translation will default to ANY (0-1). LOW is defined as below 0.33, MEDIUM as 0.33-0.66, and HIGH as above 0.66."""
337
+ """The amount of GC content in the optimized sequence. LOW is defined as below 0.33, MEDIUM as 0.33-0.66, and HIGH as above 0.66. If neither gcContent nor gcContentRange is specified, the optimization will default to ANY (0-1). Cannot be specified together with gcContentRange."""
284
338
  if isinstance(self._gc_content, Unset):
285
339
  raise NotPresentError(self, "gc_content")
286
340
  return self._gc_content
@@ -293,6 +347,21 @@ class BackTranslate:
293
347
  def gc_content(self) -> None:
294
348
  self._gc_content = UNSET
295
349
 
350
+ @property
351
+ def gc_content_range(self) -> BackTranslateGcContentRange:
352
+ """Custom GC content range for the optimized sequence, specified as decimal values between 0 and 1. The maximum must be greater than the minimum. Cannot be specified together with gcContent."""
353
+ if isinstance(self._gc_content_range, Unset):
354
+ raise NotPresentError(self, "gc_content_range")
355
+ return self._gc_content_range
356
+
357
+ @gc_content_range.setter
358
+ def gc_content_range(self, value: BackTranslateGcContentRange) -> None:
359
+ self._gc_content_range = value
360
+
361
+ @gc_content_range.deleter
362
+ def gc_content_range(self) -> None:
363
+ self._gc_content_range = UNSET
364
+
296
365
  @property
297
366
  def hairpin_parameters(self) -> BackTranslateHairpinParameters:
298
367
  """These parameters are applied in the AvoidHairpins specification in DNAChisel. If hairpinParameters is not specified, hairpins will not be avoided."""
@@ -308,6 +377,21 @@ class BackTranslate:
308
377
  def hairpin_parameters(self) -> None:
309
378
  self._hairpin_parameters = UNSET
310
379
 
380
+ @property
381
+ def method(self) -> BackTranslateMethod:
382
+ """The codon optimization algorithm to use. Requires codonUsageTableId to be specified. MATCH_CODON_USAGE selects codons probabilistically based on the organism's codon usage frequencies. USE_BEST_CODON always selects the most frequently used codon for each amino acid."""
383
+ if isinstance(self._method, Unset):
384
+ raise NotPresentError(self, "method")
385
+ return self._method
386
+
387
+ @method.setter
388
+ def method(self, value: BackTranslateMethod) -> None:
389
+ self._method = value
390
+
391
+ @method.deleter
392
+ def method(self) -> None:
393
+ self._method = UNSET
394
+
311
395
  @property
312
396
  def reduced_patterns(self) -> List[ReducedPattern]:
313
397
  """List of patterns to avoid when creating the back-translated sequence, on the coding strand only."""