fleet-python 0.2.47__tar.gz → 0.2.49__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.47 → fleet_python-0.2.49}/PKG-INFO +1 -1
  2. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/client.py +5 -0
  3. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/env/client.py +6 -1
  4. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/resources/sqlite.py +39 -0
  5. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/tasks.py +6 -1
  6. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/client.py +5 -0
  7. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/env/client.py +6 -1
  8. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/models.py +2 -1
  9. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/resources/sqlite.py +35 -0
  10. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/tasks.py +6 -1
  11. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/verifiers/parse.py +3 -3
  12. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet_python.egg-info/PKG-INFO +1 -1
  13. {fleet_python-0.2.47 → fleet_python-0.2.49}/pyproject.toml +1 -1
  14. {fleet_python-0.2.47 → fleet_python-0.2.49}/LICENSE +0 -0
  15. {fleet_python-0.2.47 → fleet_python-0.2.49}/README.md +0 -0
  16. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/diff_example.py +0 -0
  17. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/dsl_example.py +0 -0
  18. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example.py +0 -0
  19. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/exampleResume.py +0 -0
  20. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example_account.py +0 -0
  21. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example_action_log.py +0 -0
  22. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example_client.py +0 -0
  23. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example_mcp_anthropic.py +0 -0
  24. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example_mcp_openai.py +0 -0
  25. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example_sync.py +0 -0
  26. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example_task.py +0 -0
  27. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example_tasks.py +0 -0
  28. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/example_verifier.py +0 -0
  29. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/gemini_example.py +0 -0
  30. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/json_tasks_example.py +0 -0
  31. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/nova_act_example.py +0 -0
  32. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/openai_example.py +0 -0
  33. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/openai_simple_example.py +0 -0
  34. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/query_builder_example.py +0 -0
  35. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/quickstart.py +0 -0
  36. {fleet_python-0.2.47 → fleet_python-0.2.49}/examples/test_cdp_logging.py +0 -0
  37. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/__init__.py +0 -0
  38. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/__init__.py +0 -0
  39. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/base.py +0 -0
  40. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/env/__init__.py +0 -0
  41. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/exceptions.py +0 -0
  42. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/global_client.py +0 -0
  43. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/instance/__init__.py +0 -0
  44. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/instance/base.py +0 -0
  45. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/instance/client.py +0 -0
  46. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/models.py +0 -0
  47. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/resources/__init__.py +0 -0
  48. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/resources/base.py +0 -0
  49. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/resources/browser.py +0 -0
  50. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/resources/mcp.py +0 -0
  51. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/verifiers/__init__.py +0 -0
  52. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/verifiers/bundler.py +0 -0
  53. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/_async/verifiers/verifier.py +0 -0
  54. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/base.py +0 -0
  55. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/config.py +0 -0
  56. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/env/__init__.py +0 -0
  57. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/exceptions.py +0 -0
  58. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/global_client.py +0 -0
  59. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/instance/__init__.py +0 -0
  60. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/instance/base.py +0 -0
  61. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/instance/client.py +0 -0
  62. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/instance/models.py +0 -0
  63. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/resources/__init__.py +0 -0
  64. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/resources/base.py +0 -0
  65. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/resources/browser.py +0 -0
  66. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/resources/mcp.py +0 -0
  67. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/types.py +0 -0
  68. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/verifiers/__init__.py +0 -0
  69. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/verifiers/bundler.py +0 -0
  70. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/verifiers/code.py +0 -0
  71. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/verifiers/db.py +0 -0
  72. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/verifiers/decorator.py +0 -0
  73. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/verifiers/sql_differ.py +0 -0
  74. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet/verifiers/verifier.py +0 -0
  75. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet_python.egg-info/SOURCES.txt +0 -0
  76. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet_python.egg-info/dependency_links.txt +0 -0
  77. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet_python.egg-info/requires.txt +0 -0
  78. {fleet_python-0.2.47 → fleet_python-0.2.49}/fleet_python.egg-info/top_level.txt +0 -0
  79. {fleet_python-0.2.47 → fleet_python-0.2.49}/scripts/fix_sync_imports.py +0 -0
  80. {fleet_python-0.2.47 → fleet_python-0.2.49}/scripts/unasync.py +0 -0
  81. {fleet_python-0.2.47 → fleet_python-0.2.49}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fleet-python
3
- Version: 0.2.47
3
+ Version: 0.2.49
4
4
  Summary: Python SDK for Fleet environments
5
5
  Author-email: Fleet AI <nic@fleet.so>
