fleet-python 0.2.47__py3-none-any.whl → 0.2.49__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
@@ -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
 
fleet/_async/tasks.py CHANGED
@@ -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
 
fleet/client.py CHANGED
@@ -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())
fleet/env/client.py CHANGED
@@ -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
 
fleet/models.py CHANGED
@@ -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
 
fleet/resources/sqlite.py CHANGED
@@ -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
 
fleet/tasks.py CHANGED
@@ -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
 
fleet/verifiers/parse.py CHANGED
@@ -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
@@ -21,22 +21,22 @@ examples/quickstart.py,sha256=1VT39IRRhemsJgxi0O0gprdpcw7HB4pYO97GAYagIcg,3788
21
21
  examples/test_cdp_logging.py,sha256=AkCwQCgOTQEI8w3v0knWK_4eXMph7L9x07wj9yIYM10,2836
22
22
  fleet/__init__.py,sha256=Mkdeh45N47lnSv73Eehj92cGU-AImUitvDWJLFhEp0Y,3844
23
23
  fleet/base.py,sha256=bc-340sTpq_DJs7yQ9d2pDWnmJFmA1SwDB9Lagvqtb4,9182
24
- fleet/client.py,sha256=Nk7XQS1-sVMkRWh99ZziHVEQ3ta67901oQd6tNZGi8I,27131
24
+ fleet/client.py,sha256=iRyPUvEsOzP4gksWZ8ETcPQ6arQA2HFBZRLaTps7758,27335
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
- fleet/models.py,sha256=_Gy2wyHM5eUYP3-nOuxBUNTxI8AtteKX0_-jcVtS-os,12988
29
- fleet/tasks.py,sha256=1QLbjejJLZc5rkwpHBh3TS4X10Gc3t1pZIZCs005_3Q,12024
28
+ fleet/models.py,sha256=d9eish0KO3t4VCNu8h8Q_6K1Xj-crYo5Fejtle0Ur28,13056
29
+ fleet/tasks.py,sha256=hJNXJKAV4CpYG9NMi1XXdvivzzK_t31qj6En2B3pCqw,12121
30
30
  fleet/types.py,sha256=L4Y82xICf1tzyCLqhLYUgEoaIIS5h9T05TyFNHSWs3s,652
31
31
  fleet/_async/__init__.py,sha256=7C_JaEHoqZ4cddsCmlJ4z-UaU6Kr2CBZSgwx5B6fqnc,6765
32
32
  fleet/_async/base.py,sha256=oisVTQsx0M_yTmyQJc3oij63uKZ97MHz-xYFsWXxQE8,9202
33
- fleet/_async/client.py,sha256=ub6YGR8tBIEob3z5u8F0x0fktUYiVet87RN8iqJiY2I,27306
33
+ fleet/_async/client.py,sha256=cFR0CcXmPtKc5HxyDnnsNXRbx-ICwegHPRbUvVQ95CE,27510
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=GX-sRciZDenW2O7Qx9w_ftOkJyE4ph1-92WMq6lynHE,12856
37
- fleet/_async/tasks.py,sha256=968pI3Ce2Kl83SJO6YeSA7SKVKSl9lRAd7TN1bACoXA,11906
37
+ fleet/_async/tasks.py,sha256=hOhkAb2Z9K3v4csk7tcpTsYLXgEF86d5Jdwgz-goEpw,12003
38
38
  fleet/_async/env/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- fleet/_async/env/client.py,sha256=8dS42VvSgdqfuh96l6cyiLZlKElilmfTeRSZ4LZnFuE,1143
39
+ fleet/_async/env/client.py,sha256=C5WG5Ir_McXaFPZNdkQjj0w4V7xMIcw3QyVP5g-3kVk,1237
40
40
  fleet/_async/instance/__init__.py,sha256=PtmJq8J8bh0SOQ2V55QURz5GJfobozwtQoqhaOk3_tI,515
41
41
  fleet/_async/instance/base.py,sha256=3qUBuUR8OVS36LzdP6KyZzngtwPKYO09HoY6Ekxp-KA,1625
42
42
  fleet/_async/instance/client.py,sha256=kcrmLZciQxvPSfTtbEq5LIbhscwDHg6WIiNcPyM4L9w,6085
@@ -44,12 +44,12 @@ fleet/_async/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
44
44
  fleet/_async/resources/base.py,sha256=UfrenxUqcpL8SgYGOo8o8HgRvv2-ZO5G2Cdo91ofEdg,664
45
45
  fleet/_async/resources/browser.py,sha256=oldoSiymJ1lJkADhpUG81ViOBDNyppX1jSoEwe9-W94,1369
46
46
  fleet/_async/resources/mcp.py,sha256=TLEsLiFhfVfZFs0Fu_uDPm-h4FPdvqgQblYqs-PTHhc,1720
