benchling-sdk 1.21.1__tar.gz → 1.22.0a0__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 (130) hide show
  1. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/PKG-INFO +3 -2
  2. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/canvas/types.py +8 -0
  3. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/config/framework.py +2 -2
  4. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/config/helpers.py +6 -5
  5. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/config/mock_config.py +4 -4
  6. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/helpers/webhook_helpers.py +2 -2
  7. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/status/framework.py +5 -5
  8. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/status/helpers.py +2 -0
  9. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/auth/client_credentials_oauth2.py +5 -4
  10. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/benchling.py +90 -14
  11. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/errors.py +4 -3
  12. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/retry_helpers.py +1 -1
  13. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/serialization_helpers.py +6 -3
  14. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/task_helpers.py +12 -9
  15. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/models/__init__.py +1325 -329
  16. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/models/webhooks/v0/__init__.py +12 -4
  17. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/base_service.py +5 -4
  18. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/v2_beta_data_frame_service.py +16 -8
  19. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/aa_sequence_service.py +4 -0
  20. benchling_sdk-1.21.1/benchling_sdk/services/v2/beta/v2_beta_audit_service.py → benchling_sdk-1.22.0a0/benchling_sdk/services/v2/stable/audit_service.py +6 -6
  21. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/blob_service.py +6 -3
  22. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/box_service.py +4 -0
  23. benchling_sdk-1.22.0a0/benchling_sdk/services/v2/stable/connect_service.py +79 -0
  24. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/container_service.py +4 -0
  25. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/custom_entity_service.py +4 -0
  26. benchling_sdk-1.22.0a0/benchling_sdk/services/v2/stable/data_frame_service.py +323 -0
  27. benchling_sdk-1.22.0a0/benchling_sdk/services/v2/stable/dataset_service.py +132 -0
  28. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/dna_oligo_service.py +4 -0
  29. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/dna_sequence_service.py +4 -0
  30. benchling_sdk-1.22.0a0/benchling_sdk/services/v2/stable/file_service.py +131 -0
  31. benchling_sdk-1.21.1/benchling_sdk/services/v2/stable/request_service.py → benchling_sdk-1.22.0a0/benchling_sdk/services/v2/stable/legacy_request_service.py +25 -25
  32. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/location_service.py +4 -0
  33. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/mixture_service.py +4 -0
  34. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/molecule_service.py +4 -0
  35. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/nucleotide_alignments_service.py +4 -0
  36. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/organization_service.py +10 -5
  37. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/plate_service.py +4 -0
  38. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/rna_oligo_service.py +4 -0
  39. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/rna_sequence_service.py +4 -0
  40. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/task_service.py +1 -7
  41. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/team_service.py +14 -7
  42. benchling_sdk-1.22.0a0/benchling_sdk/services/v2/stable/test_order_service.py +145 -0
  43. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/v2_alpha_service.py +2 -2
  44. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/v2_beta_service.py +2 -16
  45. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/v2_stable_service.py +104 -17
  46. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2_service.py +1 -1
  47. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/pyproject.toml +19 -38
  48. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/LICENSE +0 -0
  49. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/README.md +0 -0
  50. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/__init__.py +0 -0
  51. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/__init__.py +0 -0
  52. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/canvas/__init__.py +0 -0
  53. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/canvas/errors.py +0 -0
  54. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/canvas/framework.py +0 -0
  55. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/config/__init__.py +0 -0
  56. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/config/cryptography_helpers.py +0 -0
  57. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/config/decryption_provider.py +0 -0
  58. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/config/errors.py +0 -0
  59. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/config/types.py +0 -0
  60. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/framework.py +0 -0
  61. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/helpers/__init__.py +0 -0
  62. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/helpers/manifest_helpers.py +0 -0
  63. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/status/__init__.py +0 -0
  64. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/status/errors.py +0 -0
  65. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/status/types.py +0 -0
  66. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/apps/types.py +0 -0
  67. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/auth/__init__.py +0 -0
  68. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/auth/api_key_auth.py +0 -0
  69. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/auth/bearer_token_auth.py +0 -0
  70. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/docs/__init__.py +0 -0
  71. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/docs/__main__.py +0 -0
  72. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/__init__.py +0 -0
  73. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/client_helpers.py +0 -0
  74. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/constants.py +0 -0
  75. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/decorators.py +0 -0
  76. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/file_helpers.py +0 -0
  77. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/logging_helpers.py +0 -0
  78. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/package_helpers.py +0 -0
  79. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/pagination_helpers.py +0 -0
  80. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/response_helpers.py +0 -0
  81. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/helpers/transaction_manager.py +0 -0
  82. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/models/webhooks/__init__.py +0 -0
  83. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/py.typed +0 -0
  84. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/__init__.py +0 -0
  85. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/__init__.py +0 -0
  86. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/alpha/__init__.py +0 -0
  87. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/alpha/v2_alpha_app_service.py +0 -0
  88. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/alpha/v2_alpha_assembly_service.py +0 -0
  89. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/__init__.py +0 -0
  90. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/v2_beta_analysis_service.py +0 -0
  91. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/v2_beta_app_definition_service.py +0 -0
  92. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/v2_beta_app_service.py +0 -0
  93. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/v2_beta_collaboration_service.py +0 -0
  94. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/v2_beta_entry_service.py +0 -0
  95. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/v2_beta_folder_service.py +0 -0
  96. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/v2_beta_project_service.py +0 -0
  97. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/beta/v2_beta_worklist_service.py +0 -0
  98. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/__init__.py +0 -0
  99. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/api_service.py +0 -0
  100. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/app_service.py +0 -0
  101. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/assay_result_service.py +0 -0
  102. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/assay_run_service.py +0 -0
  103. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/codon_usage_table_service.py +0 -0
  104. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/custom_notation_service.py +0 -0
  105. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/dna_alignments_service.py +0 -0
  106. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/dropdown_service.py +0 -0
  107. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/entity_service.py +0 -0
  108. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/entry_service.py +0 -0
  109. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/enzyme_service.py +0 -0
  110. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/event_service.py +0 -0
  111. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/export_service.py +0 -0
  112. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/feature_library_service.py +0 -0
  113. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/folder_service.py +0 -0
  114. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/instrument_query_service.py +0 -0
  115. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/inventory_service.py +0 -0
  116. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/lab_automation_service.py +0 -0
  117. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/label_template_service.py +0 -0
  118. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/monomer_service.py +0 -0
  119. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/oligo_service.py +0 -0
  120. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/printer_service.py +0 -0
  121. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/project_service.py +0 -0
  122. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/registry_service.py +0 -0
  123. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/schema_service.py +0 -0
  124. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/user_service.py +0 -0
  125. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/warehouse_service.py +0 -0
  126. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/workflow_flowchart_config_version_service.py +0 -0
  127. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/workflow_flowchart_service.py +0 -0
  128. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/workflow_output_service.py +0 -0
  129. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/workflow_task_group_service.py +0 -0
  130. {benchling_sdk-1.21.1 → benchling_sdk-1.22.0a0}/benchling_sdk/services/v2/stable/workflow_task_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: benchling-sdk