6
6
  License: Apache-2.0
@@ -210,6 +210,7 @@ class AsyncFleet:
210
210
  data_key: Optional[str] = None,
211
211
  region: Optional[str] = None,
212
212
  env_variables: Optional[Dict[str, Any]] = None,
213
+ image_type: Optional[str] = None,
213
214
  ) -> AsyncEnv:
214
215
  if ":" in env_key:
215
216
  env_key_part, env_version = env_key.split(":", 1)
@@ -242,6 +243,7 @@ class AsyncFleet:
242
243
  data_version=data_version,
243
244
  region=region,
244
245
  env_variables=env_variables,
246
+ image_type=image_type,
245
247
  created_from="sdk",
246
248
  )
247
249
 
@@ -379,6 +381,7 @@ class AsyncFleet:
379
381
  keys: Optional[List[str]] = None,
380
382
  version: Optional[str] = None,
381
383
  team_id: Optional[str] = None,
384
+ project_key: Optional[str] = None,
382
385
  ) -> List[Task]:
383
386
  """Load tasks for the authenticated team, with optional filtering.
384
387
 
@@ -398,6 +401,8 @@ class AsyncFleet:
398
401
  params["task_keys"] = keys
399
402
  if team_id is not None:
400
403
  params["team_id"] = team_id
404
+ if project_key is not None:
405
+ params["project_key"] = project_key
401
406
 
402
407
  response = await self.client.request("GET", "/v1/tasks", params=params)
403
408
  task_list_response = TaskListResponse(**response.json())
@@ -8,9 +8,14 @@ async def make_async(
8
8
  data_key: Optional[str] = None,
9
9
  region: Optional[str] = None,
10
10
  env_variables: Optional[Dict[str, Any]] = None,
11
+ image_type: Optional[str] = None,
11
12
  ) -> AsyncEnv:
12
13
  return await AsyncFleet().make(
13
- env_key, data_key=data_key, region=region, env_variables=env_variables
14
+ env_key,
15
+ data_key=data_key,
16
+ region=region,
17
+ env_variables=env_variables,
18
+ image_type=image_type,
14
19
  )
15
20
 
16
21
 
@@ -111,6 +111,21 @@ class AsyncSnapshotQueryBuilder:
111
111
  qb._conditions.append((column, "=", value))
112
112
  return qb
113
113
 
114
+ def where(
115
+ self,
116
+ conditions: Optional[Dict[str, Any]] = None,
117
+ **kwargs: Any,
118
+ ) -> "AsyncSnapshotQueryBuilder":
119
+ qb = self._clone()
120
+ merged: Dict[str, Any] = {}
121
+ if conditions:
122
+ merged.update(conditions)
123
+ if kwargs:
124
+ merged.update(kwargs)
125
+ for column, value in merged.items():
126
+ qb._conditions.append((column, "=", value))
127
+ return qb
128
+
114
129
  def limit(self, n: int) -> "AsyncSnapshotQueryBuilder":
115
130
  qb = self._clone()
116
131
  qb._limit = n
@@ -304,6 +319,15 @@ class AsyncSnapshotDiff:
304
319
  self._cached = diff
305
320
  return diff
306
321
 
322
+ @property
323
+ def changes(self) -> Dict[str, Dict[str, Any]]:
324
+ """Expose cached changes; ensure callers awaited a diff-producing method first."""
325
+ if self._cached is None:
326
+ raise RuntimeError(
327
+ "Diff not collected yet; await an operation like expect_only() first."
328
+ )
329
+ return self._cached
330
+
307
331
  async def expect_only(self, allowed_changes: List[Dict[str, Any]]):
308
332
  """Ensure only specified changes occurred."""
309
333
  diff = await self._collect()
@@ -471,6 +495,21 @@ class AsyncQueryBuilder:
471
495
  def eq(self, column: str, value: Any) -> "AsyncQueryBuilder":
472
496
  return self._add_condition(column, "=", value)
473
497
 
498
+ def where(
499
+ self,
500
+ conditions: Optional[Dict[str, Any]] = None,
501
+ **kwargs: Any,
502
+ ) -> "AsyncQueryBuilder":
503
+ qb = self._clone()
504
+ merged: Dict[str, Any] = {}
505
+ if conditions:
506
+ merged.update(conditions)
507
+ if kwargs:
508
+ merged.update(kwargs)
509
+ for column, value in merged.items():
510
+ qb._conditions.append((column, "=", value))
511
+ return qb
512
+
474
513
  def neq(self, column: str, value: Any) -> "AsyncQueryBuilder":
475
514
  return self._add_condition(column, "!=", value)
476
515
 
@@ -276,6 +276,7 @@ async def load_tasks(
276
276
  keys: Optional[List[str]] = None,
277
277
  version: Optional[str] = None,
278
278
  team_id: Optional[str] = None,
279
+ project_key: Optional[str] = None,
279
280
  ) -> List[Task]:
280
281
  """Convenience function to load tasks with optional filtering.
