benchling-sdk 1.21.0__tar.gz → 1.21.1__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 (125) hide show
  1. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/PKG-INFO +1 -1
  2. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/helpers/webhook_helpers.py +24 -6
  3. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/status/framework.py +1 -1
  4. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/serialization_helpers.py +1 -1
  5. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/pyproject.toml +80 -22
  6. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/LICENSE +0 -0
  7. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/README.md +0 -0
  8. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/__init__.py +0 -0
  9. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/__init__.py +0 -0
  10. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/canvas/__init__.py +0 -0
  11. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/canvas/errors.py +0 -0
  12. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/canvas/framework.py +0 -0
  13. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/canvas/types.py +0 -0
  14. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/config/__init__.py +0 -0
  15. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/config/cryptography_helpers.py +0 -0
  16. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/config/decryption_provider.py +0 -0
  17. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/config/errors.py +0 -0
  18. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/config/framework.py +0 -0
  19. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/config/helpers.py +0 -0
  20. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/config/mock_config.py +0 -0
  21. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/config/types.py +0 -0
  22. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/framework.py +0 -0
  23. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/helpers/__init__.py +0 -0
  24. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/helpers/manifest_helpers.py +0 -0
  25. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/status/__init__.py +0 -0
  26. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/status/errors.py +0 -0
  27. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/status/helpers.py +0 -0
  28. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/status/types.py +0 -0
  29. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/apps/types.py +0 -0
  30. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/auth/__init__.py +0 -0
  31. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/auth/api_key_auth.py +0 -0
  32. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/auth/bearer_token_auth.py +0 -0
  33. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/auth/client_credentials_oauth2.py +0 -0
  34. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/benchling.py +0 -0
  35. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/docs/__init__.py +0 -0
  36. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/docs/__main__.py +0 -0
  37. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/errors.py +0 -0
  38. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/__init__.py +0 -0
  39. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/client_helpers.py +0 -0
  40. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/constants.py +0 -0
  41. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/decorators.py +0 -0
  42. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/file_helpers.py +0 -0
  43. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/logging_helpers.py +0 -0
  44. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/package_helpers.py +0 -0
  45. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/pagination_helpers.py +0 -0
  46. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/response_helpers.py +0 -0
  47. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/retry_helpers.py +0 -0
  48. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/task_helpers.py +0 -0
  49. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/helpers/transaction_manager.py +0 -0
  50. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/models/__init__.py +0 -0
  51. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/models/webhooks/__init__.py +0 -0
  52. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/models/webhooks/v0/__init__.py +0 -0
  53. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/py.typed +0 -0
  54. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/__init__.py +0 -0
  55. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/__init__.py +0 -0
  56. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/alpha/__init__.py +0 -0
  57. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/alpha/v2_alpha_app_service.py +0 -0
  58. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/alpha/v2_alpha_assembly_service.py +0 -0
  59. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/base_service.py +0 -0
  60. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/__init__.py +0 -0
  61. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_analysis_service.py +0 -0
  62. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_app_definition_service.py +0 -0
  63. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_app_service.py +0 -0
  64. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_audit_service.py +0 -0
  65. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_collaboration_service.py +0 -0
  66. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_data_frame_service.py +0 -0
  67. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_entry_service.py +0 -0
  68. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_folder_service.py +0 -0
  69. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_project_service.py +0 -0
  70. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/beta/v2_beta_worklist_service.py +0 -0
  71. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/__init__.py +0 -0
  72. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/aa_sequence_service.py +0 -0
  73. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/api_service.py +0 -0
  74. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/app_service.py +0 -0
  75. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/assay_result_service.py +0 -0
  76. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/assay_run_service.py +0 -0
  77. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/blob_service.py +0 -0
  78. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/box_service.py +0 -0
  79. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/codon_usage_table_service.py +0 -0
  80. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/container_service.py +0 -0
  81. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/custom_entity_service.py +0 -0
  82. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/custom_notation_service.py +0 -0
  83. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/dna_alignments_service.py +0 -0
  84. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/dna_oligo_service.py +0 -0
  85. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/dna_sequence_service.py +0 -0
  86. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/dropdown_service.py +0 -0
  87. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/entity_service.py +0 -0
  88. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/entry_service.py +0 -0
  89. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/enzyme_service.py +0 -0
  90. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/event_service.py +0 -0
  91. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/export_service.py +0 -0
  92. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/feature_library_service.py +0 -0
  93. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/folder_service.py +0 -0
  94. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/instrument_query_service.py +0 -0
  95. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/inventory_service.py +0 -0
  96. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/lab_automation_service.py +0 -0
  97. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/label_template_service.py +0 -0
  98. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/location_service.py +0 -0
  99. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/mixture_service.py +0 -0
  100. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/molecule_service.py +0 -0
  101. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/monomer_service.py +0 -0
  102. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/nucleotide_alignments_service.py +0 -0
  103. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/oligo_service.py +0 -0
  104. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/organization_service.py +0 -0
  105. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/plate_service.py +0 -0
  106. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/printer_service.py +0 -0
  107. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/project_service.py +0 -0
  108. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/registry_service.py +0 -0
  109. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/request_service.py +0 -0
  110. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/rna_oligo_service.py +0 -0
  111. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/rna_sequence_service.py +0 -0
  112. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/schema_service.py +0 -0
  113. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/task_service.py +0 -0
  114. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/team_service.py +0 -0
  115. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/user_service.py +0 -0
  116. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/warehouse_service.py +0 -0
  117. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/workflow_flowchart_config_version_service.py +0 -0
  118. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/workflow_flowchart_service.py +0 -0
  119. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/workflow_output_service.py +0 -0
  120. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/workflow_task_group_service.py +0 -0
  121. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/stable/workflow_task_service.py +0 -0
  122. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/v2_alpha_service.py +0 -0
  123. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/v2_beta_service.py +0 -0
  124. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/benchling_sdk/services/v2/v2_stable_service.py +0 -0
  125. {benchling_sdk-1.21.0 → benchling_sdk-1.21.1}/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.21.0