3
- Version: 1.21.1
3
+ Version: 1.22.0a0
4
4
  Summary: SDK for interacting with the Benchling Platform.
5
5
  License: Apache-2.0
6
6
  Author: Benchling Support
@@ -16,7 +16,7 @@ Provides-Extra: python-jose
16
16
  Requires-Dist: PyYAML (>=6.0,<7.0)
17
17
  Requires-Dist: attrs (>=20.1.0)
18
18
  Requires-Dist: backoff (>=1.10.0,<3)
19
- Requires-Dist: benchling-api-client (==2.0.342)
19
+ Requires-Dist: benchling-api-client (==2.0.387)
20
20
  Requires-Dist: certifi (>=2022.12.7)
21
21
  Requires-Dist: cryptography (>=42.0.0) ; extra == "cryptography"
22
22
  Requires-Dist: dataclasses-json (>=0.5.2,<0.6.0)
@@ -26,6 +26,7 @@ Requires-Dist: ordered-set (>=4.1.0,<5.0.0)
26
26
  Requires-Dist: psutil (>=5.9.4,<6.0.0) ; python_version >= "3.11" and python_version < "4.0"
27
27
  Requires-Dist: python-dateutil (>=2.8.0,<3.0.0)
28
28
  Requires-Dist: python-jose[cryptography] (>=3.3.0,<4.0.0) ; extra == "python-jose"
29
+ Requires-Dist: setuptools (==68.0.0)
29
30
  Description-Content-Type: text/markdown
30
31
 
31
32
  # Benchling SDK
