benchling-sdk 1.11.0a5__tar.gz → 1.12.0__tar.gz

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 (121) hide show
  1. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/PKG-INFO +3 -3
  2. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/benchling.py +14 -0
  3. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/models/__init__.py +6 -0
  4. benchling_sdk-1.12.0/benchling_sdk/services/v2/beta/v2_beta_aa_sequence_service.py +33 -0
  5. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/aa_sequence_service.py +31 -0
  6. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/custom_entity_service.py +26 -0
  7. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/dna_oligo_service.py +31 -0
  8. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/dna_sequence_service.py +66 -0
  9. benchling_sdk-1.11.0a5/benchling_sdk/services/v2/beta/v2_beta_entity_service.py → benchling_sdk-1.12.0/benchling_sdk/services/v2/stable/entity_service.py +16 -9
  10. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/molecule_service.py +46 -12
  11. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/plate_service.py +40 -0
  12. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/rna_oligo_service.py +31 -0
  13. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/rna_sequence_service.py +35 -0
  14. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/user_service.py +12 -0
  15. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/v2_beta_service.py +0 -96
  16. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/v2_stable_service.py +21 -1
  17. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/pyproject.toml +5 -3
  18. benchling_sdk-1.11.0a5/benchling_sdk/services/v2/beta/v2_beta_aa_sequence_service.py +0 -61
  19. benchling_sdk-1.11.0a5/benchling_sdk/services/v2/beta/v2_beta_custom_entity_service.py +0 -43
  20. benchling_sdk-1.11.0a5/benchling_sdk/services/v2/beta/v2_beta_dna_oligo_service.py +0 -41
  21. benchling_sdk-1.11.0a5/benchling_sdk/services/v2/beta/v2_beta_dna_sequence_service.py +0 -43
  22. benchling_sdk-1.11.0a5/benchling_sdk/services/v2/beta/v2_beta_rna_oligo_service.py +0 -41
  23. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/LICENSE +0 -0
  24. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/README.md +0 -0
  25. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/__init__.py +0 -0
  26. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/__init__.py +0 -0
  27. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/canvas/__init__.py +0 -0
  28. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/canvas/errors.py +0 -0
  29. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/canvas/framework.py +0 -0
  30. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/canvas/types.py +0 -0
  31. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/config/__init__.py +0 -0
  32. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/config/cryptography_helpers.py +0 -0
  33. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/config/decryption_provider.py +0 -0
  34. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/config/errors.py +0 -0
  35. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/config/framework.py +0 -0
  36. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/config/helpers.py +0 -0
  37. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/config/mock_config.py +0 -0
  38. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/config/types.py +0 -0
  39. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/framework.py +0 -0
  40. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/helpers/__init__.py +0 -0
  41. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/helpers/manifest_helpers.py +0 -0
  42. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/helpers/webhook_helpers.py +0 -0
  43. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/status/__init__.py +0 -0
  44. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/status/errors.py +0 -0
  45. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/status/framework.py +0 -0
  46. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/status/helpers.py +0 -0
  47. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/status/types.py +0 -0
  48. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/apps/types.py +0 -0
  49. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/auth/__init__.py +0 -0
  50. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/auth/api_key_auth.py +0 -0
  51. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/auth/bearer_token_auth.py +0 -0
  52. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/auth/client_credentials_oauth2.py +0 -0
  53. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/docs/__init__.py +0 -0
  54. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/docs/__main__.py +0 -0
  55. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/errors.py +0 -0
  56. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/__init__.py +0 -0
  57. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/client_helpers.py +0 -0
  58. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/constants.py +0 -0
  59. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/decorators.py +0 -0
  60. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/file_helpers.py +0 -0
  61. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/logging_helpers.py +0 -0
  62. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/package_helpers.py +0 -0
  63. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/pagination_helpers.py +0 -0
  64. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/response_helpers.py +0 -0
  65. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/retry_helpers.py +0 -0
  66. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/serialization_helpers.py +0 -0
  67. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/helpers/transaction_manager.py +0 -0
  68. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/models/webhooks/__init__.py +0 -0
  69. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/models/webhooks/v0/__init__.py +0 -0
  70. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/py.typed +0 -0
  71. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/__init__.py +0 -0
  72. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/__init__.py +0 -0
  73. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/alpha/__init__.py +0 -0
  74. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/alpha/v2_alpha_app_service.py +0 -0
  75. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/alpha/v2_alpha_dna_sequence_service.py +0 -0
  76. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/base_service.py +0 -0
  77. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/beta/__init__.py +0 -0
  78. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/beta/v2_beta_app_service.py +0 -0
  79. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/beta/v2_beta_collaboration_service.py +0 -0
  80. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/beta/v2_beta_data_frame_service.py +0 -0
  81. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/beta/v2_beta_entry_service.py +0 -0
  82. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/beta/v2_beta_folder_service.py +0 -0
  83. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/beta/v2_beta_project_service.py +0 -0
  84. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/beta/v2_beta_worklist_service.py +0 -0
  85. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/__init__.py +0 -0
  86. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/api_service.py +0 -0
  87. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/app_service.py +0 -0
  88. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/assay_result_service.py +0 -0
  89. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/assay_run_service.py +0 -0
  90. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/blob_service.py +0 -0
  91. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/box_service.py +0 -0
  92. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/container_service.py +0 -0
  93. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/custom_notation_service.py +0 -0
  94. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/dna_alignments_service.py +0 -0
  95. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/dropdown_service.py +0 -0
  96. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/entry_service.py +0 -0
  97. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/event_service.py +0 -0
  98. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/export_service.py +0 -0
  99. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/feature_library_service.py +0 -0
  100. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/folder_service.py +0 -0
  101. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/inventory_service.py +0 -0
  102. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/lab_automation_service.py +0 -0
  103. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/label_template_service.py +0 -0
  104. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/location_service.py +0 -0
  105. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/mixture_service.py +0 -0
  106. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/nucleotide_alignments_service.py +0 -0
  107. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/oligo_service.py +0 -0
  108. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/organization_service.py +0 -0
  109. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/printer_service.py +0 -0
  110. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/project_service.py +0 -0
  111. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/registry_service.py +0 -0
  112. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/request_service.py +0 -0
  113. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/schema_service.py +0 -0
  114. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/task_service.py +0 -0
  115. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/team_service.py +0 -0
  116. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/warehouse_service.py +0 -0
  117. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/workflow_output_service.py +0 -0
  118. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/workflow_task_group_service.py +0 -0
  119. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/stable/workflow_task_service.py +0 -0
  120. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2/v2_alpha_service.py +0 -0
  121. {benchling_sdk-1.11.0a5 → benchling_sdk-1.12.0}/benchling_sdk/services/v2_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: benchling-sdk