281
282
 
@@ -295,7 +296,11 @@ async def load_tasks(
295
296
 
296
297
  client = get_client()
297
298
  return await client.load_tasks(
298
- env_key=env_key, keys=keys, version=version, team_id=team_id
299
+ env_key=env_key,
300
+ keys=keys,
301
+ version=version,
302
+ team_id=team_id,
303
+ project_key=project_key,
299
304
  )
300
305
 
301
306
 
@@ -210,6 +210,7 @@ class Fleet:
210
210
  data_key: Optional[str] = None,
211
211
  region: Optional[str] = None,
212
212
  env_variables: Optional[Dict[str, Any]] = None,
213
+ image_type: Optional[str] = None,
213
214
  ) -> SyncEnv:
214
215
  if ":" in env_key:
215
216
  env_key_part, env_version = env_key.split(":", 1)
@@ -242,6 +243,7 @@ class Fleet:
242
243
  data_version=data_version,
243
244
  region=region,
244
245
  env_variables=env_variables,
246
+ image_type=image_type,
245
247
  created_from="sdk",
246
248
  )
247
249
 
@@ -377,6 +379,7 @@ class Fleet:
377
379
  keys: Optional[List[str]] = None,
378
380
  version: Optional[str] = None,
379
381
  team_id: Optional[str] = None,
382
+ project_key: Optional[str] = None,
380
383
  ) -> List[Task]:
381
384
  """Load tasks for the authenticated team, with optional filtering.
382
385
 
@@ -396,6 +399,8 @@ class Fleet:
396
399
  params["task_keys"] = keys
397
400
  if team_id is not None:
398
401
  params["team_id"] = team_id
402
+ if project_key is not None:
403
+ params["project_key"] = project_key
399
404
 
400
405
  response = self.client.request("GET", "/v1/tasks", params=params)
401
406
  task_list_response = TaskListResponse(**response.json())
@@ -8,9 +8,14 @@ def make(
8
8
  data_key: Optional[str] = None,
9
9
  region: Optional[str] = None,
10
10
  env_variables: Optional[Dict[str, Any]] = None,
11
+ image_type: Optional[str] = None,
11
12
  ) -> SyncEnv:
12
13
  return Fleet().make(
13
- env_key, data_key=data_key, region=region, env_variables=env_variables
14
+ env_key,
15
+ data_key=data_key,
16
+ region=region,
17
+ env_variables=env_variables,
18
+ image_type=image_type,
14
19
  )
15
20
 
16
21
 
@@ -55,7 +55,7 @@ class Instance(BaseModel):
55
55
 
56
56
  class InstanceRequest(BaseModel):
57
57
  env_key: str = Field(..., title="Env Key")
58
- env_version: Optional[str] = Field(None, title="Version")
58
+ env_version: Optional[str] = Field(None, title="Env Version")
59
59
  data_key: Optional[str] = Field(None, title="Data Key")
60
60
  data_version: Optional[str] = Field(None, title="Data Version")
61
61
  region: Optional[str] = Field("us-west-1", title="Region")
@@ -67,6 +67,7 @@ class InstanceRequest(BaseModel):
67
67
  task_id: Optional[str] = Field(None, title="Task Id")
68
68
  force_pull: Optional[bool] = Field(None, title="Force Pull")
69
69
  env_variables: Optional[Dict[str, Any]] = Field(None, title="Env Variables")
70
+ image_type: Optional[str] = Field(None, title="Image Type")
70
71
  created_from: Optional[str] = Field(None, title="Created From")
71
72
 
72
73
 
@@ -111,6 +111,21 @@ class SyncSnapshotQueryBuilder:
111
111
  qb._conditions.append((column, "=", value))
112
112
  return qb
113
113
 
114
+ def where(
115
+ self,
116
+ conditions: Optional[Dict[str, Any]] = None,
117
+ **kwargs: Any,
118
+ ) -> "SyncSnapshotQueryBuilder":
119
+ qb = self._clone()
120
+ merged: Dict[str, Any] = {}
121
+ if conditions:
122
+ merged.update(conditions)
123
+ if kwargs:
124
+ merged.update(kwargs)
125
+ for column, value in merged.items():
126
+ qb._conditions.append((column, "=", value))
127
+ return qb
128
+
114
129
  def limit(self, n: int) -> "SyncSnapshotQueryBuilder":
115
130
  qb = self._clone()
116
131
  qb._limit = n
@@ -304,6 +319,11 @@ class SyncSnapshotDiff:
304
319
  self._cached = diff
305
320
  return diff
306
321
 
322
+ @property
323
+ def changes(self) -> Dict[str, Dict[str, Any]]:
324
+ """Expose the computed diff so callers can introspect like the legacy API."""
325
+ return self._collect()
326
+
307
327
  def expect_only(self, allowed_changes: List[Dict[str, Any]]):
308
328
  """Ensure only specified changes occurred."""
309
329
  diff = self._collect()
@@ -471,6 +491,21 @@ class SyncQueryBuilder:
471
491
  def eq(self, column: str, value: Any) -> "SyncQueryBuilder":
472
492
  return self._add_condition(column, "=", value)
473
493
 
494
+ def where(
495
+ self,
496
+ conditions: Optional[Dict[str, Any]] = None,
497
+ **kwargs: Any,
498
+ ) -> "SyncQueryBuilder":
499
+ qb = self._clone()
500
+ merged: Dict[str, Any] = {}
501
+ if conditions:
502
+ merged.update(conditions)
503
+ if kwargs:
504
+ merged.update(kwargs)
505
+ for column, value in merged.items():
506
+ qb._conditions.append((column, "=", value))
507
+ return qb
508
+
474
509
  def neq(self, column: str, value: Any) -> "SyncQueryBuilder":
475
510
  return self._add_condition(column, "!=", value)
476
511
 
@@ -279,6 +279,7 @@ def load_tasks(
279
279
  keys: Optional[List[str]] = None,
280
280
  version: Optional[str] = None,
281
281
  team_id: Optional[str] = None,
282
+ project_key: Optional[str] = None,
282
283
  ) -> List[Task]:
283
284
  """Convenience function to load tasks with optional filtering.