@@ -15,6 +15,9 @@ from benchling_sdk.models import (
15
15
  DropdownUiBlock,
16
16
  DropdownUiBlockCreate,
17
17
  DropdownUiBlockUpdate,
18
+ FileUploadUiBlock,
19
+ FileUploadUiBlockCreate,
20
+ FileUploadUiBlockUpdate,
18
21
  MarkdownUiBlock,
19
22
  MarkdownUiBlockCreate,
20
23
  MarkdownUiBlockUpdate,
@@ -46,6 +49,7 @@ UiBlock = Union[
46
49
  ChipUiBlock,
47
50
  DropdownMultiValueUiBlock,
48
51
  DropdownUiBlock,
52
+ FileUploadUiBlock,
49
53
  MarkdownUiBlock,
50
54
  SearchInputMultiValueUiBlock,
51
55
  SearchInputUiBlock,
@@ -67,6 +71,7 @@ _UiBlockCreate = Union[
67
71
  ChipUiBlockCreate,
68
72
  DropdownMultiValueUiBlockCreate,
69
73
  DropdownUiBlockCreate,
74
+ FileUploadUiBlockCreate,
70
75
  MarkdownUiBlockCreate,
71
76
  SearchInputMultiValueUiBlockCreate,
72
77
  SearchInputUiBlockCreate,
@@ -83,6 +88,7 @@ _UiBlockUpdate = Union[
83
88
  ChipUiBlockUpdate,
84
89
  DropdownMultiValueUiBlockUpdate,
85
90
  DropdownUiBlockUpdate,
91
+ FileUploadUiBlockUpdate,
86
92
  MarkdownUiBlockUpdate,
87
93
  SearchInputMultiValueUiBlockUpdate,
88
94
  SearchInputUiBlockUpdate,
@@ -99,6 +105,7 @@ _UI_BLOCK_MAPPINGS_CREATE = {
99
105
  ChipUiBlock: ChipUiBlockCreate,
100
106
  DropdownMultiValueUiBlock: DropdownMultiValueUiBlockCreate,
101
107
  DropdownUiBlock: DropdownUiBlockCreate,
108
+ FileUploadUiBlock: FileUploadUiBlockCreate,
102
109
  MarkdownUiBlock: MarkdownUiBlockCreate,
103
110
  SearchInputMultiValueUiBlock: SearchInputMultiValueUiBlockCreate,
104
111
  SearchInputUiBlock: SearchInputUiBlockCreate,
@@ -114,6 +121,7 @@ _UI_BLOCK_MAPPINGS_UPDATE = {
114
121
  ChipUiBlock: ChipUiBlockUpdate,
115
122
  DropdownMultiValueUiBlock: DropdownMultiValueUiBlockUpdate,
116
123
  DropdownUiBlock: DropdownUiBlockUpdate,
124
+ FileUploadUiBlock: FileUploadUiBlockUpdate,
117
125
  MarkdownUiBlock: MarkdownUiBlockUpdate,
118
126
  SearchInputMultiValueUiBlock: SearchInputMultiValueUiBlockUpdate,
119
127
  SearchInputUiBlock: SearchInputUiBlockUpdate,
@@ -228,7 +228,7 @@ class ConfigItemStore:
228
228
  _configuration_provider: ConfigProvider
229
229
  _configuration: Optional[List[ConfigurationReference]] = None
230
230
  _configuration_dict: Optional[Dict[ConfigItemPath, ConfigItemWrapper]] = None
231
- _array_path_row_names: Dict[Tuple[str, ...], OrderedSet[str]] = dict()
231
+ _array_path_row_names: Dict[Tuple[str, ...], OrderedSet[str]]
232
232
 
233
233
  def __init__(self, configuration_provider: ConfigProvider):
234
234
  """
@@ -302,7 +302,7 @@ class ConfigItemStore:
302
302
  # The +1 is the name of the array row
303
303
  if len(config_item.path) >= len(path) + 1
304
304
  # Ignoring flake8 error E203 because black keeps putting in whitespace padding :
305
- and config_item.path[0 : len(path_tuple)] == path # noqa: E203
305
+ and config_item.path[0 : len(path_tuple)] == path
306
306
  and config_item.value is not None
307
307
  ]
308
308
  )
@@ -1,6 +1,6 @@
1
1
  from datetime import datetime
2
2
  from enum import Enum
3
- from functools import lru_cache
3
+ from functools import cache
4
4
  from typing import cast, List, Optional, Union
5
5
 
6
6
  from benchling_api_client.v2.beta.extensions import Enums
@@ -47,7 +47,8 @@ class _UnsupportedSubTypeError(Exception):
47
47
 
48
48
 
49
49
  class _ScalarConfigTypes(Enums.KnownString):
50
- """Enum type copied from an earlier version of benchling-api-client, for internal use only.
50
+ """
51
+ Enum type copied from an earlier version of benchling-api-client, for internal use only.
51
52
 
52
53
  See BNCH-108704.
53
54
  """
@@ -65,12 +66,12 @@ class _ScalarConfigTypes(Enums.KnownString):
65
66
  return str(self.value)
66
67
 
67
68
  @staticmethod
68
- @lru_cache(maxsize=None)
69
+ @cache
69
70
  def of_unknown(val: str) -> "_ScalarConfigTypes":
70
71
  if not isinstance(val, str):
71
72
  raise ValueError(f"Value of _ScalarConfigTypes must be a string (encountered: {val})")
72
73
  newcls = Enum("_ScalarConfigTypes", {"_UNKNOWN": val}, type=Enums.UnknownString) # type: ignore
73
- return cast(_ScalarConfigTypes, getattr(newcls, "_UNKNOWN"))
74
+ return cast(_ScalarConfigTypes, newcls._UNKNOWN)
74
75
 
75
76
 
76
77
  def _field_definitions_from_dependency(
@@ -122,7 +123,7 @@ def _enum_from_dependency(
122
123
 
123
124
 
124
125
  # TODO BNCH-57036 All element definitions currently deserialize to UnknownType. Hack around this temporarily
125
- def _fix_element_definition_deserialization(
126
+ def _fix_element_definition_deserialization( # noqa:PLR0911
126
127
  element: Union[UnknownType, _ArrayElementDependency]
127
128
  ) -> _ArrayElementDependency:
128
129
  if isinstance(element, UnknownType):
@@ -345,7 +345,7 @@ def mock_text_app_config_item(path: List[str], value: Optional[str]) -> TextAppC
345
345
  )
346
346
 
347
347
 
348
- def _mock_dependency(
348
+ def _mock_dependency( # noqa:PLR0911
349
349
  dependency: ManifestDependencies,
350
350
  parent_path: Optional[List[str]] = None,
351
351
  ) -> List[AppConfigItem]:
@@ -451,7 +451,7 @@ def _convert_entity_subtype(manifest_subtype: SchemaDependencySubtypesBeta) -> S
451
451
  return SchemaDependencySubtypes(source_value)
452
452
 
453
453
 
454
- def _mock_scalar_dependency(
454
+ def _mock_scalar_dependency( # noqa:PLR0911
455
455
  dependency: ManifestScalarConfig, parent_path: Optional[List[str]] = None
456
456
  ) -> AppConfigItem:
457
457
  parent_path = parent_path if parent_path else []
@@ -502,7 +502,7 @@ def _mock_array_dependency(
502
502
  ) -> List[AppConfigItem]:
503
503
  config_rows = []
504
504
  parent_path = parent_path if parent_path else []
505
- for i in range(rows):
505
+ for _ in range(rows):
506
506
  row = _mock_array_row(dependency, parent_path=parent_path)
507
507
  elements = _element_definition_from_dependency(dependency)
508
508
  element_configs = [_mock_dependency(element, row.path) for element in elements]
@@ -594,7 +594,7 @@ def _mock_linked_resource(id: str, name: Optional[str] = None) -> LinkedAppConfi
594
594
  return LinkedAppConfigResourceSummary(id=id, name=name if name else _random_string("Resource Name"))
595
595
 
596
596
 
597
- def _mock_scalar_value(
597
+ def _mock_scalar_value( # noqa:PLR0911
598
598
  dependency: ManifestScalarConfig,
599
599
  ) -> Union[bool, date, datetime, int, float, str, Dict[str, Union[str, float]]]:
600
600
  """Mock a scalar config value from its manifest definition."""
@@ -276,8 +276,8 @@ def _verify_timestamp(timestamp_header: str) -> None:
276
276
  now = datetime.now(tz=timezone.utc)
277
277
  try:
278
278
  timestamp = datetime.fromtimestamp(float(timestamp_header), tz=timezone.utc)
279
- except Exception:
280
- raise WebhookVerificationError("Invalid Signature Headers")
279
+ except Exception as exc:
280
+ raise WebhookVerificationError("Invalid Signature Headers") from exc
281
281
  if timestamp < (now - webhook_tolerance):
282
282
  raise WebhookVerificationError("Message timestamp too old")
283
283
  if timestamp > (now + webhook_tolerance):
@@ -286,10 +286,7 @@ class SessionClosingContextExitHandler(SessionContextExitHandler):
286
286
  error_messages: Optional[Iterable[AppSessionMessageCreate]] = [
287
287
  AppSessionMessageCreate(_DEFAULT_APP_ERROR_MESSAGE, style=AppSessionMessageStyle.ERROR)
288
288
  ],
289
- error_processors: List[Type[SessionContextErrorProcessor]] = [
290
- AppUserFacingErrorProcessor,
291
- BenchlingBadRequestErrorProcessor,
292
- ],
289
+ error_processors: Optional[List[Type[SessionContextErrorProcessor]]] = None,
293
290
  enable_attached_canvas_on_error: bool = True,
294
291
  ):
295
292
  """
@@ -300,7 +297,10 @@ class SessionClosingContextExitHandler(SessionContextExitHandler):
300
297
  """
301
298
  self._success_messages = success_messages
302
299
  self._error_messages = error_messages
303
- self._error_processors = error_processors
300
+ self._error_processors = error_processors or [
301
+ AppUserFacingErrorProcessor,
302
+ BenchlingBadRequestErrorProcessor,
303
+ ]
304
304
  self._enable_attached_canvas_on_error = enable_attached_canvas_on_error
305
305
 
306
306
  def on_success(self, context: SessionContextManager) -> bool:
@@ -13,6 +13,7 @@ def ref(reference: ReferencedSessionLinkType) -> str:
13
13
  Example:
14
14
  dna_sequence = benchling.dna_sequences.get_by_id("seq_1234")
15
15
  AppSessionMessageCreate(f"This is my DNA sequence {ref(dna_sequence)} for analysis")
16
+
16
17
  """
17
18
  return ref_by_id(reference.id)
18
19
 
@@ -28,6 +29,7 @@ def ref_by_id(reference_id: str) -> str:
28
29
  Example:
29
30
  dna_sequence_id: str = "seq_asQya4lk"
30
31
  AppSessionMessageCreate(f"This is my DNA sequence {ref_by_id(dna_sequence_id)} for analysis")
32
+
31
33
  """
32
34
  assert reference_id, "reference_id cannot be empty or None"
33
35
  return _encode_id(reference_id)
@@ -1,9 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import base64
4
- from datetime import datetime, timedelta
4
+ from datetime import datetime, timedelta, timezone
5
5
  from json import JSONDecodeError
6
6
  import threading
7
+ import typing
7
8
  from typing import NoReturn, Optional
8
9
  from urllib.parse import urljoin
9
10
 
@@ -31,7 +32,7 @@ class Token:
31
32
 
32
33
  def valid(self) -> bool:
33
34
  """Return whether token is still valid for use or should be regenerated."""
34
- return datetime.now() < self.refresh_time
35
+ return datetime.now(timezone.utc) < self.refresh_time
35
36
 
36
37
  @classmethod
37
38
  def from_token_response(cls, token_response) -> Token:
@@ -50,7 +51,7 @@ class Token:
50
51
  # Add in a buffer to safeguard against race conditions with token expiration.
51
52
  # Buffer is 10% of expires_in time, clamped between [1, MINIMUM_TOKEN_EXPIRY_BUFFER] seconds.
52
53
  refresh_delta = expires_in - max(1, min(MINIMUM_TOKEN_EXPIRY_BUFFER, expires_in * 0.1))
53
- refresh_time = datetime.now() + timedelta(seconds=refresh_delta)
54
+ refresh_time = datetime.now(timezone.utc) + timedelta(seconds=refresh_delta)
54
55
  return cls(access_token, refresh_time)
55
56
 
56
57
 
@@ -62,7 +63,7 @@ class ClientCredentialsOAuth2(AuthorizationMethod):
62
63
  type.
63
64
  """
64
65
 
65
- _data_for_token_request = {
66
+ _data_for_token_request: typing.ClassVar[dict] = {
66
67
  "grant_type": "client_credentials",
67
68
  }
68
69
 
@@ -1,4 +1,5 @@
1
1
  """Provides the Benchling class, which is the main interface for accessing Benchling's API functionality."""
2
+
2
3
  from __future__ import annotations
3
4
 
4
5
  from functools import cached_property
@@ -18,12 +19,16 @@ if TYPE_CHECKING:
18
19
  from benchling_sdk.services.v2.stable.app_service import AppService
19
20
  from benchling_sdk.services.v2.stable.assay_result_service import AssayResultService
20
21
  from benchling_sdk.services.v2.stable.assay_run_service import AssayRunService
22
+ from benchling_sdk.services.v2.stable.audit_service import AuditService
21
23
  from benchling_sdk.services.v2.stable.blob_service import BlobService
22
24
  from benchling_sdk.services.v2.stable.box_service import BoxService
23
25
  from benchling_sdk.services.v2.stable.codon_usage_table_service import CodonUsageTableService
26
+ from benchling_sdk.services.v2.stable.connect_service import ConnectService
24
27
  from benchling_sdk.services.v2.stable.container_service import ContainerService
25
28
  from benchling_sdk.services.v2.stable.custom_entity_service import CustomEntityService
26
29
  from benchling_sdk.services.v2.stable.custom_notation_service import CustomNotationService
30
+ from benchling_sdk.services.v2.stable.data_frame_service import DataFrameService
31
+ from benchling_sdk.services.v2.stable.dataset_service import DatasetService
27
32
  from benchling_sdk.services.v2.stable.dna_alignments_service import DnaAlignmentsService
28
33
  from benchling_sdk.services.v2.stable.dna_oligo_service import DnaOligoService
29
34
  from benchling_sdk.services.v2.stable.dna_sequence_service import DnaSequenceService
@@ -34,11 +39,13 @@ if TYPE_CHECKING:
34
39
  from benchling_sdk.services.v2.stable.event_service import EventService
35
40
  from benchling_sdk.services.v2.stable.export_service import ExportService
36
41
  from benchling_sdk.services.v2.stable.feature_library_service import FeatureLibraryService
42
+ from benchling_sdk.services.v2.stable.file_service import FileService
37
43
  from benchling_sdk.services.v2.stable.folder_service import FolderService
38
44
  from benchling_sdk.services.v2.stable.instrument_query_service import InstrumentQueryService
39
45
  from benchling_sdk.services.v2.stable.inventory_service import InventoryService
40
46
  from benchling_sdk.services.v2.stable.lab_automation_service import LabAutomationService
41
47
  from benchling_sdk.services.v2.stable.label_template_service import LabelTemplateService
48
+ from benchling_sdk.services.v2.stable.legacy_request_service import LegacyRequestService
42
49
  from benchling_sdk.services.v2.stable.location_service import LocationService
43
50
  from benchling_sdk.services.v2.stable.mixture_service import MixtureService
44
51
  from benchling_sdk.services.v2.stable.molecule_service import MoleculeService
@@ -50,12 +57,12 @@ if TYPE_CHECKING:
50
57
  from benchling_sdk.services.v2.stable.printer_service import PrinterService
51
58
  from benchling_sdk.services.v2.stable.project_service import ProjectService
52
59
  from benchling_sdk.services.v2.stable.registry_service import RegistryService
53
- from benchling_sdk.services.v2.stable.request_service import RequestService
54
60
  from benchling_sdk.services.v2.stable.rna_oligo_service import RnaOligoService
55
61
  from benchling_sdk.services.v2.stable.rna_sequence_service import RnaSequenceService
56
62
  from benchling_sdk.services.v2.stable.schema_service import SchemaService
57
63
  from benchling_sdk.services.v2.stable.task_service import TaskService
58
64
  from benchling_sdk.services.v2.stable.team_service import TeamService
65
+ from benchling_sdk.services.v2.stable.test_order_service import TestOrderService
59
66
  from benchling_sdk.services.v2.stable.user_service import UserService
60
67
  from benchling_sdk.services.v2.stable.warehouse_service import WarehouseService
61
68
  from benchling_sdk.services.v2.stable.workflow_flowchart_config_version_service import (
@@ -96,7 +103,7 @@ _DEFAULT_BASE_PATH = "/api/v2"
96
103
  _DEFAULT_RETRY_STRATEGY = RetryStrategy()
97
104
 
98
105
 
99
- class Benchling(object):
106
+ class Benchling:
100
107
  """
101
108
  A facade for interactions with the Benchling platform.
102
109
 
@@ -213,7 +220,7 @@ class Benchling(object):
213
220
 
214
221
  See https://benchling.com/api/reference#/Apps
215
222
  and https://docs.benchling.com/docs/getting-started-benchling-apps
216
- """
223
+ """ # noqa:RUF002 # Ruff gets confused by a trailing apostrophe with a plural noun
217
224
  return self.v2.stable.apps
218
225
 
219
226
  @property
@@ -239,6 +246,17 @@ class Benchling(object):
239
246
  """
240
247
  return self.v2.stable.assay_runs
241
248
 
249
+ @property
250
+ def audit(self) -> AuditService:
251
+ """
252
+ Audits.
253
+
254
+ Export audit log data for Benchling objects.
255
+
256
+ https://benchling.com/api/reference#/Audit
257
+ """
258
+ return self.v2.stable.audit
259
+
242
260
  @property
243
261
  def blobs(self) -> BlobService:
244
262
  """
@@ -281,6 +299,17 @@ class Benchling(object):
281
299
  """
282
300
  return self.v2.stable.codon_usage_tables
283
301
 
302
+ @property
303
+ def connect(self) -> ConnectService:
304
+ """
305
+ Connect.
306
+
307
+ Connect endpoints support Benchling Connect actions, like instrument data conversion.
308
+
309
+ See https://benchling.com/api/reference#/Connect
310
+ """
311
+ return self.v2.stable.connect
312
+
284
313
  @property
285
314
  def containers(self) -> ContainerService:
286
315
  """
@@ -323,6 +352,29 @@ class Benchling(object):
323
352
  """
324
353
  return self.v2.stable.custom_notations
325
354
 
355
+ @property
356
+ def data_frames(self) -> DataFrameService:
357
+ """
358
+ DataFrames.
359
+
360
+ DataFrames are Benchling objects that represent tabular data with typed columns and rows of data.
361
+
362
+ See https://benchling.com/api/v2/reference#/Data%20Frames
363
+ """
364
+ return self.v2.stable.data_frames
365
+
366
+ @property
367
+ def datasets(self) -> DatasetService:
368
+ """
369
+ Datasets.
370
+
371
+ Datasets are Benchling objects that represent tabular data with typed columns and rows of data. Unlike
372
+ Data Frames, Datasets are located in folders and can be searched in the UI.
373
+
374
+ See https://benchling.com/api/v2/reference#/Datasets
375
+ """
376
+ return self.v2.stable.datasets
377
+
326
378
  @property
327
379
  def dna_alignments(self) -> DnaAlignmentsService:
328
380
  """
@@ -451,6 +503,19 @@ class Benchling(object):
451
503
  """
452
504
  return self.v2.stable.feature_libraries
453
505
 
506
+ @property
507
+ def files(self) -> FileService:
508
+ """
509
+ Files.
510
+
511
+ Files are Benchling objects that represent files and their metadata. Compared to Blobs, which are used
512
+ by most Benchling products for attachments, Files are primarily used in the Analysis and Connect
513
+ product.
514
+
515
+ See https://benchling.com/api/v2/reference#/Files
516
+ """
517
+ return self.v2.stable.files
518
+
454
519
  @property
455
520
  def folders(self) -> FolderService:
456
521
  """
@@ -507,6 +572,17 @@ class Benchling(object):
507
572
  """
508
573
  return self.v2.stable.label_templates
509
574
 
575
+ @property
576
+ def legacy_requests(self) -> LegacyRequestService:
577
+ """
578
+ Legacy Requests.
579
+
580
+ Legacy Requests allow scientists and teams to collaborate around experimental assays and workflows.
581
+
582
+ See https://benchling.com/api/reference#/Legacy%20Requests
583
+ """
584
+ return self.v2.stable.legacy_requests
585
+
510
586
  @property
511
587
  def locations(self) -> LocationService:
512
588
  """
@@ -642,17 +718,6 @@ class Benchling(object):
642
718
  """
643
719
  return self.v2.stable.registry
644
720
 
645
- @property
646
- def requests(self) -> RequestService:
647
- """
648
- Requests.
649
-
650
- Requests allow scientists and teams to collaborate around experimental assays and workflows.
651
-
652
- See https://benchling.com/api/reference#/Requests
653
- """
654
- return self.v2.stable.requests
655
-
656
721
  @property
657
722
  def rna_oligos(self) -> RnaOligoService:
658
723
  """
@@ -706,6 +771,17 @@ class Benchling(object):
706
771
  """
707
772
  return self.v2.stable.teams
708
773
 
774
+ @property
775
+ def test_orders(self) -> TestOrderService:
776
+ """
777
+ Test Orders.
778
+
779
+ Test orders enable users to order tests for specific sample/container combinations that will be fulfilled in assays.
780
+
781
+ See https://benchling.com/api/reference?availability=la#/Test%20Orders/
782
+ """
783
+ return self.v2.stable.test_orders
784
+
709
785
  @property
710
786
  def users(self) -> UserService:
711
787
  """
@@ -26,7 +26,8 @@ logger = default_logger()
26
26
 
27
27
  @dataclass
28
28
  class BenchlingError(Exception):
29
- """An error resulting from communicating with the Benchling API.
29
+ """
30
+ An error resulting from communicating with the Benchling API.
30
31
 
31
32
  This could be an error returned from the API intentionally (e.g., 400 Bad Request) or an
32
33
  unexpected transport error (e.g., 502 Bad Gateway)
@@ -53,7 +54,7 @@ class BenchlingError(Exception):
53
54
  ]
54
55
 
55
56
  @classmethod
56
- def from_response(cls, response: Response) -> "BenchlingError":
57
+ def from_response(cls, response: Response) -> BenchlingError:
57
58
  """Create a BenchlingError from a generated Response."""
58
59
  json_body = _parse_error_body(response.content)
59
60
  return cls(
@@ -95,7 +96,7 @@ class RegistrationError(Exception):
95
96
  task_status: Optional[AsyncTaskStatus] = None
96
97
 
97
98
  @classmethod
98
- def from_task(cls, task: AsyncTask) -> "RegistrationError":
99
+ def from_task(cls, task: AsyncTask) -> RegistrationError:
99
100
  """Create a RegistrationError from a failed AsyncTask."""
100
101
  task_errors = unset_as_none(task.errors)
101
102
  errors_dict: Dict[Any, Any] = task_errors.to_dict() if task_errors else dict() # type: ignore
@@ -14,7 +14,7 @@ logging.getLogger("backoff").setLevel(logging.CRITICAL)
14
14
 
15
15
 
16
16
  @dataclass(frozen=True, eq=True)
17
- class RetryStrategy(object):
17
+ class RetryStrategy:
18
18
  """Specify a strategy for automatically retrying failed HTTP calls."""
19
19
 
20
20
  # Passing in None results in unbounded retries
@@ -29,7 +29,8 @@ class SerializableModel(DataClassJsonMixin):
29
29
 
30
30
  @dataclass
31
31
  class DeserializableModel(DataClassJsonMixin):
32
- """Provide an interface for deserialization to a custom model.
32
+ """
33
+ Provide an interface for deserialization to a custom model.
33
34
 
34
35
  For deserializing models when using raw API calls (e.g., Benchling.api)
35
36
  Override deserialize() for customized behavior.
@@ -50,7 +51,8 @@ class DeserializableModelNoContent(DeserializableModel):
50
51
 
51
52
 
52
53
  def optional_array_query_param(inputs: Optional[Iterable[str]]) -> Optional[str]:
53
- """Collapse an Iterable to a comma-separated string if present.
54
+ """
55
+ Collapse an Iterable to a comma-separated string if present.
54
56
 
55
57
  Add leading and trailing quotes if the item contains "," and not quoted
56
58
  """
@@ -58,7 +60,8 @@ def optional_array_query_param(inputs: Optional[Iterable[str]]) -> Optional[str]
58
60
 
59
61
 
60
62
  def array_query_param(inputs: Iterable[str]) -> str:
61
- """Collapse an Iterable to a comma-separated string.
63
+ """
64
+ Collapse an Iterable to a comma-separated string.
62
65
 
63
66
  Add leading and trailing quotes if the item contains "," and not quoted
64
67
  """
@@ -1,10 +1,10 @@
1
1
  from dataclasses import dataclass
2
- from typing import Any, cast, Generic, Optional, Type, TypeVar
2
+ from typing import Any, cast, Generic, List, Optional, Type, TypeVar, Union
3
3
 
4
4
  from benchling_api_client.v2.stable.client import Client
5
5
 
6
6
  from benchling_sdk.helpers.serialization_helpers import unset_as_none
7
- from benchling_sdk.models import AsyncTaskErrors, AsyncTaskLink, AsyncTaskStatus
7
+ from benchling_sdk.models import AsyncTaskErrors, AsyncTaskErrorsItem, AsyncTaskLink, AsyncTaskStatus
8
8
 
9
9
  ResponseT = TypeVar("ResponseT")
10
10
 
@@ -14,7 +14,7 @@ class TaskCompletion(Generic[ResponseT]):
14
14
  """Return type for TaskHelper.wait_for_task, same as AsyncTask but with a typed response."""
15
15
 
16
16
  success: bool
17
- errors: Optional[AsyncTaskErrors] = None
17
+ errors: Optional[Union[AsyncTaskErrors, List[AsyncTaskErrorsItem]]] = None
18
18
  message: Optional[str] = None
19
19
  response: Optional[ResponseT] = None
20
20
 
@@ -23,7 +23,7 @@ class TaskCompletion(Generic[ResponseT]):
23
23
  class TaskFailureException(Exception):
24
24
  """Exception type used by :py:class:`.TaskHelper` methods."""
25
25
 
26
- errors: AsyncTaskErrors
26
+ errors: Union[AsyncTaskErrors, List[AsyncTaskErrorsItem]]
27
27
  message: Optional[str]
28
28
 
29
29
 
@@ -37,7 +37,8 @@ EMPTY_TASK_RESPONSE = EmptyTaskResponse()
37
37
 
38
38
 
39
39
  class TaskHelper(AsyncTaskLink, Generic[ResponseT]):
40
- """Used by Benchling async task endpoints to provide the task response in an appropriate type.
40
+ """
41
+ Used by Benchling async task endpoints to provide the task response in an appropriate type.
41
42
 
42
43
  In the API spec, endpoints that create a long-running task are defined as returning an
43
44
  :py:class:`benchling_sdk.models.AsyncTaskLink`, which can be used with
@@ -70,12 +71,13 @@ class TaskHelper(AsyncTaskLink, Generic[ResponseT]):
70
71
 
71
72
  if response_class is not EmptyTaskResponse:
72
73
  assert hasattr(response_class, "from_dict")
73
- self._response_decoder = getattr(response_class, "from_dict")
74
+ self._response_decoder = getattr(response_class, "from_dict") # noqa: B009
74
75
 
75
76
  def wait_for_completion(
76
77
  self, interval_wait_seconds: int = 1, max_wait_seconds: int = 600
77
78
  ) -> TaskCompletion[ResponseT]:
78
- """Wait for the task to succeed or fail.
79
+ """
80
+ Wait for the task to succeed or fail.
79
81
 
80
82
  This is equivalent to the :py:meth:`benchling_sdk.services.v2.stable.task_service.TaskService.wait_for_task`
81
83
  method in :py:class:`benchling_sdk.services.v2.stable.task_service.TaskService`, except that
@@ -110,13 +112,14 @@ class TaskHelper(AsyncTaskLink, Generic[ResponseT]):
110
112
  message = None if task.status != AsyncTaskStatus.FAILED else unset_as_none(task.message)
111
113
  return TaskCompletion(
112
114
  success=task.status == AsyncTaskStatus.SUCCEEDED,
113
- errors=errors,
115
+ errors=errors, # type: ignore
114
116
  message=message,
115
117
  response=response,
116
118
  )
117
119
 
118
120
  def wait_for_response(self, interval_wait_seconds: int = 1, max_wait_seconds: int = 600) -> ResponseT:
119
- """Wait for the task and return the response object on success, or raise an exception on failure.
121
+ """
122
+ Wait for the task and return the response object on success, or raise an exception on failure.
120
123
 
121
124
  This is a convenience method for calling :py:meth:`wait_for_completion` and then getting the
122
125
  `response` property of the returned object if the task succeeded, in cases where you're not