fleet-python 0.2.38__py3-none-any.whl → 0.2.40__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

fleet/_async/client.py CHANGED
@@ -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
 
fleet/_async/tasks.py CHANGED
@@ -36,11 +36,6 @@ class Task(BaseModel):
36
36
 
37
37
  @validator("key")
38
38
  def validate_key_format(cls, v):
39
- """Validate key follows kebab-case format."""
40
- if not re.match(r"^[a-z0-9]+(-[a-z0-9]+)*$", v):
41
- raise ValueError(
42
- f"Invalid task key format: {v}. Must follow kebab-case format."
43
- )
44
39
  return v
45
40
 
46
41
  @validator("created_at", pre=True, always=True)
fleet/client.py CHANGED
@@ -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
 
fleet/tasks.py CHANGED
@@ -37,11 +37,6 @@ class Task(BaseModel):
37
37
 
38
38
  @validator("key")
39
39
  def validate_key_format(cls, v):
40
- """Validate key follows kebab-case format."""
41
- if not re.match(r"^[a-z0-9]+(-[a-z0-9]+)*$", v):
42
- raise ValueError(
43
- f"Invalid task key format: {v}. Must follow kebab-case format."
44
- )
45
40
  return v
46
41
 
47
42
  @validator("created_at", pre=True, always=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fleet-python
3
- Version: 0.2.38
3
+ Version: 0.2.40
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
@@ -21,20 +21,20 @@ examples/quickstart.py,sha256=1VT39IRRhemsJgxi0O0gprdpcw7HB4pYO97GAYagIcg,3788
21
21
  examples/test_cdp_logging.py,sha256=AkCwQCgOTQEI8w3v0knWK_4eXMph7L9x07wj9yIYM10,2836
22
22
  fleet/__init__.py,sha256=F6PrtihwOKZxmaOkeHmGLBM3feTpRTEDT5tSqeSD7ts,3749
23
23
  fleet/base.py,sha256=bc-340sTpq_DJs7yQ9d2pDWnmJFmA1SwDB9Lagvqtb4,9182
24
- fleet/client.py,sha256=nxYynq06wa7pWeMzPvwgAC6XBrb9rzujQfPi2hl_gmM,21876
24
+ fleet/client.py,sha256=OKc68xmt819OxBQ-RfNslfDTHJtX0pPLxdGVdH1WAh8,22102
25
25
  fleet/config.py,sha256=uY02ZKxVoXqVDta-0IMWaYJeE1CTXF_fA9NI6QUutmU,319
26
26
  fleet/exceptions.py,sha256=fUmPwWhnT8SR97lYsRq0kLHQHKtSh2eJS0VQ2caSzEI,5055
27
27
  fleet/global_client.py,sha256=frrDAFNM2ywN0JHLtlm9qbE1dQpnQJsavJpb7xSR_bU,1072
28
28
  fleet/models.py,sha256=9tDjgcgKPMnf-R_MDh-Ocp_UMbyJ8tJyjb15XqU0N94,12454
29
- fleet/tasks.py,sha256=PcqwRktjR7o7surwWCgDScFp6PMl2YguJSs8VgZYs0g,8968
29
+ fleet/tasks.py,sha256=9ass6zLyuMKC_2gTphZClhVR9RdJml-yeH_GbCu6WOE,8733
30
30
  fleet/types.py,sha256=L4Y82xICf1tzyCLqhLYUgEoaIIS5h9T05TyFNHSWs3s,652
31
31
  fleet/_async/__init__.py,sha256=lrnDD6N9p0Oqpi_djxTnxh8I5F7nA7KNn0khciGmgpg,6747
32
32
  fleet/_async/base.py,sha256=oisVTQsx0M_yTmyQJc3oij63uKZ97MHz-xYFsWXxQE8,9202
33
- fleet/_async/client.py,sha256=WNaBwHJWRrOyYB79_qujdKkRMPmhpSucHbfTic9uc6A,22335
33
+ fleet/_async/client.py,sha256=fTzc5wtPntihAdydE_g-XIJYojcrfDvvmcOJUgR557k,22597
34
34
  fleet/_async/exceptions.py,sha256=fUmPwWhnT8SR97lYsRq0kLHQHKtSh2eJS0VQ2caSzEI,5055
35
35
  fleet/_async/global_client.py,sha256=4WskpLHbsDEgWW7hXMD09W-brkp4euy8w2ZJ88594rQ,1103
36
36
  fleet/_async/models.py,sha256=9tDjgcgKPMnf-R_MDh-Ocp_UMbyJ8tJyjb15XqU0N94,12454
37
- fleet/_async/tasks.py,sha256=pY01ImjiX0CPWfTy0HcOUjLSeqzItigOhWUAAAiSj6M,7685
37
+ fleet/_async/tasks.py,sha256=M1jueEdqzr_q02YrOKgjNLf3C1wRWK5rsPp0bcoxkME,7450
38
38
  fleet/_async/env/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  fleet/_async/env/client.py,sha256=9GOSkEWNncwTtiZNaJ2vNGrFCPutyan9lBNhD87dAzQ,1059
40
40
  fleet/_async/instance/__init__.py,sha256=PtmJq8J8bh0SOQ2V55QURz5GJfobozwtQoqhaOk3_tI,515
@@ -67,10 +67,10 @@ fleet/verifiers/decorator.py,sha256=nAP3O8szXu7md_kpwpz91hGSUNEVLYjwZQZTkQlV1DM,
67
67
  fleet/verifiers/parse.py,sha256=0bAbj9VvT__yU4ZVREUK-Tn9dukh9LCpmfVsgj1DfP4,8508
68
68
  fleet/verifiers/sql_differ.py,sha256=dmiGCFXVMEMbAX519OjhVqgA8ZvhnvdmC1BVpL7QCF0,6490
69
69
  fleet/verifiers/verifier.py,sha256=53oBWAf0yy3bZmZx9eH9AWIf65H7OP2UUm0YwWCL6Mc,14286
70
- fleet_python-0.2.38.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
70
+ fleet_python-0.2.40.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
71
71
  scripts/fix_sync_imports.py,sha256=X9fWLTpiPGkSHsjyQUDepOJkxOqw1DPj7nd8wFlFqLQ,8368
72
72
  scripts/unasync.py,sha256=vWVQxRWX8SRZO5cmzEhpvnG_REhCWXpidIGIpWmEcvI,696
73
- fleet_python-0.2.38.dist-info/METADATA,sha256=72nH4_f7klXmhxV8TGFNHBSejrFWJFxMJHoYq75RhBc,3354
74
- fleet_python-0.2.38.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
75
- fleet_python-0.2.38.dist-info/top_level.txt,sha256=_3DSmTohvSDf3AIP_BYfGzhwO1ECFwuzg83X-wHCx3Y,23
76
- fleet_python-0.2.38.dist-info/RECORD,,
73
+ fleet_python-0.2.40.dist-info/METADATA,sha256=tuvpRVps6DXkdHBYmMvJ8UXhX15_X1-Fm847DQZ-fdY,3304
74
+ fleet_python-0.2.40.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
75
+ fleet_python-0.2.40.dist-info/top_level.txt,sha256=_3DSmTohvSDf3AIP_BYfGzhwO1ECFwuzg83X-wHCx3Y,23
76
+ fleet_python-0.2.40.dist-info/RECORD,,