3
- Version: 1.11.0a5
3
+ Version: 1.12.0
4
4
  Summary: SDK for interacting with the Benchling Platform.
5
5
  License: Apache-2.0
6
6
  Author: Benchling Support
@@ -17,9 +17,9 @@ Provides-Extra: python-jose
17
17
  Requires-Dist: PyYAML (>=6.0,<7.0)
18
18
  Requires-Dist: attrs (>=20.1.0,<23)
19
19
  Requires-Dist: backoff (>=1.10.0,<2.0.0)
20
- Requires-Dist: benchling-api-client (==2.0.283)
20
+ Requires-Dist: benchling-api-client (==2.0.287)
21
21
  Requires-Dist: certifi (>=2022.12.7)
22
- Requires-Dist: cryptography (>=41.0.7,<42.0.0) ; extra == "cryptography"
22
+ Requires-Dist: cryptography (>=42.0.0) ; extra == "cryptography"
23
23
  Requires-Dist: dataclasses-json (>=0.5.2,<0.6.0)
24
24
  Requires-Dist: httpx (>=0.23.0)
25
25
  Requires-Dist: jwcrypto (>=1.5.1,<2.0.0)
@@ -26,6 +26,7 @@ if TYPE_CHECKING:
26
26
  from benchling_sdk.services.v2.stable.dna_oligo_service import DnaOligoService
27
27
  from benchling_sdk.services.v2.stable.dna_sequence_service import DnaSequenceService
28
28
  from benchling_sdk.services.v2.stable.dropdown_service import DropdownService
29
+ from benchling_sdk.services.v2.stable.entity_service import EntityService
29
30
  from benchling_sdk.services.v2.stable.entry_service import EntryService
30
31
  from benchling_sdk.services.v2.stable.event_service import EventService
31
32
  from benchling_sdk.services.v2.stable.export_service import ExportService
@@ -362,6 +363,19 @@ class Benchling(object):
362
363
  """
363
364
  return self.v2.stable.dropdowns
364
365
 
366
+ @property
367
+ def entities(self) -> EntityService:
368
+ """
369
+ Entities.
370
+
371
+ Entities include DNA and AA sequences, oligos, molecules, custom entities, and
372
+ other biological objects in Benchling. Entities support schemas, tags, and aliases,
373
+ and can be registered.
374
+
375
+ See https://benchling.com/api/reference#/Entities
376
+ """
377
+ return self.v2.stable.entities
378
+
365
379
  @property
366
380
  def entries(self) -> EntryService:
367
381
  """
