fleet-python 0.2.37__tar.gz → 0.2.39__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.

Potentially problematic release.


This version of fleet-python might be problematic. Click here for more details.

Files changed (81) hide show
  1. {fleet_python-0.2.37 → fleet_python-0.2.39}/PKG-INFO +2 -3
  2. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/client.py +28 -9
  3. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/client.py +30 -15
  4. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/tasks.py +41 -9
  5. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet_python.egg-info/PKG-INFO +2 -3
  6. {fleet_python-0.2.37 → fleet_python-0.2.39}/pyproject.toml +5 -6
  7. {fleet_python-0.2.37 → fleet_python-0.2.39}/LICENSE +0 -0
  8. {fleet_python-0.2.37 → fleet_python-0.2.39}/README.md +0 -0
  9. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/diff_example.py +0 -0
  10. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/dsl_example.py +0 -0
  11. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example.py +0 -0
  12. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/exampleResume.py +0 -0
  13. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example_account.py +0 -0
  14. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example_action_log.py +0 -0
  15. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example_client.py +0 -0
  16. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example_mcp_anthropic.py +0 -0
  17. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example_mcp_openai.py +0 -0
  18. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example_sync.py +0 -0
  19. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example_task.py +0 -0
  20. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example_tasks.py +0 -0
  21. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/example_verifier.py +0 -0
  22. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/gemini_example.py +0 -0
  23. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/json_tasks_example.py +0 -0
  24. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/nova_act_example.py +0 -0
  25. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/openai_example.py +0 -0
  26. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/openai_simple_example.py +0 -0
  27. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/query_builder_example.py +0 -0
  28. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/quickstart.py +0 -0
  29. {fleet_python-0.2.37 → fleet_python-0.2.39}/examples/test_cdp_logging.py +0 -0
  30. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/__init__.py +0 -0
  31. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/__init__.py +0 -0
  32. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/base.py +0 -0
  33. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/env/__init__.py +0 -0
  34. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/env/client.py +0 -0
  35. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/exceptions.py +0 -0
  36. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/global_client.py +0 -0
  37. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/instance/__init__.py +0 -0
  38. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/instance/base.py +0 -0
  39. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/instance/client.py +0 -0
  40. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/models.py +0 -0
  41. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/resources/__init__.py +0 -0
  42. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/resources/base.py +0 -0
  43. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/resources/browser.py +0 -0
  44. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/resources/mcp.py +0 -0
  45. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/resources/sqlite.py +0 -0
  46. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/tasks.py +0 -0
  47. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/verifiers/__init__.py +0 -0
  48. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/verifiers/bundler.py +0 -0
  49. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/_async/verifiers/verifier.py +0 -0
  50. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/base.py +0 -0
  51. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/config.py +0 -0
  52. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/env/__init__.py +0 -0
  53. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/env/client.py +0 -0
  54. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/exceptions.py +0 -0
  55. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/global_client.py +0 -0
  56. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/instance/__init__.py +0 -0
  57. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/instance/base.py +0 -0
  58. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/instance/client.py +0 -0
  59. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/instance/models.py +0 -0
  60. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/models.py +0 -0
  61. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/resources/__init__.py +0 -0
  62. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/resources/base.py +0 -0
  63. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/resources/browser.py +0 -0
  64. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/resources/mcp.py +0 -0
  65. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/resources/sqlite.py +0 -0
  66. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/types.py +0 -0
  67. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/verifiers/__init__.py +0 -0
  68. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/verifiers/bundler.py +0 -0
  69. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/verifiers/code.py +0 -0
  70. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/verifiers/db.py +0 -0
  71. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/verifiers/decorator.py +0 -0
  72. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/verifiers/parse.py +0 -0
  73. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/verifiers/sql_differ.py +0 -0
  74. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet/verifiers/verifier.py +0 -0
  75. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet_python.egg-info/SOURCES.txt +0 -0
  76. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet_python.egg-info/dependency_links.txt +0 -0
  77. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet_python.egg-info/requires.txt +0 -0
  78. {fleet_python-0.2.37 → fleet_python-0.2.39}/fleet_python.egg-info/top_level.txt +0 -0
  79. {fleet_python-0.2.37 → fleet_python-0.2.39}/scripts/fix_sync_imports.py +0 -0
  80. {fleet_python-0.2.37 → fleet_python-0.2.39}/scripts/unasync.py +0 -0
  81. {fleet_python-0.2.37 → fleet_python-0.2.39}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fleet-python