47
- fleet/_async/resources/sqlite.py,sha256=0B6mI8Ad4-pxITMxlBST5RFcG6kqAqwnHW9PPAcpVLk,26185
47
+ fleet/_async/resources/sqlite.py,sha256=up_umepfyX9PDFsnmEMJLjsj7bLa6a3wizZOgMGkK1Q,27409
48
48
  fleet/_async/verifiers/__init__.py,sha256=1WTlCNq4tIFbbXaQu5Bf2WppZq0A8suhtZbxMTSOwxI,465
49
49
  fleet/_async/verifiers/bundler.py,sha256=Sq0KkqEhM5Ng2x8R6Z4puXvQ8FMlEO7D3-ldBLktPi4,26205
50
50
  fleet/_async/verifiers/verifier.py,sha256=IiHX028s6ux0kb2FR0Z5zJangl_IDh6cemXsUN2ktUU,14152
51
51
  fleet/env/__init__.py,sha256=cS9zCYobM5jypppDMZIQMYd6hOg5f4sgqRXEQ67pckk,676
52
- fleet/env/client.py,sha256=imF47xJG4JeihcZw4Y-_fXz4XxS-OgIkzUK-TLjpeJY,977
52
+ fleet/env/client.py,sha256=WD2ONQ7d8qwaTuzE0GaQY-G9Wx1H_nTHIvm7PLZS-bg,1071
53
53
  fleet/instance/__init__.py,sha256=CyWUkbGAK-DBPw4DC4AnCW-MqqheGhZMA5QSRVu-ws4,479
54
54
  fleet/instance/base.py,sha256=OYqzBwZFfTX9wlBGSG5gljqj98NbiJeKIfFJ3uj5I4s,1587
55
55
  fleet/instance/client.py,sha256=XM_Qmd7pUzC3-dCMTh6orTEsGeWJXbKueBlvcWcSUuI,5897
@@ -58,19 +58,19 @@ fleet/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
58
  fleet/resources/base.py,sha256=AXZzT0_yWHkT497q3yekfr0xsD4cPGMCC6y7C43TIkk,663
59
59
  fleet/resources/browser.py,sha256=hRNM0YMsVQUAraZGNi_B-KXxLpuddy4ntoEDFSw7czU,1295
60
60
  fleet/resources/mcp.py,sha256=c6O4vVJnXANuHMGMe4IPxgp4zBEbFaGm6_d9e6j8Myc,1695
61
- fleet/resources/sqlite.py,sha256=MIceexu6NlDJ-M74ravpUnB8HzlsxgZx9nZvD16t0Jo,25757
61
+ fleet/resources/sqlite.py,sha256=bR6d1zYQ4cMAlmZIJ7jqmY9-N-GokXaDhUyGKTWHsfY,26811
62
62
  fleet/verifiers/__init__.py,sha256=GntS8qc3xv8mm-cku1t3xjvOll5jcc5FuiVqQgR4Y6Q,458
63
63
  fleet/verifiers/bundler.py,sha256=Sq0KkqEhM5Ng2x8R6Z4puXvQ8FMlEO7D3-ldBLktPi4,26205
64
64
  fleet/verifiers/code.py,sha256=A1i_UabZspbyj1awzKVQ_HRxgMO3fU7NbkxYyTrp7So,48
65
65
  fleet/verifiers/db.py,sha256=LAh1HambBInH_D9q9E2Z41YNkCOI9JJfpWPFqztjpfQ,27922
66
66
  fleet/verifiers/decorator.py,sha256=nAP3O8szXu7md_kpwpz91hGSUNEVLYjwZQZTkQlV1DM,3260
67
- fleet/verifiers/parse.py,sha256=IaROVGmtmilsHQp2sMoJUJcB7tATLLsoHdF0TTWcoC0,8541
67
+ fleet/verifiers/parse.py,sha256=qz9AfJrTbjlg-LU-lE8Ciqi7Yt2a8-cs17FdpjTLhMk,8550
68
68
  fleet/verifiers/sql_differ.py,sha256=TqTLWyK3uOyLbitT6HYzYEzuSFC39wcyhgk3rcm__k8,6525
69
69
  fleet/verifiers/verifier.py,sha256=_lcxXVm8e0xRrK2gNJy9up7pW1zOkPRY5n5lQ85S8jg,14197
70
- fleet_python-0.2.47.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
70
+ fleet_python-0.2.49.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.47.dist-info/METADATA,sha256=QLRHeDWIHUFE9aJ4wtRSImYpKou3AnoTJdd871U1mlg,3304
74
- fleet_python-0.2.47.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
75
- fleet_python-0.2.47.dist-info/top_level.txt,sha256=_3DSmTohvSDf3AIP_BYfGzhwO1ECFwuzg83X-wHCx3Y,23
76
- fleet_python-0.2.47.dist-info/RECORD,,
73
+ fleet_python-0.2.49.dist-info/METADATA,sha256=mKBv-THcTtDw_bwj26x4m9EczWVcm-u6pqE1xutSPHs,3304
74
+ fleet_python-0.2.49.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
75
+ fleet_python-0.2.49.dist-info/top_level.txt,sha256=_3DSmTohvSDf3AIP_BYfGzhwO1ECFwuzg83X-wHCx3Y,23
76
+ fleet_python-0.2.49.dist-info/RECORD,,