@@ -687,6 +687,7 @@ __all__ = [
687
687
  "MoleculesArchiveReason",
688
688
  "MoleculesBulkCreateRequest",
689
689
  "MoleculesBulkUpdateRequest",
690
+ "MoleculesBulkUpsertRequest",
690
691
  "MoleculesPaginatedList",
691
692
  "MoleculesUnarchive",
692
693
  "Monomer",
@@ -1731,6 +1732,7 @@ if TYPE_CHECKING:
1731
1732
  import benchling_api_client.v2.stable.models.molecules_archive_reason
1732
1733
  import benchling_api_client.v2.stable.models.molecules_bulk_create_request
1733
1734
  import benchling_api_client.v2.stable.models.molecules_bulk_update_request
1735
+ import benchling_api_client.v2.stable.models.molecules_bulk_upsert_request
1734
1736
  import benchling_api_client.v2.stable.models.molecules_paginated_list
1735
1737
  import benchling_api_client.v2.stable.models.molecules_unarchive
1736
1738
  import benchling_api_client.v2.stable.models.monomer
@@ -3519,6 +3521,9 @@ if TYPE_CHECKING:
3519
3521
  MoleculesBulkUpdateRequest = (
3520
3522
  benchling_api_client.v2.stable.models.molecules_bulk_update_request.MoleculesBulkUpdateRequest
3521
3523
  )
3524
+ MoleculesBulkUpsertRequest = (
3525
+ benchling_api_client.v2.stable.models.molecules_bulk_upsert_request.MoleculesBulkUpsertRequest
3526
+ )
3522
3527
  MoleculesPaginatedList = (
3523
3528
  benchling_api_client.v2.stable.models.molecules_paginated_list.MoleculesPaginatedList
3524
3529
  )
@@ -4963,6 +4968,7 @@ else:
4963
4968
  "MoleculesArchiveReason": "benchling_api_client.v2.stable.models.molecules_archive_reason",
4964
4969
  "MoleculesBulkCreateRequest": "benchling_api_client.v2.stable.models.molecules_bulk_create_request",
4965
4970
  "MoleculesBulkUpdateRequest": "benchling_api_client.v2.stable.models.molecules_bulk_update_request",
4971
+ "MoleculesBulkUpsertRequest": "benchling_api_client.v2.stable.models.molecules_bulk_upsert_request",
4966
4972
  "MoleculesPaginatedList": "benchling_api_client.v2.stable.models.molecules_paginated_list",
4967
4973
  "MoleculesUnarchive": "benchling_api_client.v2.stable.models.molecules_unarchive",
4968
4974
  "Monomer": "benchling_api_client.v2.stable.models.monomer",
@@ -0,0 +1,33 @@
1
+ from benchling_api_client.v2.beta.api.aa_sequences import find_matching_regions_aa_sequences
2
+ from benchling_api_client.v2.beta.models.aa_sequences_find_matching_region import (
3
+ AaSequencesFindMatchingRegion,
4
+ )
5
+
6
+ from benchling_sdk.helpers.decorators import api_method
7
+ from benchling_sdk.helpers.response_helpers import model_from_detailed
8
+ from benchling_sdk.models import AsyncTaskLink
9
+ from benchling_sdk.services.v2.base_service import BaseService
10
+
11
+
12
+ class V2BetaAaSequenceService(BaseService):
13
+ """
14
+ V2-Beta AA Sequences.
15
+
16
+ AA Sequences are the working units of cells that make everything run (they help make structures, catalyze
17
+ reactions and allow for signaling - a kind of internal cell communication). On Benchling, these are comprised
18
+ of a string of amino acids and collections of other attributes, such as annotations.
19
+
20
+ See https://benchling.com/api/v2-beta/reference#/AA%20Sequences
21
+ """
22
+
23
+ @api_method
24
+ def find_matching_regions(self, find_matching_region: AaSequencesFindMatchingRegion) -> AsyncTaskLink:
25
+ """
26
+ Find matching regions for AA sequences.
27
+
28
+ See https://benchling.com/api/v2-beta/reference#/AA%20Sequences/findMatchingRegionsAaSequences
29
+ """
30
+ response = find_matching_regions_aa_sequences.sync_detailed(
31
+ client=self.client, json_body=find_matching_region
32
+ )
33
+ return model_from_detailed(response)
@@ -6,11 +6,13 @@ from benchling_api_client.v2.stable.api.aa_sequences import (
6
6
  bulk_create_aa_sequences,
7
7
  bulk_get_aa_sequences,
8
8
  bulk_update_aa_sequences,
9
+ bulk_upsert_aa_sequences,
9
10
  create_aa_sequence,
10
11
  get_aa_sequence,
11
12
  list_aa_sequences,
12
13
  unarchive_aa_sequences,
13
14
  update_aa_sequence,
15
+ upsert_aa_sequence,
14
16
  )
15
17
  from benchling_api_client.v2.types import Response
16
18
 
@@ -34,9 +36,11 @@ from benchling_sdk.models import (
34
36
  AaSequencesArchive,
35
37
  AaSequencesBulkCreateRequest,
36
38
  AaSequencesBulkUpdateRequest,
39
+ AaSequencesBulkUpsertRequest,
37
40
  AaSequencesPaginatedList,
38
41
  AaSequencesUnarchive,
39
42
  AaSequenceUpdate,
43
+ AaSequenceUpsert,
40
44
  AsyncTaskLink,
41
45
  AutoAnnotateAaSequences,
42
46
  EntityArchiveReason,
@@ -281,3 +285,30 @@ class AaSequenceService(BaseService):
281
285
  """
282
286
  response = auto_annotate_aa_sequences.sync_detailed(client=self.client, json_body=auto_annotate)
283
287
  return model_from_detailed(response)
288
+
289
+ @api_method
290
+ def upsert(self, entity_registry_id: str, aa_sequence: AaSequenceUpsert) -> AaSequence:
291
+ """
292
+ Create or modify an Amino Acid Sequence.
293
+
294
+ See https://benchling.com/api/reference#/AA%20Sequences/upsertAaSequence
295
+ """
296
+ response = upsert_aa_sequence.sync_detailed(
297
+ client=self.client, entity_registry_id=entity_registry_id, json_body=aa_sequence
298
+ )
299
+ return model_from_detailed(response)
300
+
301
+ @api_method
302
+ def bulk_upsert(
303
+ self, body: AaSequencesBulkUpsertRequest, returning: Optional[Iterable[str]] = None
304
+ ) -> AsyncTaskLink:
305
+ """
306
+ Bulk create or update AA sequences.
307
+
308
+ See https://benchling.com/api/reference#/AA%20Sequences/bulkUpsertAASequences
309
+ """
310
+ returning_string = optional_array_query_param(returning)
311
+ response = bulk_upsert_aa_sequences.sync_detailed(
312
+ client=self.client, json_body=body, returning=none_as_unset(returning_string)
313
+ )
314
+ return model_from_detailed(response)
@@ -5,11 +5,13 @@ from benchling_api_client.v2.stable.api.custom_entities import (
5
5
  bulk_create_custom_entities,
6
6
  bulk_get_custom_entities,
7
7
  bulk_update_custom_entities,
8
+ bulk_upsert_custom_entities,
8
9
  create_custom_entity,
9
10
  get_custom_entity,
10
11
  list_custom_entities,
11
12
  unarchive_custom_entities,
12
13
  update_custom_entity,
14
+ upsert_custom_entity,
13
15
  )
14
16
  from benchling_api_client.v2.types import Response
15
17
 
@@ -30,6 +32,7 @@ from benchling_sdk.models import (
30
32
  CustomEntitiesArchive,
31
33
  CustomEntitiesBulkCreateRequest,
32
34
  CustomEntitiesBulkUpdateRequest,
35
+ CustomEntitiesBulkUpsertRequest,
33
36
  CustomEntitiesPaginatedList,
34
37
  CustomEntitiesUnarchive,
35
38
  CustomEntity,
@@ -37,6 +40,7 @@ from benchling_sdk.models import (
37
40
  CustomEntityBulkUpdate,
38
41
  CustomEntityCreate,
39
42
  CustomEntityUpdate,
43
+ CustomEntityUpsertRequest,
40
44
  EntityArchiveReason,
41
45
  ListCustomEntitiesSort,
42
46
  )
@@ -266,3 +270,25 @@ class CustomEntityService(BaseService):
266
270
  body = CustomEntitiesBulkUpdateRequest(list(entities))
267
271
  response = bulk_update_custom_entities.sync_detailed(client=self.client, json_body=body)
268
272
  return model_from_detailed(response)
273
+
274
+ @api_method
275
+ def upsert(self, entity_registry_id: str, entity: CustomEntityUpsertRequest) -> CustomEntity:
276
+ """
277
+ Create or modify a custom entity.
278
+
279
+ See https://benchling.com/api/reference#/Custom%20Entities/upsertCustomEntity
280
+ """
281
+ response = upsert_custom_entity.sync_detailed(
282
+ client=self.client, entity_registry_id=entity_registry_id, json_body=entity
283
+ )
284
+ return model_from_detailed(response)
285
+
286
+ @api_method
287
+ def bulk_upsert(self, body: CustomEntitiesBulkUpsertRequest) -> AsyncTaskLink:
288
+ """
289
+ Bulk update custom entities.
290
+
291
+ See https://benchling.com/api/reference#/Custom%20Entities/bulkUpsertCustomEntities
292
+ """
293
+ response = bulk_upsert_custom_entities.sync_detailed(client=self.client, json_body=body)
294
+ return model_from_detailed(response)
@@ -4,11 +4,13 @@ from benchling_api_client.v2.stable.api.dna_oligos import (
4
4
  archive_dna_oligos,
5
5
  bulk_create_dna_oligos,
6
6
  bulk_update_dna_oligos,
7
+ bulk_upsert_dna_oligos,
7
8
  create_dna_oligo,
8
9
  get_dna_oligo,
9
10
  list_dna_oligos,
10
11
  unarchive_dna_oligos,
11
12
  update_dna_oligo,
13
+ upsert_dna_oligo,
12
14
  )
13
15
  from benchling_api_client.v2.types import Response
14
16
 
@@ -31,11 +33,13 @@ from benchling_sdk.models import (
31
33
  DnaOligosArchive,
32
34
  DnaOligosBulkCreateRequest,
33
35
  DnaOligosBulkUpdateRequest,
36
+ DnaOligosBulkUpsertRequest,
34
37
  DnaOligosPaginatedList,
35
38
  DnaOligosUnarchive,
36
39
  DnaOligoUpdate,
37
40
  EntityArchiveReason,
38
41
  ListDNAOligosSort,
42
+ OligoUpsertRequest,
39
43
  )
40
44
  from benchling_sdk.services.v2.base_service import BaseService
41
45
 
@@ -243,3 +247,30 @@ class DnaOligoService(BaseService):
243
247
  body = DnaOligosBulkUpdateRequest(list(dna_oligos))
244
248
  response = bulk_update_dna_oligos.sync_detailed(client=self.client, json_body=body)
245
249
  return model_from_detailed(response)
250
+
251
+ @api_method
252
+ def upsert(self, entity_registry_id: str, dna_oligo: OligoUpsertRequest) -> DnaOligo:
253
+ """
254
+ Create or modify a DNA Oligo.
255
+
256
+ See https://benchling.com/api/reference#/DNA%20Oligos/upsertDNAOligo
257
+ """
258
+ response = upsert_dna_oligo.sync_detailed(
259
+ client=self.client, entity_registry_id=entity_registry_id, json_body=dna_oligo
260
+ )
261
+ return model_from_detailed(response)
262
+
263
+ @api_method
264
+ def bulk_upsert(
265
+ self, body: DnaOligosBulkUpsertRequest, returning: Optional[Iterable[str]] = None
266
+ ) -> AsyncTaskLink:
267
+ """
268
+ Bulk create or update DNA Oligos.
269
+
270
+ See https://benchling.com/api/reference#/DNA%20Oligos/bulkUpsertDnaOligos
271
+ """
272
+ returning_string = optional_array_query_param(returning)
273
+ response = bulk_upsert_dna_oligos.sync_detailed(
274
+ client=self.client, json_body=body, returning=none_as_unset(returning_string)
275
+ )
276
+ return model_from_detailed(response)
@@ -8,11 +8,15 @@ from benchling_api_client.v2.stable.api.dna_sequences import (
8
8
  bulk_create_dna_sequences,
9
9
  bulk_get_dna_sequences,
10
10
  bulk_update_dna_sequences,
11
+ bulk_upsert_dna_sequences,
11
12
  create_dna_sequence,
12
13
  get_dna_sequence,
13
14
  list_dna_sequences,
15
+ match_bases_dna_sequences,
16
+ search_dna_sequences,
14
17
  unarchive_dna_sequences,
15
18
  update_dna_sequence,
19
+ upsert_dna_sequence,
16
20
  )
17
21
  from benchling_api_client.v2.types import Response
18
22
 
@@ -39,11 +43,15 @@ from benchling_sdk.models import (
39
43
  DnaSequencesArchive,
40
44
  DnaSequencesBulkCreateRequest,
41
45
  DnaSequencesBulkUpdateRequest,
46
+ DnaSequencesBulkUpsertRequest,
42
47
  DnaSequencesPaginatedList,
43
48
  DnaSequencesUnarchive,
44
49
  DnaSequenceUpdate,
50
+ DnaSequenceUpsertRequest,
45
51
  EntityArchiveReason,
46
52
  ListDNASequencesSort,
53
+ MatchBasesRequest,
54
+ SearchBasesRequest,
47
55
  )
48
56
  from benchling_sdk.services.v2.base_service import BaseService
49
57
 
@@ -306,3 +314,61 @@ class DnaSequenceService(BaseService):
306
314
  """
307
315
  response = auto_annotate_dna_sequences.sync_detailed(client=self.client, json_body=auto_annotate)
308
316
  return model_from_detailed(response)
317
+
318
+ @api_method
319
+ def upsert(self, entity_registry_id: str, dna_sequence: DnaSequenceUpsertRequest) -> DnaSequence:
320
+ """
321
+ Create or modify a DNA sequence.
322
+
323
+ See https://benchling.com/api/reference#/DNA%20Sequences/upsertDNASequence
324
+ """
325
+ response = upsert_dna_sequence.sync_detailed(
326
+ client=self.client, entity_registry_id=entity_registry_id, json_body=dna_sequence
327
+ )
328
+ return model_from_detailed(response)
329
+
330
+ @api_method
331
+ def bulk_upsert(
332
+ self, body: DnaSequencesBulkUpsertRequest, returning: Optional[Iterable[str]] = None
333
+ ) -> AsyncTaskLink:
334
+ """
335
+ Bulk create or update DNA sequences.
336
+
337
+ See https://benchling.com/api/reference#/DNA%20Sequences/bulkUpsertDnaSequences
338
+ """
339
+ returning_string = optional_array_query_param(returning)
340
+ response = bulk_upsert_dna_sequences.sync_detailed(
341
+ client=self.client, json_body=body, returning=none_as_unset(returning_string)
342
+ )
343
+ return model_from_detailed(response)
344
+
345
+ @api_method
346
+ def match_bases(self, match_bases_request: MatchBasesRequest) -> DnaSequencesPaginatedList:
347
+ """
348
+ Match bases.
349
+
350
+ Returns DNA Sequences that exactly match the provided bases.
351
+
352
+ See https://benchling.com/api/reference#/DNA%20Sequences/matchBasesDnaSequences
353
+ """
354
+ response = match_bases_dna_sequences.sync_detailed(
355
+ client=self.client,
356
+ json_body=match_bases_request,
357
+ )
358
+ return model_from_detailed(response)
359
+
360
+ @api_method
361
+ def search_bases(self, search_bases_request: SearchBasesRequest) -> DnaSequencesPaginatedList:
362
+ """
363
+ Search bases.
364
+
365
+ Returns DNA Sequences that contain the provided bases.
366
+ Search indexing is asynchronous, so results may be not be available immediately after creation.
367
+
368
+ See https://benchling.com/api/reference#/DNA%20Sequences/searchDnaSequences
369
+ """
370
+ response = search_dna_sequences.sync_detailed(
371
+ client=self.client,
372
+ json_body=search_bases_request,
373
+ )
374
+ return model_from_detailed(response)
@@ -1,25 +1,29 @@
1
- from benchling_api_client.v2.beta.api.entities import bulk_upsert_entities
2
- from benchling_api_client.v2.beta.models.entities_bulk_upsert_request import EntitiesBulkUpsertRequest
1
+ from typing import Iterable, Optional
2
+
3
+ from benchling_api_client.v2.stable.api.entities import bulk_upsert_entities
3
4
 
4
5
  from benchling_sdk.helpers.decorators import api_method
5
6
  from benchling_sdk.helpers.response_helpers import model_from_detailed
6
- from benchling_sdk.models import AsyncTaskLink
7
+ from benchling_sdk.helpers.serialization_helpers import none_as_unset, optional_array_query_param
8
+ from benchling_sdk.models import AsyncTaskLink, EntitiesBulkUpsertRequest
7
9
  from benchling_sdk.services.v2.base_service import BaseService
8
10
 
9
11
 
10
- class V2BetaEntityService(BaseService):
12
+ class EntityService(BaseService):
11
13
  """
12
- V2-Beta Entities.
14
+ Entities.
13
15
 
14
16
  Entities include DNA and AA sequences, oligos, molecules, custom entities, and
15
17
  other biological objects in Benchling. Entities support schemas, tags, and aliases,
16
18
  and can be registered.
17
19
 
18
- See https://benchling.com/api/v2-beta/reference#/Entities
20
+ See https://benchling.com/api/reference#/Entities
19
21
  """
20
22
 
21
23
  @api_method
22
- def bulk_upsert(self, bulk_upsert: EntitiesBulkUpsertRequest) -> AsyncTaskLink:
24
+ def bulk_upsert(
25
+ self, bulk_upsert: EntitiesBulkUpsertRequest, returning: Optional[Iterable[str]] = None
26
+ ) -> AsyncTaskLink:
23
27
  """
24
28
  Upsert many entities at once.
25
29
 
@@ -33,7 +37,10 @@ class V2BetaEntityService(BaseService):
33
37
  4. Entities are registered, using the provided name and entity registry ID.
34
38
 
35
39
  If any action fails, the whole operation is canceled and no objects are created or updated.
36
- See https://benchling.com/api/v2-beta/reference#/Entities/bulkUpsertEntities
40
+ See https://benchling.com/api/reference#/Entities/bulkUpsertEntities
37
41
  """
38
- response = bulk_upsert_entities.sync_detailed(client=self.client, json_body=bulk_upsert)
42
+ returning_string = optional_array_query_param(returning)
43
+ response = bulk_upsert_entities.sync_detailed(
44
+ client=self.client, json_body=bulk_upsert, returning=none_as_unset(returning_string)
45
+ )
39
46
  return model_from_detailed(response)
@@ -4,23 +4,14 @@ from benchling_api_client.v2.stable.api.molecules import (
4
4
  archive_molecules,
5
5
  bulk_create_molecules,
6
6
  bulk_update_molecules,
7
+ bulk_upsert_molecules,
7
8
  create_molecule,
8
9
  get_molecule,
9
10
  list_molecules,
10
11
  unarchive_molecules,
11
12
  update_molecule,
13
+ upsert_molecule,
12
14
  )
13
- from benchling_api_client.v2.stable.models.list_molecules_sort import ListMoleculesSort
14
- from benchling_api_client.v2.stable.models.molecule_bulk_update import MoleculeBulkUpdate
15
- from benchling_api_client.v2.stable.models.molecule_create import MoleculeCreate
16
- from benchling_api_client.v2.stable.models.molecule_update import MoleculeUpdate
17
- from benchling_api_client.v2.stable.models.molecules_archival_change import MoleculesArchivalChange
18
- from benchling_api_client.v2.stable.models.molecules_archive import MoleculesArchive
19
- from benchling_api_client.v2.stable.models.molecules_archive_reason import MoleculesArchiveReason
20
- from benchling_api_client.v2.stable.models.molecules_bulk_create_request import MoleculesBulkCreateRequest
21
- from benchling_api_client.v2.stable.models.molecules_bulk_update_request import MoleculesBulkUpdateRequest
22
- from benchling_api_client.v2.stable.models.molecules_paginated_list import MoleculesPaginatedList
23
- from benchling_api_client.v2.stable.models.molecules_unarchive import MoleculesUnarchive
24
15
  from benchling_api_client.v2.types import Response
25
16
 
26
17
  from benchling_sdk.errors import raise_for_status
@@ -34,7 +25,23 @@ from benchling_sdk.helpers.serialization_helpers import (
34
25
  optional_array_query_param,
35
26
  schema_fields_query_param,
36
27
  )
37
- from benchling_sdk.models import AsyncTaskLink, Molecule
28
+ from benchling_sdk.models import (
29
+ AsyncTaskLink,
30
+ ListMoleculesSort,
31
+ Molecule,
32
+ MoleculeBulkUpdate,
33
+ MoleculeCreate,
34
+ MoleculesArchivalChange,
35
+ MoleculesArchive,
36
+ MoleculesArchiveReason,
37
+ MoleculesBulkCreateRequest,
38
+ MoleculesBulkUpdateRequest,
39
+ MoleculesBulkUpsertRequest,
40
+ MoleculesPaginatedList,
41
+ MoleculesUnarchive,
42
+ MoleculeUpdate,
43
+ MoleculeUpsertRequest,
44
+ )
38
45
  from benchling_sdk.services.v2.base_service import BaseService
39
46
 
40
47
 
@@ -232,3 +239,30 @@ class MoleculeService(BaseService):
232
239
  body = MoleculesBulkUpdateRequest(list(molecules))
233
240
  response = bulk_update_molecules.sync_detailed(client=self.client, json_body=body)
234
241
  return model_from_detailed(response)
242
+
243
+ @api_method
244
+ def upsert(self, entity_registry_id: str, molecule: MoleculeUpsertRequest) -> Molecule:
245
+ """
246
+ Create or modify a Molecule.
247
+
248
+ See https://benchling.com/api/reference#/Molecules/upsertMolecule
249
+ """
250
+ response = upsert_molecule.sync_detailed(
251
+ client=self.client, entity_registry_id=entity_registry_id, json_body=molecule
252
+ )
253
+ return model_from_detailed(response)
254
+
255
+ @api_method
256
+ def bulk_upsert(
257
+ self, body: MoleculesBulkUpsertRequest, returning: Optional[Iterable[str]] = None
258
+ ) -> AsyncTaskLink:
259
+ """
260
+ Bulk create or update Molecules.
261
+
262
+ See https://benchling.com/api/reference#/Molecules/bulkUpsertMolecules
263
+ """
264
+ returning_string = optional_array_query_param(returning)
265
+ response = bulk_upsert_molecules.sync_detailed(
266
+ client=self.client, json_body=body, returning=none_as_unset(returning_string)
267
+ )
268
+ return model_from_detailed(response)
@@ -90,6 +90,16 @@ class PlateService(BaseService):
90
90
  creator_ids: Optional[Iterable[str]] = None,
91
91
  archive_reason: Optional[str] = None,
92
92
  schema_fields: Optional[Dict[str, Any]] = None,
93
+ empty_containers: Optional[int] = None,
94
+ empty_containers_gt: Optional[int] = None,
95
+ empty_containers_gte: Optional[int] = None,
96
+ empty_containers_lt: Optional[int] = None,
97
+ empty_containers_lte: Optional[int] = None,
98
+ empty_positions: Optional[int] = None,
99
+ empty_positions_gt: Optional[int] = None,
100
+ empty_positions_gte: Optional[int] = None,
101
+ empty_positions_lt: Optional[int] = None,
102
+ empty_positions_lte: Optional[int] = None,
93
103
  timeout_seconds: Optional[float] = None,
94
104
  returning: Optional[Iterable[str]] = None
95
105
  ) -> Response[PlatesPaginatedList]:
@@ -111,6 +121,16 @@ class PlateService(BaseService):
111
121
  namesany_ofcase_sensitive=none_as_unset(optional_array_query_param(names_any_of_case_sensitive)),
112
122
  creator_ids=none_as_unset(optional_array_query_param(creator_ids)),
113
123
  schema_fields=none_as_unset(schema_fields_query_param(schema_fields)),
124
+ empty_containers=none_as_unset(empty_containers),
125
+ empty_containersgt=none_as_unset(empty_containers_gt),
126
+ empty_containersgte=none_as_unset(empty_containers_gte),
127
+ empty_containerslt=none_as_unset(empty_containers_lt),
128
+ empty_containerslte=none_as_unset(empty_containers_lte),
129
+ empty_positions=none_as_unset(empty_positions),
130
+ empty_positionsgt=none_as_unset(empty_positions_gt),
131
+ empty_positionsgte=none_as_unset(empty_positions_gte),
132
+ empty_positionslt=none_as_unset(empty_positions_lt),
133
+ empty_positionslte=none_as_unset(empty_positions_lte),
114
134
  next_token=none_as_unset(next_token),
115
135
  page_size=none_as_unset(page_size),
116
136
  returning=none_as_unset(optional_array_query_param(returning)),
@@ -136,6 +156,16 @@ class PlateService(BaseService):
136
156
  creator_ids: Optional[Iterable[str]] = None,
137
157
  archive_reason: Optional[str] = None,
138
158
  schema_fields: Optional[Dict[str, Any]] = None,
159
+ empty_containers: Optional[int] = None,
160
+ empty_containers_gt: Optional[int] = None,
161
+ empty_containers_gte: Optional[int] = None,
162
+ empty_containers_lt: Optional[int] = None,
163
+ empty_containers_lte: Optional[int] = None,
164
+ empty_positions: Optional[int] = None,
165
+ empty_positions_gt: Optional[int] = None,
166
+ empty_positions_gte: Optional[int] = None,
167
+ empty_positions_lt: Optional[int] = None,
168
+ empty_positions_lte: Optional[int] = None,
139
169
  page_size: Optional[int] = None,
140
170
  timeout_seconds: Optional[float] = DEFAULT_PLATE_HTTP_TIMEOUT,
141
171
  returning: Optional[Iterable[str]] = None
@@ -170,6 +200,16 @@ class PlateService(BaseService):
170
200
  names_any_of_case_sensitive=names_any_of_case_sensitive,
171
201
  creator_ids=creator_ids,
172
202
  schema_fields=schema_fields,
203
+ empty_containers=empty_containers,
204
+ empty_containers_gt=empty_containers_gt,
205
+ empty_containers_gte=empty_containers_gte,
206
+ empty_containers_lt=empty_containers_lt,
207
+ empty_containers_lte=empty_containers_lte,
208
+ empty_positions=empty_positions,
209
+ empty_positions_gt=empty_positions_gt,
210
+ empty_positions_gte=empty_positions_gte,
211
+ empty_positions_lt=empty_positions_lt,
212
+ empty_positions_lte=empty_positions_lte,
173
213
  next_token=next_token,
174
214
  page_size=page_size,
175
215
  timeout_seconds=timeout_seconds,
@@ -4,11 +4,13 @@ from benchling_api_client.v2.stable.api.rna_oligos import (
4
4
  archive_rna_oligos,
5
5
  bulk_create_rna_oligos,
6
6
  bulk_update_rna_oligos,
7
+ bulk_upsert_rna_oligos,
7
8
  create_rna_oligo,
8
9
  get_rna_oligo,
9
10
  list_rna_oligos,
10
11
  unarchive_rna_oligos,
11
12
  update_rna_oligo,
13
+ upsert_rna_oligo,
12
14
  )
13
15
  from benchling_api_client.v2.types import Response
14
16
 
@@ -26,6 +28,7 @@ from benchling_sdk.models import (
26
28
  AsyncTaskLink,
27
29
  EntityArchiveReason,
28
30
  ListRNAOligosSort,
31
+ OligoUpsertRequest,
29
32
  RnaOligo,
30
33
  RnaOligoBulkUpdate,
31
34
  RnaOligoCreate,
@@ -33,6 +36,7 @@ from benchling_sdk.models import (
33
36
  RnaOligosArchive,
34
37
  RnaOligosBulkCreateRequest,
35
38
  RnaOligosBulkUpdateRequest,
39
+ RnaOligosBulkUpsertRequest,
36
40
  RnaOligosPaginatedList,
37
41
  RnaOligosUnarchive,
38
42
  RnaOligoUpdate,
@@ -252,3 +256,30 @@ class RnaOligoService(BaseService):
252
256
  body = RnaOligosBulkUpdateRequest(list(rna_oligos))
253
257
  response = bulk_update_rna_oligos.sync_detailed(client=self.client, json_body=body)
254
258
  return model_from_detailed(response)
259
+
260
+ @api_method
261
+ def upsert(self, entity_registry_id: str, rna_oligo: OligoUpsertRequest) -> RnaOligo:
262
+ """
263
+ Create or modify a RNA Oligo.
264
+
265
+ See https://benchling.com/api/reference#/RNA%20Oligos/upsertRNAOligo
266
+ """
267
+ response = upsert_rna_oligo.sync_detailed(
268
+ client=self.client, entity_registry_id=entity_registry_id, json_body=rna_oligo
269
+ )
270
+ return model_from_detailed(response)
271
+
272
+ @api_method
273
+ def bulk_upsert(
274
+ self, body: RnaOligosBulkUpsertRequest, returning: Optional[Iterable[str]] = None
275
+ ) -> AsyncTaskLink:
276
+ """
277
+ Bulk create or update RNA Oligos.
278
+
279
+ See https://benchling.com/api/reference#/RNA%20Oligos/bulkUpsertRnaOligos
280
+ """
281
+ returning_string = optional_array_query_param(returning)
282
+ response = bulk_upsert_rna_oligos.sync_detailed(
283
+ client=self.client, json_body=body, returning=none_as_unset(returning_string)
284
+ )
285
+ return model_from_detailed(response)