3
- Version: 0.2.37
3
+ Version: 0.2.39
4
4
  Summary: Python SDK for Fleet environments
5
5
  Author-email: Fleet AI <nic@fleet.so>
6
6
  License: Apache-2.0
@@ -12,12 +12,11 @@ Classifier: Development Status :: 3 - Alpha
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: Apache Software License
14
14
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.8
16
15
  Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
20
- Requires-Python: >=3.8
19
+ Requires-Python: >=3.9
21
20
  Description-Content-Type: text/markdown
22
21
  License-File: LICENSE
23
22
  Requires-Dist: aiohttp>=3.8.0
@@ -44,7 +44,12 @@ from .instance import (
44
44
  ResetResponse,
45
45
  ExecuteFunctionResponse,
46
46
  )
47
- from ..config import DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, REGION_BASE_URL
47
+ from ..config import (
48
+ DEFAULT_MAX_RETRIES,
49
+ DEFAULT_TIMEOUT,
50
+ REGION_BASE_URL,
51
+ GLOBAL_BASE_URL,
52
+ )
48
53
  from .instance.base import default_httpx_client
49
54
  from .instance.client import ValidatorType
50
55
  from .resources.base import Resource
@@ -196,7 +201,12 @@ class AsyncFleet:
196
201
  response = await self.client.request("GET", f"/v1/env/{env_key}")
197
202
  return EnvironmentModel(**response.json())
198
203
 
199
- async def make(self, env_key: str, region: Optional[str] = None, env_variables: Optional[Dict[str, Any]] = None) -> AsyncEnv:
204
+ async def make(
205
+ self,
206
+ env_key: str,
207
+ region: Optional[str] = None,
208
+ env_variables: Optional[Dict[str, Any]] = None,
209
+ ) -> AsyncEnv:
200
210
  if ":" in env_key:
201
211
  env_key_part, version = env_key.split(":", 1)