3
+ Version: 1.21.1
4
4
  Summary: SDK for interacting with the Benchling Platform.
5
5
  License: Apache-2.0
6
6
  Author: Benchling Support
@@ -1,6 +1,6 @@
1
1
  import base64
2
2
  from datetime import datetime, timedelta, timezone
3
- from typing import Any, cast, List, Mapping, Optional, Protocol, Union
3
+ from typing import cast, List, Optional, Protocol, Union
4
4
 
5
5
  from benchling_api_client.v2.benchling_client import BenchlingApiClient
6
6
  import httpx
@@ -12,6 +12,21 @@ from benchling_sdk.helpers.package_helpers import _required_packages_context, Ex
12
12
  from benchling_sdk.services.v2.stable.api_service import build_json_response
13
13
 
14
14
 
15
+ class HeadersMapping(Protocol):
16
+ """
17
+ A general type for objects that represent request headers.
18
+
19
+ This can be a dict, or any `Mapping[str, str]`, or an instance of a class like
20
+ Flask's Headers class which is dict-like to a limited degree.
21
+ """
22
+
23
+ def __contains__(self, key: str) -> bool:
24
+ pass
25
+
26
+ def __getitem__(self, key: str) -> str:
27
+ pass
28
+
29
+
15
30
  class WebhookVerificationError(Exception):
16
31
  """
17
32
  Webhook Verification Error.
@@ -146,7 +161,7 @@ def jwks_by_app_definition(
146
161
 
147
162
 
148
163
  def verify_app_installation(
149
- app_id: str, data: str, headers: Mapping[str, Any], jwk_function: Optional[LegacyGetJwksFunction] = None
164
+ app_id: str, data: str, headers: HeadersMapping, jwk_function: Optional[LegacyGetJwksFunction] = None
150
165
  ) -> None:
151
166
  """
152
167
  Verify a webhook for an app installation (Deprecated).