284
285
 
@@ -298,7 +299,11 @@ def load_tasks(
298
299
 
299
300
  client = get_client()
300
301
  return client.load_tasks(
301
- env_key=env_key, keys=keys, version=version, team_id=team_id
302
+ env_key=env_key,
303
+ keys=keys,
304
+ version=version,
305
+ team_id=team_id,
306
+ project_key=project_key,
302
307
  )
303
308
 
304
309
 
@@ -67,7 +67,7 @@ def convert_verifier_string(verifier_str: str) -> str:
67
67
 
68
68
  if not match:
69
69
  raise ValueError(
70
- "Could not parse verifier function. Expected format: def function_name(env: Environment, final_answer: str | None = None) -> float/int:"
70
+ "Could not parse verifier function. Expected format: def function_name(env: Environment, final_answer: Optional[str] = None) -> float/int:"
71
71
  )
72
72
 
73
73
  func_name = match.group(1)
@@ -82,7 +82,7 @@ def convert_verifier_string(verifier_str: str) -> str:
82
82
 
83
83
  # Build the new function
84
84
  new_func = f"""def {func_name}(
85
- before: DatabaseSnapshot, after: DatabaseSnapshot, transcript: str | None = None
85
+ before: DatabaseSnapshot, after: DatabaseSnapshot, transcript: Optional[str] = None
86
86
  ) -> int:
87
87
  class Environment:
88
88
  def db(self, name: str) -> DatabaseSnapshot:"""
@@ -128,7 +128,7 @@ def convert_verifier_string(verifier_str: str) -> str:
128
128
  def load(self):
129
129
  pass
130
130
 
131
- def verifier(env: Environment, final_answer: str | None = None) -> float:"""
131
+ def verifier(env: Environment, final_answer: Optional[str] = None) -> float:"""
132
132
 
133
133
  if docstring:
134
134
  new_func += f"\n {docstring}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fleet-python
3
- Version: 0.2.47
3
+ Version: 0.2.49
4
4
  Summary: Python SDK for Fleet environments
5
5
  Author-email: Fleet AI <nic@fleet.so>
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fleet-python"
7
- version = "0.2.47"
7
+ version = "0.2.49"
8
8
  description = "Python SDK for Fleet environments"
9
9
  authors = [
10
10
  {name = "Fleet AI", email = "nic@fleet.so"},
File without changes
File without changes
File without changes