fleet-python 0.2.43__py3-none-any.whl → 0.2.45__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/__init__.py +9 -7
- fleet/_async/__init__.py +28 -16
- fleet/_async/client.py +44 -16
- fleet/_async/instance/client.py +1 -1
- fleet/_async/resources/sqlite.py +34 -34
- fleet/_async/tasks.py +37 -2
- fleet/_async/verifiers/verifier.py +3 -3
- fleet/client.py +44 -13
- fleet/instance/client.py +2 -4
- fleet/resources/sqlite.py +37 -43
- fleet/tasks.py +46 -41
- fleet/verifiers/__init__.py +1 -1
- fleet/verifiers/db.py +41 -36
- fleet/verifiers/parse.py +4 -1
- fleet/verifiers/sql_differ.py +8 -8
- fleet/verifiers/verifier.py +19 -7
- {fleet_python-0.2.43.dist-info → fleet_python-0.2.45.dist-info}/METADATA +1 -1
- {fleet_python-0.2.43.dist-info → fleet_python-0.2.45.dist-info}/RECORD +21 -21
- {fleet_python-0.2.43.dist-info → fleet_python-0.2.45.dist-info}/WHEEL +0 -0
- {fleet_python-0.2.43.dist-info → fleet_python-0.2.45.dist-info}/licenses/LICENSE +0 -0
- {fleet_python-0.2.43.dist-info → fleet_python-0.2.45.dist-info}/top_level.txt +0 -0
fleet/verifiers/db.py
CHANGED
|
@@ -22,9 +22,11 @@ import json
|
|
|
22
22
|
# Low‑level helpers
|
|
23
23
|
################################################################################
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
from typing import Union, Tuple, Dict, List, Optional, Any, Set
|
|
26
|
+
|
|
27
|
+
SQLValue = Union[str, int, float, None]
|
|
28
|
+
Condition = Tuple[str, str, SQLValue] # (column, op, value)
|
|
29
|
+
JoinSpec = Tuple[str, Dict[str, str]] # (table, on mapping)
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
def _is_json_string(value: Any) -> bool:
|
|
@@ -98,13 +100,13 @@ class QueryBuilder:
|
|
|
98
100
|
def __init__(self, snapshot: "DatabaseSnapshot", table: str): # noqa: UP037
|
|
99
101
|
self._snapshot = snapshot
|
|
100
102
|
self._table = table
|
|
101
|
-
self._select_cols:
|
|
102
|
-
self._conditions:
|
|
103
|
-
self._joins:
|
|
104
|
-
self._limit: int
|
|
105
|
-
self._order_by: str
|
|
103
|
+
self._select_cols: List[str] = ["*"]
|
|
104
|
+
self._conditions: List[Condition] = []
|
|
105
|
+
self._joins: List[JoinSpec] = []
|
|
106
|
+
self._limit: Optional[int] = None
|
|
107
|
+
self._order_by: Optional[str] = None
|
|
106
108
|
# Cache for idempotent executions
|
|
107
|
-
self._cached_rows:
|
|
109
|
+
self._cached_rows: Optional[List[Dict[str, Any]]] = None
|
|
108
110
|
|
|
109
111
|
# ---------------------------------------------------------------------
|
|
110
112
|
# Column projection / limiting / ordering
|
|
@@ -150,12 +152,12 @@ class QueryBuilder:
|
|
|
150
152
|
def lte(self, column: str, value: SQLValue) -> "QueryBuilder": # noqa: UP037
|
|
151
153
|
return self._add_condition(column, "<=", value)
|
|
152
154
|
|
|
153
|
-
def in_(self, column: str, values:
|
|
155
|
+
def in_(self, column: str, values: List[SQLValue]) -> "QueryBuilder": # noqa: UP037
|
|
154
156
|
qb = self._clone()
|
|
155
157
|
qb._conditions.append((column, "IN", tuple(values)))
|
|
156
158
|
return qb
|
|
157
159
|
|
|
158
|
-
def not_in(self, column: str, values:
|
|
160
|
+
def not_in(self, column: str, values: List[SQLValue]) -> "QueryBuilder": # noqa: UP037
|
|
159
161
|
qb = self._clone()
|
|
160
162
|
qb._conditions.append((column, "NOT IN", tuple(values)))
|
|
161
163
|
return qb
|
|
@@ -174,7 +176,7 @@ class QueryBuilder:
|
|
|
174
176
|
# ---------------------------------------------------------------------
|
|
175
177
|
# JOIN (simple inner join)
|
|
176
178
|
# ---------------------------------------------------------------------
|
|
177
|
-
def join(self, other_table: str, on:
|
|
179
|
+
def join(self, other_table: str, on: Dict[str, str]) -> "QueryBuilder": # noqa: UP037
|
|
178
180
|
"""`on` expects {local_col: remote_col}."""
|
|
179
181
|
qb = self._clone()
|
|
180
182
|
qb._joins.append((other_table, on))
|
|
@@ -183,10 +185,10 @@ class QueryBuilder:
|
|
|
183
185
|
# ---------------------------------------------------------------------
|
|
184
186
|
# Execution helpers
|
|
185
187
|
# ---------------------------------------------------------------------
|
|
186
|
-
def _compile(self) ->
|
|
188
|
+
def _compile(self) -> Tuple[str, List[Any]]:
|
|
187
189
|
cols = ", ".join(self._select_cols)
|
|
188
190
|
sql = [f"SELECT {cols} FROM {self._table}"]
|
|
189
|
-
params:
|
|
191
|
+
params: List[Any] = []
|
|
190
192
|
|
|
191
193
|
# Joins -------------------------------------------------------------
|
|
192
194
|
for tbl, onmap in self._joins:
|
|
@@ -224,7 +226,7 @@ class QueryBuilder:
|
|
|
224
226
|
|
|
225
227
|
return " ".join(sql), params
|
|
226
228
|
|
|
227
|
-
def _execute(self) ->
|
|
229
|
+
def _execute(self) -> List[Dict[str, Any]]:
|
|
228
230
|
if self._cached_rows is not None:
|
|
229
231
|
return self._cached_rows
|
|
230
232
|
|
|
@@ -255,10 +257,10 @@ class QueryBuilder:
|
|
|
255
257
|
conn.close()
|
|
256
258
|
return _CountResult(val)
|
|
257
259
|
|
|
258
|
-
def first(self) ->
|
|
260
|
+
def first(self) -> Optional[Dict[str, Any]]:
|
|
259
261
|
return self.limit(1)._execute()[0] if self.limit(1)._execute() else None
|
|
260
262
|
|
|
261
|
-
def all(self) ->
|
|
263
|
+
def all(self) -> List[Dict[str, Any]]:
|
|
262
264
|
return self._execute()
|
|
263
265
|
|
|
264
266
|
# Assertions -----------------------------------------------------------
|
|
@@ -357,9 +359,9 @@ class IgnoreConfig:
|
|
|
357
359
|
|
|
358
360
|
def __init__(
|
|
359
361
|
self,
|
|
360
|
-
tables:
|
|
361
|
-
fields:
|
|
362
|
-
table_fields:
|
|
362
|
+
tables: Optional[Set[str]] = None,
|
|
363
|
+
fields: Optional[Set[str]] = None,
|
|
364
|
+
table_fields: Optional[Dict[str, Set[str]]] = None,
|
|
363
365
|
):
|
|
364
366
|
"""
|
|
365
367
|
Args:
|
|
@@ -386,7 +388,7 @@ class IgnoreConfig:
|
|
|
386
388
|
return False
|
|
387
389
|
|
|
388
390
|
|
|
389
|
-
def _format_row_for_error(row:
|
|
391
|
+
def _format_row_for_error(row: Dict[str, Any], max_fields: int = 10) -> str:
|
|
390
392
|
"""Format a row dictionary for error messages with truncation if needed."""
|
|
391
393
|
if not row:
|
|
392
394
|
return "{empty row}"
|
|
@@ -402,7 +404,7 @@ def _format_row_for_error(row: dict[str, Any], max_fields: int = 10) -> str:
|
|
|
402
404
|
return "{" + ", ".join(shown_items) + f", ... +{remaining} more fields" + "}"
|
|
403
405
|
|
|
404
406
|
|
|
405
|
-
def _get_row_identifier(row:
|
|
407
|
+
def _get_row_identifier(row: Dict[str, Any]) -> str:
|
|
406
408
|
"""Extract a meaningful identifier from a row for error messages."""
|
|
407
409
|
# Try common ID fields first
|
|
408
410
|
for id_field in ["id", "pk", "primary_key", "key"]:
|
|
@@ -429,7 +431,7 @@ class SnapshotDiff:
|
|
|
429
431
|
self,
|
|
430
432
|
before: DatabaseSnapshot,
|
|
431
433
|
after: DatabaseSnapshot,
|
|
432
|
-
ignore_config: IgnoreConfig
|
|
434
|
+
ignore_config: Optional[IgnoreConfig] = None,
|
|
433
435
|
):
|
|
434
436
|
from .sql_differ import SQLiteDiffer # local import to avoid circularity
|
|
435
437
|
|
|
@@ -437,14 +439,14 @@ class SnapshotDiff:
|
|
|
437
439
|
self.after = after
|
|
438
440
|
self.ignore_config = ignore_config or IgnoreConfig()
|
|
439
441
|
self._differ = SQLiteDiffer(before.db_path, after.db_path)
|
|
440
|
-
self._cached:
|
|
442
|
+
self._cached: Optional[Dict[str, Any]] = None
|
|
441
443
|
|
|
442
444
|
# ------------------------------------------------------------------
|
|
443
445
|
def _collect(self):
|
|
444
446
|
if self._cached is not None:
|
|
445
447
|
return self._cached
|
|
446
448
|
all_tables = set(self.before.tables()) | set(self.after.tables())
|
|
447
|
-
diff:
|
|
449
|
+
diff: Dict[str, Dict[str, Any]] = {}
|
|
448
450
|
for tbl in all_tables:
|
|
449
451
|
if self.ignore_config.should_ignore_table(tbl):
|
|
450
452
|
continue
|
|
@@ -453,12 +455,12 @@ class SnapshotDiff:
|
|
|
453
455
|
return diff
|
|
454
456
|
|
|
455
457
|
# ------------------------------------------------------------------
|
|
456
|
-
def expect_only(self, allowed_changes:
|
|
458
|
+
def expect_only(self, allowed_changes: List[Dict[str, Any]]):
|
|
457
459
|
"""Allowed changes is a list of {table, pk, field, after} (before optional)."""
|
|
458
460
|
diff = self._collect()
|
|
459
461
|
|
|
460
462
|
def _is_change_allowed(
|
|
461
|
-
table: str, row_id: str, field: str
|
|
463
|
+
table: str, row_id: str, field: Optional[str], after_value: Any
|
|
462
464
|
) -> bool:
|
|
463
465
|
"""Check if a change is in the allowed list using semantic comparison."""
|
|
464
466
|
for allowed in allowed_changes:
|
|
@@ -596,7 +598,10 @@ class SnapshotDiff:
|
|
|
596
598
|
return self
|
|
597
599
|
|
|
598
600
|
def expect(
|
|
599
|
-
self,
|
|
601
|
+
self,
|
|
602
|
+
*,
|
|
603
|
+
allow: Optional[List[Dict[str, Any]]] = None,
|
|
604
|
+
forbid: Optional[List[Dict[str, Any]]] = None,
|
|
600
605
|
):
|
|
601
606
|
"""More granular: allow / forbid per‑table and per‑field."""
|
|
602
607
|
allow = allow or []
|
|
@@ -629,7 +634,7 @@ class SnapshotDiff:
|
|
|
629
634
|
class DatabaseSnapshot:
|
|
630
635
|
"""Represents a snapshot of an SQLite DB with DSL entrypoints."""
|
|
631
636
|
|
|
632
|
-
def __init__(self, db_path: str, *, name: str
|
|
637
|
+
def __init__(self, db_path: str, *, name: Optional[str] = None):
|
|
633
638
|
self.db_path = db_path
|
|
634
639
|
self.name = name or f"snapshot_{datetime.utcnow().isoformat()}"
|
|
635
640
|
self.created_at = datetime.utcnow()
|
|
@@ -639,7 +644,7 @@ class DatabaseSnapshot:
|
|
|
639
644
|
return QueryBuilder(self, table)
|
|
640
645
|
|
|
641
646
|
# Metadata -------------------------------------------------------------
|
|
642
|
-
def tables(self) ->
|
|
647
|
+
def tables(self) -> List[str]:
|
|
643
648
|
conn = sqlite3.connect(self.db_path)
|
|
644
649
|
cur = conn.cursor()
|
|
645
650
|
cur.execute(
|
|
@@ -654,7 +659,7 @@ class DatabaseSnapshot:
|
|
|
654
659
|
def diff(
|
|
655
660
|
self,
|
|
656
661
|
other: "DatabaseSnapshot", # noqa: UP037
|
|
657
|
-
ignore_config: IgnoreConfig
|
|
662
|
+
ignore_config: Optional[IgnoreConfig] = None,
|
|
658
663
|
) -> SnapshotDiff:
|
|
659
664
|
return SnapshotDiff(self, other, ignore_config)
|
|
660
665
|
|
|
@@ -663,7 +668,7 @@ class DatabaseSnapshot:
|
|
|
663
668
|
############################################################################
|
|
664
669
|
|
|
665
670
|
def expect_row(
|
|
666
|
-
self, table: str, where:
|
|
671
|
+
self, table: str, where: Dict[str, SQLValue], expect: Dict[str, SQLValue]
|
|
667
672
|
):
|
|
668
673
|
qb = self.table(table)
|
|
669
674
|
for k, v in where.items():
|
|
@@ -676,10 +681,10 @@ class DatabaseSnapshot:
|
|
|
676
681
|
def expect_rows(
|
|
677
682
|
self,
|
|
678
683
|
table: str,
|
|
679
|
-
where:
|
|
684
|
+
where: Dict[str, SQLValue],
|
|
680
685
|
*,
|
|
681
|
-
count: int
|
|
682
|
-
contains:
|
|
686
|
+
count: Optional[int] = None,
|
|
687
|
+
contains: Optional[List[Dict[str, SQLValue]]] = None,
|
|
683
688
|
):
|
|
684
689
|
qb = self.table(table)
|
|
685
690
|
for k, v in where.items():
|
|
@@ -694,7 +699,7 @@ class DatabaseSnapshot:
|
|
|
694
699
|
raise AssertionError(f"Expected a row matching {cond} in {table}")
|
|
695
700
|
return self
|
|
696
701
|
|
|
697
|
-
def expect_absent_row(self, table: str, where:
|
|
702
|
+
def expect_absent_row(self, table: str, where: Dict[str, SQLValue]):
|
|
698
703
|
qb = self.table(table)
|
|
699
704
|
for k, v in where.items():
|
|
700
705
|
qb = qb.eq(k, v)
|
fleet/verifiers/parse.py
CHANGED
fleet/verifiers/sql_differ.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import sqlite3
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any, Optional, List, Dict, Tuple
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
class SQLiteDiffer:
|
|
@@ -7,7 +7,7 @@ class SQLiteDiffer:
|
|
|
7
7
|
self.before_db = before_db
|
|
8
8
|
self.after_db = after_db
|
|
9
9
|
|
|
10
|
-
def get_table_schema(self, db_path: str, table_name: str) ->
|
|
10
|
+
def get_table_schema(self, db_path: str, table_name: str) -> List[str]:
|
|
11
11
|
"""Get column names for a table"""
|
|
12
12
|
conn = sqlite3.connect(db_path)
|
|
13
13
|
cursor = conn.cursor()
|
|
@@ -16,7 +16,7 @@ class SQLiteDiffer:
|
|
|
16
16
|
conn.close()
|
|
17
17
|
return columns
|
|
18
18
|
|
|
19
|
-
def get_primary_key_columns(self, db_path: str, table_name: str) ->
|
|
19
|
+
def get_primary_key_columns(self, db_path: str, table_name: str) -> List[str]:
|
|
20
20
|
"""Get all primary key columns for a table, ordered by their position"""
|
|
21
21
|
conn = sqlite3.connect(db_path)
|
|
22
22
|
cursor = conn.cursor()
|
|
@@ -34,7 +34,7 @@ class SQLiteDiffer:
|
|
|
34
34
|
pk_columns.sort(key=lambda x: x[0])
|
|
35
35
|
return [col[1] for col in pk_columns]
|
|
36
36
|
|
|
37
|
-
def get_all_tables(self, db_path: str) ->
|
|
37
|
+
def get_all_tables(self, db_path: str) -> List[str]:
|
|
38
38
|
"""Get all table names from database"""
|
|
39
39
|
conn = sqlite3.connect(db_path)
|
|
40
40
|
cursor = conn.cursor()
|
|
@@ -49,8 +49,8 @@ class SQLiteDiffer:
|
|
|
49
49
|
self,
|
|
50
50
|
db_path: str,
|
|
51
51
|
table_name: str,
|
|
52
|
-
primary_key_columns:
|
|
53
|
-
) ->
|
|
52
|
+
primary_key_columns: Optional[List[str]] = None,
|
|
53
|
+
) -> Tuple[Dict[Any, dict], List[str]]:
|
|
54
54
|
"""Get table data indexed by primary key (single column or composite)"""
|
|
55
55
|
conn = sqlite3.connect(db_path)
|
|
56
56
|
conn.row_factory = sqlite3.Row
|
|
@@ -97,7 +97,7 @@ class SQLiteDiffer:
|
|
|
97
97
|
conn.close()
|
|
98
98
|
return data, primary_key_columns
|
|
99
99
|
|
|
100
|
-
def compare_rows(self, before_row: dict, after_row: dict) ->
|
|
100
|
+
def compare_rows(self, before_row: dict, after_row: dict) -> Dict[str, dict]:
|
|
101
101
|
"""Compare two rows field by field"""
|
|
102
102
|
changes = {}
|
|
103
103
|
|
|
@@ -113,7 +113,7 @@ class SQLiteDiffer:
|
|
|
113
113
|
return changes
|
|
114
114
|
|
|
115
115
|
def diff_table(
|
|
116
|
-
self, table_name: str, primary_key_columns:
|
|
116
|
+
self, table_name: str, primary_key_columns: Optional[List[str]] = None
|
|
117
117
|
) -> dict:
|
|
118
118
|
"""Create comprehensive diff of a table"""
|
|
119
119
|
before_data, detected_pk = self.get_table_data(
|
fleet/verifiers/verifier.py
CHANGED
|
@@ -12,10 +12,22 @@ import uuid
|
|
|
12
12
|
import logging
|
|
13
13
|
import hashlib
|
|
14
14
|
import inspect
|
|
15
|
-
from typing import
|
|
15
|
+
from typing import (
|
|
16
|
+
Any,
|
|
17
|
+
Callable,
|
|
18
|
+
Dict,
|
|
19
|
+
Optional,
|
|
20
|
+
List,
|
|
21
|
+
TypeVar,
|
|
22
|
+
Set,
|
|
23
|
+
TYPE_CHECKING,
|
|
24
|
+
Tuple,
|
|
25
|
+
)
|
|
16
26
|
|
|
17
27
|
from .bundler import FunctionBundler
|
|
18
|
-
|
|
28
|
+
|
|
29
|
+
if TYPE_CHECKING:
|
|
30
|
+
from ..client import SyncEnv
|
|
19
31
|
|
|
20
32
|
logger = logging.getLogger(__name__)
|
|
21
33
|
|
|
@@ -56,7 +68,7 @@ class SyncVerifierFunction:
|
|
|
56
68
|
# Copy function metadata
|
|
57
69
|
functools.update_wrapper(self, func)
|
|
58
70
|
|
|
59
|
-
def _get_or_create_bundle(self) ->
|
|
71
|
+
def _get_or_create_bundle(self) -> Tuple[bytes, str]:
|
|
60
72
|
"""Get or create bundle data and return (bundle_data, sha)."""
|
|
61
73
|
if self._bundle_data is None or self._bundle_sha is None:
|
|
62
74
|
# If we have raw code, create a bundle from it
|
|
@@ -98,7 +110,7 @@ class SyncVerifierFunction:
|
|
|
98
110
|
|
|
99
111
|
return self._bundle_data, self._bundle_sha
|
|
100
112
|
|
|
101
|
-
def _check_bundle_status(self, env: SyncEnv) ->
|
|
113
|
+
def _check_bundle_status(self, env: "SyncEnv") -> Tuple[str, bool]:
|
|
102
114
|
"""Check if bundle needs to be uploaded and return (sha, needs_upload)."""
|
|
103
115
|
bundle_data, bundle_sha = self._get_or_create_bundle()
|
|
104
116
|
|
|
@@ -129,7 +141,7 @@ class SyncVerifierFunction:
|
|
|
129
141
|
logger.info(f"Bundle {bundle_sha[:8]}... needs to be uploaded")
|
|
130
142
|
return bundle_sha, True # Upload needed
|
|
131
143
|
|
|
132
|
-
def __call__(self, env: SyncEnv, *args, **kwargs) -> float:
|
|
144
|
+
def __call__(self, env: "SyncEnv", *args, **kwargs) -> float:
|
|
133
145
|
"""Local execution of the verifier function with env as first parameter."""
|
|
134
146
|
try:
|
|
135
147
|
if self._is_async:
|
|
@@ -160,7 +172,7 @@ class SyncVerifierFunction:
|
|
|
160
172
|
# Return error score 0
|
|
161
173
|
return 0.0
|
|
162
174
|
|
|
163
|
-
def remote(self, env: SyncEnv, *args, **kwargs) -> float:
|
|
175
|
+
def remote(self, env: "SyncEnv", *args, **kwargs) -> float:
|
|
164
176
|
"""Remote execution of the verifier function with SHA-based bundle caching."""
|
|
165
177
|
# Async verifiers are now supported by the backend
|
|
166
178
|
# if self._is_async:
|
|
@@ -272,7 +284,7 @@ Remote traceback:
|
|
|
272
284
|
except:
|
|
273
285
|
raise RuntimeError(full_message)
|
|
274
286
|
|
|
275
|
-
def _get_env_id(self, env: SyncEnv) -> str:
|
|
287
|
+
def _get_env_id(self, env: "SyncEnv") -> str:
|
|
276
288
|
"""Generate a unique identifier for the environment."""
|
|
277
289
|
# Use instance base URL or similar unique identifier
|
|
278
290
|
if hasattr(env, "instance") and hasattr(env.instance, "base_url"):
|
|
@@ -19,58 +19,58 @@ examples/openai_simple_example.py,sha256=HmiufucrAZne7tHq9uoEsDWlEhjNC265bQAyIGB
|
|
|
19
19
|
examples/query_builder_example.py,sha256=-cOMfWGNifYfYEt_Ds73XpwATZvFDL6F4KTkVxdMjzg,3951
|
|
20
20
|
examples/quickstart.py,sha256=1VT39IRRhemsJgxi0O0gprdpcw7HB4pYO97GAYagIcg,3788
|
|
21
21
|
examples/test_cdp_logging.py,sha256=AkCwQCgOTQEI8w3v0knWK_4eXMph7L9x07wj9yIYM10,2836
|
|
22
|
-
fleet/__init__.py,sha256=
|
|
22
|
+
fleet/__init__.py,sha256=Mkdeh45N47lnSv73Eehj92cGU-AImUitvDWJLFhEp0Y,3844
|
|
23
23
|
fleet/base.py,sha256=bc-340sTpq_DJs7yQ9d2pDWnmJFmA1SwDB9Lagvqtb4,9182
|
|
24
|
-
fleet/client.py,sha256=
|
|
24
|
+
fleet/client.py,sha256=TOSHgaYUduK6g0vrmVnbisdJ5EPH8bNQXYSZrzgjgv0,27038
|
|
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=WAiRXa68aXSVbCqmQMn36n9cSlls6YsicV6BbyoeiYQ,12750
|
|
29
|
-
fleet/tasks.py,sha256=
|
|
29
|
+
fleet/tasks.py,sha256=3VKk3g1gXXhy-N9QnDq2eTdNK9rJENn_N6_TKZU-uvY,9634
|
|
30
30
|
fleet/types.py,sha256=L4Y82xICf1tzyCLqhLYUgEoaIIS5h9T05TyFNHSWs3s,652
|
|
31
|
-
fleet/_async/__init__.py,sha256=
|
|
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=
|
|
33
|
+
fleet/_async/client.py,sha256=ub6YGR8tBIEob3z5u8F0x0fktUYiVet87RN8iqJiY2I,27306
|
|
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=li5Cii7ASUHCFMFeJIMklyicYczqPez768RxO0Q0F2o,12618
|
|
37
|
-
fleet/_async/tasks.py,sha256=
|
|
37
|
+
fleet/_async/tasks.py,sha256=TAS7IkSsS8rTW34blTaEPuWzuBqe8NezLpz1ozjP82M,9416
|
|
38
38
|
fleet/_async/env/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
39
|
fleet/_async/env/client.py,sha256=8dS42VvSgdqfuh96l6cyiLZlKElilmfTeRSZ4LZnFuE,1143
|
|
40
40
|
fleet/_async/instance/__init__.py,sha256=PtmJq8J8bh0SOQ2V55QURz5GJfobozwtQoqhaOk3_tI,515
|
|
41
41
|
fleet/_async/instance/base.py,sha256=3qUBuUR8OVS36LzdP6KyZzngtwPKYO09HoY6Ekxp-KA,1625
|
|
42
|
-
fleet/_async/instance/client.py,sha256=
|
|
42
|
+
fleet/_async/instance/client.py,sha256=kcrmLZciQxvPSfTtbEq5LIbhscwDHg6WIiNcPyM4L9w,6085
|
|
43
43
|
fleet/_async/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
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=
|
|
47
|
+
fleet/_async/resources/sqlite.py,sha256=0B6mI8Ad4-pxITMxlBST5RFcG6kqAqwnHW9PPAcpVLk,26185
|
|
48
48
|
fleet/_async/verifiers/__init__.py,sha256=1WTlCNq4tIFbbXaQu5Bf2WppZq0A8suhtZbxMTSOwxI,465
|
|
49
49
|
fleet/_async/verifiers/bundler.py,sha256=Sq0KkqEhM5Ng2x8R6Z4puXvQ8FMlEO7D3-ldBLktPi4,26205
|
|
50
|
-
fleet/_async/verifiers/verifier.py,sha256=
|
|
50
|
+
fleet/_async/verifiers/verifier.py,sha256=pfJFuQ4WsA71AowEESd-sWQUjCVWmG5PX2-GAxDm2-8,14350
|
|
51
51
|
fleet/env/__init__.py,sha256=cS9zCYobM5jypppDMZIQMYd6hOg5f4sgqRXEQ67pckk,676
|
|
52
52
|
fleet/env/client.py,sha256=imF47xJG4JeihcZw4Y-_fXz4XxS-OgIkzUK-TLjpeJY,977
|
|
53
53
|
fleet/instance/__init__.py,sha256=CyWUkbGAK-DBPw4DC4AnCW-MqqheGhZMA5QSRVu-ws4,479
|
|
54
54
|
fleet/instance/base.py,sha256=OYqzBwZFfTX9wlBGSG5gljqj98NbiJeKIfFJ3uj5I4s,1587
|
|
55
|
-
fleet/instance/client.py,sha256=
|
|
55
|
+
fleet/instance/client.py,sha256=XM_Qmd7pUzC3-dCMTh6orTEsGeWJXbKueBlvcWcSUuI,5897
|
|
56
56
|
fleet/instance/models.py,sha256=ZTiue0YOuhuwX8jYfJAoCzGfqjLqqXRLqK1LVFhq6rQ,4183
|
|
57
57
|
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=
|
|
62
|
-
fleet/verifiers/__init__.py,sha256=
|
|
61
|
+
fleet/resources/sqlite.py,sha256=MIceexu6NlDJ-M74ravpUnB8HzlsxgZx9nZvD16t0Jo,25757
|
|
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
|
-
fleet/verifiers/db.py,sha256=
|
|
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=
|
|
68
|
-
fleet/verifiers/sql_differ.py,sha256=
|
|
69
|
-
fleet/verifiers/verifier.py,sha256=
|
|
70
|
-
fleet_python-0.2.
|
|
67
|
+
fleet/verifiers/parse.py,sha256=IaROVGmtmilsHQp2sMoJUJcB7tATLLsoHdF0TTWcoC0,8541
|
|
68
|
+
fleet/verifiers/sql_differ.py,sha256=TqTLWyK3uOyLbitT6HYzYEzuSFC39wcyhgk3rcm__k8,6525
|
|
69
|
+
fleet/verifiers/verifier.py,sha256=WViDlhEU9OEwWBjp7fvIW0-HltpuFcuXfzGazQnJUuw,14380
|
|
70
|
+
fleet_python-0.2.45.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.
|
|
74
|
-
fleet_python-0.2.
|
|
75
|
-
fleet_python-0.2.
|
|
76
|
-
fleet_python-0.2.
|
|
73
|
+
fleet_python-0.2.45.dist-info/METADATA,sha256=po9K7F5ILTQzLIR95WWM1l7seIpd68Mby99ggmdkgk0,3304
|
|
74
|
+
fleet_python-0.2.45.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
75
|
+
fleet_python-0.2.45.dist-info/top_level.txt,sha256=_3DSmTohvSDf3AIP_BYfGzhwO1ECFwuzg83X-wHCx3Y,23
|
|
76
|
+
fleet_python-0.2.45.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|