@@ -165,7 +180,7 @@ def verify_app_installation(
165
180
  def verify(
166
181
  app_definition_id: str,
167
182
  data: str,
168
- headers: Mapping[str, Any],
183
+ headers: HeadersMapping,
169
184
  jwk_function: Optional[GetJwksFunction] = None,
170
185
  ) -> None:
171
186
  """
@@ -174,6 +189,9 @@ def verify(
174
189
  Verifies that a webhook was a valid webhook from Benchling.
175
190
  Raises WebhookVerificationError if the webhook could not be verified.
176
191
  Resolves JWKs from Benchling with default settings. Pass jwk_function for customization.
192
+
193
+ The headers parameter can be a dict, or a dict-like object such as the Headers type
194
+ from Flask.
177
195
  """
178
196
  default_jwk_function: GetJwksFunction = jwks_by_app_definition
179
197
  _jwk_function: GetJwksFunction = default_jwk_function if jwk_function is None else jwk_function
@@ -201,7 +219,7 @@ def _has_valid_signature(to_verify: str, jwks: jwk.JWKSet, encoded_signatures: L
201
219
  def _verify(
202
220
  app_installation_or_definition_id: str,
203
221
  data: str,
204
- headers: Mapping[str, Any],
222
+ headers: HeadersMapping,
205
223
  jwk_function: Union[GetJwksFunction, LegacyGetJwksFunction],
206
224
  ) -> None:
207
225
  _verify_headers_present(headers)
@@ -215,7 +233,7 @@ def _verify(
215
233
  raise WebhookVerificationError("No matching signature found")
216
234
 
217
235
 
218
- def _der_signatures_from_versioned_signatures(versioned_signatures: str) -> List[str]:
236
+ def _der_signatures_from_versioned_signatures(versioned_signatures: List[str]) -> List[str]:
219
237
  """
220
238
  Parse and return a list of ders signatures from a single string.
221
239
 
@@ -231,7 +249,7 @@ def _der_signatures_from_versioned_signatures(versioned_signatures: str) -> List
231
249
  return der_signatures
232
250
 
233
251
 
234
- def _verify_headers_present(headers: Mapping[str, Any]) -> None:
252
+ def _verify_headers_present(headers: HeadersMapping) -> None:
235
253
  """
236
254
  Verify Headers Present.
237
255
 
@@ -5,7 +5,7 @@ from contextlib import AbstractContextManager
5
5
  from types import TracebackType
6
6
  from typing import cast, Iterable, List, Optional, Protocol, Type, TYPE_CHECKING, Union
7
7
 
8
- from benchling_api_client.v2.stable.types import Unset, UNSET
8
+ from benchling_api_client.v2.stable.types import UNSET, Unset
9
9
 
10
10
  from benchling_sdk.apps.status.errors import (
11
11
  AppUserFacingError,
@@ -1,7 +1,7 @@
1
1
  from dataclasses import dataclass
2
2
  from typing import Any, Dict, Iterable, Optional, Type, TypeVar, Union
3
3
 
4
- from benchling_api_client.v2.types import Unset, UNSET
4
+ from benchling_api_client.v2.types import UNSET, Unset
5
5
  from dataclasses_json import DataClassJsonMixin
6
6
 
7
7
  from benchling_sdk.models import CustomFields, Field, Fields, SchemaFieldsQueryParam
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "benchling-sdk"
3
- version = "1.21.0" # NOTE: This version number is ignored and does not correspond to releases (see README)
3
+ version = "1.21.1" # NOTE: This version number is ignored and does not correspond to releases (see README)
4
4
  description = "SDK for interacting with the Benchling Platform."
5
5
  authors = ["Benchling Support <support@benchling.com>"]
6
6
  packages = [{include = "benchling_sdk"}]
@@ -44,19 +44,16 @@ cryptography = ["cryptography"]
44
44
  python-jose = ["python-jose"]
45
45
 
46
46
  [tool.poetry.group.dev.dependencies]
47
- black = "^22.3.0"
48
- isort = "^5.10.1"
49
47
  pre-commit = "^2.6.0"
50
48
  ipython = "^7.16.1"
51
49
  mypy = "^1.13"
52
- flake8 = "^3.8.3"
50
+ ruff = "^0.7.3"
53
51
  taskipy = "^1.6.0"
54
52
  Jinja2 = "^3.1.2"
55
53
  Markdown = "3.3.4" # Errors in Markdown 3.3.5 related to TypeError: entry_points() got an unexpected keyword argument 'group'
56
54
  toml = "^0.10.2"
57
55
  packaging = "^20.9"
58
56
  coverage = "^5.5"
59
- flake8-docstrings = "^1.6.0"
60
57
  ddt = "1.4.4"
61
58
  pytest = "^7.1.2"
62
59
  beautifulsoup4 = "4.10.0"
@@ -67,8 +64,6 @@ boto3 = "^1.24.67"
67
64
  boto3-stubs = {extras = ["ssm"], version = "1.24.67"}
68
65
  types-s3transfer = "0.6.0.post4"
69
66
  botocore-stubs = "1.28.4"
70
- # Used by flake8, version pinning is because v5 removes a deprecated call flake is currently using.
71
- importlib-metadata = "^4.13.0"
72
67
  sphinx-multiversion-pre-post-build = "^0.2.4"
73
68
  time-machine = "^2.15.0" # change to >=2.15.0 once we drop Python 3.8 support
74
69
  python-jose = "^3.3.0"
@@ -81,29 +76,92 @@ unit = "pytest -s tests/unit/"
81
76
  integration = "pytest -vv --reruns 3 --reruns-delay 1 -s tests/integration/"
82
77
  # Separate than unit tests because they intentionally take awhile but still mock Benchling
83
78
  retry_strategy_tests = "pytest -vv --reruns 3 --reruns-delay 1 -s tests/retries/"
79
+ format = "ruff check . --fix"
80
+ lint = "ruff check . && mypy ."
84
81
  models = "task generate_models && task sort_models && task format_models"
85
82
  generate_models = "python3 -m regenerate_models"
86
83
  format_models = "black benchling_sdk/models"
87
- sort_models = "isort benchling_sdk/models"
84
+ sort_models = "ruff check benchling_sdk/models --fix"
88
85
  regenerate_docs = "./scripts/regenerate_docs.sh"
89
86
  regenerate_doc_sources = "sphinx-apidoc --module-first -H benchling-sdk -e -f -o sphinx/source . tests* regenerate* > stdout.log 2> stderr.log"
90
87
  check_docs = "python3 -m regenerate_docs --check"
91
88
 
92
- [tool.black]
93
- line-length=110
89
+ [tool.ruff]
90
+ target-version = "py39"
91
+ line-length = 110
92
+ exclude = [
93
+ ".git",
94
+ ".mypy_cache",
95
+ ".venv",
96
+ ]
97
+
98
+ [tool.ruff.lint]
99
+ select = ["D", "E", "F", "I", "UP", "B", "PL", "RUF"]
100
+ ignore = [
101
+ "D100", # don't require docstring for modules
102
+ "D104", # don't require docstring for public packages
103
+ "D105", # don't require docstring for magic methods
104
+ "D203", # don't require blank line before class docstring
105
+ "D211", # no-blank-line-before-class
106
+ "D212", # multi-line-summary-first-line
107
+ "D213", # multi-line-summary-second-line
108
+ "D413", # don't require blank line after docstring section
109
+
110
+ "E501",
111
+ "PLR0913",
112
+ "PLR2004",
113
+
114
+ # rules that we can unignore once we've made some code updates:
115
+ "B006",
116
+ "B007",
117
+ "B008",
118
+ "B009",
119
+ "B010",
120
+ "B018",
121
+ "B028",
122
+ "B904",
123
+ "E721",
124
+ "E731",
125
+ "PLR0911",
126
+ "PLW2901",
127
+ "RUF002",
128
+ "RUF005",
129
+ "RUF012",
130
+ "RUF019",
131
+ "RUF100",
132
+ "UP004",
133
+ "UP006",
134
+ "UP007",
135
+ "UP012",
136
+ "UP015",
137
+ "UP018",
138
+ "UP033",
139
+ "UP037",
140
+ "UP035",
141
+ ]
142
+
143
+ [tool.ruff.lint.isort]
144
+ combine-as-imports=true
145
+ default-section="third-party"
146
+ force-sort-within-sections=true
147
+ known-first-party=["benchling_sdk"]
148
+ known-third-party=["attr", "backoff", "benchling_api_client", "benchling_jira_api", "boto3", "bs4", "cryptography", "dataclasses_json", "httpx", "jinja2", "jose", "jwcrypto", "ordered_set", "pytest", "time_machine", "util", "yaml"]
149
+ order-by-type=false
94
150
 
95
- [tool.isort]
96
- combine_as_imports=true
97
- default_section="THIRDPARTY"
98
- force_alphabetical_sort_within_sections=true
99
- force_sort_within_sections=true
100
- include_trailing_comma=true
101
- known_first_party=["benchling_sdk"]
102
- known_third_party=["attr", "backoff", "benchling_api_client", "benchling_jira_api", "boto3", "bs4", "cryptography", "dataclasses_json", "httpx", "jinja2", "jose", "jwcrypto", "ordered_set", "pytest", "time_machine", "util", "yaml"]
103
- line_length=110
104
- multi_line_output=3
105
- order_by_type=false
106
- skip = ["tests/packaged/run_smoke_test.py"]
151
+ [tool.ruff.lint.per-file-ignores]
152
+ "tests/*" = [
153
+ "D100", "D101", "D102", "D104", "D106", "D107", # missing docstrings
154
+ "PLR2004",
155
+ ]
156
+ "tests/packaged/run_smoke_test.py" = [
157
+ "D103", # missing docstrings
158
+ ]
159
+ # Ignore imperative mood for some class docstrings
160
+ "benchling_sdk/benchling.py" = ["D401"]
161
+ "benchling_sdk/services/v2/v2_stable_service.py" = ["D401"]
162
+ "benchling_sdk/services/v2/stable/assay_run_service.py" = ["D401"]
163
+ # Scripts that aren't published
164
+ "regenerate_docs.py" = [ "D103", "D205", "D400", "D415" ]
107
165
 
108
166
  [build-system]
109
167
  requires = ["poetry>=1.2"]
File without changes
File without changes