202
212
  if (
@@ -210,14 +220,23 @@ class AsyncFleet:
210
220
  version = None
211
221
 
212
222
  request = InstanceRequest(
213
- env_key=env_key_part, version=version, region=region, env_variables=env_variables, created_from="sdk"
223
+ env_key=env_key_part,
224
+ version=version,
225
+ region=region,
226
+ env_variables=env_variables,
227
+ created_from="sdk",
214
228
  )
215
- region_base_url = REGION_BASE_URL.get(region)
229
+
230
+ # Only use region-specific base URL if no custom base URL is set
231
+ base_url = None
232
+ if region and self.client.base_url == GLOBAL_BASE_URL:
233
+ base_url = REGION_BASE_URL.get(region)
234
+
216
235
  response = await self.client.request(
217
236
  "POST",
218
237
  "/v1/env/instances",
219
238
  json=request.model_dump(exclude_none=True),
220
- base_url=region_base_url,
239
+ base_url=base_url,
221
240
  )
222
241
 
223
242
  instance = AsyncEnv(client=self.client, **response.json())
@@ -308,11 +327,11 @@ class AsyncFleet:
308
327
  return task
309
328
 
310
329
  async def load_tasks(
311
- self,
330
+ self,
312
331
  env_key: Optional[str] = None,
313
332
  keys: Optional[List[str]] = None,
314
333
  version: Optional[str] = None,
315
- team_id: Optional[str] = None
334
+ team_id: Optional[str] = None,
316
335
  ) -> List[Task]:
317
336
  """Load tasks for the authenticated team, with optional filtering.
318
337
 
@@ -498,7 +517,7 @@ class AsyncFleet:
498
517
  """
499
518
  from ..tasks import verifier_from_string
500
519
  from .verifiers.verifier import AsyncVerifierFunction
501
-
520
+
502
521
  # Use verifier_from_string to create the verifier
503
522
  verifier_func = verifier_from_string(
504
523
  verifier_func=verifier_code,
@@ -506,7 +525,7 @@ class AsyncFleet:
506
525
  verifier_key=verifier_key,
507
526
  sha256=verifier_sha,
508
527
  )
509
-
528
+
510
529
  # Store the original verifier code for reference
511
530
  verifier_func._verifier_code = verifier_code
512
531
 
@@ -44,7 +44,12 @@ from .instance import (
44
44
  ResetResponse,
45
45
  ExecuteFunctionResponse,
46
46
  )
47
- from .config import DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, REGION_BASE_URL
47
+ from .config import (
48
+ DEFAULT_MAX_RETRIES,
49
+ DEFAULT_TIMEOUT,
50
+ REGION_BASE_URL,
51
+ GLOBAL_BASE_URL,
52
+ )
48
53
  from .instance.base import default_httpx_client
49
54
  from .instance.client import ValidatorType
50
55
  from .resources.base import Resource
@@ -196,7 +201,12 @@ class Fleet:
196
201
  response = self.client.request("GET", f"/v1/env/{env_key}")
197
202
  return EnvironmentModel(**response.json())
198
203
 
199
- def make(self, env_key: str, region: Optional[str] = None, env_variables: Optional[Dict[str, Any]] = None) -> SyncEnv:
204
+ def make(
205
+ self,
206
+ env_key: str,
207
+ region: Optional[str] = None,
208
+ env_variables: Optional[Dict[str, Any]] = None,
209
+ ) -> SyncEnv:
200
210
  if ":" in env_key:
201
211
  env_key_part, version = env_key.split(":", 1)
202
212
  if (
@@ -210,14 +220,23 @@ class Fleet:
210
220
  version = None
211
221
 
212
222
  request = InstanceRequest(
213
- env_key=env_key_part, version=version, region=region, env_variables=env_variables, created_from="sdk"
223
+ env_key=env_key_part,
224
+ version=version,
225
+ region=region,
226
+ env_variables=env_variables,
227
+ created_from="sdk",
214
228
  )
215
- region_base_url = REGION_BASE_URL.get(region)
229
+
230
+ # Only use region-specific base URL if no custom base URL is set
231
+ base_url = None
232
+ if region and self.client.base_url == GLOBAL_BASE_URL:
233
+ base_url = REGION_BASE_URL.get(region)
234
+
216
235
  response = self.client.request(
217
236
  "POST",
218
237
  "/v1/env/instances",
219
238
  json=request.model_dump(exclude_none=True),
220
- base_url=region_base_url,
239
+ base_url=base_url,
221
240
  )
222
241
 
223
242
  instance = SyncEnv(client=self.client, **response.json())
@@ -254,9 +273,7 @@ class Fleet:
254
273
  def execute_verifier_remote(
255
274
  self, bundle_data: bytes, args: tuple, kwargs: dict, timeout: Optional[int] = 30
256
275
  ) -> VerifiersExecuteResponse:
257
- return _execute_verifier_remote(
258
- self.client, bundle_data, args, kwargs, timeout
259
- )
276
+ return _execute_verifier_remote(self.client, bundle_data, args, kwargs, timeout)
260
277
 
261
278
  def delete(self, instance_id: str) -> InstanceResponse:
262
279
  return _delete_instance(self.client, instance_id)
@@ -267,9 +284,7 @@ class Fleet:
267
284
 
268
285
  return self.load_task_array_from_string(tasks_data)
269
286
 
270
- def load_task_array_from_string(
271
- self, serialized_tasks: List[Dict]
272
- ) -> List[Task]:
287
+ def load_task_array_from_string(self, serialized_tasks: List[Dict]) -> List[Task]:
273
288
  tasks = []
274
289
 
275
290
  json_tasks = json.loads(serialized_tasks)
@@ -308,11 +323,11 @@ class Fleet:
308
323
  return task
309
324
 
310
325
  def load_tasks(
311
- self,
326
+ self,
312
327
  env_key: Optional[str] = None,
313
328
  keys: Optional[List[str]] = None,
314
329
  version: Optional[str] = None,
315
- team_id: Optional[str] = None
330
+ team_id: Optional[str] = None,
316
331
  ) -> List[Task]:
317
332
  """Load tasks for the authenticated team, with optional filtering.
318
333
 
@@ -498,7 +513,7 @@ class Fleet:
498
513
  """
499
514
  from .tasks import verifier_from_string
500
515
  from .verifiers import SyncVerifierFunction
501
-
516
+
502
517
  # Use verifier_from_string to create the verifier
503
518
  verifier_func = verifier_from_string(
504
519
  verifier_func=verifier_code,
@@ -506,7 +521,7 @@ class Fleet:
506
521
  verifier_key=verifier_key,
507
522
  sha256=verifier_sha,
508
523
  )
509
-
524
+
510
525
  # Store the original verifier code for reference
511
526
  verifier_func._verifier_code = verifier_code
512
527
 
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import re
6
+ import asyncio
6
7
  from datetime import datetime
7
8
  from typing import Any, Dict, Optional, List
8
9
  from uuid import UUID
@@ -73,7 +74,12 @@ class Task(BaseModel):
73
74
  if self.verifier:
74
75
  import inspect
75
76
 
76
- result = self.verifier.remote(env, *args, **kwargs)
77
+ # Check if verifier has remote method (for decorated verifiers)
78
+ if hasattr(self.verifier, 'remote'):
79
+ result = self.verifier.remote(env, *args, **kwargs)
80
+ else:
81
+ # For verifiers created from string, call directly
82
+ result = self.verifier(env, *args, **kwargs)
77
83
 
78
84
  # If the result is a coroutine, we need to run it
79
85
  if inspect.iscoroutine(result):
@@ -144,19 +150,23 @@ def verifier_from_string(
144
150
  try:
145
151
  import inspect
146
152
  from .verifiers import verifier, SyncVerifierFunction
147
- from fleet.verifiers.code import TASK_SUCCESSFUL_SCORE, TASK_FAILED_SCORE
148
- from fleet.verifiers.db import IgnoreConfig
153
+ from .verifiers.code import TASK_SUCCESSFUL_SCORE, TASK_FAILED_SCORE
154
+ from .verifiers.db import IgnoreConfig
149
155
 
150
- # Create a local namespace for executing the code
151
- local_namespace = {
156
+ # Create a globals namespace with all required imports
157
+ exec_globals = globals().copy()
158
+ exec_globals.update({
152
159
  'TASK_SUCCESSFUL_SCORE': TASK_SUCCESSFUL_SCORE,
153
160
  'TASK_FAILED_SCORE': TASK_FAILED_SCORE,
154
161
  'IgnoreConfig': IgnoreConfig,
155
162
  'Environment': object # Add Environment type if needed
156
- }
163
+ })
164
+
165
+ # Create a local namespace for executing the code
166
+ local_namespace = {}
157
167
 
158
168
  # Execute the verifier code in the namespace
159
- exec(verifier_func, globals(), local_namespace)
169
+ exec(verifier_func, exec_globals, local_namespace)
160
170
 
161
171
  # Find the function that was defined
162
172
  func_obj = None
@@ -168,8 +178,30 @@ def verifier_from_string(
168
178
  if func_obj is None:
169
179
  raise ValueError("No function found in verifier code")
170
180
 
171
- # Create an AsyncVerifierFunction instance
172
- verifier_instance = SyncVerifierFunction(func_obj, verifier_key, verifier_id)
181
+ # Create a wrapper function that provides the necessary globals
182
+ def wrapped_verifier(env, *args, **kwargs):
183
+ # Set up globals for the function execution
184
+ func_globals = func_obj.__globals__.copy() if hasattr(func_obj, '__globals__') else {}
185
+ func_globals.update({
186
+ 'TASK_SUCCESSFUL_SCORE': TASK_SUCCESSFUL_SCORE,
187
+ 'TASK_FAILED_SCORE': TASK_FAILED_SCORE,
188
+ 'IgnoreConfig': IgnoreConfig
189
+ })
190
+
191
+ # Create a new function with the updated globals
192
+ import types
193
+ new_func = types.FunctionType(
194
+ func_obj.__code__,
195
+ func_globals,
196
+ func_obj.__name__,
197
+ func_obj.__defaults__,
198
+ func_obj.__closure__
199
+ )
200
+
201
+ return new_func(env, *args, **kwargs)
202
+
203
+ # Create an AsyncVerifierFunction instance with the wrapped function
204
+ verifier_instance = SyncVerifierFunction(wrapped_verifier, verifier_key, verifier_id)
173
205
 
174
206
  # Store additional metadata
175
207
  verifier_instance._verifier_code = verifier_func
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fleet-python
3
- Version: 0.2.37
3
+ Version: 0.2.39
4
4
  Summary: Python SDK for Fleet environments
5
5
  Author-email: Fleet AI <nic@fleet.so>
6
6
  License: Apache-2.0
@@ -12,12 +12,11 @@ Classifier: Development Status :: 3 - Alpha
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: Apache Software License
14
14
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.8
16
15
  Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
20
- Requires-Python: >=3.8
19
+ Requires-Python: >=3.9
21
20
  Description-Content-Type: text/markdown
22
21
  License-File: LICENSE
23
22
  Requires-Dist: aiohttp>=3.8.0
@@ -4,20 +4,19 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fleet-python"
7
- version = "0.2.37"
7
+ version = "0.2.39"
8
8
  description = "Python SDK for Fleet environments"
9
9
  authors = [
10
10
  {name = "Fleet AI", email = "nic@fleet.so"},
11
11
  ]
12
12
  readme = "README.md"
13
- requires-python = ">=3.8"
13
+ requires-python = ">=3.9"
14
14
  license = {text = "Apache-2.0"}
15
15
  classifiers = [
16
16
  "Development Status :: 3 - Alpha",
17
17
  "Intended Audience :: Developers",
18
18
  "License :: OSI Approved :: Apache Software License",
19
19
  "Programming Language :: Python :: 3",
20
- "Programming Language :: Python :: 3.8",
21
20
  "Programming Language :: Python :: 3.9",
22
21
  "Programming Language :: Python :: 3.10",
23
22
  "Programming Language :: Python :: 3.11",
@@ -59,21 +58,21 @@ where = ["."]
59
58
 
60
59
  [tool.black]
61
60
  line-length = 88
62
- target-version = ['py38']
61
+ target-version = ['py39']
63
62
 
64
63
  [tool.isort]
65
64
  profile = "black"
66
65
  line_length = 88
67
66
 
68
67
  [tool.mypy]
69
- python_version = "3.8"
68
+ python_version = "3.9"
70
69
  strict = true
71
70
  warn_return_any = true
72
71
  warn_unused_configs = true
73
72
 
74
73
  [tool.ruff]
75
74
  line-length = 88
76
- target-version = "py38"
75
+ target-version = "py39"
77
76
 
78
77
  [tool.pytest.ini_options]
79
78
  asyncio_mode = "auto"
File without changes
File without changes
File without changes