From 08ba4b35faf2ec145d7a1132544a0ab3da6bacb1 Mon Sep 17 00:00:00 2001 From: euri10 Date: Tue, 28 Oct 2025 15:44:21 +0100 Subject: [PATCH 01/20] docs: use literalinclude instead of code blocks on quickstart --- docs/conf.py | 2 +- docs/examples/quickstart/__init__.py | 0 docs/examples/quickstart/quickstart_1.py | 11 ++ docs/examples/quickstart/quickstart_2.py | 44 ++++++ docs/examples/quickstart/quickstart_3.py | 42 +++++ docs/examples/quickstart/quickstart_4.py | 39 +++++ docs/examples/quickstart/quickstart_5.py | 37 +++++ docs/getting_started/quickstart.rst | 185 ++--------------------- 8 files changed, 189 insertions(+), 171 deletions(-) create mode 100644 docs/examples/quickstart/__init__.py create mode 100644 docs/examples/quickstart/quickstart_1.py create mode 100644 docs/examples/quickstart/quickstart_2.py create mode 100644 docs/examples/quickstart/quickstart_3.py create mode 100644 docs/examples/quickstart/quickstart_4.py create mode 100644 docs/examples/quickstart/quickstart_5.py diff --git a/docs/conf.py b/docs/conf.py index a0330276b..667f30b31 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -147,7 +147,7 @@ html_theme = "shibuya" html_title = "SQLSpec" html_short_title = "SQLSpec" -pygments_style = "dracula" +# pygments_style = "dracula" todo_include_todos = True html_static_path = ["_static"] diff --git a/docs/examples/quickstart/__init__.py b/docs/examples/quickstart/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/docs/examples/quickstart/quickstart_1.py b/docs/examples/quickstart/quickstart_1.py new file mode 100644 index 000000000..6b9ec7fdf --- /dev/null +++ b/docs/examples/quickstart/quickstart_1.py @@ -0,0 +1,11 @@ +from sqlspec import SQLSpec +from sqlspec.adapters.sqlite import SqliteConfig + +# Create SQLSpec instance and configure database +db_manager = SQLSpec() +db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) + +# Execute a query +with db_manager.provide_session(db) as session: + result = session.execute("SELECT 'Hello, SQLSpec!' as message") + print(result.get_first()) # {'message': 'Hello, SQLSpec!'} diff --git a/docs/examples/quickstart/quickstart_2.py b/docs/examples/quickstart/quickstart_2.py new file mode 100644 index 000000000..b7e13bcd2 --- /dev/null +++ b/docs/examples/quickstart/quickstart_2.py @@ -0,0 +1,44 @@ +from sqlspec import SQLSpec +from sqlspec.adapters.sqlite import SqliteConfig + +db_manager = SQLSpec() +db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) + +with db_manager.provide_session(db) as session: + # Create a table + _ = session.execute(""" + CREATE TABLE users ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + email TEXT UNIQUE NOT NULL + ) + """) + + # Insert data + _ = session.execute( + "INSERT INTO users (name, email) VALUES (?, ?)", + "Alice", "alice@example.com" + ) + + # Insert multiple rows + _ = session.execute_many( + "INSERT INTO users (name, email) VALUES (?, ?)", + [ + ("Bob", "bob@example.com"), + ("Charlie", "charlie@example.com"), + ] + ) + + # Query all users + users = session.select("SELECT * FROM users") + print(f"All users: {users}") + + # Query single user + alice = session.select_one("SELECT * FROM users WHERE name = ?", "Alice") + print(f"Alice: {alice}") + + # Query scalar value + count = session.select_value("SELECT COUNT(*) FROM users") + print(f"Total users: {count}") + + diff --git a/docs/examples/quickstart/quickstart_3.py b/docs/examples/quickstart/quickstart_3.py new file mode 100644 index 000000000..af3925f26 --- /dev/null +++ b/docs/examples/quickstart/quickstart_3.py @@ -0,0 +1,42 @@ +from pydantic import BaseModel + +from sqlspec import SQLSpec +from sqlspec.adapters.sqlite import SqliteConfig + + +class User(BaseModel): + id: int + name: str + email: str + +db_manager = SQLSpec() +db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) + +with db_manager.provide_session(db) as session: + # Setup + _ = session.execute(""" + CREATE TABLE users (id INTEGER, name TEXT, email TEXT) + """) + _ = session.execute( + "INSERT INTO users VALUES (?, ?, ?)", + 1, "Alice", "alice@example.com" + ) + + # Type-safe query - returns User instance + user = session.select_one( + "SELECT * FROM users WHERE id = ?", + 1, + schema_type=User + ) + + # Now you have type hints and autocomplete! + print(f"User: {user.name} ({user.email})") # IDE knows these fields exist + + # Multiple results + all_users = session.select( + "SELECT * FROM users", + schema_type=User + ) + for u in all_users: + print(f"User: {u.name}") # Each item is a typed User + diff --git a/docs/examples/quickstart/quickstart_4.py b/docs/examples/quickstart/quickstart_4.py new file mode 100644 index 000000000..4678755df --- /dev/null +++ b/docs/examples/quickstart/quickstart_4.py @@ -0,0 +1,39 @@ +import asyncio + +from pydantic import BaseModel + +from sqlspec import SQLSpec +from sqlspec.adapters.aiosqlite import AiosqliteConfig + + +class User(BaseModel): + id: int + name: str + email: str + +async def main() -> None: + db_manager = SQLSpec() + db = db_manager.add_config(AiosqliteConfig(pool_config={"database": ":memory:"})) + + async with db_manager.provide_session(db) as session: + # Create table + _ = await session.execute(""" + CREATE TABLE users (id INTEGER, name TEXT, email TEXT) + """) + + # Insert data + _ = await session.execute( + "INSERT INTO users VALUES (?, ?, ?)", + 1, "Alice", "alice@example.com" + ) + + # Type-safe async query + user = await session.select_one( + "SELECT * FROM users WHERE id = ?", + 1, + schema_type=User + ) + + print(f"User: {user.name}") + +asyncio.run(main()) diff --git a/docs/examples/quickstart/quickstart_5.py b/docs/examples/quickstart/quickstart_5.py new file mode 100644 index 000000000..f6265a3d3 --- /dev/null +++ b/docs/examples/quickstart/quickstart_5.py @@ -0,0 +1,37 @@ +import asyncio + +from pydantic import BaseModel + +from sqlspec import SQLSpec +from sqlspec.adapters.asyncpg import AsyncpgConfig + + +class User(BaseModel): + id: int + name: str + email: str + +async def main() -> None: + db_manager = SQLSpec() + db = db_manager.add_config( + AsyncpgConfig( + pool_config={ + "host": "localhost", + "port": 5432, + "user": "postgres", + "password": "postgres", + "database": "mydb", + } + ) + ) + + async with db_manager.provide_session(db) as session: + # PostgreSQL uses $1, $2 for parameters instead of ? + user = await session.select_one( + "SELECT * FROM users WHERE id = $1", + 1, + schema_type=User + ) + print(f"User: {user.name}") + +asyncio.run(main()) diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index e5feb37fa..0a26dd6bd 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -9,19 +9,9 @@ Your First Query Let's start with the simplest possible example - executing a query and getting results: -.. code-block:: python - - from sqlspec import SQLSpec - from sqlspec.adapters.sqlite import SqliteConfig - - # Create SQLSpec instance and configure database - db_manager = SQLSpec() - db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) - - # Execute a query - with db_manager.provide_session(db) as session: - result = session.execute("SELECT 'Hello, SQLSpec!' as message") - print(result.get_first()) # {'message': 'Hello, SQLSpec!'} +.. literalinclude:: /examples/quickstart/quickstart_1.py + :language: python + :caption: ``first sqlspec query`` What's happening here? @@ -35,50 +25,9 @@ Working with Real Data Let's create a table, insert some data, and query it: -.. code-block:: python - - from sqlspec import SQLSpec - from sqlspec.adapters.sqlite import SqliteConfig - - db_manager = SQLSpec() - db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) - - with db_manager.provide_session(db) as session: - # Create a table - session.execute(""" - CREATE TABLE users ( - id INTEGER PRIMARY KEY, - name TEXT NOT NULL, - email TEXT UNIQUE NOT NULL - ) - """) - - # Insert data - session.execute( - "INSERT INTO users (name, email) VALUES (?, ?)", - "Alice", "alice@example.com" - ) - - # Insert multiple rows - session.execute_many( - "INSERT INTO users (name, email) VALUES (?, ?)", - [ - ("Bob", "bob@example.com"), - ("Charlie", "charlie@example.com"), - ] - ) - - # Query all users - users = session.select("SELECT * FROM users") - print(f"All users: {users}") - - # Query single user - alice = session.select_one("SELECT * FROM users WHERE name = ?", "Alice") - print(f"Alice: {alice}") - - # Query scalar value - count = session.select_value("SELECT COUNT(*) FROM users") - print(f"Total users: {count}") +.. literalinclude:: /examples/quickstart/quickstart_2.py + :language: python + :caption: ``working with real data`` Session Methods Cheat Sheet ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -98,47 +47,9 @@ Type-Safe Results The real power of SQLSpec comes from type-safe result mapping. Define your data models and SQLSpec automatically maps query results to them: -.. code-block:: python - - from sqlspec import SQLSpec - from sqlspec.adapters.sqlite import SqliteConfig - from pydantic import BaseModel - - class User(BaseModel): - id: int - name: str - email: str - - db_manager = SQLSpec() - db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) - - with db_manager.provide_session(db) as session: - # Setup - session.execute(""" - CREATE TABLE users (id INTEGER, name TEXT, email TEXT) - """) - session.execute( - "INSERT INTO users VALUES (?, ?, ?)", - 1, "Alice", "alice@example.com" - ) - - # Type-safe query - returns User instance - user = session.select_one( - "SELECT * FROM users WHERE id = ?", - 1, - schema_type=User - ) - - # Now you have type hints and autocomplete! - print(f"User: {user.name} ({user.email})") # IDE knows these fields exist - - # Multiple results - all_users = session.select( - "SELECT * FROM users", - schema_type=User - ) - for u in all_users: - print(f"User: {u.name}") # Each item is a typed User +.. literalinclude:: /examples/quickstart/quickstart_3.py + :language: python + :caption: ``type-safe results`` .. note:: @@ -149,44 +60,9 @@ Async Support SQLSpec supports async/await for non-blocking database operations. Here's the same example with async: -.. code-block:: python - - import asyncio - from sqlspec import SQLSpec - from sqlspec.adapters.aiosqlite import AiosqliteConfig - from pydantic import BaseModel - - class User(BaseModel): - id: int - name: str - email: str - - async def main() -> None: - db_manager = SQLSpec() - db = db_manager.add_config(AiosqliteConfig(pool_config={"database": ":memory:"})) - - async with db_manager.provide_session(db) as session: - # Create table - await session.execute(""" - CREATE TABLE users (id INTEGER, name TEXT, email TEXT) - """) - - # Insert data - await session.execute( - "INSERT INTO users VALUES (?, ?, ?)", - 1, "Alice", "alice@example.com" - ) - - # Type-safe async query - user = await session.select_one( - "SELECT * FROM users WHERE id = ?", - 1, - schema_type=User - ) - - print(f"User: {user.name}") - - asyncio.run(main()) +.. literalinclude:: /examples/quickstart/quickstart_4.py + :language: python + :caption: ``async support`` The API is identical - just add ``await`` and use async config/drivers! @@ -195,41 +71,10 @@ Switching Databases One of SQLSpec's strengths is the consistent API across databases. Here's the same code using PostgreSQL: -.. code-block:: python - - from sqlspec import SQLSpec - from sqlspec.adapters.asyncpg import AsyncpgConfig - from pydantic import BaseModel - - class User(BaseModel): - id: int - name: str - email: str - - async def main() -> None: - db_manager = SQLSpec() - db = db_manager.add_config( - AsyncpgConfig( - pool_config={ - "host": "localhost", - "port": 5432, - "user": "postgres", - "password": "postgres", - "database": "mydb", - } - ) - ) - - async with db_manager.provide_session(db) as session: - # PostgreSQL uses $1, $2 for parameters instead of ? - user = await session.select_one( - "SELECT * FROM users WHERE id = $1", - 1, - schema_type=User - ) - print(f"User: {user.name}") +.. literalinclude:: /examples/quickstart/quickstart_5.py + :language: python + :caption: ``switching databases`` - asyncio.run(main()) .. tip:: From 5a1cf37f3dff593b0b9d2360f9b36982edd344eb Mon Sep 17 00:00:00 2001 From: euri10 Date: Tue, 28 Oct 2025 18:22:15 +0100 Subject: [PATCH 02/20] docs: more literalinclude --- docs/getting_started/quickstart.rst | 81 +++++------------------------ 1 file changed, 13 insertions(+), 68 deletions(-) diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index 0a26dd6bd..cc41ffd7c 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -80,56 +80,28 @@ One of SQLSpec's strengths is the consistent API across databases. Here's the sa Each database has its own parameter style (``?`` for SQLite, ``$1`` for PostgreSQL, ``%s`` for MySQL, etc.). SQLSpec handles this automatically - you just need to use the correct style for your database. + `PEP249`_ is worth a read on that + + .. _PEP249: https://peps.python.org/pep-0249/#paramstyle + Multiple Databases ------------------ Need to work with multiple databases? Register multiple configs: -.. code-block:: python - - from sqlspec import SQLSpec - from sqlspec.adapters.sqlite import SqliteConfig - from sqlspec.adapters.duckdb import DuckDBConfig - - db_manager = SQLSpec() - - # Register multiple databases - sqlite_db = db_manager.add_config(SqliteConfig(pool_config={"database": "app.db"})) - duckdb_db = db_manager.add_config(DuckDBConfig(pool_config={"database": "analytics.duckdb"})) - - # Use different databases - with db_manager.provide_session(sqlite_db) as sqlite_session: - users = sqlite_session.select("SELECT * FROM users") +.. literalinclude:: /examples/quickstart/quickstart_6.py + :language: python + :caption: ``multiple databases`` - with db_manager.provide_session(duckdb_db) as duckdb_session: - analytics = duckdb_session.select("SELECT * FROM events") Transaction Support ------------------- SQLSpec automatically manages transactions. By default, each session is a transaction: -.. code-block:: python - - from sqlspec import SQLSpec - from sqlspec.adapters.sqlite import SqliteConfig - - db_manager = SQLSpec() - db = db_manager.add_config(SqliteConfig(pool_config={"database": "mydb.db"})) - - # Transaction committed on successful exit - with db_manager.provide_session(db) as session: - session.execute("INSERT INTO users (name) VALUES (?)", "Alice") - session.execute("INSERT INTO orders (user_name) VALUES (?)", "Alice") - # Both committed together - - # Transaction rolled back on exception - try: - with db_manager.provide_session(db) as session: - session.execute("INSERT INTO users (name) VALUES (?)", "Bob") - raise ValueError("Something went wrong!") - except ValueError: - pass # Transaction was rolled back automatically +.. literalinclude:: /examples/quickstart/quickstart_7.py + :language: python + :caption: ``transaction support`` .. note:: @@ -140,36 +112,9 @@ Query Builder (Experimental) For those who prefer programmatic query construction, SQLSpec includes an experimental query builder: -.. code-block:: python - - from sqlspec import sql - from sqlspec.adapters.sqlite import SqliteConfig - from sqlspec import SQLSpec - - # Build a query programmatically - query = ( - sql.select("id", "name", "email") - .from_("users") - .where("age > ?") - .order_by("name") - ) - - db_manager = SQLSpec() - db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) - - with db_manager.provide_session(db) as session: - # Setup - session.execute(""" - CREATE TABLE users (id INTEGER, name TEXT, email TEXT, age INTEGER) - """) - session.execute( - "INSERT INTO users VALUES (?, ?, ?, ?)", - 1, "Alice", "alice@example.com", 30 - ) - - # Execute built query - results = session.select(query, 25) - print(results) +.. literalinclude:: /examples/quickstart/quickstart_8.py + :language: python + :caption: ``query builder`` .. warning:: From cb30a24908539e59ae90df394e49a5e4b1112688 Mon Sep 17 00:00:00 2001 From: euri10 Date: Tue, 28 Oct 2025 18:23:31 +0100 Subject: [PATCH 03/20] missing files --- docs/examples/quickstart/quickstart_6.py | 16 ++++++++++++++ docs/examples/quickstart/quickstart_7.py | 21 ++++++++++++++++++ docs/examples/quickstart/quickstart_8.py | 27 ++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 docs/examples/quickstart/quickstart_6.py create mode 100644 docs/examples/quickstart/quickstart_7.py create mode 100644 docs/examples/quickstart/quickstart_8.py diff --git a/docs/examples/quickstart/quickstart_6.py b/docs/examples/quickstart/quickstart_6.py new file mode 100644 index 000000000..cd751ea52 --- /dev/null +++ b/docs/examples/quickstart/quickstart_6.py @@ -0,0 +1,16 @@ +from sqlspec import SQLSpec +from sqlspec.adapters.duckdb import DuckDBConfig +from sqlspec.adapters.sqlite import SqliteConfig + +db_manager = SQLSpec() + +# Register multiple databases +sqlite_db = db_manager.add_config(SqliteConfig(pool_config={"database": "app.db"})) +duckdb_db = db_manager.add_config(DuckDBConfig(pool_config={"database": "analytics.duckdb"})) + +# Use different databases +with db_manager.provide_session(sqlite_db) as sqlite_session: + users = sqlite_session.select("SELECT * FROM users") + +with db_manager.provide_session(duckdb_db) as duckdb_session: + analytics = duckdb_session.select("SELECT * FROM events") diff --git a/docs/examples/quickstart/quickstart_7.py b/docs/examples/quickstart/quickstart_7.py new file mode 100644 index 000000000..5f1a8c53a --- /dev/null +++ b/docs/examples/quickstart/quickstart_7.py @@ -0,0 +1,21 @@ +from sqlspec import SQLSpec +from sqlspec.adapters.sqlite import SqliteConfig + +db_manager = SQLSpec() +db = db_manager.add_config(SqliteConfig(pool_config={"database": "mydb.db"})) + +# Transaction committed on successful exit +with db_manager.provide_session(db) as session: + session.execute("INSERT INTO users (name) VALUES (?)", "Alice") + session.execute("INSERT INTO orders (user_name) VALUES (?)", "Alice") + # Both committed together + +# Transaction rolled back on exception +try: + with db_manager.provide_session(db) as session: + session.execute("INSERT INTO users (name) VALUES (?)", "Bob") + raise ValueError("Something went wrong!") +except ValueError: + pass # Transaction was rolled back automatically + + diff --git a/docs/examples/quickstart/quickstart_8.py b/docs/examples/quickstart/quickstart_8.py new file mode 100644 index 000000000..d171a12f1 --- /dev/null +++ b/docs/examples/quickstart/quickstart_8.py @@ -0,0 +1,27 @@ +from sqlspec import SQLSpec, sql +from sqlspec.adapters.sqlite import SqliteConfig + +# Build a query programmatically +query = ( + sql.select("id", "name", "email") + .from_("users") + .where("age > ?") + .order_by("name") +) + +db_manager = SQLSpec() +db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) + +with db_manager.provide_session(db) as session: + # Setup + session.execute(""" + CREATE TABLE users (id INTEGER, name TEXT, email TEXT, age INTEGER) + """) + session.execute( + "INSERT INTO users VALUES (?, ?, ?, ?)", + 1, "Alice", "alice@example.com", 30 + ) + + # Execute built query + results = session.select(query, 25) + print(results) From bcffbfd7b094285374da7bf54aafb930d7dca035 Mon Sep 17 00:00:00 2001 From: euri10 Date: Tue, 28 Oct 2025 21:14:34 +0100 Subject: [PATCH 04/20] lint --- docs/examples/quickstart/quickstart_2.py | 12 ++---------- docs/examples/quickstart/quickstart_3.py | 20 ++++++-------------- docs/examples/quickstart/quickstart_4.py | 15 ++++++--------- docs/examples/quickstart/quickstart_5.py | 10 +++++----- docs/examples/quickstart/quickstart_7.py | 5 ++--- docs/examples/quickstart/quickstart_8.py | 12 ++---------- 6 files changed, 23 insertions(+), 51 deletions(-) diff --git a/docs/examples/quickstart/quickstart_2.py b/docs/examples/quickstart/quickstart_2.py index b7e13bcd2..c2c8d19af 100644 --- a/docs/examples/quickstart/quickstart_2.py +++ b/docs/examples/quickstart/quickstart_2.py @@ -15,18 +15,12 @@ """) # Insert data - _ = session.execute( - "INSERT INTO users (name, email) VALUES (?, ?)", - "Alice", "alice@example.com" - ) + _ = session.execute("INSERT INTO users (name, email) VALUES (?, ?)", "Alice", "alice@example.com") # Insert multiple rows _ = session.execute_many( "INSERT INTO users (name, email) VALUES (?, ?)", - [ - ("Bob", "bob@example.com"), - ("Charlie", "charlie@example.com"), - ] + [("Bob", "bob@example.com"), ("Charlie", "charlie@example.com")], ) # Query all users @@ -40,5 +34,3 @@ # Query scalar value count = session.select_value("SELECT COUNT(*) FROM users") print(f"Total users: {count}") - - diff --git a/docs/examples/quickstart/quickstart_3.py b/docs/examples/quickstart/quickstart_3.py index af3925f26..e25c5569d 100644 --- a/docs/examples/quickstart/quickstart_3.py +++ b/docs/examples/quickstart/quickstart_3.py @@ -3,12 +3,15 @@ from sqlspec import SQLSpec from sqlspec.adapters.sqlite import SqliteConfig +__all__ = ("User", ) + class User(BaseModel): id: int name: str email: str + db_manager = SQLSpec() db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) @@ -17,26 +20,15 @@ class User(BaseModel): _ = session.execute(""" CREATE TABLE users (id INTEGER, name TEXT, email TEXT) """) - _ = session.execute( - "INSERT INTO users VALUES (?, ?, ?)", - 1, "Alice", "alice@example.com" - ) + _ = session.execute("INSERT INTO users VALUES (?, ?, ?)", 1, "Alice", "alice@example.com") # Type-safe query - returns User instance - user = session.select_one( - "SELECT * FROM users WHERE id = ?", - 1, - schema_type=User - ) + user = session.select_one("SELECT * FROM users WHERE id = ?", 1, schema_type=User) # Now you have type hints and autocomplete! print(f"User: {user.name} ({user.email})") # IDE knows these fields exist # Multiple results - all_users = session.select( - "SELECT * FROM users", - schema_type=User - ) + all_users = session.select("SELECT * FROM users", schema_type=User) for u in all_users: print(f"User: {u.name}") # Each item is a typed User - diff --git a/docs/examples/quickstart/quickstart_4.py b/docs/examples/quickstart/quickstart_4.py index 4678755df..affa43083 100644 --- a/docs/examples/quickstart/quickstart_4.py +++ b/docs/examples/quickstart/quickstart_4.py @@ -5,12 +5,15 @@ from sqlspec import SQLSpec from sqlspec.adapters.aiosqlite import AiosqliteConfig +__all__ = ("User", "main", ) + class User(BaseModel): id: int name: str email: str + async def main() -> None: db_manager = SQLSpec() db = db_manager.add_config(AiosqliteConfig(pool_config={"database": ":memory:"})) @@ -22,18 +25,12 @@ async def main() -> None: """) # Insert data - _ = await session.execute( - "INSERT INTO users VALUES (?, ?, ?)", - 1, "Alice", "alice@example.com" - ) + _ = await session.execute("INSERT INTO users VALUES (?, ?, ?)", 1, "Alice", "alice@example.com") # Type-safe async query - user = await session.select_one( - "SELECT * FROM users WHERE id = ?", - 1, - schema_type=User - ) + user = await session.select_one("SELECT * FROM users WHERE id = ?", 1, schema_type=User) print(f"User: {user.name}") + asyncio.run(main()) diff --git a/docs/examples/quickstart/quickstart_5.py b/docs/examples/quickstart/quickstart_5.py index f6265a3d3..eb7b39f2e 100644 --- a/docs/examples/quickstart/quickstart_5.py +++ b/docs/examples/quickstart/quickstart_5.py @@ -5,12 +5,15 @@ from sqlspec import SQLSpec from sqlspec.adapters.asyncpg import AsyncpgConfig +__all__ = ("User", "main", ) + class User(BaseModel): id: int name: str email: str + async def main() -> None: db_manager = SQLSpec() db = db_manager.add_config( @@ -27,11 +30,8 @@ async def main() -> None: async with db_manager.provide_session(db) as session: # PostgreSQL uses $1, $2 for parameters instead of ? - user = await session.select_one( - "SELECT * FROM users WHERE id = $1", - 1, - schema_type=User - ) + user = await session.select_one("SELECT * FROM users WHERE id = $1", 1, schema_type=User) print(f"User: {user.name}") + asyncio.run(main()) diff --git a/docs/examples/quickstart/quickstart_7.py b/docs/examples/quickstart/quickstart_7.py index 5f1a8c53a..ee940c69c 100644 --- a/docs/examples/quickstart/quickstart_7.py +++ b/docs/examples/quickstart/quickstart_7.py @@ -14,8 +14,7 @@ try: with db_manager.provide_session(db) as session: session.execute("INSERT INTO users (name) VALUES (?)", "Bob") - raise ValueError("Something went wrong!") + msg = "Something went wrong!" + raise ValueError(msg) except ValueError: pass # Transaction was rolled back automatically - - diff --git a/docs/examples/quickstart/quickstart_8.py b/docs/examples/quickstart/quickstart_8.py index d171a12f1..7801f97bb 100644 --- a/docs/examples/quickstart/quickstart_8.py +++ b/docs/examples/quickstart/quickstart_8.py @@ -2,12 +2,7 @@ from sqlspec.adapters.sqlite import SqliteConfig # Build a query programmatically -query = ( - sql.select("id", "name", "email") - .from_("users") - .where("age > ?") - .order_by("name") -) +query = sql.select("id", "name", "email").from_("users").where("age > ?").order_by("name") db_manager = SQLSpec() db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) @@ -17,10 +12,7 @@ session.execute(""" CREATE TABLE users (id INTEGER, name TEXT, email TEXT, age INTEGER) """) - session.execute( - "INSERT INTO users VALUES (?, ?, ?, ?)", - 1, "Alice", "alice@example.com", 30 - ) + session.execute("INSERT INTO users VALUES (?, ?, ?, ?)", 1, "Alice", "alice@example.com", 30) # Execute built query results = session.select(query, 25) From bb15676b90e070296d515921b1ce4a8aaff4207e Mon Sep 17 00:00:00 2001 From: euri10 Date: Tue, 28 Oct 2025 21:20:02 +0100 Subject: [PATCH 05/20] lint again... --- docs/examples/quickstart/quickstart_3.py | 2 +- docs/examples/quickstart/quickstart_4.py | 2 +- docs/examples/quickstart/quickstart_5.py | 2 +- docs/examples/quickstart/quickstart_7.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/examples/quickstart/quickstart_3.py b/docs/examples/quickstart/quickstart_3.py index e25c5569d..277c1f338 100644 --- a/docs/examples/quickstart/quickstart_3.py +++ b/docs/examples/quickstart/quickstart_3.py @@ -3,7 +3,7 @@ from sqlspec import SQLSpec from sqlspec.adapters.sqlite import SqliteConfig -__all__ = ("User", ) +__all__ = ("User",) class User(BaseModel): diff --git a/docs/examples/quickstart/quickstart_4.py b/docs/examples/quickstart/quickstart_4.py index affa43083..2bdd2732e 100644 --- a/docs/examples/quickstart/quickstart_4.py +++ b/docs/examples/quickstart/quickstart_4.py @@ -5,7 +5,7 @@ from sqlspec import SQLSpec from sqlspec.adapters.aiosqlite import AiosqliteConfig -__all__ = ("User", "main", ) +__all__ = ("User", "main") class User(BaseModel): diff --git a/docs/examples/quickstart/quickstart_5.py b/docs/examples/quickstart/quickstart_5.py index eb7b39f2e..bd1af45bd 100644 --- a/docs/examples/quickstart/quickstart_5.py +++ b/docs/examples/quickstart/quickstart_5.py @@ -5,7 +5,7 @@ from sqlspec import SQLSpec from sqlspec.adapters.asyncpg import AsyncpgConfig -__all__ = ("User", "main", ) +__all__ = ("User", "main") class User(BaseModel): diff --git a/docs/examples/quickstart/quickstart_7.py b/docs/examples/quickstart/quickstart_7.py index ee940c69c..c01c6b9b1 100644 --- a/docs/examples/quickstart/quickstart_7.py +++ b/docs/examples/quickstart/quickstart_7.py @@ -15,6 +15,6 @@ with db_manager.provide_session(db) as session: session.execute("INSERT INTO users (name) VALUES (?)", "Bob") msg = "Something went wrong!" - raise ValueError(msg) + raise ValueError(msg) # noqa: TRY301 except ValueError: pass # Transaction was rolled back automatically From 8d1689cb8550b732280c18e89704b302a37290a1 Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 07:02:49 +0100 Subject: [PATCH 06/20] add testing --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 85276af05..beea61a1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -319,7 +319,7 @@ markers = [ "pymysql: marks tests using pymysql", "psqlpy: marks tests using psqlpy", ] -testpaths = ["tests"] +testpaths = ["tests", "docs/examples/quickstart"] [tool.mypy] exclude = ["tmp/", ".tmp/", ".bugs/"] From ca44ee21aacb0b368a7c1e374d168dbf8ddced03 Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 07:11:17 +0100 Subject: [PATCH 07/20] make 1st quickstart snippet testable show just the snippet and not the test --- .../quickstart/{quickstart_1.py => test_quickstart_1.py} | 4 ++++ docs/getting_started/quickstart.rst | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) rename docs/examples/quickstart/{quickstart_1.py => test_quickstart_1.py} (82%) diff --git a/docs/examples/quickstart/quickstart_1.py b/docs/examples/quickstart/test_quickstart_1.py similarity index 82% rename from docs/examples/quickstart/quickstart_1.py rename to docs/examples/quickstart/test_quickstart_1.py index 6b9ec7fdf..138b4c2a3 100644 --- a/docs/examples/quickstart/quickstart_1.py +++ b/docs/examples/quickstart/test_quickstart_1.py @@ -9,3 +9,7 @@ with db_manager.provide_session(db) as session: result = session.execute("SELECT 'Hello, SQLSpec!' as message") print(result.get_first()) # {'message': 'Hello, SQLSpec!'} + + +def test_quickstart_1(): + assert result.get_first() == {"message": "Hello, SQLSpec!"} diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index cc41ffd7c..1794cc203 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -9,9 +9,10 @@ Your First Query Let's start with the simplest possible example - executing a query and getting results: -.. literalinclude:: /examples/quickstart/quickstart_1.py +.. literalinclude:: /examples/quickstart/test_quickstart_1.py :language: python :caption: ``first sqlspec query`` + :lines: 1-11 What's happening here? From 97666d60f804065b4f07bd815ec24515d1ec71c2 Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 07:29:01 +0100 Subject: [PATCH 08/20] lint --- docs/examples/quickstart/quickstart_2.py | 36 ------------------- docs/examples/quickstart/test_quickstart_1.py | 2 +- 2 files changed, 1 insertion(+), 37 deletions(-) delete mode 100644 docs/examples/quickstart/quickstart_2.py diff --git a/docs/examples/quickstart/quickstart_2.py b/docs/examples/quickstart/quickstart_2.py deleted file mode 100644 index c2c8d19af..000000000 --- a/docs/examples/quickstart/quickstart_2.py +++ /dev/null @@ -1,36 +0,0 @@ -from sqlspec import SQLSpec -from sqlspec.adapters.sqlite import SqliteConfig - -db_manager = SQLSpec() -db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) - -with db_manager.provide_session(db) as session: - # Create a table - _ = session.execute(""" - CREATE TABLE users ( - id INTEGER PRIMARY KEY, - name TEXT NOT NULL, - email TEXT UNIQUE NOT NULL - ) - """) - - # Insert data - _ = session.execute("INSERT INTO users (name, email) VALUES (?, ?)", "Alice", "alice@example.com") - - # Insert multiple rows - _ = session.execute_many( - "INSERT INTO users (name, email) VALUES (?, ?)", - [("Bob", "bob@example.com"), ("Charlie", "charlie@example.com")], - ) - - # Query all users - users = session.select("SELECT * FROM users") - print(f"All users: {users}") - - # Query single user - alice = session.select_one("SELECT * FROM users WHERE name = ?", "Alice") - print(f"Alice: {alice}") - - # Query scalar value - count = session.select_value("SELECT COUNT(*) FROM users") - print(f"Total users: {count}") diff --git a/docs/examples/quickstart/test_quickstart_1.py b/docs/examples/quickstart/test_quickstart_1.py index 138b4c2a3..f081a0a4f 100644 --- a/docs/examples/quickstart/test_quickstart_1.py +++ b/docs/examples/quickstart/test_quickstart_1.py @@ -11,5 +11,5 @@ print(result.get_first()) # {'message': 'Hello, SQLSpec!'} -def test_quickstart_1(): +def test_quickstart_1() -> None: assert result.get_first() == {"message": "Hello, SQLSpec!"} From 60376c8797e3836824ffe1412b890e5c2bdc07a8 Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 08:41:01 +0100 Subject: [PATCH 09/20] phase 2 --- docs/examples/quickstart/test_quickstart_2.py | 42 +++++++++++++++++++ docs/getting_started/quickstart.rst | 3 +- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 docs/examples/quickstart/test_quickstart_2.py diff --git a/docs/examples/quickstart/test_quickstart_2.py b/docs/examples/quickstart/test_quickstart_2.py new file mode 100644 index 000000000..3c6ba3a7f --- /dev/null +++ b/docs/examples/quickstart/test_quickstart_2.py @@ -0,0 +1,42 @@ +from sqlspec import SQLSpec +from sqlspec.adapters.sqlite import SqliteConfig + +db_manager = SQLSpec() +db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) + +with db_manager.provide_session(db) as session: + # Create a table + _ = session.execute(""" + CREATE TABLE users ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + email TEXT UNIQUE NOT NULL + ) + """) + + # Insert data + _ = session.execute("INSERT INTO users (name, email) VALUES (?, ?)", "Alice", "alice@example.com") + + # Insert multiple rows + _ = session.execute_many( + "INSERT INTO users (name, email) VALUES (?, ?)", + [("Bob", "bob@example.com"), ("Charlie", "charlie@example.com")], + ) + + # Query all users + users = session.select("SELECT * FROM users") + print(f"All users: {users}") + + # Query single user + alice = session.select_one("SELECT * FROM users WHERE name = ?", "Alice") + print(f"Alice: {alice}") + + # Query scalar value + count = session.select_value("SELECT COUNT(*) FROM users") + print(f"Total users: {count}") + + +def test_quickstart_2() -> None: + assert len(users) == 3 # noqa: PLR2004 + assert alice == {"id": 1, "name": "Alice", "email": "alice@example.com"} + assert count == 3 # noqa: PLR2004 diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index 1794cc203..fe7d6e4a6 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -26,9 +26,10 @@ Working with Real Data Let's create a table, insert some data, and query it: -.. literalinclude:: /examples/quickstart/quickstart_2.py +.. literalinclude:: /examples/quickstart/test_quickstart_2.py :language: python :caption: ``working with real data`` + :lines: 1-36 Session Methods Cheat Sheet ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 0a122d822ae206cffaea260090d4be96da16e392 Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 08:45:55 +0100 Subject: [PATCH 10/20] phase 3 --- .../quickstart/{quickstart_3.py => test_quickstart_3.py} | 6 ++++++ docs/getting_started/quickstart.rst | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) rename docs/examples/quickstart/{quickstart_3.py => test_quickstart_3.py} (84%) diff --git a/docs/examples/quickstart/quickstart_3.py b/docs/examples/quickstart/test_quickstart_3.py similarity index 84% rename from docs/examples/quickstart/quickstart_3.py rename to docs/examples/quickstart/test_quickstart_3.py index 277c1f338..25ffcb347 100644 --- a/docs/examples/quickstart/quickstart_3.py +++ b/docs/examples/quickstart/test_quickstart_3.py @@ -32,3 +32,9 @@ class User(BaseModel): all_users = session.select("SELECT * FROM users", schema_type=User) for u in all_users: print(f"User: {u.name}") # Each item is a typed User + + +def test_quickstart_3() -> None: + assert user == User(id=1, name="Alice", email="alice@example.com") + assert len(all_users) == 1 + assert isinstance(all_users[0], User) diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index fe7d6e4a6..afbacf6a9 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -49,9 +49,10 @@ Type-Safe Results The real power of SQLSpec comes from type-safe result mapping. Define your data models and SQLSpec automatically maps query results to them: -.. literalinclude:: /examples/quickstart/quickstart_3.py +.. literalinclude:: /examples/quickstart/test_quickstart_3.py :language: python :caption: ``type-safe results`` + :lines: 1-35 .. note:: From 3ce3d1c95b4c946a255d1a0969c36e77922281b4 Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 09:31:35 +0100 Subject: [PATCH 11/20] test async 4 and use dedent to properly show in docs --- .../{quickstart_4.py => test_quickstart_4.py} | 13 ++++++------- docs/getting_started/quickstart.rst | 4 +++- 2 files changed, 9 insertions(+), 8 deletions(-) rename docs/examples/quickstart/{quickstart_4.py => test_quickstart_4.py} (78%) diff --git a/docs/examples/quickstart/quickstart_4.py b/docs/examples/quickstart/test_quickstart_4.py similarity index 78% rename from docs/examples/quickstart/quickstart_4.py rename to docs/examples/quickstart/test_quickstart_4.py index 2bdd2732e..3486fa6b0 100644 --- a/docs/examples/quickstart/quickstart_4.py +++ b/docs/examples/quickstart/test_quickstart_4.py @@ -1,12 +1,8 @@ -import asyncio - from pydantic import BaseModel from sqlspec import SQLSpec from sqlspec.adapters.aiosqlite import AiosqliteConfig -__all__ = ("User", "main") - class User(BaseModel): id: int @@ -14,7 +10,8 @@ class User(BaseModel): email: str -async def main() -> None: + +async def test_quickstart_4() -> None: db_manager = SQLSpec() db = db_manager.add_config(AiosqliteConfig(pool_config={"database": ":memory:"})) @@ -32,5 +29,7 @@ async def main() -> None: print(f"User: {user.name}") - -asyncio.run(main()) + assert user == User(id=1, name="Alice", email="alice@example.com") + assert isinstance(user, User) + assert user.name == "Alice" + assert user.email == "alice@example.com" diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index afbacf6a9..311676cba 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -63,9 +63,11 @@ Async Support SQLSpec supports async/await for non-blocking database operations. Here's the same example with async: -.. literalinclude:: /examples/quickstart/quickstart_4.py +.. literalinclude:: /examples/quickstart/test_quickstart_4.py :language: python :caption: ``async support`` + :lines: 15-30 + :dedent: 2 The API is identical - just add ``await`` and use async config/drivers! From fdd638632e8bed5e4f93eb17453889af09377c6d Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 09:36:49 +0100 Subject: [PATCH 12/20] phase 5 --- .../quickstart/{quickstart_5.py => test_quickstart_5.py} | 8 +------- docs/getting_started/quickstart.rst | 4 +++- 2 files changed, 4 insertions(+), 8 deletions(-) rename docs/examples/quickstart/{quickstart_5.py => test_quickstart_5.py} (89%) diff --git a/docs/examples/quickstart/quickstart_5.py b/docs/examples/quickstart/test_quickstart_5.py similarity index 89% rename from docs/examples/quickstart/quickstart_5.py rename to docs/examples/quickstart/test_quickstart_5.py index bd1af45bd..752138d06 100644 --- a/docs/examples/quickstart/quickstart_5.py +++ b/docs/examples/quickstart/test_quickstart_5.py @@ -1,12 +1,8 @@ -import asyncio - from pydantic import BaseModel from sqlspec import SQLSpec from sqlspec.adapters.asyncpg import AsyncpgConfig -__all__ = ("User", "main") - class User(BaseModel): id: int @@ -14,7 +10,7 @@ class User(BaseModel): email: str -async def main() -> None: +async def test_quickstart_5() -> None: db_manager = SQLSpec() db = db_manager.add_config( AsyncpgConfig( @@ -33,5 +29,3 @@ async def main() -> None: user = await session.select_one("SELECT * FROM users WHERE id = $1", 1, schema_type=User) print(f"User: {user.name}") - -asyncio.run(main()) diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index 311676cba..0896edc9b 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -76,9 +76,11 @@ Switching Databases One of SQLSpec's strengths is the consistent API across databases. Here's the same code using PostgreSQL: -.. literalinclude:: /examples/quickstart/quickstart_5.py +.. literalinclude:: /examples/quickstart/test_quickstart_5.py :language: python :caption: ``switching databases`` + :lines: 14-30 + :dedent: 2 .. tip:: From 5ec620c16464ce3bbda963ae706e1843a6028cfc Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 09:38:45 +0100 Subject: [PATCH 13/20] lint --- docs/examples/quickstart/test_quickstart_4.py | 1 - docs/examples/quickstart/test_quickstart_5.py | 1 - 2 files changed, 2 deletions(-) diff --git a/docs/examples/quickstart/test_quickstart_4.py b/docs/examples/quickstart/test_quickstart_4.py index 3486fa6b0..3ce866adb 100644 --- a/docs/examples/quickstart/test_quickstart_4.py +++ b/docs/examples/quickstart/test_quickstart_4.py @@ -10,7 +10,6 @@ class User(BaseModel): email: str - async def test_quickstart_4() -> None: db_manager = SQLSpec() db = db_manager.add_config(AiosqliteConfig(pool_config={"database": ":memory:"})) diff --git a/docs/examples/quickstart/test_quickstart_5.py b/docs/examples/quickstart/test_quickstart_5.py index 752138d06..7f8fd02c2 100644 --- a/docs/examples/quickstart/test_quickstart_5.py +++ b/docs/examples/quickstart/test_quickstart_5.py @@ -28,4 +28,3 @@ async def test_quickstart_5() -> None: # PostgreSQL uses $1, $2 for parameters instead of ? user = await session.select_one("SELECT * FROM users WHERE id = $1", 1, schema_type=User) print(f"User: {user.name}") - From e0d5d952c08f51054ec08adbff42cbcbe2b3ad11 Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 10:00:17 +0100 Subject: [PATCH 14/20] phase 6 --- .../quickstart/{quickstart_6.py => test_quickstart_6.py} | 9 +++++++-- docs/getting_started/quickstart.rst | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) rename docs/examples/quickstart/{quickstart_6.py => test_quickstart_6.py} (71%) diff --git a/docs/examples/quickstart/quickstart_6.py b/docs/examples/quickstart/test_quickstart_6.py similarity index 71% rename from docs/examples/quickstart/quickstart_6.py rename to docs/examples/quickstart/test_quickstart_6.py index cd751ea52..28b9ec5c6 100644 --- a/docs/examples/quickstart/quickstart_6.py +++ b/docs/examples/quickstart/test_quickstart_6.py @@ -10,7 +10,12 @@ # Use different databases with db_manager.provide_session(sqlite_db) as sqlite_session: - users = sqlite_session.select("SELECT * FROM users") + users = sqlite_session.select("SELECT 1") with db_manager.provide_session(duckdb_db) as duckdb_session: - analytics = duckdb_session.select("SELECT * FROM events") + analytics = duckdb_session.select("SELECT 1") + + +def test_quickstart_6() -> None: + assert isinstance(users, list) + assert isinstance(analytics, list) diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index 0896edc9b..0772a3ee1 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -96,9 +96,10 @@ Multiple Databases Need to work with multiple databases? Register multiple configs: -.. literalinclude:: /examples/quickstart/quickstart_6.py +.. literalinclude:: /examples/quickstart/test_quickstart_6.py :language: python :caption: ``multiple databases`` + :lines: 1-16 Transaction Support From 91119ea89ab4630bd9b0cf4cbfb42bed59e1b81a Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 10:14:37 +0100 Subject: [PATCH 15/20] phase 7 --- docs/examples/quickstart/quickstart_7.py | 20 --------- docs/examples/quickstart/test_quickstart_7.py | 43 +++++++++++++++++++ docs/getting_started/quickstart.rst | 3 +- 3 files changed, 45 insertions(+), 21 deletions(-) delete mode 100644 docs/examples/quickstart/quickstart_7.py create mode 100644 docs/examples/quickstart/test_quickstart_7.py diff --git a/docs/examples/quickstart/quickstart_7.py b/docs/examples/quickstart/quickstart_7.py deleted file mode 100644 index c01c6b9b1..000000000 --- a/docs/examples/quickstart/quickstart_7.py +++ /dev/null @@ -1,20 +0,0 @@ -from sqlspec import SQLSpec -from sqlspec.adapters.sqlite import SqliteConfig - -db_manager = SQLSpec() -db = db_manager.add_config(SqliteConfig(pool_config={"database": "mydb.db"})) - -# Transaction committed on successful exit -with db_manager.provide_session(db) as session: - session.execute("INSERT INTO users (name) VALUES (?)", "Alice") - session.execute("INSERT INTO orders (user_name) VALUES (?)", "Alice") - # Both committed together - -# Transaction rolled back on exception -try: - with db_manager.provide_session(db) as session: - session.execute("INSERT INTO users (name) VALUES (?)", "Bob") - msg = "Something went wrong!" - raise ValueError(msg) # noqa: TRY301 -except ValueError: - pass # Transaction was rolled back automatically diff --git a/docs/examples/quickstart/test_quickstart_7.py b/docs/examples/quickstart/test_quickstart_7.py new file mode 100644 index 000000000..d41ea3fc3 --- /dev/null +++ b/docs/examples/quickstart/test_quickstart_7.py @@ -0,0 +1,43 @@ +from sqlspec import SQLSpec +from sqlspec.adapters.sqlite import SqliteConfig + +db_manager = SQLSpec() +db = db_manager.add_config(SqliteConfig(pool_config={"database": "mydb.db"})) + +# Transaction committed on successful exit +with db_manager.provide_session(db) as session: + _ = session.execute(""" + CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL + ) + """) + _ = session.execute(""" + CREATE TABLE IF NOT EXISTS orders ( + id INTEGER PRIMARY KEY, + user_name TEXT NOT NULL + ) + """) + _ = session.execute("INSERT INTO users (name) VALUES (?)", "Alice") + _ = session.execute("INSERT INTO orders (user_name) VALUES (?)", "Alice") + # Both committed together + +# Transaction rolled back on exception +try: + with db_manager.provide_session(db) as session: + _ = session.execute("INSERT INTO users (name) VALUES (?)", "Bob") + msg = "Something went wrong!" + raise ValueError(msg) # noqa: TRY301 +except ValueError: + pass # Transaction was rolled back automatically + + +def test_quickstart_7() -> None: + # Verify that Alice was inserted + with db_manager.provide_session(db) as session: + alice = session.select_one("SELECT * FROM users WHERE name = ?", "Alice") + bob = session.select_one("SELECT * FROM users WHERE name = ?", "Bob") + + assert alice is not None + assert alice["name"] == "Alice" + assert bob is None # Bob's insertion was rolled back diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index 0772a3ee1..517094a0c 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -107,9 +107,10 @@ Transaction Support SQLSpec automatically manages transactions. By default, each session is a transaction: -.. literalinclude:: /examples/quickstart/quickstart_7.py +.. literalinclude:: /examples/quickstart/test_quickstart_7.py :language: python :caption: ``transaction support`` + :lines: 1-32 .. note:: From f55b725383c8dc31a4a9e7b2bc591116af9cb989 Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 10:29:49 +0100 Subject: [PATCH 16/20] phase 8 --- .../quickstart/{quickstart_8.py => test_quickstart_8.py} | 8 ++++++-- docs/getting_started/quickstart.rst | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) rename docs/examples/quickstart/{quickstart_8.py => test_quickstart_8.py} (66%) diff --git a/docs/examples/quickstart/quickstart_8.py b/docs/examples/quickstart/test_quickstart_8.py similarity index 66% rename from docs/examples/quickstart/quickstart_8.py rename to docs/examples/quickstart/test_quickstart_8.py index 7801f97bb..ed2fa9da2 100644 --- a/docs/examples/quickstart/quickstart_8.py +++ b/docs/examples/quickstart/test_quickstart_8.py @@ -9,11 +9,15 @@ with db_manager.provide_session(db) as session: # Setup - session.execute(""" + _ = session.execute(""" CREATE TABLE users (id INTEGER, name TEXT, email TEXT, age INTEGER) """) - session.execute("INSERT INTO users VALUES (?, ?, ?, ?)", 1, "Alice", "alice@example.com", 30) + _ = session.execute("INSERT INTO users VALUES (?, ?, ?, ?)", 1, "Alice", "alice@example.com", 30) # Execute built query results = session.select(query, 25) print(results) + +def test_quickstart_8() -> None: + assert len(results) == 1 + assert results[0] == {"id": 1, "name": "Alice", "email": "alice@example.com"} diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index 517094a0c..659061346 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -121,9 +121,10 @@ Query Builder (Experimental) For those who prefer programmatic query construction, SQLSpec includes an experimental query builder: -.. literalinclude:: /examples/quickstart/quickstart_8.py +.. literalinclude:: /examples/quickstart/test_quickstart_8.py :language: python :caption: ``query builder`` + :lines: 1-19 .. warning:: From 7616d7aef07d200a1ccd3fe089a475aa4f3b485d Mon Sep 17 00:00:00 2001 From: euri10 Date: Wed, 29 Oct 2025 10:35:55 +0100 Subject: [PATCH 17/20] lint --- docs/examples/quickstart/test_quickstart_8.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/examples/quickstart/test_quickstart_8.py b/docs/examples/quickstart/test_quickstart_8.py index ed2fa9da2..f77d2d06e 100644 --- a/docs/examples/quickstart/test_quickstart_8.py +++ b/docs/examples/quickstart/test_quickstart_8.py @@ -18,6 +18,7 @@ results = session.select(query, 25) print(results) + def test_quickstart_8() -> None: assert len(results) == 1 assert results[0] == {"id": 1, "name": "Alice", "email": "alice@example.com"} From 227f8de4bcf3c48fa71974255fe98083c7923fa3 Mon Sep 17 00:00:00 2001 From: Cody Fincher Date: Mon, 10 Nov 2025 00:42:57 +0000 Subject: [PATCH 18/20] refactor(tests): restructure quickstart test functions for clarity and consistency --- docs/examples/quickstart/test_quickstart_1.py | 16 ++--- docs/examples/quickstart/test_quickstart_2.py | 62 +++++++++---------- docs/examples/quickstart/test_quickstart_3.py | 35 +++++------ docs/examples/quickstart/test_quickstart_6.py | 20 +++--- docs/examples/quickstart/test_quickstart_7.py | 58 ++++++++--------- docs/examples/quickstart/test_quickstart_8.py | 28 ++++----- docs/getting_started/quickstart.rst | 18 ++++-- 7 files changed, 122 insertions(+), 115 deletions(-) diff --git a/docs/examples/quickstart/test_quickstart_1.py b/docs/examples/quickstart/test_quickstart_1.py index f081a0a4f..4765164b0 100644 --- a/docs/examples/quickstart/test_quickstart_1.py +++ b/docs/examples/quickstart/test_quickstart_1.py @@ -1,15 +1,15 @@ from sqlspec import SQLSpec from sqlspec.adapters.sqlite import SqliteConfig -# Create SQLSpec instance and configure database -db_manager = SQLSpec() -db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) -# Execute a query -with db_manager.provide_session(db) as session: - result = session.execute("SELECT 'Hello, SQLSpec!' as message") - print(result.get_first()) # {'message': 'Hello, SQLSpec!'} +def test_quickstart_1() -> None: + # Create SQLSpec instance and configure database + db_manager = SQLSpec() + db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) + # Execute a query + with db_manager.provide_session(db) as session: + result = session.execute("SELECT 'Hello, SQLSpec!' as message") + print(result.get_first()) # {'message': 'Hello, SQLSpec!'} -def test_quickstart_1() -> None: assert result.get_first() == {"message": "Hello, SQLSpec!"} diff --git a/docs/examples/quickstart/test_quickstart_2.py b/docs/examples/quickstart/test_quickstart_2.py index 3c6ba3a7f..a5aebf3ce 100644 --- a/docs/examples/quickstart/test_quickstart_2.py +++ b/docs/examples/quickstart/test_quickstart_2.py @@ -1,42 +1,42 @@ from sqlspec import SQLSpec from sqlspec.adapters.sqlite import SqliteConfig -db_manager = SQLSpec() -db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) - -with db_manager.provide_session(db) as session: - # Create a table - _ = session.execute(""" - CREATE TABLE users ( - id INTEGER PRIMARY KEY, - name TEXT NOT NULL, - email TEXT UNIQUE NOT NULL - ) - """) - - # Insert data - _ = session.execute("INSERT INTO users (name, email) VALUES (?, ?)", "Alice", "alice@example.com") - - # Insert multiple rows - _ = session.execute_many( - "INSERT INTO users (name, email) VALUES (?, ?)", - [("Bob", "bob@example.com"), ("Charlie", "charlie@example.com")], - ) - # Query all users - users = session.select("SELECT * FROM users") - print(f"All users: {users}") +def test_quickstart_2() -> None: + db_manager = SQLSpec() + db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) + + with db_manager.provide_session(db) as session: + # Create a table + _ = session.execute(""" + CREATE TABLE users ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + email TEXT UNIQUE NOT NULL + ) + """) + + # Insert data + _ = session.execute("INSERT INTO users (name, email) VALUES (?, ?)", "Alice", "alice@example.com") + + # Insert multiple rows + _ = session.execute_many( + "INSERT INTO users (name, email) VALUES (?, ?)", + [("Bob", "bob@example.com"), ("Charlie", "charlie@example.com")], + ) - # Query single user - alice = session.select_one("SELECT * FROM users WHERE name = ?", "Alice") - print(f"Alice: {alice}") + # Query all users + users = session.select("SELECT * FROM users") + print(f"All users: {users}") - # Query scalar value - count = session.select_value("SELECT COUNT(*) FROM users") - print(f"Total users: {count}") + # Query single user + alice = session.select_one("SELECT * FROM users WHERE name = ?", "Alice") + print(f"Alice: {alice}") + # Query scalar value + count = session.select_value("SELECT COUNT(*) FROM users") + print(f"Total users: {count}") -def test_quickstart_2() -> None: assert len(users) == 3 # noqa: PLR2004 assert alice == {"id": 1, "name": "Alice", "email": "alice@example.com"} assert count == 3 # noqa: PLR2004 diff --git a/docs/examples/quickstart/test_quickstart_3.py b/docs/examples/quickstart/test_quickstart_3.py index 25ffcb347..98f7fe5fd 100644 --- a/docs/examples/quickstart/test_quickstart_3.py +++ b/docs/examples/quickstart/test_quickstart_3.py @@ -12,29 +12,28 @@ class User(BaseModel): email: str -db_manager = SQLSpec() -db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) - -with db_manager.provide_session(db) as session: - # Setup - _ = session.execute(""" - CREATE TABLE users (id INTEGER, name TEXT, email TEXT) - """) - _ = session.execute("INSERT INTO users VALUES (?, ?, ?)", 1, "Alice", "alice@example.com") +def test_quickstart_3() -> None: + db_manager = SQLSpec() + db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) - # Type-safe query - returns User instance - user = session.select_one("SELECT * FROM users WHERE id = ?", 1, schema_type=User) + with db_manager.provide_session(db) as session: + # Setup + _ = session.execute(""" + CREATE TABLE users (id INTEGER, name TEXT, email TEXT) + """) + _ = session.execute("INSERT INTO users VALUES (?, ?, ?)", 1, "Alice", "alice@example.com") - # Now you have type hints and autocomplete! - print(f"User: {user.name} ({user.email})") # IDE knows these fields exist + # Type-safe query - returns User instance + user = session.select_one("SELECT * FROM users WHERE id = ?", 1, schema_type=User) - # Multiple results - all_users = session.select("SELECT * FROM users", schema_type=User) - for u in all_users: - print(f"User: {u.name}") # Each item is a typed User + # Now you have type hints and autocomplete! + print(f"User: {user.name} ({user.email})") # IDE knows these fields exist + # Multiple results + all_users = session.select("SELECT * FROM users", schema_type=User) + for u in all_users: + print(f"User: {u.name}") # Each item is a typed User -def test_quickstart_3() -> None: assert user == User(id=1, name="Alice", email="alice@example.com") assert len(all_users) == 1 assert isinstance(all_users[0], User) diff --git a/docs/examples/quickstart/test_quickstart_6.py b/docs/examples/quickstart/test_quickstart_6.py index 28b9ec5c6..eccbbb52f 100644 --- a/docs/examples/quickstart/test_quickstart_6.py +++ b/docs/examples/quickstart/test_quickstart_6.py @@ -2,20 +2,20 @@ from sqlspec.adapters.duckdb import DuckDBConfig from sqlspec.adapters.sqlite import SqliteConfig -db_manager = SQLSpec() -# Register multiple databases -sqlite_db = db_manager.add_config(SqliteConfig(pool_config={"database": "app.db"})) -duckdb_db = db_manager.add_config(DuckDBConfig(pool_config={"database": "analytics.duckdb"})) +def test_quickstart_6() -> None: + db_manager = SQLSpec() -# Use different databases -with db_manager.provide_session(sqlite_db) as sqlite_session: - users = sqlite_session.select("SELECT 1") + # Register multiple databases + sqlite_db = db_manager.add_config(SqliteConfig(pool_config={"database": "app.db"})) + duckdb_db = db_manager.add_config(DuckDBConfig(pool_config={"database": "analytics.duckdb"})) -with db_manager.provide_session(duckdb_db) as duckdb_session: - analytics = duckdb_session.select("SELECT 1") + # Use different databases + with db_manager.provide_session(sqlite_db) as sqlite_session: + users = sqlite_session.select("SELECT 1") + with db_manager.provide_session(duckdb_db) as duckdb_session: + analytics = duckdb_session.select("SELECT 1") -def test_quickstart_6() -> None: assert isinstance(users, list) assert isinstance(analytics, list) diff --git a/docs/examples/quickstart/test_quickstart_7.py b/docs/examples/quickstart/test_quickstart_7.py index d41ea3fc3..567684bed 100644 --- a/docs/examples/quickstart/test_quickstart_7.py +++ b/docs/examples/quickstart/test_quickstart_7.py @@ -1,42 +1,44 @@ from sqlspec import SQLSpec from sqlspec.adapters.sqlite import SqliteConfig -db_manager = SQLSpec() -db = db_manager.add_config(SqliteConfig(pool_config={"database": "mydb.db"})) -# Transaction committed on successful exit -with db_manager.provide_session(db) as session: - _ = session.execute(""" - CREATE TABLE IF NOT EXISTS users ( - id INTEGER PRIMARY KEY, - name TEXT NOT NULL - ) - """) - _ = session.execute(""" - CREATE TABLE IF NOT EXISTS orders ( - id INTEGER PRIMARY KEY, - user_name TEXT NOT NULL - ) - """) - _ = session.execute("INSERT INTO users (name) VALUES (?)", "Alice") - _ = session.execute("INSERT INTO orders (user_name) VALUES (?)", "Alice") - # Both committed together +def test_quickstart_7() -> None: + db_manager = SQLSpec() + db = db_manager.add_config(SqliteConfig(pool_config={"database": "mydb.db"})) -# Transaction rolled back on exception -try: + # Transaction committed on successful exit with db_manager.provide_session(db) as session: - _ = session.execute("INSERT INTO users (name) VALUES (?)", "Bob") - msg = "Something went wrong!" - raise ValueError(msg) # noqa: TRY301 -except ValueError: - pass # Transaction was rolled back automatically + _ = session.execute(""" + CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL + ) + """) + _ = session.execute(""" + CREATE TABLE IF NOT EXISTS orders ( + id INTEGER PRIMARY KEY, + user_name TEXT NOT NULL + ) + """) + _ = session.execute("DELETE FROM users") + _ = session.execute("DELETE FROM orders") + _ = session.execute("INSERT INTO users (name) VALUES (?)", "Alice") + _ = session.execute("INSERT INTO orders (user_name) VALUES (?)", "Alice") + # Both committed together + # Transaction rolled back when not committed + try: + with db_manager.provide_session(db) as session: + _ = session.execute("INSERT INTO users (name) VALUES (?)", "Bob") + msg = "Something went wrong!" + raise ValueError(msg) # noqa: TRY301 + except ValueError: + pass # Transaction was rolled back automatically -def test_quickstart_7() -> None: # Verify that Alice was inserted with db_manager.provide_session(db) as session: alice = session.select_one("SELECT * FROM users WHERE name = ?", "Alice") - bob = session.select_one("SELECT * FROM users WHERE name = ?", "Bob") + bob = session.select_one_or_none("SELECT * FROM users WHERE name = ?", "Bob") assert alice is not None assert alice["name"] == "Alice" diff --git a/docs/examples/quickstart/test_quickstart_8.py b/docs/examples/quickstart/test_quickstart_8.py index f77d2d06e..522941b43 100644 --- a/docs/examples/quickstart/test_quickstart_8.py +++ b/docs/examples/quickstart/test_quickstart_8.py @@ -1,24 +1,24 @@ from sqlspec import SQLSpec, sql from sqlspec.adapters.sqlite import SqliteConfig -# Build a query programmatically -query = sql.select("id", "name", "email").from_("users").where("age > ?").order_by("name") -db_manager = SQLSpec() -db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) +def test_quickstart_8() -> None: + # Build a query programmatically + query = sql.select("id", "name", "email").from_("users").where("age > ?").order_by("name") -with db_manager.provide_session(db) as session: - # Setup - _ = session.execute(""" - CREATE TABLE users (id INTEGER, name TEXT, email TEXT, age INTEGER) - """) - _ = session.execute("INSERT INTO users VALUES (?, ?, ?, ?)", 1, "Alice", "alice@example.com", 30) + db_manager = SQLSpec() + db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) - # Execute built query - results = session.select(query, 25) - print(results) + with db_manager.provide_session(db) as session: + # Setup + _ = session.execute(""" + CREATE TABLE users (id INTEGER, name TEXT, email TEXT, age INTEGER) + """) + _ = session.execute("INSERT INTO users VALUES (?, ?, ?, ?)", 1, "Alice", "alice@example.com", 30) + # Execute built query + results = session.select(query, 25) + print(results) -def test_quickstart_8() -> None: assert len(results) == 1 assert results[0] == {"id": 1, "name": "Alice", "email": "alice@example.com"} diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index 659061346..261bd9def 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -12,7 +12,8 @@ Let's start with the simplest possible example - executing a query and getting r .. literalinclude:: /examples/quickstart/test_quickstart_1.py :language: python :caption: ``first sqlspec query`` - :lines: 1-11 + :lines: 6-13 + :dedent: 4 What's happening here? @@ -29,7 +30,8 @@ Let's create a table, insert some data, and query it: .. literalinclude:: /examples/quickstart/test_quickstart_2.py :language: python :caption: ``working with real data`` - :lines: 1-36 + :lines: 6-38 + :dedent: 4 Session Methods Cheat Sheet ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -52,7 +54,8 @@ The real power of SQLSpec comes from type-safe result mapping. Define your data .. literalinclude:: /examples/quickstart/test_quickstart_3.py :language: python :caption: ``type-safe results`` - :lines: 1-35 + :lines: 15-34 + :dedent: 4 .. note:: @@ -99,7 +102,8 @@ Need to work with multiple databases? Register multiple configs: .. literalinclude:: /examples/quickstart/test_quickstart_6.py :language: python :caption: ``multiple databases`` - :lines: 1-16 + :lines: 7-18 + :dedent: 4 Transaction Support @@ -110,7 +114,8 @@ SQLSpec automatically manages transactions. By default, each session is a transa .. literalinclude:: /examples/quickstart/test_quickstart_7.py :language: python :caption: ``transaction support`` - :lines: 1-32 + :lines: 9-39 + :dedent: 4 .. note:: @@ -124,7 +129,8 @@ For those who prefer programmatic query construction, SQLSpec includes an experi .. literalinclude:: /examples/quickstart/test_quickstart_8.py :language: python :caption: ``query builder`` - :lines: 1-19 + :lines: 6-21 + :dedent: 4 .. warning:: From 7be2a234ba6528b4c4220714832b42d3bb177d73 Mon Sep 17 00:00:00 2001 From: Cody Fincher Date: Mon, 10 Nov 2025 00:51:45 +0000 Subject: [PATCH 19/20] feat(docs): add quickstart examples and align documentation with code --- .../{test_quickstart_1.py => quickstart_1.py} | 0 .../{test_quickstart_2.py => quickstart_2.py} | 0 .../{test_quickstart_3.py => quickstart_3.py} | 0 .../{test_quickstart_4.py => quickstart_4.py} | 0 .../{test_quickstart_5.py => quickstart_5.py} | 0 .../{test_quickstart_6.py => quickstart_6.py} | 0 .../{test_quickstart_7.py => quickstart_7.py} | 29 +++++++++---------- .../{test_quickstart_8.py => quickstart_8.py} | 0 docs/getting_started/quickstart.rst | 25 +++++++++------- specs/guides/docs_examples_alignment.md | 28 ++++++++++++++++++ 10 files changed, 56 insertions(+), 26 deletions(-) rename docs/examples/quickstart/{test_quickstart_1.py => quickstart_1.py} (100%) rename docs/examples/quickstart/{test_quickstart_2.py => quickstart_2.py} (100%) rename docs/examples/quickstart/{test_quickstart_3.py => quickstart_3.py} (100%) rename docs/examples/quickstart/{test_quickstart_4.py => quickstart_4.py} (100%) rename docs/examples/quickstart/{test_quickstart_5.py => quickstart_5.py} (100%) rename docs/examples/quickstart/{test_quickstart_6.py => quickstart_6.py} (100%) rename docs/examples/quickstart/{test_quickstart_7.py => quickstart_7.py} (61%) rename docs/examples/quickstart/{test_quickstart_8.py => quickstart_8.py} (100%) create mode 100644 specs/guides/docs_examples_alignment.md diff --git a/docs/examples/quickstart/test_quickstart_1.py b/docs/examples/quickstart/quickstart_1.py similarity index 100% rename from docs/examples/quickstart/test_quickstart_1.py rename to docs/examples/quickstart/quickstart_1.py diff --git a/docs/examples/quickstart/test_quickstart_2.py b/docs/examples/quickstart/quickstart_2.py similarity index 100% rename from docs/examples/quickstart/test_quickstart_2.py rename to docs/examples/quickstart/quickstart_2.py diff --git a/docs/examples/quickstart/test_quickstart_3.py b/docs/examples/quickstart/quickstart_3.py similarity index 100% rename from docs/examples/quickstart/test_quickstart_3.py rename to docs/examples/quickstart/quickstart_3.py diff --git a/docs/examples/quickstart/test_quickstart_4.py b/docs/examples/quickstart/quickstart_4.py similarity index 100% rename from docs/examples/quickstart/test_quickstart_4.py rename to docs/examples/quickstart/quickstart_4.py diff --git a/docs/examples/quickstart/test_quickstart_5.py b/docs/examples/quickstart/quickstart_5.py similarity index 100% rename from docs/examples/quickstart/test_quickstart_5.py rename to docs/examples/quickstart/quickstart_5.py diff --git a/docs/examples/quickstart/test_quickstart_6.py b/docs/examples/quickstart/quickstart_6.py similarity index 100% rename from docs/examples/quickstart/test_quickstart_6.py rename to docs/examples/quickstart/quickstart_6.py diff --git a/docs/examples/quickstart/test_quickstart_7.py b/docs/examples/quickstart/quickstart_7.py similarity index 61% rename from docs/examples/quickstart/test_quickstart_7.py rename to docs/examples/quickstart/quickstart_7.py index 567684bed..090180fa2 100644 --- a/docs/examples/quickstart/test_quickstart_7.py +++ b/docs/examples/quickstart/quickstart_7.py @@ -4,10 +4,12 @@ def test_quickstart_7() -> None: db_manager = SQLSpec() - db = db_manager.add_config(SqliteConfig(pool_config={"database": "mydb.db"})) + + db = db_manager.add_config(SqliteConfig(pool_config={"database": ":memory:"})) # Transaction committed on successful exit with db_manager.provide_session(db) as session: + session.begin() _ = session.execute(""" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, @@ -17,29 +19,24 @@ def test_quickstart_7() -> None: _ = session.execute(""" CREATE TABLE IF NOT EXISTS orders ( id INTEGER PRIMARY KEY, - user_name TEXT NOT NULL - ) - """) + user_name TEXT NOT NULL + ) + """) _ = session.execute("DELETE FROM users") _ = session.execute("DELETE FROM orders") _ = session.execute("INSERT INTO users (name) VALUES (?)", "Alice") _ = session.execute("INSERT INTO orders (user_name) VALUES (?)", "Alice") - # Both committed together + session.commit() - # Transaction rolled back when not committed - try: - with db_manager.provide_session(db) as session: - _ = session.execute("INSERT INTO users (name) VALUES (?)", "Bob") - msg = "Something went wrong!" - raise ValueError(msg) # noqa: TRY301 - except ValueError: - pass # Transaction was rolled back automatically + with db_manager.provide_session(db) as session: + session.begin() + _ = session.execute("INSERT INTO users (name) VALUES (?)", "Bob") + session.rollback() - # Verify that Alice was inserted with db_manager.provide_session(db) as session: - alice = session.select_one("SELECT * FROM users WHERE name = ?", "Alice") + alice = session.select_one_or_none("SELECT * FROM users WHERE name = ?", "Alice") bob = session.select_one_or_none("SELECT * FROM users WHERE name = ?", "Bob") assert alice is not None assert alice["name"] == "Alice" - assert bob is None # Bob's insertion was rolled back + assert bob is None diff --git a/docs/examples/quickstart/test_quickstart_8.py b/docs/examples/quickstart/quickstart_8.py similarity index 100% rename from docs/examples/quickstart/test_quickstart_8.py rename to docs/examples/quickstart/quickstart_8.py diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index 261bd9def..f43aa741a 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -9,7 +9,7 @@ Your First Query Let's start with the simplest possible example - executing a query and getting results: -.. literalinclude:: /examples/quickstart/test_quickstart_1.py +.. literalinclude:: /examples/quickstart/quickstart_1.py :language: python :caption: ``first sqlspec query`` :lines: 6-13 @@ -27,7 +27,7 @@ Working with Real Data Let's create a table, insert some data, and query it: -.. literalinclude:: /examples/quickstart/test_quickstart_2.py +.. literalinclude:: /examples/quickstart/quickstart_2.py :language: python :caption: ``working with real data`` :lines: 6-38 @@ -51,7 +51,7 @@ Type-Safe Results The real power of SQLSpec comes from type-safe result mapping. Define your data models and SQLSpec automatically maps query results to them: -.. literalinclude:: /examples/quickstart/test_quickstart_3.py +.. literalinclude:: /examples/quickstart/quickstart_3.py :language: python :caption: ``type-safe results`` :lines: 15-34 @@ -66,7 +66,7 @@ Async Support SQLSpec supports async/await for non-blocking database operations. Here's the same example with async: -.. literalinclude:: /examples/quickstart/test_quickstart_4.py +.. literalinclude:: /examples/quickstart/quickstart_4.py :language: python :caption: ``async support`` :lines: 15-30 @@ -79,7 +79,7 @@ Switching Databases One of SQLSpec's strengths is the consistent API across databases. Here's the same code using PostgreSQL: -.. literalinclude:: /examples/quickstart/test_quickstart_5.py +.. literalinclude:: /examples/quickstart/quickstart_5.py :language: python :caption: ``switching databases`` :lines: 14-30 @@ -99,7 +99,7 @@ Multiple Databases Need to work with multiple databases? Register multiple configs: -.. literalinclude:: /examples/quickstart/test_quickstart_6.py +.. literalinclude:: /examples/quickstart/quickstart_6.py :language: python :caption: ``multiple databases`` :lines: 7-18 @@ -109,14 +109,19 @@ Need to work with multiple databases? Register multiple configs: Transaction Support ------------------- -SQLSpec automatically manages transactions. By default, each session is a transaction: +Sessions expose ``begin()``, ``commit()``, and ``rollback()`` so you can control transaction +boundaries explicitly and keep examples deterministic: -.. literalinclude:: /examples/quickstart/test_quickstart_7.py +.. literalinclude:: /examples/quickstart/quickstart_7.py :language: python :caption: ``transaction support`` - :lines: 9-39 + :lines: 8-55 :dedent: 4 +The snippet seeds data in a temporary SQLite database, intentionally triggers a failure, +and uses ``contextlib.suppress`` so the docs stay readable while the companion test verifies +that ``rollback()`` removes the failed insert. + .. note:: Transaction behavior can be configured per session or globally. See the :doc:`../usage/drivers_and_querying` guide for details on transaction modes. @@ -126,7 +131,7 @@ Query Builder (Experimental) For those who prefer programmatic query construction, SQLSpec includes an experimental query builder: -.. literalinclude:: /examples/quickstart/test_quickstart_8.py +.. literalinclude:: /examples/quickstart/quickstart_8.py :language: python :caption: ``query builder`` :lines: 6-21 diff --git a/specs/guides/docs_examples_alignment.md b/specs/guides/docs_examples_alignment.md new file mode 100644 index 000000000..874c9dac5 --- /dev/null +++ b/specs/guides/docs_examples_alignment.md @@ -0,0 +1,28 @@ +# Docs & Example Alignment + +## Why +- Keep literalincluded snippets in `docs/` authoritative and executable. +- Reduce drift between prose and runnable code by treating documentation examples as pytest cases. + +## Workflow +1. Update the Python example under `docs/examples/...` first and keep it function-based (`def test_*`). +2. Refresh the corresponding ``literalinclude`` in the `.rst` file: + - Adjust `:lines:` and `:dedent:` ranges so the rendered snippet only shows the relevant part of the test. + - Mention any helper imports or context (e.g., `contextlib.suppress`) in nearby prose. +3. Re-run the targeted example tests locally and record failures that require external services (Postgres, etc.) so reviewers know what still needs coverage. +4. When SQLite pooling is involved, use `tempfile.NamedTemporaryFile` (or `tmp_path`) to guarantee isolation. Delete any prior tables at the top of the example to keep re-runs deterministic. +5. Reference this checklist in PR descriptions whenever docs/examples are touched. + +## Testing Command Examples +```bash +uv run pytest docs/examples/quickstart/quickstart_1.py docs/examples/quickstart/quickstart_2.py docs/examples/quickstart/quickstart_3.py docs/examples/quickstart/quickstart_6.py docs/examples/quickstart/quickstart_7.py docs/examples/quickstart/quickstart_8.py -q +``` + +- Async or adapter-specific samples (`quickstart_4.py`, `quickstart_5.py`, etc.) may need dedicated infrastructure. Explain any skips in the PR body so CI owners can follow up. +- Prefer smaller batches (per topic/section) to keep feedback loops fast. + +## Review Checklist +- [ ] Example is function-based and runnable via pytest. +- [ ] Docs include/excerpt ranges match the function body. +- [ ] Tests were re-run or limitations were documented. +- [ ] Temporary SQLite files are used for pooled configs to avoid leakage between examples. From 4b969aafc706e66ac2fab0f461e79bea8d14e337 Mon Sep 17 00:00:00 2001 From: Cody Fincher Date: Mon, 10 Nov 2025 01:04:20 +0000 Subject: [PATCH 20/20] fix: Add pytest fixture for Postgres environment in quickstart examples - Introduced a new fixture `quickstart_postgres_env` to set up the Postgres environment for the documentation quickstart examples. - The fixture uses `pytest-databases` to configure the necessary environment variables for connecting to the Postgres service. - This setup is applied automatically for the test session, ensuring a consistent testing environment. --- .pre-commit-config.yaml | 2 +- docs/examples/quickstart/conftest.py | 22 + docs/examples/quickstart/quickstart_1.py | 2 + docs/examples/quickstart/quickstart_2.py | 2 + docs/examples/quickstart/quickstart_4.py | 2 + docs/examples/quickstart/quickstart_5.py | 45 +- docs/examples/quickstart/quickstart_6.py | 2 + docs/examples/quickstart/quickstart_7.py | 2 + docs/examples/quickstart/quickstart_8.py | 2 + docs/getting_started/quickstart.rst | 12 +- pyproject.toml | 1 + specs/guides/docs_examples_alignment.md | 11 +- uv.lock | 523 ++++++++++++----------- 13 files changed, 352 insertions(+), 276 deletions(-) create mode 100644 docs/examples/quickstart/conftest.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 312ac2194..f8c8bf078 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,7 @@ repos: - id: mixed-line-ending - id: trailing-whitespace - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: "v0.14.3" + rev: "v0.14.4" hooks: - id: ruff args: ["--fix"] diff --git a/docs/examples/quickstart/conftest.py b/docs/examples/quickstart/conftest.py new file mode 100644 index 000000000..17a399bac --- /dev/null +++ b/docs/examples/quickstart/conftest.py @@ -0,0 +1,22 @@ +from __future__ import annotations + +from collections.abc import Generator + +import pytest +from pytest_databases.docker.postgres import PostgresService + +pytest_plugins = ["pytest_databases.docker.postgres"] + + +@pytest.fixture(scope="session", autouse=True) +def quickstart_postgres_env(postgres_service: PostgresService) -> Generator[None, None, None]: + """Expose pytest-databases Postgres settings to docs quickstart examples.""" + + patcher = pytest.MonkeyPatch() + patcher.setenv("SQLSPEC_QUICKSTART_PG_HOST", postgres_service.host) + patcher.setenv("SQLSPEC_QUICKSTART_PG_PORT", str(postgres_service.port)) + patcher.setenv("SQLSPEC_QUICKSTART_PG_USER", postgres_service.user) + patcher.setenv("SQLSPEC_QUICKSTART_PG_PASSWORD", postgres_service.password) + patcher.setenv("SQLSPEC_QUICKSTART_PG_DATABASE", postgres_service.database) + yield + patcher.undo() diff --git a/docs/examples/quickstart/quickstart_1.py b/docs/examples/quickstart/quickstart_1.py index 4765164b0..b19c3d7df 100644 --- a/docs/examples/quickstart/quickstart_1.py +++ b/docs/examples/quickstart/quickstart_1.py @@ -1,6 +1,8 @@ from sqlspec import SQLSpec from sqlspec.adapters.sqlite import SqliteConfig +__all__ = ("test_quickstart_1",) + def test_quickstart_1() -> None: # Create SQLSpec instance and configure database diff --git a/docs/examples/quickstart/quickstart_2.py b/docs/examples/quickstart/quickstart_2.py index a5aebf3ce..857a05c59 100644 --- a/docs/examples/quickstart/quickstart_2.py +++ b/docs/examples/quickstart/quickstart_2.py @@ -1,6 +1,8 @@ from sqlspec import SQLSpec from sqlspec.adapters.sqlite import SqliteConfig +__all__ = ("test_quickstart_2",) + def test_quickstart_2() -> None: db_manager = SQLSpec() diff --git a/docs/examples/quickstart/quickstart_4.py b/docs/examples/quickstart/quickstart_4.py index 3ce866adb..535d95742 100644 --- a/docs/examples/quickstart/quickstart_4.py +++ b/docs/examples/quickstart/quickstart_4.py @@ -3,6 +3,8 @@ from sqlspec import SQLSpec from sqlspec.adapters.aiosqlite import AiosqliteConfig +__all__ = ("User", "test_quickstart_4") + class User(BaseModel): id: int diff --git a/docs/examples/quickstart/quickstart_5.py b/docs/examples/quickstart/quickstart_5.py index 7f8fd02c2..2629df54c 100644 --- a/docs/examples/quickstart/quickstart_5.py +++ b/docs/examples/quickstart/quickstart_5.py @@ -1,8 +1,13 @@ +import os +from typing import Any + from pydantic import BaseModel from sqlspec import SQLSpec from sqlspec.adapters.asyncpg import AsyncpgConfig +__all__ = ("User", "test_quickstart_5") + class User(BaseModel): id: int @@ -10,21 +15,39 @@ class User(BaseModel): email: str -async def test_quickstart_5() -> None: - db_manager = SQLSpec() - db = db_manager.add_config( - AsyncpgConfig( - pool_config={ - "host": "localhost", - "port": 5432, - "user": "postgres", - "password": "postgres", - "database": "mydb", - } +def _pool_config() -> "dict[str, Any]": + return { + "host": os.getenv("SQLSPEC_QUICKSTART_PG_HOST", "localhost"), + "port": int(os.getenv("SQLSPEC_QUICKSTART_PG_PORT", "5432")), + "user": os.getenv("SQLSPEC_QUICKSTART_PG_USER", "postgres"), + "password": os.getenv("SQLSPEC_QUICKSTART_PG_PASSWORD", "postgres"), + "database": os.getenv("SQLSPEC_QUICKSTART_PG_DATABASE", "mydb"), + } + + +async def _seed_users(session: Any) -> None: + await session.execute( + """ + CREATE TABLE IF NOT EXISTS users ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + email TEXT NOT NULL ) + """ ) + await session.execute("TRUNCATE TABLE users") + await session.execute("INSERT INTO users (id, name, email) VALUES ($1, $2, $3)", 1, "Alice", "alice@example.com") + + +async def test_quickstart_5() -> None: + db_manager = SQLSpec() + db = db_manager.add_config(AsyncpgConfig(pool_config=_pool_config())) async with db_manager.provide_session(db) as session: + await _seed_users(session) + # PostgreSQL uses $1, $2 for parameters instead of ? user = await session.select_one("SELECT * FROM users WHERE id = $1", 1, schema_type=User) print(f"User: {user.name}") + + assert user == User(id=1, name="Alice", email="alice@example.com") diff --git a/docs/examples/quickstart/quickstart_6.py b/docs/examples/quickstart/quickstart_6.py index eccbbb52f..4f4c6bfbf 100644 --- a/docs/examples/quickstart/quickstart_6.py +++ b/docs/examples/quickstart/quickstart_6.py @@ -2,6 +2,8 @@ from sqlspec.adapters.duckdb import DuckDBConfig from sqlspec.adapters.sqlite import SqliteConfig +__all__ = ("test_quickstart_6",) + def test_quickstart_6() -> None: db_manager = SQLSpec() diff --git a/docs/examples/quickstart/quickstart_7.py b/docs/examples/quickstart/quickstart_7.py index 090180fa2..68d6ac947 100644 --- a/docs/examples/quickstart/quickstart_7.py +++ b/docs/examples/quickstart/quickstart_7.py @@ -1,6 +1,8 @@ from sqlspec import SQLSpec from sqlspec.adapters.sqlite import SqliteConfig +__all__ = ("test_quickstart_7",) + def test_quickstart_7() -> None: db_manager = SQLSpec() diff --git a/docs/examples/quickstart/quickstart_8.py b/docs/examples/quickstart/quickstart_8.py index 522941b43..bf1127ab0 100644 --- a/docs/examples/quickstart/quickstart_8.py +++ b/docs/examples/quickstart/quickstart_8.py @@ -1,6 +1,8 @@ from sqlspec import SQLSpec, sql from sqlspec.adapters.sqlite import SqliteConfig +__all__ = ("test_quickstart_8",) + def test_quickstart_8() -> None: # Build a query programmatically diff --git a/docs/getting_started/quickstart.rst b/docs/getting_started/quickstart.rst index f43aa741a..3c9e08234 100644 --- a/docs/getting_started/quickstart.rst +++ b/docs/getting_started/quickstart.rst @@ -82,8 +82,16 @@ One of SQLSpec's strengths is the consistent API across databases. Here's the sa .. literalinclude:: /examples/quickstart/quickstart_5.py :language: python :caption: ``switching databases`` - :lines: 14-30 - :dedent: 2 + :lines: 18-58 + :dedent: 4 + +.. note:: + + For tests we surface the PostgreSQL connection info through the + ``SQLSPEC_QUICKSTART_PG_*`` environment variables (host, port, user, + password, database). When running the snippet outside pytest, export those + variables or inline your DSN in ``_pool_config()`` so the example keeps + working. .. tip:: diff --git a/pyproject.toml b/pyproject.toml index 7c8452a6c..be03467e6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -287,6 +287,7 @@ exclude_lines = [ addopts = ["-q", "-ra"] asyncio_default_fixture_loop_scope = "function" asyncio_mode = "auto" +python_files = ["test_*.py", "quickstart_*.py"] filterwarnings = [ "ignore::DeprecationWarning:pkg_resources.*", "ignore:pkg_resources is deprecated as an API:DeprecationWarning", diff --git a/specs/guides/docs_examples_alignment.md b/specs/guides/docs_examples_alignment.md index 874c9dac5..545883356 100644 --- a/specs/guides/docs_examples_alignment.md +++ b/specs/guides/docs_examples_alignment.md @@ -1,27 +1,32 @@ # Docs & Example Alignment ## Why + - Keep literalincluded snippets in `docs/` authoritative and executable. - Reduce drift between prose and runnable code by treating documentation examples as pytest cases. ## Workflow + 1. Update the Python example under `docs/examples/...` first and keep it function-based (`def test_*`). 2. Refresh the corresponding ``literalinclude`` in the `.rst` file: - Adjust `:lines:` and `:dedent:` ranges so the rendered snippet only shows the relevant part of the test. - Mention any helper imports or context (e.g., `contextlib.suppress`) in nearby prose. -3. Re-run the targeted example tests locally and record failures that require external services (Postgres, etc.) so reviewers know what still needs coverage. +3. Re-run the targeted example tests locally and record failures that require external services (Postgres, etc.) so reviewers know what still needs coverage. Use helpers like `SQLSPEC_QUICKSTART_PG_*` to keep DSNs out of docs snippets. 4. When SQLite pooling is involved, use `tempfile.NamedTemporaryFile` (or `tmp_path`) to guarantee isolation. Delete any prior tables at the top of the example to keep re-runs deterministic. 5. Reference this checklist in PR descriptions whenever docs/examples are touched. ## Testing Command Examples + ```bash -uv run pytest docs/examples/quickstart/quickstart_1.py docs/examples/quickstart/quickstart_2.py docs/examples/quickstart/quickstart_3.py docs/examples/quickstart/quickstart_6.py docs/examples/quickstart/quickstart_7.py docs/examples/quickstart/quickstart_8.py -q +uv run pytest docs/examples/quickstart -q ``` -- Async or adapter-specific samples (`quickstart_4.py`, `quickstart_5.py`, etc.) may need dedicated infrastructure. Explain any skips in the PR body so CI owners can follow up. +- `docs/examples/quickstart/conftest.py` sets `SQLSPEC_QUICKSTART_PG_*` from `pytest-databases` so `quickstart_5.py` stays copy/paste friendly in the docs. +- Async or adapter-specific samples no longer need separate commands—pytest collects `quickstart_4.py` and `quickstart_5.py` automatically via `python_files`. - Prefer smaller batches (per topic/section) to keep feedback loops fast. ## Review Checklist + - [ ] Example is function-based and runnable via pytest. - [ ] Docs include/excerpt ranges match the function body. - [ ] Tests were re-run or limitations were documented. diff --git a/uv.lock b/uv.lock index 92335cb5b..56ed2a624 100644 --- a/uv.lock +++ b/uv.lock @@ -11,109 +11,114 @@ resolution-markers = [ [[package]] name = "adbc-driver-bigquery" -version = "1.8.0" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "adbc-driver-manager" }, { name = "importlib-resources" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d0/1c/fd4e1c9bc4d15a284a59832233df9bcc86cde017c1c75d21f8c921830d07/adbc_driver_bigquery-1.8.0.tar.gz", hash = "sha256:0b55e857a8fd470bfd8890dd882d0e32d31102ba5b5f6c840e9214326926b686", size = 19228, upload-time = "2025-09-12T12:31:22.413Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/88/36e7abe682cb412feb1538cab15c2f5bbcf38ebffcfac778318ed814aa2f/adbc_driver_bigquery-1.9.0.tar.gz", hash = "sha256:336a533b05919d6adfdc2403214d64bc01cdb461fc03950b54d9016c7e209d24", size = 19224, upload-time = "2025-11-07T01:46:53.627Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/61/d3305955169cafcfd918437a73de497d6636d14475d162442ae69e3f45fa/adbc_driver_bigquery-1.8.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:6d13ac05b71999cd7d5cc9bff22cbd0469e13665e7a404bcfc534096c2fa27b9", size = 9490322, upload-time = "2025-09-12T12:29:04.824Z" }, - { url = "https://files.pythonhosted.org/packages/aa/bb/1a66ef3c40091b2b7f2289a5573b1a23f0fb0769f2b2e283272d43349690/adbc_driver_bigquery-1.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:59b64ad4390c8d8d94321dbf1d1c3a460b23597cf397ba9d65bcfb2edecd8062", size = 8961861, upload-time = "2025-09-12T12:29:09.258Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e0/831606b509df1028fcac9abe56b36201e50e93b600b4f3512c77a1beae7e/adbc_driver_bigquery-1.8.0-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8760955803ed12097ce88a33c2d8d94e75d65e4ef8f695003b80d4e61275a269", size = 9516364, upload-time = "2025-09-12T12:29:14.252Z" }, - { url = "https://files.pythonhosted.org/packages/4f/30/f71012a91f75f39f4bc88c6cc4552073df092d07af0eb35ac4dc1a899016/adbc_driver_bigquery-1.8.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a5908d2d32d6a6fe626900ba5d5fa2757f43d3223ead12d21c73162be1445fda", size = 8746559, upload-time = "2025-09-12T12:29:18.71Z" }, - { url = "https://files.pythonhosted.org/packages/5e/a2/6f2ad307b3fc6d2c315405025a8aa2de21579e54afd48bcc2fced720b478/adbc_driver_bigquery-1.8.0-py3-none-win_amd64.whl", hash = "sha256:add664b7998a83fffa334e2c92f504d0c6921d5f9e420d351d880da80646ce03", size = 17658500, upload-time = "2025-09-12T12:29:22.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/4c/21aaaa3146bbf5f8d3a01aa377264dd0574ad3385a6d4025e75ef3b697ec/adbc_driver_bigquery-1.9.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:243ac1c8c20a3a7b900833e7752dd66757e361766023f28c7bae3c2ca4805bb6", size = 9535291, upload-time = "2025-11-07T01:44:28.258Z" }, + { url = "https://files.pythonhosted.org/packages/f1/f0/1594ef43d19a20a75083dd95f17a0365b6d296eea59f0d4103875753ea8b/adbc_driver_bigquery-1.9.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:96c78889d878613ed0b670bdc63621f1486b1fa1e576a5246b47b4d0af0ef9bd", size = 8986364, upload-time = "2025-11-07T01:44:33.161Z" }, + { url = "https://files.pythonhosted.org/packages/a5/89/1f5d30200a07e6262802c29934905c11d67ec87ef1a4b325ab42692454e1/adbc_driver_bigquery-1.9.0-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d4a4243d198d20167fad530793f62d1603a54cbac23400ed596ebc385e3a7e12", size = 17978565, upload-time = "2025-11-07T01:44:39.254Z" }, + { url = "https://files.pythonhosted.org/packages/ad/e0/a5d82520145593e069a1c130f1b8da67712562b3a9b3cc35af6fe871177e/adbc_driver_bigquery-1.9.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:62ac30237310a958a8b9627179152bdd1355e41e670b07b15517a055e8c897dd", size = 16717372, upload-time = "2025-11-07T01:44:45.283Z" }, + { url = "https://files.pythonhosted.org/packages/e8/0d/233583e2394feb794da847a193501782c9f03e17c3a46c4a2374c861d6af/adbc_driver_bigquery-1.9.0-py3-none-win_amd64.whl", hash = "sha256:0faa4164916b67b928377a59738392e3cf47ff60ef6b18fbe152f081c09df6e2", size = 17698598, upload-time = "2025-11-07T01:44:50.572Z" }, ] [[package]] name = "adbc-driver-flightsql" -version = "1.8.0" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "adbc-driver-manager" }, { name = "importlib-resources" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/22/c7/8646301ac48142cd9c437c9ee56aaaf15f39bee41c80dba5f7d882f2d48f/adbc_driver_flightsql-1.8.0.tar.gz", hash = "sha256:5ca2c4928221ab2779a7be601375e96b9204a009ab1d1f91a862e1d860f918a6", size = 21221, upload-time = "2025-09-12T12:31:23.125Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/8a/4d0c84b15eefe6576d431a18103005e356bca44b6a45fbc631cb6e8bb17a/adbc_driver_flightsql-1.9.0.tar.gz", hash = "sha256:534e125194b6e835245eb705246c6525a8d4046d23489140deeededdd6f848a9", size = 21215, upload-time = "2025-11-07T01:46:54.749Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dd/3d/862f1d3717462700517e44cda0e486b9614d4131e978b437ea276523e020/adbc_driver_flightsql-1.8.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:81f2a2764f7abfee3f50153ee15979ab8d1fb288c521984f1c286a70bf4712a9", size = 7807606, upload-time = "2025-09-12T12:29:26.227Z" }, - { url = "https://files.pythonhosted.org/packages/25/cc/5ac43f1690d29e18b2763c2b0ec7553f0b986bba820ca7beda103838702c/adbc_driver_flightsql-1.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e688e1292aaa56fd1508453eb826d53d8ea21668af503c0cb0988cf1cbc83015", size = 7358553, upload-time = "2025-09-12T12:29:29.017Z" }, - { url = "https://files.pythonhosted.org/packages/6c/a4/c2aedeb081e44771f5be24720636dd36483ba325055cd2196e051b366907/adbc_driver_flightsql-1.8.0-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:632408dae8e2dc24028982936937f1db39afff45b33840e7e8787d8878549756", size = 7745209, upload-time = "2025-09-12T12:29:31.858Z" }, - { url = "https://files.pythonhosted.org/packages/46/92/875210dcbd33bdfd0607e8253a23b05cc89afcc03a230347c6e344e2894c/adbc_driver_flightsql-1.8.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:685fc873826fe30ea8e29e94d8868938ad31df48b781bdc44adf42e176fa36ad", size = 7107135, upload-time = "2025-09-12T12:29:34.337Z" }, - { url = "https://files.pythonhosted.org/packages/f0/d3/740c90e01fa659c630f8c011464cd5ba86299bf06e54fa03979ecc1967b3/adbc_driver_flightsql-1.8.0-py3-none-win_amd64.whl", hash = "sha256:7eaa25ade42aa2cedd6c261c71c7d141857b91020d8bddf08e64c9f36541cc29", size = 14428790, upload-time = "2025-09-12T12:29:37.362Z" }, + { url = "https://files.pythonhosted.org/packages/94/ee/08baaea64b123ef1c904c6a25f63b1c95208c040d794425047cbcb6c2c3a/adbc_driver_flightsql-1.9.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:49c15fec4e03732bf478922035563be0665686b950efd8efb325b6ce84e05dd5", size = 7832201, upload-time = "2025-11-07T01:44:54.695Z" }, + { url = "https://files.pythonhosted.org/packages/2e/67/b301f1ff18e03124c62a6d29cabd01d1b122bea94d94035233316b44d03f/adbc_driver_flightsql-1.9.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:edee43183625acb2fd2e2b8331f07ac516b6958ef1f27663f6308334db7f7272", size = 7362111, upload-time = "2025-11-07T01:44:57.395Z" }, + { url = "https://files.pythonhosted.org/packages/04/e5/a2826ac6e8cb135d9a9f24d46e60563353fe387c542ee19b42dc4d043402/adbc_driver_flightsql-1.9.0-py3-none-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a79a4225de366f8c1f622f4ab92ad7cc09e874a89748c6d21003641a96de8482", size = 14609578, upload-time = "2025-11-07T01:45:00.995Z" }, + { url = "https://files.pythonhosted.org/packages/94/69/34cf90a32fe3925be6806ad7bf8c1d46d40ad8e16a7a3a36adb02ae65cfb/adbc_driver_flightsql-1.9.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c6ca16f2963297abb4816e1c0a0dc07852993e5a2ac1a3232536833153e6df8", size = 13583150, upload-time = "2025-11-07T01:45:06.276Z" }, + { url = "https://files.pythonhosted.org/packages/62/1a/bc7ec4153b1d00c0a7fbde9cf0a836600d954b362e19a994365710ade713/adbc_driver_flightsql-1.9.0-py3-none-win_amd64.whl", hash = "sha256:ccd438a02c1638db9131ba46eafb7b860df76756ecc7585317e72dd83162b712", size = 14435609, upload-time = "2025-11-07T01:45:10.361Z" }, ] [[package]] name = "adbc-driver-manager" -version = "1.8.0" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/2a/00fe4974b7d134c8d0691a87f09460d949e607e1ef65a022c665e8bde64f/adbc_driver_manager-1.8.0.tar.gz", hash = "sha256:88ca0f4d8c02fc6859629acaf0504620da17a39549e64d4098a3497f7f1eb2d0", size = 203568, upload-time = "2025-09-12T12:31:24.233Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/00/5c30fbb6c218599b9d6ee29df6e999c144f792b5790da31a23d6513bde83/adbc_driver_manager-1.8.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:fe3a1beb0f603468e3c4e7c03fccab1af584b6b606ab9707a168d17b7bab01a7", size = 533919, upload-time = "2025-09-12T12:29:40.317Z" }, - { url = "https://files.pythonhosted.org/packages/af/cc/6a0bb6c858ee8316d510b1c9d184cd348b98c4cffd212e79072bf44dd436/adbc_driver_manager-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a9bba93fe8bba7f8c23ad2db0e1441fcd9672f3d900c2791437ee8058bfa6a70", size = 511549, upload-time = "2025-09-12T12:29:42.263Z" }, - { url = "https://files.pythonhosted.org/packages/91/61/742daad0325a1ad97602bc12a5dadb15ac73e7b7db20f2caf0a66e87ef45/adbc_driver_manager-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:18ce935cc2220b3df065dd98b049beec1c9abacd79ed6f7dfea953d9c3e9404b", size = 3023642, upload-time = "2025-09-12T12:29:44.874Z" }, - { url = "https://files.pythonhosted.org/packages/e9/d8/02f5ce9da49961f97c3ee184f42feb8f9bf5e77c80cacc3fe42a81b11325/adbc_driver_manager-1.8.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c01c66c37e3e97d8891bb217f2d2f6c33c6cd25bf799aefcb42ed99c76a6ed36", size = 3039802, upload-time = "2025-09-12T12:29:46.576Z" }, - { url = "https://files.pythonhosted.org/packages/07/8b/affdc2ab3baf6c68b7642e0246861b1db01a28cc33245ddf2ea26dbff7cb/adbc_driver_manager-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:66c7d1319c78fc66f09532f21bc9baf0435a787f1db17b99c46c9a820b9c9253", size = 710628, upload-time = "2025-09-12T12:29:47.735Z" }, - { url = "https://files.pythonhosted.org/packages/4d/0c/2bb08c26a551aae886289fab8ab6d1bf03f4bef5b74632123500a2bc6662/adbc_driver_manager-1.8.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:58c10f81134bf8a528fab3848ac14447f3fe158d9fbc84197e79a24827f94f2a", size = 537727, upload-time = "2025-09-12T12:29:50.082Z" }, - { url = "https://files.pythonhosted.org/packages/a9/67/f2e1694875ccbc72c15c334e1ef2f4338b4cb098ba217f4e535d92d5d2f7/adbc_driver_manager-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f59794ae27eef7a17be5583d46b746749b3cbae5e58b0fe0f44746e8498d6f5c", size = 516680, upload-time = "2025-09-12T12:29:52.51Z" }, - { url = "https://files.pythonhosted.org/packages/f5/7d/65a41108cb3c1a87e570cf80a50ca94521f748a58780a41d61ea1d946051/adbc_driver_manager-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fed9a2cb46602cff67f503bbf55c6ee2e69a7e5c07a08514b5bd27a656a3e40b", size = 3103357, upload-time = "2025-09-12T12:29:55.226Z" }, - { url = "https://files.pythonhosted.org/packages/43/15/6e22524aadc7ea82c0868492cdf7e28ab30b476edd5d3d6ef29a882775ec/adbc_driver_manager-1.8.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:349fecd931e5211f00ce00d109fc80a484046fe41644aa402b97496919aa8c2a", size = 3113074, upload-time = "2025-09-12T12:29:57.453Z" }, - { url = "https://files.pythonhosted.org/packages/ca/a1/05f66007556623a7fb37af6535fe19377d2f4757bf0c94f64f350521c9dc/adbc_driver_manager-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:92105ae34a42603c7f64b4b0f2d851380c018e9c9f4e9a764a01b1b6f1fa6156", size = 712252, upload-time = "2025-09-12T12:29:59.162Z" }, - { url = "https://files.pythonhosted.org/packages/19/c7/05b5559eff9a42c53c47d86e32aa0b15bd206ef4be04f3a678da7871a8dd/adbc_driver_manager-1.8.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:0e6bbe0b026a17c69c1e7410a8df2366bb80803be0f0d8a7eed2defbed313a65", size = 537879, upload-time = "2025-09-12T12:30:00.798Z" }, - { url = "https://files.pythonhosted.org/packages/25/f0/d7ed70a28933e2c6b95455306c005d9022fc558e26e759ed65fce0537b79/adbc_driver_manager-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5f0f89d13b8f86dc20522988caceab37085fe155ebbea4e9013a7962170011c", size = 512702, upload-time = "2025-09-12T12:30:02.543Z" }, - { url = "https://files.pythonhosted.org/packages/37/a6/fc66e7b72857589ba5cdd0dcfc388ea746ed805caf4031580b1c065481fa/adbc_driver_manager-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd11c6ecdc8119641d2a929e50c9f6ff822b322859bf08a085e7ba9d1adb399", size = 3086175, upload-time = "2025-09-12T12:30:04.491Z" }, - { url = "https://files.pythonhosted.org/packages/e7/90/4780e8cab75f11644d260a73307445254288405352a99cfb3b2889c50e80/adbc_driver_manager-1.8.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f7689b0cf30d77532189b30762e3f6a347275e57e511e885f0eba45ce40ce02c", size = 3113622, upload-time = "2025-09-12T12:30:06.665Z" }, - { url = "https://files.pythonhosted.org/packages/c5/b4/ed76afa37c344395a33d1f894dcd82b5cee2281925c235405a9078d10a29/adbc_driver_manager-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:3f0454ec6fc2b5d3c3629b504ee65dbded2516412647070e26cdc9c14341ac74", size = 703323, upload-time = "2025-09-12T12:30:07.984Z" }, - { url = "https://files.pythonhosted.org/packages/56/79/76d505f43c6195920a41f812192bbd5fb1a490ade1c81fe5ba9f07a86f23/adbc_driver_manager-1.8.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:04e0676f7bd16dd7d7c403f506b7a22a542fe89f4471526c82cfd546353b125f", size = 536549, upload-time = "2025-09-12T12:30:09.513Z" }, - { url = "https://files.pythonhosted.org/packages/9f/1b/61e9badd21f0936a43692275f84dbf4baa4f39d4100042a14edbf9654a4d/adbc_driver_manager-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dddf0ae5b8d636015b1f7fc6972167c1824bd950f3ed6a178d083e89dfd322a", size = 510497, upload-time = "2025-09-12T12:30:10.837Z" }, - { url = "https://files.pythonhosted.org/packages/9c/52/501e0d11b2ba9fca1eb2698cb56ff14c94e8a1cad421a9c90c2e23edfbd8/adbc_driver_manager-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d70431e659e8e51d222fa238410085f0c13921154e0a17e9a687f7896667138f", size = 3085322, upload-time = "2025-09-12T12:30:12.893Z" }, - { url = "https://files.pythonhosted.org/packages/38/5e/0a79d48fe44cc8387221fff44dfa956c5ce6131a72f08e393748cbb090e0/adbc_driver_manager-1.8.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8b4d34618a5e64e678210dfdf76704f11e09529fc221dbd576ead6c14555883d", size = 3107704, upload-time = "2025-09-12T12:30:14.861Z" }, - { url = "https://files.pythonhosted.org/packages/71/42/689194767d6ec09bb9b9216c27000ff193199c9bd7d7d5c6c5aad1bc2400/adbc_driver_manager-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:82da1442b6d786d2f87ac0f3dd0bbc7462ec90cb3316168a4db88044d470baa2", size = 702235, upload-time = "2025-09-12T12:30:24.469Z" }, - { url = "https://files.pythonhosted.org/packages/83/45/4e98be65dab4e61c9c0227c4908ab9a5db1db320eec8badfd5b253c5854b/adbc_driver_manager-1.8.0-cp313-cp313t-macosx_10_15_x86_64.whl", hash = "sha256:bc1677c06998361b5c3237d9f408b69fb23942f7157e2dd4ce515f658a60d3d4", size = 551974, upload-time = "2025-09-12T12:30:16.782Z" }, - { url = "https://files.pythonhosted.org/packages/8f/4a/c4d83125e1dc0532006b3fd3c816a2c2956dedb881a89e0cb47f4eda1bcc/adbc_driver_manager-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:86cb394bdd3ac298761e0ff8ceab8ad9c2f6ce5650d7f4ac7c8609bc74876929", size = 529497, upload-time = "2025-09-12T12:30:18.756Z" }, - { url = "https://files.pythonhosted.org/packages/c7/6c/d1752ed66109fe1866d9aabe0f6a930b8443d8e62d17f333a38b97b37b85/adbc_driver_manager-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1a834f2f269285d1308aa97ae6000002acdb79d70733735f16b3c9918ca88c1f", size = 3148300, upload-time = "2025-09-12T12:30:21.301Z" }, - { url = "https://files.pythonhosted.org/packages/3d/59/971e28a01382590ead8352d83a2d77b1f8beb2c4cc1b59036e1b68fd59e1/adbc_driver_manager-1.8.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8fcf38cc4b993336f49b6d1e407d4741ed1ea898f58088314005f8da7daf47db", size = 3134384, upload-time = "2025-09-12T12:30:23.252Z" }, - { url = "https://files.pythonhosted.org/packages/54/4e/0f826b68d5e0d50f8b1207514d0d17bf60663b7d51efd21f3754b5885450/adbc_driver_manager-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f954783e306ff1e1602d8390e74e00357142c382bff22ab159e8f94a95c8cfcb", size = 3082317, upload-time = "2025-09-12T12:30:26.8Z" }, - { url = "https://files.pythonhosted.org/packages/da/bf/ce5efe35be83b652e4b6059cfff48b59d648560a9dc99caac8da0a3441cd/adbc_driver_manager-1.8.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d5ec92af49a76345db1ae0a3890789797078b5b9948d550a47e8cfaa27cc19", size = 3089760, upload-time = "2025-09-12T12:30:28.772Z" }, - { url = "https://files.pythonhosted.org/packages/f2/b3/d3254595b61890da1dc6d44178abe10262136d20aeffae4a86d3e289371e/adbc_driver_manager-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4f68df12cfbffaf4bec832ed406fb6ce978fd7dba8a4e8e377c9658fcd83b6a3", size = 3147028, upload-time = "2025-09-12T12:30:30.53Z" }, - { url = "https://files.pythonhosted.org/packages/68/ba/82d1f9521bc755d8d0d66eaac47032e147c2fe850eb308ba613710b27493/adbc_driver_manager-1.8.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a4402633d548e3ecdcf89a7133fd72b88a807a3c438e13bdb61ccc79d6239a65", size = 3133693, upload-time = "2025-09-12T12:30:32.357Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/cd/b4/09a85ca2bb2ba53d6577745a0aae0766393b69d0ae1e645ff4d34bee6866/adbc_driver_manager-1.9.0.tar.gz", hash = "sha256:d6687acf57f92e469e78d53df6baf70ab62f8886ba8f2e0b25613aecd1807ae9", size = 205762, upload-time = "2025-11-07T01:46:55.953Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/8e/2ee9e6364c9bb0da77d2c84c94aad06aa400d71076bb74089baaf9d8f970/adbc_driver_manager-1.9.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:4d85d3ad6a669c62aeb8048d02507912d3265b3655878b2c62b7f17b2df85d31", size = 535485, upload-time = "2025-11-07T01:45:13.071Z" }, + { url = "https://files.pythonhosted.org/packages/b4/79/b429127767c55d72e1ee1a38649485d46efeec0e8068d8f0d88674b7fb20/adbc_driver_manager-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e125e78fe085742113007c0d73f7470921d42e515a577391fad9140278029b54", size = 516545, upload-time = "2025-11-07T01:45:15.208Z" }, + { url = "https://files.pythonhosted.org/packages/0e/bd/3d0d7a73706e5c990c09e7563a704d8c57289f2ca3ec7d9f26e50f5b39b6/adbc_driver_manager-1.9.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:acc54eb396010370d66900f8571c5820d7eff58f53ead32b8789bb1b2ae90d43", size = 3046392, upload-time = "2025-11-07T01:45:17.285Z" }, + { url = "https://files.pythonhosted.org/packages/71/12/6733250602e938a2f53951aa1c457ceea525f6a6fca174001d7b2e639cab/adbc_driver_manager-1.9.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9ee06ce6a838fa4aa7d15f1f25e889b73bf01223a7c16c62db0a5fc393a34e8c", size = 3061274, upload-time = "2025-11-07T01:45:20.05Z" }, + { url = "https://files.pythonhosted.org/packages/8c/61/2123a83eb0bff26b7b5d278fdc309fea2e3a93397ff98957fbc253f123c6/adbc_driver_manager-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:c1c3c67d36e3040ffc1b0222e5954bec2b3226683fc9211780fbb24b54182ef5", size = 714551, upload-time = "2025-11-07T01:45:21.685Z" }, + { url = "https://files.pythonhosted.org/packages/71/6a/6ba149d36fbb0885c9e1e083bf2a111379c3e9823a73c76e85d5c178a94c/adbc_driver_manager-1.9.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:5298667754dfe86ea8b8d46b4f120642ebd977dab825e033d68472a16067edb5", size = 539603, upload-time = "2025-11-07T01:45:23.511Z" }, + { url = "https://files.pythonhosted.org/packages/16/2b/f4eaa3c05a83118e35f3e9fe3c4f3a2ff7941f0b442d47391576a823ca0e/adbc_driver_manager-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41b070bfb3a8d730cfb5bd8ea83f6d5131c8b00f8d74acc2ef70f885f82ab211", size = 521199, upload-time = "2025-11-07T01:45:25.761Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a7/424d9741a9b9626db37f31a94d6f06a9723b376cdb86da974947bf53b8d3/adbc_driver_manager-1.9.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef286238ce7e4e62fae704c77c571da2163de5367b5777bccff012a5d2a1eba2", size = 3125933, upload-time = "2025-11-07T01:45:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/ad/3a/6328f0bc79b1a27db3aebc4ee26e0cead1fc5405a2b01cb75017ef0f8e0c/adbc_driver_manager-1.9.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3bbd24ad6e4562d822ddde595ccd98adab53e15341a4157e5cce3e1161f9b76e", size = 3138043, upload-time = "2025-11-07T01:45:30.082Z" }, + { url = "https://files.pythonhosted.org/packages/d4/18/2841b3046f866f6a20303c28e4f3e829513874f24d178b709823e75feb68/adbc_driver_manager-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:4c8e15e75671ae37e20d198836c9cd2aa69c85feec541ab3a15fd6b48c2078d8", size = 715975, upload-time = "2025-11-07T01:45:31.602Z" }, + { url = "https://files.pythonhosted.org/packages/ae/5d/6fbb1fe6b55542e4c2c9deafdc79ffc87da9484703f5a74e700133459f3b/adbc_driver_manager-1.9.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c27bec486a217586ef2adbf55634070be4f25b0e3642380ebc97a2926c228d6a", size = 539512, upload-time = "2025-11-07T01:45:33.65Z" }, + { url = "https://files.pythonhosted.org/packages/87/5e/cb94f25f41e3be7eea065dedcb67ab71266c02b835966f9f417ba3f386d6/adbc_driver_manager-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d0051e8a25e6d19afe224e46966abc645af1662d2314277d1822a2401800bac", size = 517792, upload-time = "2025-11-07T01:45:35.351Z" }, + { url = "https://files.pythonhosted.org/packages/9a/b6/eac3aaef68fb102fc2b7a7213d0ffe736f7463bd37838110c93764bb5644/adbc_driver_manager-1.9.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e541dda28a9a7e6ac0e9ab3797e8e31153dcc75e333759cb519bcf942805a625", size = 3108751, upload-time = "2025-11-07T01:45:37.863Z" }, + { url = "https://files.pythonhosted.org/packages/64/18/2ddfa947dc6948c68349b22e59bb2f7786177046276a2cd4899a8dd8536b/adbc_driver_manager-1.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:df26073ada6069e95deb59f974cfc7aa4bf94f76080c997b1d6225159dd67227", size = 3135707, upload-time = "2025-11-07T01:45:39.72Z" }, + { url = "https://files.pythonhosted.org/packages/b0/46/532aeee27008928baad91b0420b498548a2ed6b7070de907e4d5b5937933/adbc_driver_manager-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:ee7dd922983f44e2933d0e539524d5174bf50f663fb09f70989ce5e1319a1d41", size = 707465, upload-time = "2025-11-07T01:45:40.97Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e7/17a9738b8e6f549606f049f616b01b9517288022bf384cf6f2ef3127288c/adbc_driver_manager-1.9.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:7f9db5a3b38d4b9042b97dbee3c739b0a075585fbe2c11cdd60ba817a1618b03", size = 537614, upload-time = "2025-11-07T01:45:42.433Z" }, + { url = "https://files.pythonhosted.org/packages/ee/de/ae8d9a532dba87b61201bf64678b142afb07782c014539cef81681f0fa35/adbc_driver_manager-1.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fe4affd71f7facdaf4c04839846b090c945586c36d0fd79cd7fb5a3251d36f85", size = 516016, upload-time = "2025-11-07T01:45:44.195Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e7/c3039fd725636d1d25c339223027a7f999ac23048d4437ab5ad22f42ecdd/adbc_driver_manager-1.9.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0a7961db77730ce0ab326a225dc534b43d4017b28a30703eaac7e3cdf1e5fb7d", size = 3108213, upload-time = "2025-11-07T01:45:46.27Z" }, + { url = "https://files.pythonhosted.org/packages/e8/74/60407d06a3263155495e730e8fa671db976c918aea16b5471de16025b811/adbc_driver_manager-1.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f1a8ba1ad7c4b50f5486401cc1bf04d313f74065f0d752ab0145292ab746f0fb", size = 3131425, upload-time = "2025-11-07T01:45:48.312Z" }, + { url = "https://files.pythonhosted.org/packages/35/28/260053893ca51b1f06e2fe652ee267cbfe359a2c4c8312dc0307a0f54579/adbc_driver_manager-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:21e0ab1adb0c804955279b0a919ba8dec5264db1e85e43a89af9fbbf8a8e52c9", size = 706437, upload-time = "2025-11-07T01:45:57.327Z" }, + { url = "https://files.pythonhosted.org/packages/30/79/4b478c9023c772ce36fb0dabc6bb49e8fe513e53a606e4bb6819589ddb54/adbc_driver_manager-1.9.0-cp313-cp313t-macosx_10_15_x86_64.whl", hash = "sha256:74f57cee4168ce79babc8c33468bc8eae6917aefc72f2493b0c24164c9a4c29b", size = 552602, upload-time = "2025-11-07T01:45:50.348Z" }, + { url = "https://files.pythonhosted.org/packages/60/56/0613a0a4b307a2bba587fa2b6bd573c0aa433696134272f3ac9b98f38746/adbc_driver_manager-1.9.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0dbda004d4cc4354bb14bed27451e248022298bd898b246b884a46fc880a93da", size = 533874, upload-time = "2025-11-07T01:45:51.696Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5c/d0a1cfe1b27d982ab3a2dfb1a56482d5ed3e601d2d47a6b20cbcc172fd30/adbc_driver_manager-1.9.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5377949e913483792ae30fac86be04ba377e4be12023d4db709c7eb870a196c1", size = 3170532, upload-time = "2025-11-07T01:45:54.039Z" }, + { url = "https://files.pythonhosted.org/packages/f6/26/e7ebccfce5b77c84386975d42f87fa2debd11dded7350ef493cccbb8c0bf/adbc_driver_manager-1.9.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:da8e2611c657599936968774ec39919c9edbbea6cffc4484c23df5bcb6657e08", size = 3160151, upload-time = "2025-11-07T01:45:55.797Z" }, + { url = "https://files.pythonhosted.org/packages/29/54/d39e9cec6518e734d3390e751ef2f6fd98dbca776809d8739cda23b98408/adbc_driver_manager-1.9.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:36707df1bbe577d9e625186c933a4b4b3db0e16332cdb67b89af1de699029748", size = 537297, upload-time = "2025-11-07T01:45:58.737Z" }, + { url = "https://files.pythonhosted.org/packages/5d/e2/c1ddf128b669f336ee42fea6d275ebfaf732cefb0ba1e37a2fb46c70c0fe/adbc_driver_manager-1.9.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:88fb2f5f6a9934065f08241979bfd9442b797bb290dc8930d4f75e2568f72096", size = 516607, upload-time = "2025-11-07T01:46:00.538Z" }, + { url = "https://files.pythonhosted.org/packages/4e/3a/f2c34724f8244e316cbb9a550e66c8afb786c72be0eef1e6e0f0a4943ddb/adbc_driver_manager-1.9.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:843bbcc78638cd408524c5474d8c83817142bfa5ad49693c056c7cf3d87b8e14", size = 3104038, upload-time = "2025-11-07T01:46:02.42Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ba/9bca6e811d0196d0070b19cee8f1019bfb250d494f98d79445ed8fd22fd6/adbc_driver_manager-1.9.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:33763cdd67ccc9574d15e1affcf3cdaf74351a93d91e6f85ed92704da732c150", size = 3111355, upload-time = "2025-11-07T01:46:03.908Z" }, + { url = "https://files.pythonhosted.org/packages/55/16/6e5895b661028a94ca0c96e174e3531c9e703afbcae3fd0260956094bfa9/adbc_driver_manager-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:c5995b029cc99d80f2dc4bd34c41320fe8185da0fdc115d424f7699d1d7ffbac", size = 721478, upload-time = "2025-11-07T01:46:12.358Z" }, + { url = "https://files.pythonhosted.org/packages/97/d5/7c9ac5cc73e710245bed0685982c806799b8206f2f4ce39a83c902d2e313/adbc_driver_manager-1.9.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3629bdc16eb0180c86dd17931066e1567a92f6fccd515b9e4eb5098ef906d9bf", size = 552607, upload-time = "2025-11-07T01:46:05.21Z" }, + { url = "https://files.pythonhosted.org/packages/0c/9c/f8c59509228cbdf22d40fa4182d64f9e93c02307f028b0ae218973543fe0/adbc_driver_manager-1.9.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d68b9c6c91ac97919ecc9255ccefda020fb6784b6aeb43d6d7b8a3509dc534f5", size = 533799, upload-time = "2025-11-07T01:46:06.726Z" }, + { url = "https://files.pythonhosted.org/packages/73/ee/ed402b9766ae3fe1b699965157720cf95222d86d152f766e5eff34d18599/adbc_driver_manager-1.9.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:12d012ebb18f46037dc36079222449dc4f2f9b8a5df753a0653a35ff211fefa2", size = 3170551, upload-time = "2025-11-07T01:46:08.745Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5a/c7377ae2f3d4518b6e28e1a01e279e2ac060887c02a09911aba3b34f1ee1/adbc_driver_manager-1.9.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:af252317c41aaea1de9ec40bfbaf300c773dfb2bd4445aa819b118349e84ebd4", size = 3159071, upload-time = "2025-11-07T01:46:10.743Z" }, ] [[package]] name = "adbc-driver-postgresql" -version = "1.8.0" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "adbc-driver-manager" }, { name = "importlib-resources" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/3a/3873d398f2df59bd1b20c803a24ef51068586554ea85ec8db6905f6ee639/adbc_driver_postgresql-1.8.0.tar.gz", hash = "sha256:66689c5616e41229c53ef222f63b60841f05b11610e60fb9029e54ac500e6d0d", size = 20306, upload-time = "2025-09-12T12:31:25.277Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/3c/285e8c41de78ba83e91fc7bc041ce6bede82efa1f9ee88312b8ba5e4ab96/adbc_driver_postgresql-1.9.0.tar.gz", hash = "sha256:32148a0965815b718908ba8ffd28cb78b7ab33fcddd4566315369319c9ce7f4e", size = 20428, upload-time = "2025-11-07T01:46:57.006Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/e9/2c68074a173fdaa69028f170317144607e1c6bd26dd343e014b1935ffc12/adbc_driver_postgresql-1.8.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:1f155941e8b7b75210f78a128758b5e12a45c370d462ea0da42e7763b1e3e84e", size = 2691625, upload-time = "2025-09-12T12:30:43.672Z" }, - { url = "https://files.pythonhosted.org/packages/04/50/880b39754cf3b590e37f940dcfe45e72de18c8363fbc510fb22a26274e9c/adbc_driver_postgresql-1.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:22e11fe708303753e3bcac7798f4dc0f4a110db2b7447fddaf811b2d7af026ca", size = 3003079, upload-time = "2025-09-12T12:30:45.848Z" }, - { url = "https://files.pythonhosted.org/packages/c0/75/fe2923c934dea56a05e331469c60bcac4558e656ccd4f1b2ecc252297ca6/adbc_driver_postgresql-1.8.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bed9d730905fddd61712fcad3954ccb7342c83a7f81bc51265eb33b1b83c5b6c", size = 3196334, upload-time = "2025-09-12T12:30:47.925Z" }, - { url = "https://files.pythonhosted.org/packages/36/43/5bb16e9220b23a21692e60c9f036c0e79b4f78409109df6c72b4b4abc945/adbc_driver_postgresql-1.8.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ef2fb1f60ef0e4195ddae0b8d52a5dd7f31d2b7d29ca88db1a805736ff5fbd05", size = 2855368, upload-time = "2025-09-12T12:30:51.127Z" }, - { url = "https://files.pythonhosted.org/packages/7a/36/2383ecf8888a77108b4cee249ee105d303851f9a08356fcc66d43bfbbc7c/adbc_driver_postgresql-1.8.0-py3-none-win_amd64.whl", hash = "sha256:08b78dd96d72d3855eb967bd46a7ca5e4fbc0b75c2a9fea6281d95cc6e934a8f", size = 2975792, upload-time = "2025-09-12T12:30:53.118Z" }, + { url = "https://files.pythonhosted.org/packages/95/14/eabd91d817cbb1c885e3ab756047eb8b895f2b48d2377536aac2aeb8bef8/adbc_driver_postgresql-1.9.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:b0eeb2f1986a45d7bc7397ed36962cc2313f7ffa3af2a3a93a6f18f75ecc47b6", size = 2990242, upload-time = "2025-11-07T01:46:14.639Z" }, + { url = "https://files.pythonhosted.org/packages/5f/5f/6817e4d79a2e26e3b0bb438c12a03c07781b63e49c899f71beb67258baeb/adbc_driver_postgresql-1.9.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b3880e7fccca9dd76bb862353c0c77974eceacf1d6a971e79f3ef76f6672edf7", size = 3270220, upload-time = "2025-11-07T01:46:17.297Z" }, + { url = "https://files.pythonhosted.org/packages/f6/af/5b590d43a2369efda1245b6a619edc3b018554fe4d44659439db21577c22/adbc_driver_postgresql-1.9.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a80a47d722c757e86f52fa1be708b7fed534d84458bcebecc7f27a4e81c6897e", size = 3756944, upload-time = "2025-11-07T01:46:19.859Z" }, + { url = "https://files.pythonhosted.org/packages/44/7a/aa7b76a5a376f2b55869b6511d9ad27cd2c6dfa0b3d7dce037d01e740bb8/adbc_driver_postgresql-1.9.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0aa0a49a4c17fec4dce17217083aa03457f5dd00d18fe10693b6a9d98812211a", size = 3430108, upload-time = "2025-11-07T01:46:21.713Z" }, + { url = "https://files.pythonhosted.org/packages/fa/dc/3dacf3314ff0c58ef88363c7c1ad9f3cb4a09d6ea94e2018d1daf9d211a9/adbc_driver_postgresql-1.9.0-py3-none-win_amd64.whl", hash = "sha256:a8164ea2985a1ec8dd5ed8bc71d55f8d4967a7273cbb03765bac111333075929", size = 3019152, upload-time = "2025-11-07T01:46:23.844Z" }, ] [[package]] name = "adbc-driver-sqlite" -version = "1.8.0" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "adbc-driver-manager" }, { name = "importlib-resources" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/5f/2a6f0b00672e20406532f3b9b0cd1ec4345af17eb9c3a1e496b02cc02c44/adbc_driver_sqlite-1.8.0.tar.gz", hash = "sha256:a48c40a2ba2e33b73df9f2b93ed375e72d71d754035574d0d194125fed39d98c", size = 18309, upload-time = "2025-09-12T12:31:27.833Z" } +sdist = { url = "https://files.pythonhosted.org/packages/53/3c/98c652fb3892f56a53c55a50948fdcb5b575ff78a8241f34b974ae0f4f17/adbc_driver_sqlite-1.9.0.tar.gz", hash = "sha256:446db7ee9e269fc21241b4325267dfb828528179ad54729c11965616db70e21e", size = 18294, upload-time = "2025-11-07T01:46:58.549Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/70/b40ce37ecae79ab74d5bcf62700d0abcd2ea57e3a2be41e5ca7b2af9ea6d/adbc_driver_sqlite-1.8.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:fbfac5011e4d743044a95f0befbf2c2f3afc4c4fb61bb4184bf0e5a6e7362d74", size = 1043934, upload-time = "2025-09-12T12:31:14.218Z" }, - { url = "https://files.pythonhosted.org/packages/51/bb/14d27d8765f3aba2c84176beb00fe0f7415015b0f7b9cd64661048c53a93/adbc_driver_sqlite-1.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7ce28d08da6c34e5aaa43d85e1179c304c9d8d487c86d2dcabc6ef115f0b7937", size = 1010543, upload-time = "2025-09-12T12:31:16.07Z" }, - { url = "https://files.pythonhosted.org/packages/d5/3c/c318ca73c9398c00795d25a64e9fbc09146cd148b46ff7582fd95ceb1c48/adbc_driver_sqlite-1.8.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b3ca480ef8fc0721790d9ebe7706cb11dea28fbbf98c56ae6c6024da827829ba", size = 957091, upload-time = "2025-09-12T12:31:17.517Z" }, - { url = "https://files.pythonhosted.org/packages/15/18/0cfe03d8ae1ec6f33cc01d8533c8b0e8202b4174332d89efaf01208f5c48/adbc_driver_sqlite-1.8.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d808b5cc11ed02a731fdf3d76e14a588add17b6065745be6c26f4f5cd05a6a14", size = 980254, upload-time = "2025-09-12T12:31:19.229Z" }, - { url = "https://files.pythonhosted.org/packages/de/cc/52deb7f2a069fd0d2025ce264e738fcca3cc8b37d5b1cfb0905889c48950/adbc_driver_sqlite-1.8.0-py3-none-win_amd64.whl", hash = "sha256:44d4131d3ffb7ec8563ac82d8662f0d7431b748be44f19203105ea2d249e1d26", size = 955904, upload-time = "2025-09-12T12:31:20.995Z" }, + { url = "https://files.pythonhosted.org/packages/6a/2e/7be376ddc4bae4b760d0d178c764315627a531f146ecb5e00f7470ea09ac/adbc_driver_sqlite-1.9.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:1de17693d09f379c594cf3d22a21595e45c6e87acd4b8735ea1f2ddddb2ba021", size = 1051101, upload-time = "2025-11-07T01:46:45.017Z" }, + { url = "https://files.pythonhosted.org/packages/33/83/5906fecc68c14f4f8aa11dd1eeec3372cd084597a4cee9f9ff769cad63d9/adbc_driver_sqlite-1.9.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7e7a064719e75806e70dfff4262b099470b5cc045813b69d761ff708edbdaea9", size = 1029291, upload-time = "2025-11-07T01:46:46.779Z" }, + { url = "https://files.pythonhosted.org/packages/26/39/6499d79d331471b236b23a462171ff575966d465705ec01e4c443f8f422a/adbc_driver_sqlite-1.9.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d4bbcde3c42b175b4b5973c120cce6fce3d888b721189842554d6ba1fdb551ff", size = 1138524, upload-time = "2025-11-07T01:46:48.844Z" }, + { url = "https://files.pythonhosted.org/packages/2b/24/c05ce956c6f58c9043222e452253a9a5905e3fd7a3ff284de6e46900de5b/adbc_driver_sqlite-1.9.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb18551c820188cd0de62e0e94e949a668033fbc62ace4ef1ce696aadd0d18d7", size = 1157805, upload-time = "2025-11-07T01:46:50.855Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/21bca34b10a6e4a8b11360f494c5508d29afa7ff43fab7129412f44ecd78/adbc_driver_sqlite-1.9.0-py3-none-win_amd64.whl", hash = "sha256:c43630020c188181c7d8d4b68718fc4a807912da0e150453add6c67324a1169e", size = 955792, upload-time = "2025-11-07T01:46:52.411Z" }, ] [[package]] @@ -274,11 +279,11 @@ wheels = [ [[package]] name = "aioitertools" -version = "0.12.0" +version = "0.13.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/de/38491a84ab323b47c7f86e94d2830e748780525f7a10c8600b67ead7e9ea/aioitertools-0.12.0.tar.gz", hash = "sha256:c2a9055b4fbb7705f561b9d86053e8af5d10cc845d22c32008c43490b2d8dd6b", size = 19369, upload-time = "2024-09-02T03:33:40.349Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/3c/53c4a17a05fb9ea2313ee1777ff53f5e001aefd5cc85aa2f4c2d982e1e38/aioitertools-0.13.0.tar.gz", hash = "sha256:620bd241acc0bbb9ec819f1ab215866871b4bbd1f73836a55f799200ee86950c", size = 19322, upload-time = "2025-11-06T22:17:07.609Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/13/58b70a580de00893223d61de8fea167877a3aed97d4a5e1405c9159ef925/aioitertools-0.12.0-py3-none-any.whl", hash = "sha256:fc1f5fac3d737354de8831cbba3eb04f79dd649d8f3afb4c5b114925e662a796", size = 24345, upload-time = "2024-09-02T03:34:59.454Z" }, + { url = "https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl", hash = "sha256:0be0292b856f08dfac90e31f4739432f4cb6d7520ab9eb73e143f4f2fa5259be", size = 24182, upload-time = "2025-11-06T22:17:06.502Z" }, ] [[package]] @@ -478,16 +483,16 @@ wheels = [ [[package]] name = "astroid" -version = "4.0.1" +version = "4.0.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14'", "python_full_version == '3.13.*'", "python_full_version == '3.12.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/d1/6eee8726a863f28ff50d26c5eacb1a590f96ccbb273ce0a8c047ffb10f5a/astroid-4.0.1.tar.gz", hash = "sha256:0d778ec0def05b935e198412e62f9bcca8b3b5c39fdbe50b0ba074005e477aab", size = 405414, upload-time = "2025-10-11T15:15:42.6Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/22/97df040e15d964e592d3a180598ace67e91b7c559d8298bdb3c949dc6e42/astroid-4.0.2.tar.gz", hash = "sha256:ac8fb7ca1c08eb9afec91ccc23edbd8ac73bb22cbdd7da1d488d9fb8d6579070", size = 405714, upload-time = "2025-11-09T21:21:18.373Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/f4/034361a9cbd9284ef40c8ad107955ede4efae29cbc17a059f63f6569c06a/astroid-4.0.1-py3-none-any.whl", hash = "sha256:37ab2f107d14dc173412327febf6c78d39590fdafcb44868f03b6c03452e3db0", size = 276268, upload-time = "2025-10-11T15:15:40.585Z" }, + { url = "https://files.pythonhosted.org/packages/93/ac/a85b4bfb4cf53221513e27f33cc37ad158fce02ac291d18bee6b49ab477d/astroid-4.0.2-py3-none-any.whl", hash = "sha256:d7546c00a12efc32650b19a2bb66a153883185d3179ab0d4868086f807338b9b", size = 276354, upload-time = "2025-11-09T21:21:16.54Z" }, ] [[package]] @@ -1018,101 +1023,101 @@ wheels = [ [[package]] name = "coverage" -version = "7.11.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/38/ee22495420457259d2f3390309505ea98f98a5eed40901cf62196abad006/coverage-7.11.0.tar.gz", hash = "sha256:167bd504ac1ca2af7ff3b81d245dfea0292c5032ebef9d66cc08a7d28c1b8050", size = 811905, upload-time = "2025-10-15T15:15:08.542Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/95/c49df0aceb5507a80b9fe5172d3d39bf23f05be40c23c8d77d556df96cec/coverage-7.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb53f1e8adeeb2e78962bade0c08bfdc461853c7969706ed901821e009b35e31", size = 215800, upload-time = "2025-10-15T15:12:19.824Z" }, - { url = "https://files.pythonhosted.org/packages/dc/c6/7bb46ce01ed634fff1d7bb53a54049f539971862cc388b304ff3c51b4f66/coverage-7.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9a03ec6cb9f40a5c360f138b88266fd8f58408d71e89f536b4f91d85721d075", size = 216198, upload-time = "2025-10-15T15:12:22.549Z" }, - { url = "https://files.pythonhosted.org/packages/94/b2/75d9d8fbf2900268aca5de29cd0a0fe671b0f69ef88be16767cc3c828b85/coverage-7.11.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0d7f0616c557cbc3d1c2090334eddcbb70e1ae3a40b07222d62b3aa47f608fab", size = 242953, upload-time = "2025-10-15T15:12:24.139Z" }, - { url = "https://files.pythonhosted.org/packages/65/ac/acaa984c18f440170525a8743eb4b6c960ace2dbad80dc22056a437fc3c6/coverage-7.11.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e44a86a47bbdf83b0a3ea4d7df5410d6b1a0de984fbd805fa5101f3624b9abe0", size = 244766, upload-time = "2025-10-15T15:12:25.974Z" }, - { url = "https://files.pythonhosted.org/packages/d8/0d/938d0bff76dfa4a6b228c3fc4b3e1c0e2ad4aa6200c141fcda2bd1170227/coverage-7.11.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:596763d2f9a0ee7eec6e643e29660def2eef297e1de0d334c78c08706f1cb785", size = 246625, upload-time = "2025-10-15T15:12:27.387Z" }, - { url = "https://files.pythonhosted.org/packages/38/54/8f5f5e84bfa268df98f46b2cb396b1009734cfb1e5d6adb663d284893b32/coverage-7.11.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ef55537ff511b5e0a43edb4c50a7bf7ba1c3eea20b4f49b1490f1e8e0e42c591", size = 243568, upload-time = "2025-10-15T15:12:28.799Z" }, - { url = "https://files.pythonhosted.org/packages/68/30/8ba337c2877fe3f2e1af0ed7ff4be0c0c4aca44d6f4007040f3ca2255e99/coverage-7.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cbabd8f4d0d3dc571d77ae5bdbfa6afe5061e679a9d74b6797c48d143307088", size = 244665, upload-time = "2025-10-15T15:12:30.297Z" }, - { url = "https://files.pythonhosted.org/packages/cc/fb/c6f1d6d9a665536b7dde2333346f0cc41dc6a60bd1ffc10cd5c33e7eb000/coverage-7.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e24045453384e0ae2a587d562df2a04d852672eb63051d16096d3f08aa4c7c2f", size = 242681, upload-time = "2025-10-15T15:12:32.326Z" }, - { url = "https://files.pythonhosted.org/packages/be/38/1b532319af5f991fa153c20373291dc65c2bf532af7dbcffdeef745c8f79/coverage-7.11.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:7161edd3426c8d19bdccde7d49e6f27f748f3c31cc350c5de7c633fea445d866", size = 242912, upload-time = "2025-10-15T15:12:34.079Z" }, - { url = "https://files.pythonhosted.org/packages/67/3d/f39331c60ef6050d2a861dc1b514fa78f85f792820b68e8c04196ad733d6/coverage-7.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d4ed4de17e692ba6415b0587bc7f12bc80915031fc9db46a23ce70fc88c9841", size = 243559, upload-time = "2025-10-15T15:12:35.809Z" }, - { url = "https://files.pythonhosted.org/packages/4b/55/cb7c9df9d0495036ce582a8a2958d50c23cd73f84a23284bc23bd4711a6f/coverage-7.11.0-cp310-cp310-win32.whl", hash = "sha256:765c0bc8fe46f48e341ef737c91c715bd2a53a12792592296a095f0c237e09cf", size = 218266, upload-time = "2025-10-15T15:12:37.429Z" }, - { url = "https://files.pythonhosted.org/packages/68/a8/b79cb275fa7bd0208767f89d57a1b5f6ba830813875738599741b97c2e04/coverage-7.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:24d6f3128f1b2d20d84b24f4074475457faedc3d4613a7e66b5e769939c7d969", size = 219169, upload-time = "2025-10-15T15:12:39.25Z" }, - { url = "https://files.pythonhosted.org/packages/49/3a/ee1074c15c408ddddddb1db7dd904f6b81bc524e01f5a1c5920e13dbde23/coverage-7.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d58ecaa865c5b9fa56e35efc51d1014d4c0d22838815b9fce57a27dd9576847", size = 215912, upload-time = "2025-10-15T15:12:40.665Z" }, - { url = "https://files.pythonhosted.org/packages/70/c4/9f44bebe5cb15f31608597b037d78799cc5f450044465bcd1ae8cb222fe1/coverage-7.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b679e171f1c104a5668550ada700e3c4937110dbdd153b7ef9055c4f1a1ee3cc", size = 216310, upload-time = "2025-10-15T15:12:42.461Z" }, - { url = "https://files.pythonhosted.org/packages/42/01/5e06077cfef92d8af926bdd86b84fb28bf9bc6ad27343d68be9b501d89f2/coverage-7.11.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ca61691ba8c5b6797deb221a0d09d7470364733ea9c69425a640f1f01b7c5bf0", size = 246706, upload-time = "2025-10-15T15:12:44.001Z" }, - { url = "https://files.pythonhosted.org/packages/40/b8/7a3f1f33b35cc4a6c37e759137533119560d06c0cc14753d1a803be0cd4a/coverage-7.11.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aef1747ede4bd8ca9cfc04cc3011516500c6891f1b33a94add3253f6f876b7b7", size = 248634, upload-time = "2025-10-15T15:12:45.768Z" }, - { url = "https://files.pythonhosted.org/packages/7a/41/7f987eb33de386bc4c665ab0bf98d15fcf203369d6aacae74f5dd8ec489a/coverage-7.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1839d08406e4cba2953dcc0ffb312252f14d7c4c96919f70167611f4dee2623", size = 250741, upload-time = "2025-10-15T15:12:47.222Z" }, - { url = "https://files.pythonhosted.org/packages/23/c1/a4e0ca6a4e83069fb8216b49b30a7352061ca0cb38654bd2dc96b7b3b7da/coverage-7.11.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e0eb0a2dcc62478eb5b4cbb80b97bdee852d7e280b90e81f11b407d0b81c4287", size = 246837, upload-time = "2025-10-15T15:12:48.904Z" }, - { url = "https://files.pythonhosted.org/packages/5d/03/ced062a17f7c38b4728ff76c3acb40d8465634b20b4833cdb3cc3a74e115/coverage-7.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bc1fbea96343b53f65d5351d8fd3b34fd415a2670d7c300b06d3e14a5af4f552", size = 248429, upload-time = "2025-10-15T15:12:50.73Z" }, - { url = "https://files.pythonhosted.org/packages/97/af/a7c6f194bb8c5a2705ae019036b8fe7f49ea818d638eedb15fdb7bed227c/coverage-7.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:214b622259dd0cf435f10241f1333d32caa64dbc27f8790ab693428a141723de", size = 246490, upload-time = "2025-10-15T15:12:52.646Z" }, - { url = "https://files.pythonhosted.org/packages/ab/c3/aab4df02b04a8fde79068c3c41ad7a622b0ef2b12e1ed154da986a727c3f/coverage-7.11.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:258d9967520cca899695d4eb7ea38be03f06951d6ca2f21fb48b1235f791e601", size = 246208, upload-time = "2025-10-15T15:12:54.586Z" }, - { url = "https://files.pythonhosted.org/packages/30/d8/e282ec19cd658238d60ed404f99ef2e45eed52e81b866ab1518c0d4163cf/coverage-7.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cf9e6ff4ca908ca15c157c409d608da77a56a09877b97c889b98fb2c32b6465e", size = 247126, upload-time = "2025-10-15T15:12:56.485Z" }, - { url = "https://files.pythonhosted.org/packages/d1/17/a635fa07fac23adb1a5451ec756216768c2767efaed2e4331710342a3399/coverage-7.11.0-cp311-cp311-win32.whl", hash = "sha256:fcc15fc462707b0680cff6242c48625da7f9a16a28a41bb8fd7a4280920e676c", size = 218314, upload-time = "2025-10-15T15:12:58.365Z" }, - { url = "https://files.pythonhosted.org/packages/2a/29/2ac1dfcdd4ab9a70026edc8d715ece9b4be9a1653075c658ee6f271f394d/coverage-7.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:865965bf955d92790f1facd64fe7ff73551bd2c1e7e6b26443934e9701ba30b9", size = 219203, upload-time = "2025-10-15T15:12:59.902Z" }, - { url = "https://files.pythonhosted.org/packages/03/21/5ce8b3a0133179115af4c041abf2ee652395837cb896614beb8ce8ddcfd9/coverage-7.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:5693e57a065760dcbeb292d60cc4d0231a6d4b6b6f6a3191561e1d5e8820b745", size = 217879, upload-time = "2025-10-15T15:13:01.35Z" }, - { url = "https://files.pythonhosted.org/packages/c4/db/86f6906a7c7edc1a52b2c6682d6dd9be775d73c0dfe2b84f8923dfea5784/coverage-7.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9c49e77811cf9d024b95faf86c3f059b11c0c9be0b0d61bc598f453703bd6fd1", size = 216098, upload-time = "2025-10-15T15:13:02.916Z" }, - { url = "https://files.pythonhosted.org/packages/21/54/e7b26157048c7ba555596aad8569ff903d6cd67867d41b75287323678ede/coverage-7.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a61e37a403a778e2cda2a6a39abcc895f1d984071942a41074b5c7ee31642007", size = 216331, upload-time = "2025-10-15T15:13:04.403Z" }, - { url = "https://files.pythonhosted.org/packages/b9/19/1ce6bf444f858b83a733171306134a0544eaddf1ca8851ede6540a55b2ad/coverage-7.11.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c79cae102bb3b1801e2ef1511fb50e91ec83a1ce466b2c7c25010d884336de46", size = 247825, upload-time = "2025-10-15T15:13:05.92Z" }, - { url = "https://files.pythonhosted.org/packages/71/0b/d3bcbbc259fcced5fb67c5d78f6e7ee965f49760c14afd931e9e663a83b2/coverage-7.11.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:16ce17ceb5d211f320b62df002fa7016b7442ea0fd260c11cec8ce7730954893", size = 250573, upload-time = "2025-10-15T15:13:07.471Z" }, - { url = "https://files.pythonhosted.org/packages/58/8d/b0ff3641a320abb047258d36ed1c21d16be33beed4152628331a1baf3365/coverage-7.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80027673e9d0bd6aef86134b0771845e2da85755cf686e7c7c59566cf5a89115", size = 251706, upload-time = "2025-10-15T15:13:09.4Z" }, - { url = "https://files.pythonhosted.org/packages/59/c8/5a586fe8c7b0458053d9c687f5cff515a74b66c85931f7fe17a1c958b4ac/coverage-7.11.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d3ffa07a08657306cd2215b0da53761c4d73cb54d9143b9303a6481ec0cd415", size = 248221, upload-time = "2025-10-15T15:13:10.964Z" }, - { url = "https://files.pythonhosted.org/packages/d0/ff/3a25e3132804ba44cfa9a778cdf2b73dbbe63ef4b0945e39602fc896ba52/coverage-7.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a3b6a5f8b2524fd6c1066bc85bfd97e78709bb5e37b5b94911a6506b65f47186", size = 249624, upload-time = "2025-10-15T15:13:12.5Z" }, - { url = "https://files.pythonhosted.org/packages/c5/12/ff10c8ce3895e1b17a73485ea79ebc1896a9e466a9d0f4aef63e0d17b718/coverage-7.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fcc0a4aa589de34bc56e1a80a740ee0f8c47611bdfb28cd1849de60660f3799d", size = 247744, upload-time = "2025-10-15T15:13:14.554Z" }, - { url = "https://files.pythonhosted.org/packages/16/02/d500b91f5471b2975947e0629b8980e5e90786fe316b6d7299852c1d793d/coverage-7.11.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:dba82204769d78c3fd31b35c3d5f46e06511936c5019c39f98320e05b08f794d", size = 247325, upload-time = "2025-10-15T15:13:16.438Z" }, - { url = "https://files.pythonhosted.org/packages/77/11/dee0284fbbd9cd64cfce806b827452c6df3f100d9e66188e82dfe771d4af/coverage-7.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:81b335f03ba67309a95210caf3eb43bd6fe75a4e22ba653ef97b4696c56c7ec2", size = 249180, upload-time = "2025-10-15T15:13:17.959Z" }, - { url = "https://files.pythonhosted.org/packages/59/1b/cdf1def928f0a150a057cab03286774e73e29c2395f0d30ce3d9e9f8e697/coverage-7.11.0-cp312-cp312-win32.whl", hash = "sha256:037b2d064c2f8cc8716fe4d39cb705779af3fbf1ba318dc96a1af858888c7bb5", size = 218479, upload-time = "2025-10-15T15:13:19.608Z" }, - { url = "https://files.pythonhosted.org/packages/ff/55/e5884d55e031da9c15b94b90a23beccc9d6beee65e9835cd6da0a79e4f3a/coverage-7.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:d66c0104aec3b75e5fd897e7940188ea1892ca1d0235316bf89286d6a22568c0", size = 219290, upload-time = "2025-10-15T15:13:21.593Z" }, - { url = "https://files.pythonhosted.org/packages/23/a8/faa930cfc71c1d16bc78f9a19bb73700464f9c331d9e547bfbc1dbd3a108/coverage-7.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:d91ebeac603812a09cf6a886ba6e464f3bbb367411904ae3790dfe28311b15ad", size = 217924, upload-time = "2025-10-15T15:13:23.39Z" }, - { url = "https://files.pythonhosted.org/packages/60/7f/85e4dfe65e400645464b25c036a26ac226cf3a69d4a50c3934c532491cdd/coverage-7.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cc3f49e65ea6e0d5d9bd60368684fe52a704d46f9e7fc413918f18d046ec40e1", size = 216129, upload-time = "2025-10-15T15:13:25.371Z" }, - { url = "https://files.pythonhosted.org/packages/96/5d/dc5fa98fea3c175caf9d360649cb1aa3715e391ab00dc78c4c66fabd7356/coverage-7.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f39ae2f63f37472c17b4990f794035c9890418b1b8cca75c01193f3c8d3e01be", size = 216380, upload-time = "2025-10-15T15:13:26.976Z" }, - { url = "https://files.pythonhosted.org/packages/b2/f5/3da9cc9596708273385189289c0e4d8197d37a386bdf17619013554b3447/coverage-7.11.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7db53b5cdd2917b6eaadd0b1251cf4e7d96f4a8d24e174bdbdf2f65b5ea7994d", size = 247375, upload-time = "2025-10-15T15:13:28.923Z" }, - { url = "https://files.pythonhosted.org/packages/65/6c/f7f59c342359a235559d2bc76b0c73cfc4bac7d61bb0df210965cb1ecffd/coverage-7.11.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10ad04ac3a122048688387828b4537bc9cf60c0bf4869c1e9989c46e45690b82", size = 249978, upload-time = "2025-10-15T15:13:30.525Z" }, - { url = "https://files.pythonhosted.org/packages/e7/8c/042dede2e23525e863bf1ccd2b92689692a148d8b5fd37c37899ba882645/coverage-7.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4036cc9c7983a2b1f2556d574d2eb2154ac6ed55114761685657e38782b23f52", size = 251253, upload-time = "2025-10-15T15:13:32.174Z" }, - { url = "https://files.pythonhosted.org/packages/7b/a9/3c58df67bfa809a7bddd786356d9c5283e45d693edb5f3f55d0986dd905a/coverage-7.11.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7ab934dd13b1c5e94b692b1e01bd87e4488cb746e3a50f798cb9464fd128374b", size = 247591, upload-time = "2025-10-15T15:13:34.147Z" }, - { url = "https://files.pythonhosted.org/packages/26/5b/c7f32efd862ee0477a18c41e4761305de6ddd2d49cdeda0c1116227570fd/coverage-7.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59a6e5a265f7cfc05f76e3bb53eca2e0dfe90f05e07e849930fecd6abb8f40b4", size = 249411, upload-time = "2025-10-15T15:13:38.425Z" }, - { url = "https://files.pythonhosted.org/packages/76/b5/78cb4f1e86c1611431c990423ec0768122905b03837e1b4c6a6f388a858b/coverage-7.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df01d6c4c81e15a7c88337b795bb7595a8596e92310266b5072c7e301168efbd", size = 247303, upload-time = "2025-10-15T15:13:40.464Z" }, - { url = "https://files.pythonhosted.org/packages/87/c9/23c753a8641a330f45f221286e707c427e46d0ffd1719b080cedc984ec40/coverage-7.11.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8c934bd088eed6174210942761e38ee81d28c46de0132ebb1801dbe36a390dcc", size = 247157, upload-time = "2025-10-15T15:13:42.087Z" }, - { url = "https://files.pythonhosted.org/packages/c5/42/6e0cc71dc8a464486e944a4fa0d85bdec031cc2969e98ed41532a98336b9/coverage-7.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a03eaf7ec24078ad64a07f02e30060aaf22b91dedf31a6b24d0d98d2bba7f48", size = 248921, upload-time = "2025-10-15T15:13:43.715Z" }, - { url = "https://files.pythonhosted.org/packages/e8/1c/743c2ef665e6858cccb0f84377dfe3a4c25add51e8c7ef19249be92465b6/coverage-7.11.0-cp313-cp313-win32.whl", hash = "sha256:695340f698a5f56f795b2836abe6fb576e7c53d48cd155ad2f80fd24bc63a040", size = 218526, upload-time = "2025-10-15T15:13:45.336Z" }, - { url = "https://files.pythonhosted.org/packages/ff/d5/226daadfd1bf8ddbccefbd3aa3547d7b960fb48e1bdac124e2dd13a2b71a/coverage-7.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:2727d47fce3ee2bac648528e41455d1b0c46395a087a229deac75e9f88ba5a05", size = 219317, upload-time = "2025-10-15T15:13:47.401Z" }, - { url = "https://files.pythonhosted.org/packages/97/54/47db81dcbe571a48a298f206183ba8a7ba79200a37cd0d9f4788fcd2af4a/coverage-7.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:0efa742f431529699712b92ecdf22de8ff198df41e43aeaaadf69973eb93f17a", size = 217948, upload-time = "2025-10-15T15:13:49.096Z" }, - { url = "https://files.pythonhosted.org/packages/e5/8b/cb68425420154e7e2a82fd779a8cc01549b6fa83c2ad3679cd6c088ebd07/coverage-7.11.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:587c38849b853b157706407e9ebdca8fd12f45869edb56defbef2daa5fb0812b", size = 216837, upload-time = "2025-10-15T15:13:51.09Z" }, - { url = "https://files.pythonhosted.org/packages/33/55/9d61b5765a025685e14659c8d07037247de6383c0385757544ffe4606475/coverage-7.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b971bdefdd75096163dd4261c74be813c4508477e39ff7b92191dea19f24cd37", size = 217061, upload-time = "2025-10-15T15:13:52.747Z" }, - { url = "https://files.pythonhosted.org/packages/52/85/292459c9186d70dcec6538f06ea251bc968046922497377bf4a1dc9a71de/coverage-7.11.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:269bfe913b7d5be12ab13a95f3a76da23cf147be7fa043933320ba5625f0a8de", size = 258398, upload-time = "2025-10-15T15:13:54.45Z" }, - { url = "https://files.pythonhosted.org/packages/1f/e2/46edd73fb8bf51446c41148d81944c54ed224854812b6ca549be25113ee0/coverage-7.11.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:dadbcce51a10c07b7c72b0ce4a25e4b6dcb0c0372846afb8e5b6307a121eb99f", size = 260574, upload-time = "2025-10-15T15:13:56.145Z" }, - { url = "https://files.pythonhosted.org/packages/07/5e/1df469a19007ff82e2ca8fe509822820a31e251f80ee7344c34f6cd2ec43/coverage-7.11.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ed43fa22c6436f7957df036331f8fe4efa7af132054e1844918866cd228af6c", size = 262797, upload-time = "2025-10-15T15:13:58.635Z" }, - { url = "https://files.pythonhosted.org/packages/f9/50/de216b31a1434b94d9b34a964c09943c6be45069ec704bfc379d8d89a649/coverage-7.11.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9516add7256b6713ec08359b7b05aeff8850c98d357784c7205b2e60aa2513fa", size = 257361, upload-time = "2025-10-15T15:14:00.409Z" }, - { url = "https://files.pythonhosted.org/packages/82/1e/3f9f8344a48111e152e0fd495b6fff13cc743e771a6050abf1627a7ba918/coverage-7.11.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb92e47c92fcbcdc692f428da67db33337fa213756f7adb6a011f7b5a7a20740", size = 260349, upload-time = "2025-10-15T15:14:02.188Z" }, - { url = "https://files.pythonhosted.org/packages/65/9b/3f52741f9e7d82124272f3070bbe316006a7de1bad1093f88d59bfc6c548/coverage-7.11.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d06f4fc7acf3cabd6d74941d53329e06bab00a8fe10e4df2714f0b134bfc64ef", size = 258114, upload-time = "2025-10-15T15:14:03.907Z" }, - { url = "https://files.pythonhosted.org/packages/0b/8b/918f0e15f0365d50d3986bbd3338ca01178717ac5678301f3f547b6619e6/coverage-7.11.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:6fbcee1a8f056af07ecd344482f711f563a9eb1c2cad192e87df00338ec3cdb0", size = 256723, upload-time = "2025-10-15T15:14:06.324Z" }, - { url = "https://files.pythonhosted.org/packages/44/9e/7776829f82d3cf630878a7965a7d70cc6ca94f22c7d20ec4944f7148cb46/coverage-7.11.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dbbf012be5f32533a490709ad597ad8a8ff80c582a95adc8d62af664e532f9ca", size = 259238, upload-time = "2025-10-15T15:14:08.002Z" }, - { url = "https://files.pythonhosted.org/packages/9a/b8/49cf253e1e7a3bedb85199b201862dd7ca4859f75b6cf25ffa7298aa0760/coverage-7.11.0-cp313-cp313t-win32.whl", hash = "sha256:cee6291bb4fed184f1c2b663606a115c743df98a537c969c3c64b49989da96c2", size = 219180, upload-time = "2025-10-15T15:14:09.786Z" }, - { url = "https://files.pythonhosted.org/packages/ac/e1/1a541703826be7ae2125a0fb7f821af5729d56bb71e946e7b933cc7a89a4/coverage-7.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a386c1061bf98e7ea4758e4313c0ab5ecf57af341ef0f43a0bf26c2477b5c268", size = 220241, upload-time = "2025-10-15T15:14:11.471Z" }, - { url = "https://files.pythonhosted.org/packages/d5/d1/5ee0e0a08621140fd418ec4020f595b4d52d7eb429ae6a0c6542b4ba6f14/coverage-7.11.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f9ea02ef40bb83823b2b04964459d281688fe173e20643870bb5d2edf68bc836", size = 218510, upload-time = "2025-10-15T15:14:13.46Z" }, - { url = "https://files.pythonhosted.org/packages/f4/06/e923830c1985ce808e40a3fa3eb46c13350b3224b7da59757d37b6ce12b8/coverage-7.11.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c770885b28fb399aaf2a65bbd1c12bf6f307ffd112d6a76c5231a94276f0c497", size = 216110, upload-time = "2025-10-15T15:14:15.157Z" }, - { url = "https://files.pythonhosted.org/packages/42/82/cdeed03bfead45203fb651ed756dfb5266028f5f939e7f06efac4041dad5/coverage-7.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a3d0e2087dba64c86a6b254f43e12d264b636a39e88c5cc0a01a7c71bcfdab7e", size = 216395, upload-time = "2025-10-15T15:14:16.863Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ba/e1c80caffc3199aa699813f73ff097bc2df7b31642bdbc7493600a8f1de5/coverage-7.11.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:73feb83bb41c32811973b8565f3705caf01d928d972b72042b44e97c71fd70d1", size = 247433, upload-time = "2025-10-15T15:14:18.589Z" }, - { url = "https://files.pythonhosted.org/packages/80/c0/5b259b029694ce0a5bbc1548834c7ba3db41d3efd3474489d7efce4ceb18/coverage-7.11.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c6f31f281012235ad08f9a560976cc2fc9c95c17604ff3ab20120fe480169bca", size = 249970, upload-time = "2025-10-15T15:14:20.307Z" }, - { url = "https://files.pythonhosted.org/packages/8c/86/171b2b5e1aac7e2fd9b43f7158b987dbeb95f06d1fbecad54ad8163ae3e8/coverage-7.11.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9570ad567f880ef675673992222746a124b9595506826b210fbe0ce3f0499cd", size = 251324, upload-time = "2025-10-15T15:14:22.419Z" }, - { url = "https://files.pythonhosted.org/packages/1a/7e/7e10414d343385b92024af3932a27a1caf75c6e27ee88ba211221ff1a145/coverage-7.11.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8badf70446042553a773547a61fecaa734b55dc738cacf20c56ab04b77425e43", size = 247445, upload-time = "2025-10-15T15:14:24.205Z" }, - { url = "https://files.pythonhosted.org/packages/c4/3b/e4f966b21f5be8c4bf86ad75ae94efa0de4c99c7bbb8114476323102e345/coverage-7.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a09c1211959903a479e389685b7feb8a17f59ec5a4ef9afde7650bd5eabc2777", size = 249324, upload-time = "2025-10-15T15:14:26.234Z" }, - { url = "https://files.pythonhosted.org/packages/00/a2/8479325576dfcd909244d0df215f077f47437ab852ab778cfa2f8bf4d954/coverage-7.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:5ef83b107f50db3f9ae40f69e34b3bd9337456c5a7fe3461c7abf8b75dd666a2", size = 247261, upload-time = "2025-10-15T15:14:28.42Z" }, - { url = "https://files.pythonhosted.org/packages/7b/d8/3a9e2db19d94d65771d0f2e21a9ea587d11b831332a73622f901157cc24b/coverage-7.11.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f91f927a3215b8907e214af77200250bb6aae36eca3f760f89780d13e495388d", size = 247092, upload-time = "2025-10-15T15:14:30.784Z" }, - { url = "https://files.pythonhosted.org/packages/b3/b1/bbca3c472544f9e2ad2d5116b2379732957048be4b93a9c543fcd0207e5f/coverage-7.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cdbcd376716d6b7fbfeedd687a6c4be019c5a5671b35f804ba76a4c0a778cba4", size = 248755, upload-time = "2025-10-15T15:14:32.585Z" }, - { url = "https://files.pythonhosted.org/packages/89/49/638d5a45a6a0f00af53d6b637c87007eb2297042186334e9923a61aa8854/coverage-7.11.0-cp314-cp314-win32.whl", hash = "sha256:bab7ec4bb501743edc63609320aaec8cd9188b396354f482f4de4d40a9d10721", size = 218793, upload-time = "2025-10-15T15:14:34.972Z" }, - { url = "https://files.pythonhosted.org/packages/30/cc/b675a51f2d068adb3cdf3799212c662239b0ca27f4691d1fff81b92ea850/coverage-7.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:3d4ba9a449e9364a936a27322b20d32d8b166553bfe63059bd21527e681e2fad", size = 219587, upload-time = "2025-10-15T15:14:37.047Z" }, - { url = "https://files.pythonhosted.org/packages/93/98/5ac886876026de04f00820e5094fe22166b98dcb8b426bf6827aaf67048c/coverage-7.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:ce37f215223af94ef0f75ac68ea096f9f8e8c8ec7d6e8c346ee45c0d363f0479", size = 218168, upload-time = "2025-10-15T15:14:38.861Z" }, - { url = "https://files.pythonhosted.org/packages/14/d1/b4145d35b3e3ecf4d917e97fc8895bcf027d854879ba401d9ff0f533f997/coverage-7.11.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f413ce6e07e0d0dc9c433228727b619871532674b45165abafe201f200cc215f", size = 216850, upload-time = "2025-10-15T15:14:40.651Z" }, - { url = "https://files.pythonhosted.org/packages/ca/d1/7f645fc2eccd318369a8a9948acc447bb7c1ade2911e31d3c5620544c22b/coverage-7.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:05791e528a18f7072bf5998ba772fe29db4da1234c45c2087866b5ba4dea710e", size = 217071, upload-time = "2025-10-15T15:14:42.755Z" }, - { url = "https://files.pythonhosted.org/packages/54/7d/64d124649db2737ceced1dfcbdcb79898d5868d311730f622f8ecae84250/coverage-7.11.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cacb29f420cfeb9283b803263c3b9a068924474ff19ca126ba9103e1278dfa44", size = 258570, upload-time = "2025-10-15T15:14:44.542Z" }, - { url = "https://files.pythonhosted.org/packages/6c/3f/6f5922f80dc6f2d8b2c6f974835c43f53eb4257a7797727e6ca5b7b2ec1f/coverage-7.11.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314c24e700d7027ae3ab0d95fbf8d53544fca1f20345fd30cd219b737c6e58d3", size = 260738, upload-time = "2025-10-15T15:14:46.436Z" }, - { url = "https://files.pythonhosted.org/packages/0e/5f/9e883523c4647c860b3812b417a2017e361eca5b635ee658387dc11b13c1/coverage-7.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:630d0bd7a293ad2fc8b4b94e5758c8b2536fdf36c05f1681270203e463cbfa9b", size = 262994, upload-time = "2025-10-15T15:14:48.3Z" }, - { url = "https://files.pythonhosted.org/packages/07/bb/43b5a8e94c09c8bf51743ffc65c4c841a4ca5d3ed191d0a6919c379a1b83/coverage-7.11.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e89641f5175d65e2dbb44db15fe4ea48fade5d5bbb9868fdc2b4fce22f4a469d", size = 257282, upload-time = "2025-10-15T15:14:50.236Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e5/0ead8af411411330b928733e1d201384b39251a5f043c1612970310e8283/coverage-7.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c9f08ea03114a637dab06cedb2e914da9dc67fa52c6015c018ff43fdde25b9c2", size = 260430, upload-time = "2025-10-15T15:14:52.413Z" }, - { url = "https://files.pythonhosted.org/packages/ae/66/03dd8bb0ba5b971620dcaac145461950f6d8204953e535d2b20c6b65d729/coverage-7.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce9f3bde4e9b031eaf1eb61df95c1401427029ea1bfddb8621c1161dcb0fa02e", size = 258190, upload-time = "2025-10-15T15:14:54.268Z" }, - { url = "https://files.pythonhosted.org/packages/45/ae/28a9cce40bf3174426cb2f7e71ee172d98e7f6446dff936a7ccecee34b14/coverage-7.11.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:e4dc07e95495923d6fd4d6c27bf70769425b71c89053083843fd78f378558996", size = 256658, upload-time = "2025-10-15T15:14:56.436Z" }, - { url = "https://files.pythonhosted.org/packages/5c/7c/3a44234a8599513684bfc8684878fd7b126c2760f79712bb78c56f19efc4/coverage-7.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:424538266794db2861db4922b05d729ade0940ee69dcf0591ce8f69784db0e11", size = 259342, upload-time = "2025-10-15T15:14:58.538Z" }, - { url = "https://files.pythonhosted.org/packages/e1/e6/0108519cba871af0351725ebdb8660fd7a0fe2ba3850d56d32490c7d9b4b/coverage-7.11.0-cp314-cp314t-win32.whl", hash = "sha256:4c1eeb3fb8eb9e0190bebafd0462936f75717687117339f708f395fe455acc73", size = 219568, upload-time = "2025-10-15T15:15:00.382Z" }, - { url = "https://files.pythonhosted.org/packages/c9/76/44ba876e0942b4e62fdde23ccb029ddb16d19ba1bef081edd00857ba0b16/coverage-7.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b56efee146c98dbf2cf5cffc61b9829d1e94442df4d7398b26892a53992d3547", size = 220687, upload-time = "2025-10-15T15:15:02.322Z" }, - { url = "https://files.pythonhosted.org/packages/b9/0c/0df55ecb20d0d0ed5c322e10a441775e1a3a5d78c60f0c4e1abfe6fcf949/coverage-7.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:b5c2705afa83f49bd91962a4094b6b082f94aef7626365ab3f8f4bd159c5acf3", size = 218711, upload-time = "2025-10-15T15:15:04.575Z" }, - { url = "https://files.pythonhosted.org/packages/5f/04/642c1d8a448ae5ea1369eac8495740a79eb4e581a9fb0cbdce56bbf56da1/coverage-7.11.0-py3-none-any.whl", hash = "sha256:4b7589765348d78fb4e5fb6ea35d07564e387da2fc5efff62e0222971f155f68", size = 207761, upload-time = "2025-10-15T15:15:06.439Z" }, +version = "7.11.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d2/59/9698d57a3b11704c7b89b21d69e9d23ecf80d538cabb536c8b63f4a12322/coverage-7.11.3.tar.gz", hash = "sha256:0f59387f5e6edbbffec2281affb71cdc85e0776c1745150a3ab9b6c1d016106b", size = 815210, upload-time = "2025-11-10T00:13:17.18Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/68/b53157115ef76d50d1d916d6240e5cd5b3c14dba8ba1b984632b8221fc2e/coverage-7.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0c986537abca9b064510f3fd104ba33e98d3036608c7f2f5537f869bc10e1ee5", size = 216377, upload-time = "2025-11-10T00:10:27.317Z" }, + { url = "https://files.pythonhosted.org/packages/14/c1/d2f9d8e37123fe6e7ab8afcaab8195f13bc84a8b2f449a533fd4812ac724/coverage-7.11.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:28c5251b3ab1d23e66f1130ca0c419747edfbcb4690de19467cd616861507af7", size = 216892, upload-time = "2025-11-10T00:10:30.624Z" }, + { url = "https://files.pythonhosted.org/packages/83/73/18f05d8010149b650ed97ee5c9f7e4ae68c05c7d913391523281e41c2495/coverage-7.11.3-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4f2bb4ee8dd40f9b2a80bb4adb2aecece9480ba1fa60d9382e8c8e0bd558e2eb", size = 243650, upload-time = "2025-11-10T00:10:32.392Z" }, + { url = "https://files.pythonhosted.org/packages/63/3c/c0cbb296c0ecc6dcbd70f4b473fcd7fe4517bbef8b09f4326d78f38adb87/coverage-7.11.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e5f4bfac975a2138215a38bda599ef00162e4143541cf7dd186da10a7f8e69f1", size = 245478, upload-time = "2025-11-10T00:10:34.157Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9a/dad288cf9faa142a14e75e39dc646d968b93d74e15c83e9b13fd628f2cb3/coverage-7.11.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8f4cbfff5cf01fa07464439a8510affc9df281535f41a1f5312fbd2b59b4ab5c", size = 247337, upload-time = "2025-11-10T00:10:35.655Z" }, + { url = "https://files.pythonhosted.org/packages/e3/ba/f6148ebf5547b3502013175e41bf3107a4e34b7dd19f9793a6ce0e1cd61f/coverage-7.11.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:31663572f20bf3406d7ac00d6981c7bbbcec302539d26b5ac596ca499664de31", size = 244328, upload-time = "2025-11-10T00:10:37.459Z" }, + { url = "https://files.pythonhosted.org/packages/e6/4d/b93784d0b593c5df89a0d48cbbd2d0963e0ca089eaf877405849792e46d3/coverage-7.11.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9799bd6a910961cb666196b8583ed0ee125fa225c6fdee2cbf00232b861f29d2", size = 245381, upload-time = "2025-11-10T00:10:39.229Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8d/6735bfd4f0f736d457642ee056a570d704c9d57fdcd5c91ea5d6b15c944e/coverage-7.11.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:097acc18bedf2c6e3144eaf09b5f6034926c3c9bb9e10574ffd0942717232507", size = 243390, upload-time = "2025-11-10T00:10:40.984Z" }, + { url = "https://files.pythonhosted.org/packages/db/3d/7ba68ed52d1873d450aefd8d2f5a353e67b421915cb6c174e4222c7b918c/coverage-7.11.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:6f033dec603eea88204589175782290a038b436105a8f3637a81c4359df27832", size = 243654, upload-time = "2025-11-10T00:10:42.496Z" }, + { url = "https://files.pythonhosted.org/packages/14/26/be2720c4c7bf73c6591ae4ab503a7b5a31c7a60ced6dba855cfcb4a5af7e/coverage-7.11.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd9ca2d44ed8018c90efb72f237a2a140325a4c3339971364d758e78b175f58e", size = 244272, upload-time = "2025-11-10T00:10:44.39Z" }, + { url = "https://files.pythonhosted.org/packages/90/20/086f5697780df146dbc0df4ae9b6db2b23ddf5aa550f977b2825137728e9/coverage-7.11.3-cp310-cp310-win32.whl", hash = "sha256:900580bc99c145e2561ea91a2d207e639171870d8a18756eb57db944a017d4bb", size = 218969, upload-time = "2025-11-10T00:10:45.863Z" }, + { url = "https://files.pythonhosted.org/packages/98/5c/cc6faba945ede5088156da7770e30d06c38b8591785ac99bcfb2074f9ef6/coverage-7.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:c8be5bfcdc7832011b2652db29ed7672ce9d353dd19bce5272ca33dbcf60aaa8", size = 219903, upload-time = "2025-11-10T00:10:47.676Z" }, + { url = "https://files.pythonhosted.org/packages/92/92/43a961c0f57b666d01c92bcd960c7f93677de5e4ee7ca722564ad6dee0fa/coverage-7.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:200bb89fd2a8a07780eafcdff6463104dec459f3c838d980455cfa84f5e5e6e1", size = 216504, upload-time = "2025-11-10T00:10:49.524Z" }, + { url = "https://files.pythonhosted.org/packages/5d/5c/dbfc73329726aef26dbf7fefef81b8a2afd1789343a579ea6d99bf15d26e/coverage-7.11.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d264402fc179776d43e557e1ca4a7d953020d3ee95f7ec19cc2c9d769277f06", size = 217006, upload-time = "2025-11-10T00:10:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e0/878c84fb6661964bc435beb1e28c050650aa30e4c1cdc12341e298700bda/coverage-7.11.3-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:385977d94fc155f8731c895accdfcc3dd0d9dd9ef90d102969df95d3c637ab80", size = 247415, upload-time = "2025-11-10T00:10:52.805Z" }, + { url = "https://files.pythonhosted.org/packages/56/9e/0677e78b1e6a13527f39c4b39c767b351e256b333050539861c63f98bd61/coverage-7.11.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0542ddf6107adbd2592f29da9f59f5d9cff7947b5bb4f734805085c327dcffaa", size = 249332, upload-time = "2025-11-10T00:10:54.35Z" }, + { url = "https://files.pythonhosted.org/packages/54/90/25fc343e4ce35514262451456de0953bcae5b37dda248aed50ee51234cee/coverage-7.11.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d60bf4d7f886989ddf80e121a7f4d140d9eac91f1d2385ce8eb6bda93d563297", size = 251443, upload-time = "2025-11-10T00:10:55.832Z" }, + { url = "https://files.pythonhosted.org/packages/13/56/bc02bbc890fd8b155a64285c93e2ab38647486701ac9c980d457cdae857a/coverage-7.11.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0a3b6e32457535df0d41d2d895da46434706dd85dbaf53fbc0d3bd7d914b362", size = 247554, upload-time = "2025-11-10T00:10:57.829Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ab/0318888d091d799a82d788c1e8d8bd280f1d5c41662bbb6e11187efe33e8/coverage-7.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:876a3ee7fd2613eb79602e4cdb39deb6b28c186e76124c3f29e580099ec21a87", size = 249139, upload-time = "2025-11-10T00:10:59.465Z" }, + { url = "https://files.pythonhosted.org/packages/79/d8/3ee50929c4cd36fcfcc0f45d753337001001116c8a5b8dd18d27ea645737/coverage-7.11.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a730cd0824e8083989f304e97b3f884189efb48e2151e07f57e9e138ab104200", size = 247209, upload-time = "2025-11-10T00:11:01.432Z" }, + { url = "https://files.pythonhosted.org/packages/94/7c/3cf06e327401c293e60c962b4b8a2ceb7167c1a428a02be3adbd1d7c7e4c/coverage-7.11.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:b5cd111d3ab7390be0c07ad839235d5ad54d2ca497b5f5db86896098a77180a4", size = 246936, upload-time = "2025-11-10T00:11:02.964Z" }, + { url = "https://files.pythonhosted.org/packages/99/0b/ffc03dc8f4083817900fd367110015ef4dd227b37284104a5eb5edc9c106/coverage-7.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:074e6a5cd38e06671580b4d872c1a67955d4e69639e4b04e87fc03b494c1f060", size = 247835, upload-time = "2025-11-10T00:11:04.405Z" }, + { url = "https://files.pythonhosted.org/packages/17/4d/dbe54609ee066553d0bcdcdf108b177c78dab836292bee43f96d6a5674d1/coverage-7.11.3-cp311-cp311-win32.whl", hash = "sha256:86d27d2dd7c7c5a44710565933c7dc9cd70e65ef97142e260d16d555667deef7", size = 218994, upload-time = "2025-11-10T00:11:05.966Z" }, + { url = "https://files.pythonhosted.org/packages/94/11/8e7155df53f99553ad8114054806c01a2c0b08f303ea7e38b9831652d83d/coverage-7.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:ca90ef33a152205fb6f2f0c1f3e55c50df4ef049bb0940ebba666edd4cdebc55", size = 219926, upload-time = "2025-11-10T00:11:07.936Z" }, + { url = "https://files.pythonhosted.org/packages/1f/93/bea91b6a9e35d89c89a1cd5824bc72e45151a9c2a9ca0b50d9e9a85e3ae3/coverage-7.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:56f909a40d68947ef726ce6a34eb38f0ed241ffbe55c5007c64e616663bcbafc", size = 218599, upload-time = "2025-11-10T00:11:09.578Z" }, + { url = "https://files.pythonhosted.org/packages/c2/39/af056ec7a27c487e25c7f6b6e51d2ee9821dba1863173ddf4dc2eebef4f7/coverage-7.11.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5b771b59ac0dfb7f139f70c85b42717ef400a6790abb6475ebac1ecee8de782f", size = 216676, upload-time = "2025-11-10T00:11:11.566Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f8/21126d34b174d037b5d01bea39077725cbb9a0da94a95c5f96929c695433/coverage-7.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:603c4414125fc9ae9000f17912dcfd3d3eb677d4e360b85206539240c96ea76e", size = 217034, upload-time = "2025-11-10T00:11:13.12Z" }, + { url = "https://files.pythonhosted.org/packages/d5/3f/0fd35f35658cdd11f7686303214bd5908225838f374db47f9e457c8d6df8/coverage-7.11.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:77ffb3b7704eb7b9b3298a01fe4509cef70117a52d50bcba29cffc5f53dd326a", size = 248531, upload-time = "2025-11-10T00:11:15.023Z" }, + { url = "https://files.pythonhosted.org/packages/8f/59/0bfc5900fc15ce4fd186e092451de776bef244565c840c9c026fd50857e1/coverage-7.11.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4d4ca49f5ba432b0755ebb0fc3a56be944a19a16bb33802264bbc7311622c0d1", size = 251290, upload-time = "2025-11-10T00:11:16.628Z" }, + { url = "https://files.pythonhosted.org/packages/71/88/d5c184001fa2ac82edf1b8f2cd91894d2230d7c309e937c54c796176e35b/coverage-7.11.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05fd3fb6edff0c98874d752013588836f458261e5eba587afe4c547bba544afd", size = 252375, upload-time = "2025-11-10T00:11:18.249Z" }, + { url = "https://files.pythonhosted.org/packages/5c/29/f60af9f823bf62c7a00ce1ac88441b9a9a467e499493e5cc65028c8b8dd2/coverage-7.11.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0e920567f8c3a3ce68ae5a42cf7c2dc4bb6cc389f18bff2235dd8c03fa405de5", size = 248946, upload-time = "2025-11-10T00:11:20.202Z" }, + { url = "https://files.pythonhosted.org/packages/67/16/4662790f3b1e03fce5280cad93fd18711c35980beb3c6f28dca41b5230c6/coverage-7.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4bec8c7160688bd5a34e65c82984b25409563134d63285d8943d0599efbc448e", size = 250310, upload-time = "2025-11-10T00:11:21.689Z" }, + { url = "https://files.pythonhosted.org/packages/8f/75/dd6c2e28308a83e5fc1ee602f8204bd3aa5af685c104cb54499230cf56db/coverage-7.11.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:adb9b7b42c802bd8cb3927de8c1c26368ce50c8fdaa83a9d8551384d77537044", size = 248461, upload-time = "2025-11-10T00:11:23.384Z" }, + { url = "https://files.pythonhosted.org/packages/16/fe/b71af12be9f59dc9eb060688fa19a95bf3223f56c5af1e9861dfa2275d2c/coverage-7.11.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c8f563b245b4ddb591e99f28e3cd140b85f114b38b7f95b2e42542f0603eb7d7", size = 248039, upload-time = "2025-11-10T00:11:25.07Z" }, + { url = "https://files.pythonhosted.org/packages/11/b8/023b2003a2cd96bdf607afe03d9b96c763cab6d76e024abe4473707c4eb8/coverage-7.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e2a96fdc7643c9517a317553aca13b5cae9bad9a5f32f4654ce247ae4d321405", size = 249903, upload-time = "2025-11-10T00:11:26.992Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ee/5f1076311aa67b1fa4687a724cc044346380e90ce7d94fec09fd384aa5fd/coverage-7.11.3-cp312-cp312-win32.whl", hash = "sha256:e8feeb5e8705835f0622af0fe7ff8d5cb388948454647086494d6c41ec142c2e", size = 219201, upload-time = "2025-11-10T00:11:28.619Z" }, + { url = "https://files.pythonhosted.org/packages/4f/24/d21688f48fe9fcc778956680fd5aaf69f4e23b245b7c7a4755cbd421d25b/coverage-7.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:abb903ffe46bd319d99979cdba350ae7016759bb69f47882242f7b93f3356055", size = 220012, upload-time = "2025-11-10T00:11:30.234Z" }, + { url = "https://files.pythonhosted.org/packages/4f/9e/d5eb508065f291456378aa9b16698b8417d87cb084c2b597f3beb00a8084/coverage-7.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:1451464fd855d9bd000c19b71bb7dafea9ab815741fb0bd9e813d9b671462d6f", size = 218652, upload-time = "2025-11-10T00:11:32.165Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f6/d8572c058211c7d976f24dab71999a565501fb5b3cdcb59cf782f19c4acb/coverage-7.11.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84b892e968164b7a0498ddc5746cdf4e985700b902128421bb5cec1080a6ee36", size = 216694, upload-time = "2025-11-10T00:11:34.296Z" }, + { url = "https://files.pythonhosted.org/packages/4a/f6/b6f9764d90c0ce1bce8d995649fa307fff21f4727b8d950fa2843b7b0de5/coverage-7.11.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f761dbcf45e9416ec4698e1a7649248005f0064ce3523a47402d1bff4af2779e", size = 217065, upload-time = "2025-11-10T00:11:36.281Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8d/a12cb424063019fd077b5be474258a0ed8369b92b6d0058e673f0a945982/coverage-7.11.3-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1410bac9e98afd9623f53876fae7d8a5db9f5a0ac1c9e7c5188463cb4b3212e2", size = 248062, upload-time = "2025-11-10T00:11:37.903Z" }, + { url = "https://files.pythonhosted.org/packages/7f/9c/dab1a4e8e75ce053d14259d3d7485d68528a662e286e184685ea49e71156/coverage-7.11.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:004cdcea3457c0ea3233622cd3464c1e32ebba9b41578421097402bee6461b63", size = 250657, upload-time = "2025-11-10T00:11:39.509Z" }, + { url = "https://files.pythonhosted.org/packages/3f/89/a14f256438324f33bae36f9a1a7137729bf26b0a43f5eda60b147ec7c8c7/coverage-7.11.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8f067ada2c333609b52835ca4d4868645d3b63ac04fb2b9a658c55bba7f667d3", size = 251900, upload-time = "2025-11-10T00:11:41.372Z" }, + { url = "https://files.pythonhosted.org/packages/04/07/75b0d476eb349f1296486b1418b44f2d8780cc8db47493de3755e5340076/coverage-7.11.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:07bc7745c945a6d95676953e86ba7cebb9f11de7773951c387f4c07dc76d03f5", size = 248254, upload-time = "2025-11-10T00:11:43.27Z" }, + { url = "https://files.pythonhosted.org/packages/5a/4b/0c486581fa72873489ca092c52792d008a17954aa352809a7cbe6cf0bf07/coverage-7.11.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bba7e4743e37484ae17d5c3b8eb1ce78b564cb91b7ace2e2182b25f0f764cb5", size = 250041, upload-time = "2025-11-10T00:11:45.274Z" }, + { url = "https://files.pythonhosted.org/packages/af/a3/0059dafb240ae3e3291f81b8de00e9c511d3dd41d687a227dd4b529be591/coverage-7.11.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbffc22d80d86fbe456af9abb17f7a7766e7b2101f7edaacc3535501691563f7", size = 248004, upload-time = "2025-11-10T00:11:46.93Z" }, + { url = "https://files.pythonhosted.org/packages/83/93/967d9662b1eb8c7c46917dcc7e4c1875724ac3e73c3cb78e86d7a0ac719d/coverage-7.11.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:0dba4da36730e384669e05b765a2c49f39514dd3012fcc0398dd66fba8d746d5", size = 247828, upload-time = "2025-11-10T00:11:48.563Z" }, + { url = "https://files.pythonhosted.org/packages/4c/1c/5077493c03215701e212767e470b794548d817dfc6247a4718832cc71fac/coverage-7.11.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ae12fe90b00b71a71b69f513773310782ce01d5f58d2ceb2b7c595ab9d222094", size = 249588, upload-time = "2025-11-10T00:11:50.581Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a5/77f64de461016e7da3e05d7d07975c89756fe672753e4cf74417fc9b9052/coverage-7.11.3-cp313-cp313-win32.whl", hash = "sha256:12d821de7408292530b0d241468b698bce18dd12ecaf45316149f53877885f8c", size = 219223, upload-time = "2025-11-10T00:11:52.184Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1c/ec51a3c1a59d225b44bdd3a4d463135b3159a535c2686fac965b698524f4/coverage-7.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:6bb599052a974bb6cedfa114f9778fedfad66854107cf81397ec87cb9b8fbcf2", size = 220033, upload-time = "2025-11-10T00:11:53.871Z" }, + { url = "https://files.pythonhosted.org/packages/01/ec/e0ce39746ed558564c16f2cc25fa95ce6fc9fa8bfb3b9e62855d4386b886/coverage-7.11.3-cp313-cp313-win_arm64.whl", hash = "sha256:bb9d7efdb063903b3fdf77caec7b77c3066885068bdc0d44bc1b0c171033f944", size = 218661, upload-time = "2025-11-10T00:11:55.597Z" }, + { url = "https://files.pythonhosted.org/packages/46/cb/483f130bc56cbbad2638248915d97b185374d58b19e3cc3107359715949f/coverage-7.11.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:fb58da65e3339b3dbe266b607bb936efb983d86b00b03eb04c4ad5b442c58428", size = 217389, upload-time = "2025-11-10T00:11:57.59Z" }, + { url = "https://files.pythonhosted.org/packages/cb/ae/81f89bae3afef75553cf10e62feb57551535d16fd5859b9ee5a2a97ddd27/coverage-7.11.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8d16bbe566e16a71d123cd66382c1315fcd520c7573652a8074a8fe281b38c6a", size = 217742, upload-time = "2025-11-10T00:11:59.519Z" }, + { url = "https://files.pythonhosted.org/packages/db/6e/a0fb897041949888191a49c36afd5c6f5d9f5fd757e0b0cd99ec198a324b/coverage-7.11.3-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8258f10059b5ac837232c589a350a2df4a96406d6d5f2a09ec587cbdd539655", size = 259049, upload-time = "2025-11-10T00:12:01.592Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b6/d13acc67eb402d91eb94b9bd60593411799aed09ce176ee8d8c0e39c94ca/coverage-7.11.3-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4c5627429f7fbff4f4131cfdd6abd530734ef7761116811a707b88b7e205afd7", size = 261113, upload-time = "2025-11-10T00:12:03.639Z" }, + { url = "https://files.pythonhosted.org/packages/ea/07/a6868893c48191d60406df4356aa7f0f74e6de34ef1f03af0d49183e0fa1/coverage-7.11.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:465695268414e149bab754c54b0c45c8ceda73dd4a5c3ba255500da13984b16d", size = 263546, upload-time = "2025-11-10T00:12:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/24/e5/28598f70b2c1098332bac47925806353b3313511d984841111e6e760c016/coverage-7.11.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4ebcddfcdfb4c614233cff6e9a3967a09484114a8b2e4f2c7a62dc83676ba13f", size = 258260, upload-time = "2025-11-10T00:12:07.137Z" }, + { url = "https://files.pythonhosted.org/packages/0e/58/58e2d9e6455a4ed746a480c4b9cf96dc3cb2a6b8f3efbee5efd33ae24b06/coverage-7.11.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:13b2066303a1c1833c654d2af0455bb009b6e1727b3883c9964bc5c2f643c1d0", size = 261121, upload-time = "2025-11-10T00:12:09.138Z" }, + { url = "https://files.pythonhosted.org/packages/17/57/38803eefb9b0409934cbc5a14e3978f0c85cb251d2b6f6a369067a7105a0/coverage-7.11.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d8750dd20362a1b80e3cf84f58013d4672f89663aee457ea59336df50fab6739", size = 258736, upload-time = "2025-11-10T00:12:11.195Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f3/f94683167156e93677b3442be1d4ca70cb33718df32a2eea44a5898f04f6/coverage-7.11.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ab6212e62ea0e1006531a2234e209607f360d98d18d532c2fa8e403c1afbdd71", size = 257625, upload-time = "2025-11-10T00:12:12.843Z" }, + { url = "https://files.pythonhosted.org/packages/87/ed/42d0bf1bc6bfa7d65f52299a31daaa866b4c11000855d753857fe78260ac/coverage-7.11.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a6b17c2b5e0b9bb7702449200f93e2d04cb04b1414c41424c08aa1e5d352da76", size = 259827, upload-time = "2025-11-10T00:12:15.128Z" }, + { url = "https://files.pythonhosted.org/packages/d3/76/5682719f5d5fbedb0c624c9851ef847407cae23362deb941f185f489c54e/coverage-7.11.3-cp313-cp313t-win32.whl", hash = "sha256:426559f105f644b69290ea414e154a0d320c3ad8a2bb75e62884731f69cf8e2c", size = 219897, upload-time = "2025-11-10T00:12:17.274Z" }, + { url = "https://files.pythonhosted.org/packages/10/e0/1da511d0ac3d39e6676fa6cc5ec35320bbf1cebb9b24e9ee7548ee4e931a/coverage-7.11.3-cp313-cp313t-win_amd64.whl", hash = "sha256:90a96fcd824564eae6137ec2563bd061d49a32944858d4bdbae5c00fb10e76ac", size = 220959, upload-time = "2025-11-10T00:12:19.292Z" }, + { url = "https://files.pythonhosted.org/packages/e5/9d/e255da6a04e9ec5f7b633c54c0fdfa221a9e03550b67a9c83217de12e96c/coverage-7.11.3-cp313-cp313t-win_arm64.whl", hash = "sha256:1e33d0bebf895c7a0905fcfaff2b07ab900885fc78bba2a12291a2cfbab014cc", size = 219234, upload-time = "2025-11-10T00:12:21.251Z" }, + { url = "https://files.pythonhosted.org/packages/84/d6/634ec396e45aded1772dccf6c236e3e7c9604bc47b816e928f32ce7987d1/coverage-7.11.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fdc5255eb4815babcdf236fa1a806ccb546724c8a9b129fd1ea4a5448a0bf07c", size = 216746, upload-time = "2025-11-10T00:12:23.089Z" }, + { url = "https://files.pythonhosted.org/packages/28/76/1079547f9d46f9c7c7d0dad35b6873c98bc5aa721eeabceafabd722cd5e7/coverage-7.11.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fe3425dc6021f906c6325d3c415e048e7cdb955505a94f1eb774dafc779ba203", size = 217077, upload-time = "2025-11-10T00:12:24.863Z" }, + { url = "https://files.pythonhosted.org/packages/2d/71/6ad80d6ae0d7cb743b9a98df8bb88b1ff3dc54491508a4a97549c2b83400/coverage-7.11.3-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4ca5f876bf41b24378ee67c41d688155f0e54cdc720de8ef9ad6544005899240", size = 248122, upload-time = "2025-11-10T00:12:26.553Z" }, + { url = "https://files.pythonhosted.org/packages/20/1d/784b87270784b0b88e4beec9d028e8d58f73ae248032579c63ad2ac6f69a/coverage-7.11.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9061a3e3c92b27fd8036dafa26f25d95695b6aa2e4514ab16a254f297e664f83", size = 250638, upload-time = "2025-11-10T00:12:28.555Z" }, + { url = "https://files.pythonhosted.org/packages/f5/26/b6dd31e23e004e9de84d1a8672cd3d73e50f5dae65dbd0f03fa2cdde6100/coverage-7.11.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abcea3b5f0dc44e1d01c27090bc32ce6ffb7aa665f884f1890710454113ea902", size = 251972, upload-time = "2025-11-10T00:12:30.246Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ef/f9c64d76faac56b82daa036b34d4fe9ab55eb37f22062e68e9470583e688/coverage-7.11.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:68c4eb92997dbaaf839ea13527be463178ac0ddd37a7ac636b8bc11a51af2428", size = 248147, upload-time = "2025-11-10T00:12:32.195Z" }, + { url = "https://files.pythonhosted.org/packages/b6/eb/5b666f90a8f8053bd264a1ce693d2edef2368e518afe70680070fca13ecd/coverage-7.11.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:149eccc85d48c8f06547534068c41d69a1a35322deaa4d69ba1561e2e9127e75", size = 249995, upload-time = "2025-11-10T00:12:33.969Z" }, + { url = "https://files.pythonhosted.org/packages/eb/7b/871e991ffb5d067f8e67ffb635dabba65b231d6e0eb724a4a558f4a702a5/coverage-7.11.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:08c0bcf932e47795c49f0406054824b9d45671362dfc4269e0bc6e4bff010704", size = 247948, upload-time = "2025-11-10T00:12:36.341Z" }, + { url = "https://files.pythonhosted.org/packages/0a/8b/ce454f0af9609431b06dbe5485fc9d1c35ddc387e32ae8e374f49005748b/coverage-7.11.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:39764c6167c82d68a2d8c97c33dba45ec0ad9172570860e12191416f4f8e6e1b", size = 247770, upload-time = "2025-11-10T00:12:38.167Z" }, + { url = "https://files.pythonhosted.org/packages/61/8f/79002cb58a61dfbd2085de7d0a46311ef2476823e7938db80284cedd2428/coverage-7.11.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3224c7baf34e923ffc78cb45e793925539d640d42c96646db62dbd61bbcfa131", size = 249431, upload-time = "2025-11-10T00:12:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/58/cc/d06685dae97468ed22999440f2f2f5060940ab0e7952a7295f236d98cce7/coverage-7.11.3-cp314-cp314-win32.whl", hash = "sha256:c713c1c528284d636cd37723b0b4c35c11190da6f932794e145fc40f8210a14a", size = 219508, upload-time = "2025-11-10T00:12:42.231Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ed/770cd07706a3598c545f62d75adf2e5bd3791bffccdcf708ec383ad42559/coverage-7.11.3-cp314-cp314-win_amd64.whl", hash = "sha256:c381a252317f63ca0179d2c7918e83b99a4ff3101e1b24849b999a00f9cd4f86", size = 220325, upload-time = "2025-11-10T00:12:44.065Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ac/6a1c507899b6fb1b9a56069954365f655956bcc648e150ce64c2b0ecbed8/coverage-7.11.3-cp314-cp314-win_arm64.whl", hash = "sha256:3e33a968672be1394eded257ec10d4acbb9af2ae263ba05a99ff901bb863557e", size = 218899, upload-time = "2025-11-10T00:12:46.18Z" }, + { url = "https://files.pythonhosted.org/packages/9a/58/142cd838d960cd740654d094f7b0300d7b81534bb7304437d2439fb685fb/coverage-7.11.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:f9c96a29c6d65bd36a91f5634fef800212dff69dacdb44345c4c9783943ab0df", size = 217471, upload-time = "2025-11-10T00:12:48.392Z" }, + { url = "https://files.pythonhosted.org/packages/bc/2c/2f44d39eb33e41ab3aba80571daad32e0f67076afcf27cb443f9e5b5a3ee/coverage-7.11.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2ec27a7a991d229213c8070d31e3ecf44d005d96a9edc30c78eaeafaa421c001", size = 217742, upload-time = "2025-11-10T00:12:50.182Z" }, + { url = "https://files.pythonhosted.org/packages/32/76/8ebc66c3c699f4de3174a43424c34c086323cd93c4930ab0f835731c443a/coverage-7.11.3-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:72c8b494bd20ae1c58528b97c4a67d5cfeafcb3845c73542875ecd43924296de", size = 259120, upload-time = "2025-11-10T00:12:52.451Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/78a3302b9595f331b86e4f12dfbd9252c8e93d97b8631500888f9a3a2af7/coverage-7.11.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:60ca149a446da255d56c2a7a813b51a80d9497a62250532598d249b3cdb1a926", size = 261229, upload-time = "2025-11-10T00:12:54.667Z" }, + { url = "https://files.pythonhosted.org/packages/07/59/1a9c0844dadef2a6efac07316d9781e6c5a3f3ea7e5e701411e99d619bfd/coverage-7.11.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb5069074db19a534de3859c43eec78e962d6d119f637c41c8e028c5ab3f59dd", size = 263642, upload-time = "2025-11-10T00:12:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/37/86/66c15d190a8e82eee777793cabde730640f555db3c020a179625a2ad5320/coverage-7.11.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac5d5329c9c942bbe6295f4251b135d860ed9f86acd912d418dce186de7c19ac", size = 258193, upload-time = "2025-11-10T00:12:58.687Z" }, + { url = "https://files.pythonhosted.org/packages/c7/c7/4a4aeb25cb6f83c3ec4763e5f7cc78da1c6d4ef9e22128562204b7f39390/coverage-7.11.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e22539b676fafba17f0a90ac725f029a309eb6e483f364c86dcadee060429d46", size = 261107, upload-time = "2025-11-10T00:13:00.502Z" }, + { url = "https://files.pythonhosted.org/packages/ed/91/b986b5035f23cf0272446298967ecdd2c3c0105ee31f66f7e6b6948fd7f8/coverage-7.11.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:2376e8a9c889016f25472c452389e98bc6e54a19570b107e27cde9d47f387b64", size = 258717, upload-time = "2025-11-10T00:13:02.747Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c7/6c084997f5a04d050c513545d3344bfa17bd3b67f143f388b5757d762b0b/coverage-7.11.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4234914b8c67238a3c4af2bba648dc716aa029ca44d01f3d51536d44ac16854f", size = 257541, upload-time = "2025-11-10T00:13:04.689Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c5/38e642917e406930cb67941210a366ccffa767365c8f8d9ec0f465a8b218/coverage-7.11.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f0b4101e2b3c6c352ff1f70b3a6fcc7c17c1ab1a91ccb7a33013cb0782af9820", size = 259872, upload-time = "2025-11-10T00:13:06.559Z" }, + { url = "https://files.pythonhosted.org/packages/b7/67/5e812979d20c167f81dbf9374048e0193ebe64c59a3d93d7d947b07865fa/coverage-7.11.3-cp314-cp314t-win32.whl", hash = "sha256:305716afb19133762e8cf62745c46c4853ad6f9eeba54a593e373289e24ea237", size = 220289, upload-time = "2025-11-10T00:13:08.635Z" }, + { url = "https://files.pythonhosted.org/packages/24/3a/b72573802672b680703e0df071faadfab7dcd4d659aaaffc4626bc8bbde8/coverage-7.11.3-cp314-cp314t-win_amd64.whl", hash = "sha256:9245bd392572b9f799261c4c9e7216bafc9405537d0f4ce3ad93afe081a12dc9", size = 221398, upload-time = "2025-11-10T00:13:10.734Z" }, + { url = "https://files.pythonhosted.org/packages/f8/4e/649628f28d38bad81e4e8eb3f78759d20ac173e3c456ac629123815feb40/coverage-7.11.3-cp314-cp314t-win_arm64.whl", hash = "sha256:9a1d577c20b4334e5e814c3d5fe07fa4a8c3ae42a601945e8d7940bab811d0bd", size = 219435, upload-time = "2025-11-10T00:13:12.712Z" }, + { url = "https://files.pythonhosted.org/packages/19/8f/92bdd27b067204b99f396a1414d6342122f3e2663459baf787108a6b8b84/coverage-7.11.3-py3-none-any.whl", hash = "sha256:351511ae28e2509c8d8cae5311577ea7dd511ab8e746ffc8814a0896c3d33fbe", size = 208478, upload-time = "2025-11-10T00:13:14.908Z" }, ] [package.optional-dependencies] @@ -1352,7 +1357,7 @@ wheels = [ [[package]] name = "fastapi" -version = "0.121.0" +version = "0.121.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-doc" }, @@ -1360,9 +1365,9 @@ dependencies = [ { name = "starlette" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8c/e3/77a2df0946703973b9905fd0cde6172c15e0781984320123b4f5079e7113/fastapi-0.121.0.tar.gz", hash = "sha256:06663356a0b1ee93e875bbf05a31fb22314f5bed455afaaad2b2dad7f26e98fa", size = 342412, upload-time = "2025-11-03T10:25:54.818Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/a4/29e1b861fc9017488ed02ff1052feffa40940cb355ed632a8845df84ce84/fastapi-0.121.1.tar.gz", hash = "sha256:b6dba0538fd15dab6fe4d3e5493c3957d8a9e1e9257f56446b5859af66f32441", size = 342523, upload-time = "2025-11-08T21:48:14.068Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dd/2c/42277afc1ba1a18f8358561eee40785d27becab8f80a1f945c0a3051c6eb/fastapi-0.121.0-py3-none-any.whl", hash = "sha256:8bdf1b15a55f4e4b0d6201033da9109ea15632cb76cf156e7b8b4019f2172106", size = 109183, upload-time = "2025-11-03T10:25:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/94/fd/2e6f7d706899cc08690c5f6641e2ffbfffe019e8f16ce77104caa5730910/fastapi-0.121.1-py3-none-any.whl", hash = "sha256:2c5c7028bc3a58d8f5f09aecd3fd88a000ccc0c5ad627693264181a3c33aa1fc", size = 109192, upload-time = "2025-11-08T21:48:12.458Z" }, ] [[package]] @@ -1732,7 +1737,7 @@ wheels = [ [[package]] name = "google-cloud-aiplatform" -version = "1.126.0" +version = "1.126.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docstring-parser" }, @@ -1749,9 +1754,9 @@ dependencies = [ { name = "shapely" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/44/37/4f963ad4c2ea5f4ab68e5bf83de80b8c7622bb3add81189b217095963d06/google_cloud_aiplatform-1.126.0.tar.gz", hash = "sha256:032d3551acd1f51cbafb096c13a940df761d01f19cbd92a6dfa800aa222c9517", size = 9777797, upload-time = "2025-11-05T23:16:48.616Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0c/36/f8e41679e6cb7ea6b50c0bfeaea0b9daf1475cafa152ad30456f6ec5471f/google_cloud_aiplatform-1.126.1.tar.gz", hash = "sha256:956706c587b817e36d5a16af5ab7f48c73dde76c71d660ecd4284f0339dc37d4", size = 9777644, upload-time = "2025-11-06T22:00:52.894Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/44/84c470e23c66af14f1c2bba88f902b2264c6e554da2c88366683de81d2bd/google_cloud_aiplatform-1.126.0-py2.py3-none-any.whl", hash = "sha256:6008e134f0a93c1d310ea6628051653dde35415cfc0c5fe60cf822bdcccf4d49", size = 8123670, upload-time = "2025-11-05T23:16:45.565Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c6/3dc21f6182703d170624ed9f87894d35e1d51d1facbb471aa62cc255f233/google_cloud_aiplatform-1.126.1-py2.py3-none-any.whl", hash = "sha256:66d4daea95356d772ff026f13448ea80aa763dfd8daedc21d9ca36d0a1ee8a65", size = 8123682, upload-time = "2025-11-06T22:00:49.874Z" }, ] [package.optional-dependencies] @@ -2101,14 +2106,14 @@ wheels = [ [[package]] name = "googleapis-common-protos" -version = "1.71.0" +version = "1.72.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "protobuf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/30/43/b25abe02db2911397819003029bef768f68a974f2ece483e6084d1a5f754/googleapis_common_protos-1.71.0.tar.gz", hash = "sha256:1aec01e574e29da63c80ba9f7bbf1ccfaacf1da877f23609fe236ca7c72a2e2e", size = 146454, upload-time = "2025-10-20T14:58:08.732Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/7b/adfd75544c415c487b33061fe7ae526165241c1ea133f9a9125a56b39fd8/googleapis_common_protos-1.72.0.tar.gz", hash = "sha256:e55a601c1b32b52d7a3e65f43563e2aa61bcd737998ee672ac9b951cd49319f5", size = 147433, upload-time = "2025-11-06T18:29:24.087Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/e8/eba9fece11d57a71e3e22ea672742c8f3cf23b35730c9e96db768b295216/googleapis_common_protos-1.71.0-py3-none-any.whl", hash = "sha256:59034a1d849dc4d18971997a72ac56246570afdd17f9369a0ff68218d50ab78c", size = 294576, upload-time = "2025-10-20T14:56:21.295Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ab/09169d5a4612a5f92490806649ac8d41e3ec9129c636754575b3553f4ea4/googleapis_common_protos-1.72.0-py3-none-any.whl", hash = "sha256:4299c5a82d5ae1a9702ada957347726b167f9f8d1fc352477702a1e851ff4038", size = 297515, upload-time = "2025-11-06T18:29:13.14Z" }, ] [package.optional-dependencies] @@ -2647,7 +2652,7 @@ wheels = [ [[package]] name = "mcp" -version = "1.20.0" +version = "1.21.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2663,9 +2668,9 @@ dependencies = [ { name = "starlette" }, { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/22/fae38092e6c2995c03232635028510d77e7decff31b4ae79dfa0ba99c635/mcp-1.20.0.tar.gz", hash = "sha256:9ccc09eaadbfbcbbdab1c9723cfe2e0d1d9e324d7d3ce7e332ef90b09ed35177", size = 451377, upload-time = "2025-10-30T22:14:53.421Z" } +sdist = { url = "https://files.pythonhosted.org/packages/33/54/dd2330ef4611c27ae59124820863c34e1d3edb1133c58e6375e2d938c9c5/mcp-1.21.0.tar.gz", hash = "sha256:bab0a38e8f8c48080d787233343f8d301b0e1e95846ae7dead251b2421d99855", size = 452697, upload-time = "2025-11-06T23:19:58.432Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/00/76fc92f4892d47fecb37131d0e95ea69259f077d84c68f6793a0d96cfe80/mcp-1.20.0-py3-none-any.whl", hash = "sha256:d0dc06f93653f7432ff89f694721c87f79876b6f93741bf628ad1e48f7ac5e5d", size = 173136, upload-time = "2025-10-30T22:14:51.078Z" }, + { url = "https://files.pythonhosted.org/packages/39/47/850b6edc96c03bd44b00de9a0ca3c1cc71e0ba1cd5822955bc9e4eb3fad3/mcp-1.21.0-py3-none-any.whl", hash = "sha256:598619e53eb0b7a6513db38c426b28a4bdf57496fed04332100d2c56acade98b", size = 173672, upload-time = "2025-11-06T23:19:56.508Z" }, ] [[package]] @@ -3737,28 +3742,28 @@ wheels = [ [[package]] name = "polars" -version = "1.35.1" +version = "1.35.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "polars-runtime-32" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9b/5b/3caad788d93304026cbf0ab4c37f8402058b64a2f153b9c62f8b30f5d2ee/polars-1.35.1.tar.gz", hash = "sha256:06548e6d554580151d6ca7452d74bceeec4640b5b9261836889b8e68cfd7a62e", size = 694881, upload-time = "2025-10-30T12:12:52.294Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/43/09d4738aa24394751cb7e5d1fc4b5ef461d796efcadd9d00c79578332063/polars-1.35.2.tar.gz", hash = "sha256:ae458b05ca6e7ca2c089342c70793f92f1103c502dc1b14b56f0a04f2cc1d205", size = 694895, upload-time = "2025-11-09T13:20:05.921Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/4c/21a227b722534404241c2a76beceb7463469d50c775a227fc5c209eb8adc/polars-1.35.1-py3-none-any.whl", hash = "sha256:c29a933f28aa330d96a633adbd79aa5e6a6247a802a720eead9933f4613bdbf4", size = 783598, upload-time = "2025-10-30T12:11:54.668Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9a/24e4b890c7ee4358964aa92c4d1865df0e8831f7df6abaa3a39914521724/polars-1.35.2-py3-none-any.whl", hash = "sha256:5e8057c8289ac148c793478323b726faea933d9776bd6b8a554b0ab7c03db87e", size = 783597, upload-time = "2025-11-09T13:18:51.361Z" }, ] [[package]] name = "polars-runtime-32" -version = "1.35.1" +version = "1.35.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/3e/19c252e8eb4096300c1a36ec3e50a27e5fa9a1ccaf32d3927793c16abaee/polars_runtime_32-1.35.1.tar.gz", hash = "sha256:f6b4ec9cd58b31c87af1b8c110c9c986d82345f1d50d7f7595b5d447a19dc365", size = 2696218, upload-time = "2025-10-30T12:12:53.479Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/75/ac1256ace28c832a0997b20ba9d10a9d3739bd4d457c1eb1e7d196b6f88b/polars_runtime_32-1.35.2.tar.gz", hash = "sha256:6e6e35733ec52abe54b7d30d245e6586b027d433315d20edfb4a5d162c79fe90", size = 2694387, upload-time = "2025-11-09T13:20:07.624Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/2c/da339459805a26105e9d9c2f07e43ca5b8baeee55acd5457e6881487a79a/polars_runtime_32-1.35.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6f051a42f6ae2f26e3bc2cf1f170f2120602976e2a3ffb6cfba742eecc7cc620", size = 40525100, upload-time = "2025-10-30T12:11:58.098Z" }, - { url = "https://files.pythonhosted.org/packages/27/70/a0733568b3533481924d2ce68b279ab3d7334e5fa6ed259f671f650b7c5e/polars_runtime_32-1.35.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c2232f9cf05ba59efc72d940b86c033d41fd2d70bf2742e8115ed7112a766aa9", size = 36701908, upload-time = "2025-10-30T12:12:02.166Z" }, - { url = "https://files.pythonhosted.org/packages/46/54/6c09137bef9da72fd891ba58c2962cc7c6c5cad4649c0e668d6b344a9d7b/polars_runtime_32-1.35.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42f9837348557fd674477ea40a6ac8a7e839674f6dd0a199df24be91b026024c", size = 41317692, upload-time = "2025-10-30T12:12:04.928Z" }, - { url = "https://files.pythonhosted.org/packages/22/55/81c5b266a947c339edd7fbaa9e1d9614012d02418453f48b76cc177d3dd9/polars_runtime_32-1.35.1-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:c873aeb36fed182d5ebc35ca17c7eb193fe83ae2ea551ee8523ec34776731390", size = 37853058, upload-time = "2025-10-30T12:12:08.342Z" }, - { url = "https://files.pythonhosted.org/packages/6c/58/be8b034d559eac515f52408fd6537be9bea095bc0388946a4e38910d3d50/polars_runtime_32-1.35.1-cp39-abi3-win_amd64.whl", hash = "sha256:35cde9453ca7032933f0e58e9ed4388f5a1e415dd0db2dd1e442c81d815e630c", size = 41289554, upload-time = "2025-10-30T12:12:11.104Z" }, - { url = "https://files.pythonhosted.org/packages/f4/7f/e0111b9e2a1169ea82cde3ded9c92683e93c26dfccd72aee727996a1ac5b/polars_runtime_32-1.35.1-cp39-abi3-win_arm64.whl", hash = "sha256:fd77757a6c9eb9865c4bfb7b07e22225207c6b7da382bd0b9bd47732f637105d", size = 36958878, upload-time = "2025-10-30T12:12:15.206Z" }, + { url = "https://files.pythonhosted.org/packages/66/de/a532b81e68e636483a5dd764d72e106215543f3ef49a142272b277ada8fe/polars_runtime_32-1.35.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e465d12a29e8df06ea78947e50bd361cdf77535cd904fd562666a8a9374e7e3a", size = 40524507, upload-time = "2025-11-09T13:18:55.727Z" }, + { url = "https://files.pythonhosted.org/packages/2d/0b/679751ea6aeaa7b3e33a70ba17f9c8150310792583f3ecf9bb1ce15fe15c/polars_runtime_32-1.35.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ef2b029b78f64fb53f126654c0bfa654045c7546bd0de3009d08bd52d660e8cc", size = 36700154, upload-time = "2025-11-09T13:18:59.78Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c8/fd9f48dd6b89ae9cff53d896b51d08579ef9c739e46ea87a647b376c8ca2/polars_runtime_32-1.35.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85dda0994b5dff7f456bb2f4bbd22be9a9e5c5e28670e23fedb13601ec99a46d", size = 41317788, upload-time = "2025-11-09T13:19:03.949Z" }, + { url = "https://files.pythonhosted.org/packages/67/89/e09d9897a70b607e22a36c9eae85a5b829581108fd1e3d4292e5c0f52939/polars_runtime_32-1.35.2-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:3b9006902fc51b768ff747c0f74bd4ce04005ee8aeb290ce9c07ce1cbe1b58a9", size = 37850590, upload-time = "2025-11-09T13:19:08.154Z" }, + { url = "https://files.pythonhosted.org/packages/dc/40/96a808ca5cc8707894e196315227f04a0c82136b7fb25570bc51ea33b88d/polars_runtime_32-1.35.2-cp39-abi3-win_amd64.whl", hash = "sha256:ddc015fac39735592e2e7c834c02193ba4d257bb4c8c7478b9ebe440b0756b84", size = 41290019, upload-time = "2025-11-09T13:19:12.214Z" }, + { url = "https://files.pythonhosted.org/packages/f4/d1/8d1b28d007da43c750367c8bf5cb0f22758c16b1104b2b73b9acadb2d17a/polars_runtime_32-1.35.2-cp39-abi3-win_arm64.whl", hash = "sha256:6861145aa321a44eda7cc6694fb7751cb7aa0f21026df51b5faa52e64f9dc39b", size = 36955684, upload-time = "2025-11-09T13:19:15.666Z" }, ] [[package]] @@ -3776,7 +3781,7 @@ wheels = [ [[package]] name = "pre-commit" -version = "4.3.0" +version = "4.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cfgv" }, @@ -3785,9 +3790,9 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792, upload-time = "2025-08-09T18:56:14.651Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/49/7845c2d7bf6474efd8e27905b51b11e6ce411708c91e829b93f324de9929/pre_commit-4.4.0.tar.gz", hash = "sha256:f0233ebab440e9f17cabbb558706eb173d19ace965c68cdce2c081042b4fab15", size = 197501, upload-time = "2025-11-08T21:12:11.607Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965, upload-time = "2025-08-09T18:56:13.192Z" }, + { url = "https://files.pythonhosted.org/packages/27/11/574fe7d13acf30bfd0a8dd7fa1647040f2b8064f13f43e8c963b1e65093b/pre_commit-4.4.0-py2.py3-none-any.whl", hash = "sha256:b35ea52957cbf83dcc5d8ee636cbead8624e3a15fbfa61a370e42158ac8a5813", size = 226049, upload-time = "2025-11-08T21:12:10.228Z" }, ] [[package]] @@ -4210,14 +4215,14 @@ wheels = [ [[package]] name = "pyarrow-stubs" -version = "20.0.0.20251104" +version = "20.0.0.20251107" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyarrow" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f2/52/5ce506962bc64d92b572499489f16ca05e8f466bbb9ed91b032fc653e624/pyarrow_stubs-20.0.0.20251104.tar.gz", hash = "sha256:a08964a67627c28354668af64d7021fb8d51fd69322ddb8b7a9c0336e49a367b", size = 236544, upload-time = "2025-11-04T02:16:09.485Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/f1/40fa277fe20dfc6253f8e11edb96120050174209afc84019cd52386c5769/pyarrow_stubs-20.0.0.20251107.tar.gz", hash = "sha256:c0885c09f63e2be51bacb6b0e20b39083f43da1cb214d31e406f982e874bcb5a", size = 236584, upload-time = "2025-11-07T03:46:59.872Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/b8/d130c794e61a719eb5de0e64cff0e01928986aade997486730c42c79843d/pyarrow_stubs-20.0.0.20251104-py3-none-any.whl", hash = "sha256:aea08b72754e342b982cbf764ab5dbfbdf041d8cca95d3c3b89d829d48f509c8", size = 235721, upload-time = "2025-11-04T02:16:07.749Z" }, + { url = "https://files.pythonhosted.org/packages/86/fa/a8ebb2cc3a301604f5ca2628e399232ba2d53c1590c1a9b7f8695667db4e/pyarrow_stubs-20.0.0.20251107-py3-none-any.whl", hash = "sha256:09da6809f37cc6dbbbf59c9c8e42269290d19ac09f65d2b3456c671f1c3a8765", size = 235744, upload-time = "2025-11-07T03:47:00.868Z" }, ] [[package]] @@ -4482,50 +4487,50 @@ crypto = [ [[package]] name = "pymssql" -version = "2.3.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/1c/1980c9e14e6ab6db4c775d92bf517b70bcafcfbc56eb5b58e2ee81744d4c/pymssql-2.3.8.tar.gz", hash = "sha256:dafa4887d697503ac890db316470be22d9b4023487e6425ba67aa0a6681babf5", size = 185176, upload-time = "2025-10-12T03:05:35.238Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/94/339b7d3fee287f5c93af4f8ff773d10ba39fb32fab7cf7c3300e0096f01b/pymssql-2.3.8-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:529c972bfc907baff8f30d9d397471c2786a3293a849490f908c6c79b0687c73", size = 2920138, upload-time = "2025-10-12T03:04:27.861Z" }, - { url = "https://files.pythonhosted.org/packages/45/12/01f1da54e9d020a6d4fcf8cda68927bca9e5a2fbb59a9939eb78b0f3338f/pymssql-2.3.8-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:f463a6e6098fea2a51c099a68f95477e182a218714636f2ccfcb513cef1d43a8", size = 3135087, upload-time = "2025-10-12T03:04:29.723Z" }, - { url = "https://files.pythonhosted.org/packages/b5/92/3f3929825132c80967645e9f649a7aacbe47a686d7953df528be8aaec7e5/pymssql-2.3.8-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6ac50be6b83f3324b08ea7025d885b4061db0ccd4e71b1ba420a5b5e26d0a4ab", size = 2451498, upload-time = "2025-10-12T03:04:31.401Z" }, - { url = "https://files.pythonhosted.org/packages/15/88/1ba0eaded05ff78b8b95c1e992ad90d45dc0f18bf8ddcc3345b52c3c0e92/pymssql-2.3.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d0f3e2df22e5d73add12613c764bbb5fe7d26119c9cb2aa9de311f514a0060eb", size = 2794851, upload-time = "2025-10-12T03:04:33.035Z" }, - { url = "https://files.pythonhosted.org/packages/fc/41/9c0d7c3ee3cb69b8affce7b552a0fbfab534bfcb3908a32f765721b0d0ff/pymssql-2.3.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bdc738cfae0889940cffd51bb4e45589ddf42c6464ca570dd5982b2b1defc70b", size = 3693367, upload-time = "2025-10-12T03:04:34.542Z" }, - { url = "https://files.pythonhosted.org/packages/11/79/8b044c46736596aaba21e43db74c96ba5ccfd3b5c194495a5fa168f3592a/pymssql-2.3.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e3dff5e1523de22a8fa5c304c9c262e56ef28207c6e2551fe2aff8395f03b459", size = 3442183, upload-time = "2025-10-12T03:04:36.03Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/a1c00108d6c2e1fd4e2d209d8a9d79ff147bd1b7c34c1ff32e692ccdcbfa/pymssql-2.3.8-cp310-cp310-win32.whl", hash = "sha256:d3bd82ce1b42ae95e0da06b861a31b3c946bdac1ead0226f72a18f4f7eced136", size = 1322530, upload-time = "2025-10-12T03:04:37.573Z" }, - { url = "https://files.pythonhosted.org/packages/5f/d6/06d176ad92f1fb10dbbb21aea80a10199db9b12bb5e48704f8e0571e3304/pymssql-2.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:df127a9c5436561734873e5ce06c64abe1c21460e06cbdc02f3310c291bee323", size = 2003283, upload-time = "2025-10-12T03:04:39.037Z" }, - { url = "https://files.pythonhosted.org/packages/9b/6d/4b98fbb56b874913c77a27dad395555f1d5ee235ab4e97afe912a13c911c/pymssql-2.3.8-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:47cecf5c518b8c20e7e3ac01040976f11520a2ba5726090698a96b3913832a51", size = 2923679, upload-time = "2025-10-12T03:04:40.22Z" }, - { url = "https://files.pythonhosted.org/packages/6e/c4/4fa7731ce5dafd9be6f3a22bb2cc5eaf4a33ab324064b36fb74d3ecb0105/pymssql-2.3.8-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:41ea98df3e7f3ee1a9b6e41e612d0cd6c25474583929dcfea6d2cc322ff687b2", size = 3138188, upload-time = "2025-10-12T03:04:41.44Z" }, - { url = "https://files.pythonhosted.org/packages/fc/1d/edb51c49bba008b00465f250e6af840aa8ba314f604e0850796bbd8825a0/pymssql-2.3.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a56c4e223c5ddda5e512e18c03fad494f296fc1a2aa03bec38ffd547b7d8c778", size = 2442791, upload-time = "2025-10-12T03:04:42.771Z" }, - { url = "https://files.pythonhosted.org/packages/3f/7d/5bd28afb10a14e3a27185d05a49953346a42b8dd4e7cb6f5d9d488af8af1/pymssql-2.3.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:48d18f9e160b30c6d8c9b52172b0abc641504ec5156166c69b8e2caef2a130f8", size = 2784216, upload-time = "2025-10-12T03:04:44.386Z" }, - { url = "https://files.pythonhosted.org/packages/4b/67/c7041541c8b8d73e09f07968d680c290673412fc8473dc7ba038bbb637c5/pymssql-2.3.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4a0848bcc42eab68cbc276f7bcb279eeda4ef1ca214e8aa28836af9f6a9dd100", size = 3685217, upload-time = "2025-10-12T03:04:45.647Z" }, - { url = "https://files.pythonhosted.org/packages/76/71/91a973bea6fa42ddc0a97fc62d6b9971291d353e3a302e4e164bef688323/pymssql-2.3.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:17dd3cdf9f7cd404ccb768d39208b4ac4a80af648c2914ae41d7b4613d9103b5", size = 3429619, upload-time = "2025-10-12T03:04:46.908Z" }, - { url = "https://files.pythonhosted.org/packages/23/1b/68bcec9c4a18f901d93833b6ffbc1476a0127de04a265760e0f3894822cf/pymssql-2.3.8-cp311-cp311-win32.whl", hash = "sha256:a88707041e063702b6d643c52b4e86043c4830f714e871c7d2cefb10feb13120", size = 1321402, upload-time = "2025-10-12T03:04:48.466Z" }, - { url = "https://files.pythonhosted.org/packages/c2/33/28bee2bedefd49de3e531320a9015c78d6d9a018b88e4b4474e69b4eb470/pymssql-2.3.8-cp311-cp311-win_amd64.whl", hash = "sha256:37539c9ee4984ecbdff871b171463f9a18236d697baf04b07b910e610e4b9416", size = 2003611, upload-time = "2025-10-12T03:04:50.079Z" }, - { url = "https://files.pythonhosted.org/packages/3c/bc/b8f85fa7860551caff6d2400d12f3ac330fb8823ae16091d9f9a20334a65/pymssql-2.3.8-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:97d30d1634a6f327cd4803129717640b4c41eb892a73cb009b26c8e25c70350b", size = 2907204, upload-time = "2025-10-12T03:04:51.234Z" }, - { url = "https://files.pythonhosted.org/packages/3f/23/09de6a5e644687931f867cb975c0739149af2db421607777557ea5a2cdf0/pymssql-2.3.8-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:661fea7c04a4f1d4392de36dbf15e8133057ba0afbb0ecc49d5a01d8c6e4f915", size = 3125075, upload-time = "2025-10-12T03:04:53.027Z" }, - { url = "https://files.pythonhosted.org/packages/4b/32/a6aadcbb80b18c8ddb1fd4afd270c7405c427ba80d2364d71b302ae9e860/pymssql-2.3.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:dca810c23dfa3e7becfcd70ae1ffe10971fba4a008df466e27e12e53398caa44", size = 2475512, upload-time = "2025-10-12T03:04:54.219Z" }, - { url = "https://files.pythonhosted.org/packages/1d/e0/60c98c8d7196ab19a7225404d4a424c5c6dfeb2aa202e816318068921afe/pymssql-2.3.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c4ea3e64f46f84da7868f1a47e0fad74002955540907e75afa23fa6c6f561386", size = 2814155, upload-time = "2025-10-12T03:04:55.807Z" }, - { url = "https://files.pythonhosted.org/packages/b8/4c/0fa5727d86027e16fbb55e7013006252f9a3946c5200231777881497de76/pymssql-2.3.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f518f26dccb614ea6bfc6cab49e6b8eb8ff4409b0e669818742a56e172e57549", size = 3717794, upload-time = "2025-10-12T03:04:57.002Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c5/798ca2378f8d57cf6fefad46d74862d384c50ebf9ce37a562cf2d3f79928/pymssql-2.3.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dd53fc6f3d92aeadb9a7b7e301c7dce75d681552dc48d6e09da508a129d6a11a", size = 3464273, upload-time = "2025-10-12T03:04:58.238Z" }, - { url = "https://files.pythonhosted.org/packages/50/87/293fc15c293d40fe7f1c4b4a29d02a73e4e7b7a564bf494ce5625d863afb/pymssql-2.3.8-cp312-cp312-win32.whl", hash = "sha256:bd311d4371c6ed0165d1dabd9136c89182d484a84b7bd445eb34c549349895a1", size = 1306451, upload-time = "2025-10-12T03:04:59.402Z" }, - { url = "https://files.pythonhosted.org/packages/51/cc/509f21eaeb9946184a3699393c23978788f922845f15657622d69aaa9933/pymssql-2.3.8-cp312-cp312-win_amd64.whl", hash = "sha256:8a1c490ba6dc2428d33b4d09274c8b7e4f6efdddb2ac3f1d52be600970e61492", size = 1987930, upload-time = "2025-10-12T03:05:00.491Z" }, - { url = "https://files.pythonhosted.org/packages/b6/fe/fff705931f5909eeab58d5276525c6f6e3e3384b78d0cd3563081f5aceae/pymssql-2.3.8-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:0076d87b3356e54f0a5dfc3a06a29bc190f6a37ead55f0e715e294cb2855587e", size = 2903615, upload-time = "2025-10-12T03:05:01.713Z" }, - { url = "https://files.pythonhosted.org/packages/d0/cd/3df31a524aff9f75797bb0b8d48dd13adda10d9f35039badb8e9ac2f723f/pymssql-2.3.8-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d74430323c5de9a05d8d6635172329a5ae273ec76216ac4dac14fc8a5cf872d4", size = 3122000, upload-time = "2025-10-12T03:05:03.517Z" }, - { url = "https://files.pythonhosted.org/packages/4d/cc/1802b29b8bf6c0fb17c30ddeac99579758f68fe5b99560b7dcb789be22bb/pymssql-2.3.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:073a9d561bf12936e7893bb8263762c6fbc075d24c323d47c451c18f84be5c58", size = 2474884, upload-time = "2025-10-12T03:05:04.804Z" }, - { url = "https://files.pythonhosted.org/packages/96/e0/ddb81052b900d11438e1d22589932c06002a20859cc061c8eff31153b401/pymssql-2.3.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:420d777fa02ea22d96f61b71d9105bbf897a97c3149463a7cdd43660713a353d", size = 2813688, upload-time = "2025-10-12T03:05:05.972Z" }, - { url = "https://files.pythonhosted.org/packages/db/12/71d639afa55514610d2be228d50e8c70a12d314511caba299c3fc5f0406a/pymssql-2.3.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6ad9ae915565539b5f31ae78be5e8c95d22bd28933ca062c13921f3be1215f2d", size = 3717412, upload-time = "2025-10-12T03:05:07.223Z" }, - { url = "https://files.pythonhosted.org/packages/18/85/a87e3ddba5ad3be02e975460612c201d2817d9de8c50b38c2a490d7aa1d6/pymssql-2.3.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:135026a2c3f23d56dbc0d3ad0ff4f738e3fd31dc580991cce88e40b544224317", size = 3463943, upload-time = "2025-10-12T03:05:08.488Z" }, - { url = "https://files.pythonhosted.org/packages/1a/39/c8924ac0257979d3407693859849a3805e8a1c873acad8faeb325c70ae14/pymssql-2.3.8-cp313-cp313-win32.whl", hash = "sha256:f1bb87e4ce18177b8096dc3a68101cacd4601b1f0a67d98b5a072f7ba9a3b6b1", size = 1306125, upload-time = "2025-10-12T03:05:09.829Z" }, - { url = "https://files.pythonhosted.org/packages/3f/6d/7f29af4a7a549d02e4093754316f37544621c972900f03552639f60a4e40/pymssql-2.3.8-cp313-cp313-win_amd64.whl", hash = "sha256:54ae2ae15b36a8054777c287b22532bcac94f500ddb5a1e0d232abca047cba1e", size = 1988267, upload-time = "2025-10-12T03:05:10.981Z" }, - { url = "https://files.pythonhosted.org/packages/14/de/f127ea7f72d3c78af75f0ebcd4b42ac3c8e840ef7f52d5b037e0e00a9381/pymssql-2.3.8-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:7d344e8b4cedab51e9925e08ce6267880f6dac055bd3ad1592d067f9cc2c09bd", size = 2903625, upload-time = "2025-10-12T03:05:12.764Z" }, - { url = "https://files.pythonhosted.org/packages/3f/65/560b9b1727056a351b2e8a5a99d629f9060a78df0eb9bc4a882e1ff000eb/pymssql-2.3.8-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:6312649353964b9b71204abd5b89135d105bc2ce04f2a9f465be6bc77ea53d1a", size = 3123993, upload-time = "2025-10-12T03:05:14.464Z" }, - { url = "https://files.pythonhosted.org/packages/6e/d4/ba18967442ecb3bc8538f2db0f36d0b8ede34907d03b9a3eb37c5e0b53fe/pymssql-2.3.8-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9f8222024df048a76f2eec0b4f246efaed7a9947a322c251151d683a4bfabe4c", size = 2472977, upload-time = "2025-10-12T03:05:15.837Z" }, - { url = "https://files.pythonhosted.org/packages/01/12/276208e3a06e44bc08f6a96f73e80584621823ebdbf95d9e343516a295ee/pymssql-2.3.8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:af6d1d0beed286f73d7d9af0b3a8bdb46cd2a0ad12c92fd601d324ee85c45aa6", size = 2810729, upload-time = "2025-10-12T03:05:17.374Z" }, - { url = "https://files.pythonhosted.org/packages/f9/06/278a5c7d879ce6b3e4f304adbbfbf3e7bb20c27aba2203708e37f5bd14cd/pymssql-2.3.8-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9b18e79e1747f5a1b3b28214af235f8e16dff49c512a9be6a13995520dc22af1", size = 3716064, upload-time = "2025-10-12T03:05:18.825Z" }, - { url = "https://files.pythonhosted.org/packages/5c/fd/c61a30a44a7a77a807c116faba42f9a34824011b1a11f60840b5e85b93e1/pymssql-2.3.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9d733862687dd1f9406137d43149ee597a1a50263128e7e3543cdecd0ad262d", size = 3461322, upload-time = "2025-10-12T03:05:20.091Z" }, - { url = "https://files.pythonhosted.org/packages/0c/aa/6d8fff2e45c6d2fb4e7b0dd8aa1f7ee5a36fa521a4c7b602e56d2c9e8cb9/pymssql-2.3.8-cp314-cp314-win32.whl", hash = "sha256:61b5c1e13803bb15d31b1986cbf0c7fef7f16ddb55ef933d7d78f39adad6f149", size = 1336560, upload-time = "2025-10-12T03:05:21.453Z" }, - { url = "https://files.pythonhosted.org/packages/65/66/60007c91d548caec655b3811489f9d09deec524297edc683932d86e5e4cb/pymssql-2.3.8-cp314-cp314-win_amd64.whl", hash = "sha256:d6d303a443ba12d62992c1d2fb0dfec566e2d1462ace9f3382db695f7f0dfbf0", size = 2041411, upload-time = "2025-10-12T03:05:23.567Z" }, +version = "2.3.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/3a/9332b3331c423ac6ae40adb4680d858e3e15d39ec25507fd01b45c171730/pymssql-2.3.9.tar.gz", hash = "sha256:00aa861936374f251b8e1e4535f26daed32c2fc365b891fedcd97d7863d7321b", size = 185175, upload-time = "2025-11-07T00:25:18.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/c4/4fa819136d1a0dbf5120be98a20f93bf2ce8a3db66eed65b7c127cc0f282/pymssql-2.3.9-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:a4a17e4fd9da54b27a787dfcd84dbb837d16bf0a4bcfe75dbd2d1e735a51d5f1", size = 2908671, upload-time = "2025-11-07T00:24:03.623Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c1/584f51277868fab94e6ba86e41832749d12131085e61466cf1cd95c7d057/pymssql-2.3.9-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:69be0fc0bb8ca1f511545ce84129af16768aad93e7f64dcf59ce70458a3b49c2", size = 3163178, upload-time = "2025-11-07T00:24:05.924Z" }, + { url = "https://files.pythonhosted.org/packages/8a/4c/8fbb84e3c26ac2aaaa60a8f2222ec8948fd76d0feddab1604d6c3d821c8a/pymssql-2.3.9-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d7ec37008d8e224950587ca6128815232cb8998b00e6fcf0b4ea71794cd8ecf4", size = 2433861, upload-time = "2025-11-07T00:24:07.133Z" }, + { url = "https://files.pythonhosted.org/packages/eb/9b/14d80ade9de45c1b9ffd7c5a280d5565fe566fd280b20adb976c72876827/pymssql-2.3.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a792a0813f5510ffa42073179b93769f12f2cbcf80d31ce959c9e35d87882acb", size = 2776469, upload-time = "2025-11-07T00:24:08.765Z" }, + { url = "https://files.pythonhosted.org/packages/98/76/3885f92ca7ff1eea4bb2623cb7a6ac66b2bbd85eaf5cc0b1ed25b3d95831/pymssql-2.3.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9eb7ae5273dbc41ad106b5470e5a00f730662ac43e6392ac0724ba7727e8bd41", size = 3675911, upload-time = "2025-11-07T00:24:10.524Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6c/796c4aad5b3a6374c6eedc3184fb7acc9026f549f87c24b201e8eb126fb7/pymssql-2.3.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9f81faafb80e5240f36a2e5789cb19d88a0a767f81a78e9812c0531d478ded17", size = 3422335, upload-time = "2025-11-07T00:24:12.67Z" }, + { url = "https://files.pythonhosted.org/packages/7e/df/913d0675f87468a54bdd49fd6e56a702aea7da38c3d8ba79fbf0bd0f31cb/pymssql-2.3.9-cp310-cp310-win32.whl", hash = "sha256:d25d17cb6360f82f63374ae9df4f2db42dccc1e149b44fd04b11812277b00645", size = 1317603, upload-time = "2025-11-07T00:24:14.206Z" }, + { url = "https://files.pythonhosted.org/packages/23/ae/915c217536c1bba5dc4c921d57a39ffe88a363c462003af81ff2ef275bc0/pymssql-2.3.9-cp310-cp310-win_amd64.whl", hash = "sha256:21678c726c31c9d5956ec4f5f3eb14f71be04ebaea00ba33b84316df9d9504e9", size = 1997128, upload-time = "2025-11-07T00:24:15.853Z" }, + { url = "https://files.pythonhosted.org/packages/ca/5b/3e8f63da36e6f9c2c53919d84fa2a59aab27b5f10d79c337a339ac3ca579/pymssql-2.3.9-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:8bd78052f94d2a519bfc3922831144b79f8c35f96347b2d76c8030670549e7e9", size = 2906587, upload-time = "2025-11-07T00:24:17.518Z" }, + { url = "https://files.pythonhosted.org/packages/cb/fb/f81211fe3050c09427bb69bb2791fbe43293d8d8c230c593aeb85100487a/pymssql-2.3.9-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7c302c204ea7b64bbb6aa8870a48aeda430b2518d9c9ed4f680b4556ffc66800", size = 3161798, upload-time = "2025-11-07T00:24:18.683Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e1/b2a13c9cec28b47426bdf1c2f4db52c256c1dadfe939da583955754956e6/pymssql-2.3.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:18b8d0495649d36499fc47bdd748b30ef7d522ad02dbaa0c99a595b7aff70808", size = 2427237, upload-time = "2025-11-07T00:24:20.314Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/b65176ca09af0191316d75823fdfd9edc149264294f244c35fdef2b42227/pymssql-2.3.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2d67cf85bbbe9de5c42e0cd6b5cc439b3e4537f85cfc9216ffb81a61b22c9878", size = 2764911, upload-time = "2025-11-07T00:24:21.384Z" }, + { url = "https://files.pythonhosted.org/packages/0b/74/c2f935ee6b521886cd1dbdd70b9a451c063598357d86dd42d7dcb1fd02dc/pymssql-2.3.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:843e7cf4df2dcda0e91993fc29388a7f0cf208aa8e6ebab63c9a73c679ef530a", size = 3668315, upload-time = "2025-11-07T00:24:23.146Z" }, + { url = "https://files.pythonhosted.org/packages/77/e5/b839b63a185753db82826c3dfa8e3632cf6436c2ae6ec729f025c5401d14/pymssql-2.3.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4814affb16ec73666f890c3830dfb49d17f50914d3811f232208b01a60af7b5e", size = 3411284, upload-time = "2025-11-07T00:24:24.809Z" }, + { url = "https://files.pythonhosted.org/packages/bd/56/c5f3e94b49b7dfd8e61fcb0ff2139647da585be62bb78488d550d3a9ec58/pymssql-2.3.9-cp311-cp311-win32.whl", hash = "sha256:279f66421f5e6c332112cf99432b2a40e9d55a674f962f704b1abfcc4df556ba", size = 1316180, upload-time = "2025-11-07T00:24:26.29Z" }, + { url = "https://files.pythonhosted.org/packages/51/dd/e1495563aa55b08a6e7198b1d1c0813839a556753aed4d3c4be009bc0d94/pymssql-2.3.9-cp311-cp311-win_amd64.whl", hash = "sha256:0ce5aed7f3eb07186ac45264f835e62295995ec10d8557be6f0e12734bf80e20", size = 1997681, upload-time = "2025-11-07T00:24:28.166Z" }, + { url = "https://files.pythonhosted.org/packages/70/8c/8eabd27238056124165f53d55a925d793bc2e64254cb5c61bef443660ba8/pymssql-2.3.9-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:acb53b1cdc8858c4c65c928ea38bc11fe2dbae87b244d64175233d57ff0da1f4", size = 2890116, upload-time = "2025-11-07T00:24:29.273Z" }, + { url = "https://files.pythonhosted.org/packages/96/a9/8993eb286935d1b8104e69f2541b7d48402f33fe437522d5cf801d1a4683/pymssql-2.3.9-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2dc890adf9fe07184967e0ae88bcb2599ba520dd21ef9a335a582a4bb710b90a", size = 3148441, upload-time = "2025-11-07T00:24:30.543Z" }, + { url = "https://files.pythonhosted.org/packages/bf/6d/06105f13943c6e8285ce27f5053d38409d7eeb21ca5d15449f6804cae77e/pymssql-2.3.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4cf09a60226db8e12d0eb8c52e0f4d710664b49b244b80b5a2534a602d826f17", size = 2455833, upload-time = "2025-11-07T00:24:31.746Z" }, + { url = "https://files.pythonhosted.org/packages/15/e4/b33066bc1407c060120f077c7f21efeea9d5929859f928a8bc1418bd6c7d/pymssql-2.3.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f93b4e0d465b1340a373573e8166f568329d4bc95daccdd4a616e5dfe5cabc1b", size = 2791598, upload-time = "2025-11-07T00:24:33.786Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a7/6f27e35203d39c6e478c68151b7847d111be9245df8bbcc9e8d606caeaf3/pymssql-2.3.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d2169f3f55d0abcbcb1b9b6a611ee85a8a61b5f11df66f16700e90dd8aa7ccd5", size = 3696961, upload-time = "2025-11-07T00:24:35.423Z" }, + { url = "https://files.pythonhosted.org/packages/7c/15/1d2b12724199ef98e06858bdb262fb5d76e43ce295058dc22d8756f79a72/pymssql-2.3.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bc678a80519a63a86fef0dda1e264b4ffc60c382a4ba8d50b9656bde71ba8e25", size = 3439929, upload-time = "2025-11-07T00:24:36.885Z" }, + { url = "https://files.pythonhosted.org/packages/37/28/07f3533a162e9db0aef417e48a4e16ba4baae5eb3ee8036ad766f2a94db5/pymssql-2.3.9-cp312-cp312-win32.whl", hash = "sha256:7ea58ea59f781d2519c6bcb9f3faea4ba861baea4cb1c2537fa2ee3a3f98a103", size = 1301950, upload-time = "2025-11-07T00:24:38.18Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ff/1232e7abd765d5b6916414ca7b2a24cecfefcaf369baaa0d1eabced31d0f/pymssql-2.3.9-cp312-cp312-win_amd64.whl", hash = "sha256:1836de4b42ea563dba77e3ba9e18f44157580eaa1c60e5e4c054cf229e8aee85", size = 1982983, upload-time = "2025-11-07T00:24:39.281Z" }, + { url = "https://files.pythonhosted.org/packages/85/2d/54a922790b3ed1f6bb1c45836fad58382b5a9f527054c934d415caa3febf/pymssql-2.3.9-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:8c4e389da9d545829db0d51bf1555bdb866ecabd61a3eb6fd6a8198c425adedc", size = 2887524, upload-time = "2025-11-07T00:24:40.897Z" }, + { url = "https://files.pythonhosted.org/packages/88/ae/819f79197943cd2d356e4ad8793a8acd49575990202533cf12536344fe03/pymssql-2.3.9-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:b589e035a98149148239bf78a9c38eb2d255f1f943633d30dd3dff6c2c23e9cd", size = 3146305, upload-time = "2025-11-07T00:24:42.069Z" }, + { url = "https://files.pythonhosted.org/packages/b5/18/a7df7a402dce5401ef32194e479cc2571397d81511c07c153552294d7aa5/pymssql-2.3.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5b4741fbec26e9f63ae66afc971a00b7365eec4b6a619dd2aff3abe0fa8f75ee", size = 2455424, upload-time = "2025-11-07T00:24:43.308Z" }, + { url = "https://files.pythonhosted.org/packages/85/27/91f51a406e270800043d7a15504ca8481e0095685dbc190dd8e5accd9cf2/pymssql-2.3.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:100bcd948247c7eae9f951a3f33a1fdd952bd2c683a7ce277066d4f38a960d83", size = 2790972, upload-time = "2025-11-07T00:24:44.627Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1d/edf69610ead451f552ab3aea71757e2e81b5952ed5616aef80b20ceef7fc/pymssql-2.3.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fada474823586b4c417f57d6256ddc05ced313c2306c67d6677427dff488f70a", size = 3696454, upload-time = "2025-11-07T00:24:46.723Z" }, + { url = "https://files.pythonhosted.org/packages/d5/57/77d23790c3c4ee672d6d3172072e935e014df15e0446f9d289ecf898feb6/pymssql-2.3.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eaaa72530af8012b7d3d7d01e5d5a44b2f7dc04abb9e36a1eb30b914f68ae060", size = 3439485, upload-time = "2025-11-07T00:24:48.352Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/a1d4640ddd69a570c31cc377e0bcf44a16369c6b768e76cea2f3b47fc896/pymssql-2.3.9-cp313-cp313-win32.whl", hash = "sha256:734397cc4ffc5aecb2b312adb940b8bd6df0b5a8f52f9207157f06fe5fdacf26", size = 1301862, upload-time = "2025-11-07T00:24:49.578Z" }, + { url = "https://files.pythonhosted.org/packages/27/cc/faf4eb725794c7094a26eca77b6bb81e220de1fb45223e0d723abdcbff76/pymssql-2.3.9-cp313-cp313-win_amd64.whl", hash = "sha256:87282bf2cc318f2c87d3a26e86b9287d863d3f67d31cad077614046d60b8bcd6", size = 1983605, upload-time = "2025-11-07T00:24:50.737Z" }, + { url = "https://files.pythonhosted.org/packages/80/6d/45c161736c998942544c805ab11cccd0ebc2622f355b29bf61fffc6e934d/pymssql-2.3.9-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:437071819b3c864f9c810f2d186df147ccd89eb5923dfc7a8a3dea4cc41005a1", size = 2887874, upload-time = "2025-11-07T00:24:52.315Z" }, + { url = "https://files.pythonhosted.org/packages/7c/5d/a5af2012d6f33dd8aa44410dc1630c4b329bfb99ce13f449efcdf5bee098/pymssql-2.3.9-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e2c64e55389b849fc84ebabdac5b3a3089e2f86eaeaa9768daf6589ef456bcbd", size = 3148332, upload-time = "2025-11-07T00:24:53.554Z" }, + { url = "https://files.pythonhosted.org/packages/49/e5/9d35d137a82d76db354d026916a94983b89a9c8c913084383c209c528628/pymssql-2.3.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:11f4743ff85bf40a248cba03f0ef1aec36c4748bd8c1b1c1940db04989d542b3", size = 2453981, upload-time = "2025-11-07T00:24:55.04Z" }, + { url = "https://files.pythonhosted.org/packages/f6/48/d23423b3c8a180282ec12a918a1d1ccf2084d1d8bf56249a66482baf8767/pymssql-2.3.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeb65c9397ea345148e47cf4c5f4c04280c954d6d5779d9257289cc3321ea34f", size = 2789395, upload-time = "2025-11-07T00:24:57.684Z" }, + { url = "https://files.pythonhosted.org/packages/a5/86/d3120a19ceaa8d10bd908fbc4cce294504224e96a32f88e25518196785c5/pymssql-2.3.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:12e069f058eeec41c6b3e6ca54081df6a4efeca8bd85bbc0790c439f2a1ba0d5", size = 3695581, upload-time = "2025-11-07T00:24:59.635Z" }, + { url = "https://files.pythonhosted.org/packages/99/19/d556ba7f190a26f822d0e2f72e086c7a2e655ee4021405a80441818e2277/pymssql-2.3.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:05ef3b3e2fb08e8c19226d5ed38838107842b8ceb03c2ee4095ccf7cd19c7154", size = 3438213, upload-time = "2025-11-07T00:25:00.851Z" }, + { url = "https://files.pythonhosted.org/packages/34/95/708f92b7da07fdd5a1e35a6f2939aa20650ce7414a21a59184895731741d/pymssql-2.3.9-cp314-cp314-win32.whl", hash = "sha256:2b15cf0614b3a77e344c1f81d6564c4ae14e9f61f7407b6df801d4034e4c94d8", size = 1333272, upload-time = "2025-11-07T00:25:02.912Z" }, + { url = "https://files.pythonhosted.org/packages/23/df/8fdf62807b83649dc71fc7886b5f3462a436430d342c94d3a07a7494cac9/pymssql-2.3.9-cp314-cp314-win_amd64.whl", hash = "sha256:3f6dfde0c1123f5e01b29683456e422472c0af5a533a0f46a1cbb359602ade72", size = 2037389, upload-time = "2025-11-07T00:25:04.654Z" }, ] [[package]] @@ -5142,28 +5147,28 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/62/50b7727004dfe361104dfbf898c45a9a2fdfad8c72c04ae62900224d6ecf/ruff-0.14.3.tar.gz", hash = "sha256:4ff876d2ab2b161b6de0aa1f5bd714e8e9b4033dc122ee006925fbacc4f62153", size = 5558687, upload-time = "2025-10-31T00:26:26.878Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/8e/0c10ff1ea5d4360ab8bfca4cb2c9d979101a391f3e79d2616c9bf348cd26/ruff-0.14.3-py3-none-linux_armv6l.whl", hash = "sha256:876b21e6c824f519446715c1342b8e60f97f93264012de9d8d10314f8a79c371", size = 12535613, upload-time = "2025-10-31T00:25:44.302Z" }, - { url = "https://files.pythonhosted.org/packages/d3/c8/6724f4634c1daf52409fbf13fefda64aa9c8f81e44727a378b7b73dc590b/ruff-0.14.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b6fd8c79b457bedd2abf2702b9b472147cd860ed7855c73a5247fa55c9117654", size = 12855812, upload-time = "2025-10-31T00:25:47.793Z" }, - { url = "https://files.pythonhosted.org/packages/de/03/db1bce591d55fd5f8a08bb02517fa0b5097b2ccabd4ea1ee29aa72b67d96/ruff-0.14.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:71ff6edca490c308f083156938c0c1a66907151263c4abdcb588602c6e696a14", size = 11944026, upload-time = "2025-10-31T00:25:49.657Z" }, - { url = "https://files.pythonhosted.org/packages/0b/75/4f8dbd48e03272715d12c87dc4fcaaf21b913f0affa5f12a4e9c6f8a0582/ruff-0.14.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:786ee3ce6139772ff9272aaf43296d975c0217ee1b97538a98171bf0d21f87ed", size = 12356818, upload-time = "2025-10-31T00:25:51.949Z" }, - { url = "https://files.pythonhosted.org/packages/ec/9b/506ec5b140c11d44a9a4f284ea7c14ebf6f8b01e6e8917734a3325bff787/ruff-0.14.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cd6291d0061811c52b8e392f946889916757610d45d004e41140d81fb6cd5ddc", size = 12336745, upload-time = "2025-10-31T00:25:54.248Z" }, - { url = "https://files.pythonhosted.org/packages/c7/e1/c560d254048c147f35e7f8131d30bc1f63a008ac61595cf3078a3e93533d/ruff-0.14.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a497ec0c3d2c88561b6d90f9c29f5ae68221ac00d471f306fa21fa4264ce5fcd", size = 13101684, upload-time = "2025-10-31T00:25:56.253Z" }, - { url = "https://files.pythonhosted.org/packages/a5/32/e310133f8af5cd11f8cc30f52522a3ebccc5ea5bff4b492f94faceaca7a8/ruff-0.14.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e231e1be58fc568950a04fbe6887c8e4b85310e7889727e2b81db205c45059eb", size = 14535000, upload-time = "2025-10-31T00:25:58.397Z" }, - { url = "https://files.pythonhosted.org/packages/a2/a1/7b0470a22158c6d8501eabc5e9b6043c99bede40fa1994cadf6b5c2a61c7/ruff-0.14.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:469e35872a09c0e45fecf48dd960bfbce056b5db2d5e6b50eca329b4f853ae20", size = 14156450, upload-time = "2025-10-31T00:26:00.889Z" }, - { url = "https://files.pythonhosted.org/packages/0a/96/24bfd9d1a7f532b560dcee1a87096332e461354d3882124219bcaff65c09/ruff-0.14.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d6bc90307c469cb9d28b7cfad90aaa600b10d67c6e22026869f585e1e8a2db0", size = 13568414, upload-time = "2025-10-31T00:26:03.291Z" }, - { url = "https://files.pythonhosted.org/packages/a7/e7/138b883f0dfe4ad5b76b58bf4ae675f4d2176ac2b24bdd81b4d966b28c61/ruff-0.14.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2f8a0bbcffcfd895df39c9a4ecd59bb80dca03dc43f7fb63e647ed176b741e", size = 13315293, upload-time = "2025-10-31T00:26:05.708Z" }, - { url = "https://files.pythonhosted.org/packages/33/f4/c09bb898be97b2eb18476b7c950df8815ef14cf956074177e9fbd40b7719/ruff-0.14.3-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:678fdd7c7d2d94851597c23ee6336d25f9930b460b55f8598e011b57c74fd8c5", size = 13539444, upload-time = "2025-10-31T00:26:08.09Z" }, - { url = "https://files.pythonhosted.org/packages/9c/aa/b30a1db25fc6128b1dd6ff0741fa4abf969ded161599d07ca7edd0739cc0/ruff-0.14.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1ec1ac071e7e37e0221d2f2dbaf90897a988c531a8592a6a5959f0603a1ecf5e", size = 12252581, upload-time = "2025-10-31T00:26:10.297Z" }, - { url = "https://files.pythonhosted.org/packages/da/13/21096308f384d796ffe3f2960b17054110a9c3828d223ca540c2b7cc670b/ruff-0.14.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:afcdc4b5335ef440d19e7df9e8ae2ad9f749352190e96d481dc501b753f0733e", size = 12307503, upload-time = "2025-10-31T00:26:12.646Z" }, - { url = "https://files.pythonhosted.org/packages/cb/cc/a350bac23f03b7dbcde3c81b154706e80c6f16b06ff1ce28ed07dc7b07b0/ruff-0.14.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:7bfc42f81862749a7136267a343990f865e71fe2f99cf8d2958f684d23ce3dfa", size = 12675457, upload-time = "2025-10-31T00:26:15.044Z" }, - { url = "https://files.pythonhosted.org/packages/cb/76/46346029fa2f2078826bc88ef7167e8c198e58fe3126636e52f77488cbba/ruff-0.14.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a65e448cfd7e9c59fae8cf37f9221585d3354febaad9a07f29158af1528e165f", size = 13403980, upload-time = "2025-10-31T00:26:17.81Z" }, - { url = "https://files.pythonhosted.org/packages/9f/a4/35f1ef68c4e7b236d4a5204e3669efdeefaef21f0ff6a456792b3d8be438/ruff-0.14.3-py3-none-win32.whl", hash = "sha256:f3d91857d023ba93e14ed2d462ab62c3428f9bbf2b4fbac50a03ca66d31991f7", size = 12500045, upload-time = "2025-10-31T00:26:20.503Z" }, - { url = "https://files.pythonhosted.org/packages/03/15/51960ae340823c9859fb60c63301d977308735403e2134e17d1d2858c7fb/ruff-0.14.3-py3-none-win_amd64.whl", hash = "sha256:d7b7006ac0756306db212fd37116cce2bd307e1e109375e1c6c106002df0ae5f", size = 13594005, upload-time = "2025-10-31T00:26:22.533Z" }, - { url = "https://files.pythonhosted.org/packages/b7/73/4de6579bac8e979fca0a77e54dec1f1e011a0d268165eb8a9bc0982a6564/ruff-0.14.3-py3-none-win_arm64.whl", hash = "sha256:26eb477ede6d399d898791d01961e16b86f02bc2486d0d1a7a9bb2379d055dc1", size = 12590017, upload-time = "2025-10-31T00:26:24.52Z" }, +version = "0.14.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/55/cccfca45157a2031dcbb5a462a67f7cf27f8b37d4b3b1cd7438f0f5c1df6/ruff-0.14.4.tar.gz", hash = "sha256:f459a49fe1085a749f15414ca76f61595f1a2cc8778ed7c279b6ca2e1fd19df3", size = 5587844, upload-time = "2025-11-06T22:07:45.033Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/b9/67240254166ae1eaa38dec32265e9153ac53645a6c6670ed36ad00722af8/ruff-0.14.4-py3-none-linux_armv6l.whl", hash = "sha256:e6604613ffbcf2297cd5dcba0e0ac9bd0c11dc026442dfbb614504e87c349518", size = 12606781, upload-time = "2025-11-06T22:07:01.841Z" }, + { url = "https://files.pythonhosted.org/packages/46/c8/09b3ab245d8652eafe5256ab59718641429f68681ee713ff06c5c549f156/ruff-0.14.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d99c0b52b6f0598acede45ee78288e5e9b4409d1ce7f661f0fa36d4cbeadf9a4", size = 12946765, upload-time = "2025-11-06T22:07:05.858Z" }, + { url = "https://files.pythonhosted.org/packages/14/bb/1564b000219144bf5eed2359edc94c3590dd49d510751dad26202c18a17d/ruff-0.14.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:9358d490ec030f1b51d048a7fd6ead418ed0826daf6149e95e30aa67c168af33", size = 11928120, upload-time = "2025-11-06T22:07:08.023Z" }, + { url = "https://files.pythonhosted.org/packages/a3/92/d5f1770e9988cc0742fefaa351e840d9aef04ec24ae1be36f333f96d5704/ruff-0.14.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b40d27924f1f02dfa827b9c0712a13c0e4b108421665322218fc38caf615c2", size = 12370877, upload-time = "2025-11-06T22:07:10.015Z" }, + { url = "https://files.pythonhosted.org/packages/e2/29/e9282efa55f1973d109faf839a63235575519c8ad278cc87a182a366810e/ruff-0.14.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f5e649052a294fe00818650712083cddc6cc02744afaf37202c65df9ea52efa5", size = 12408538, upload-time = "2025-11-06T22:07:13.085Z" }, + { url = "https://files.pythonhosted.org/packages/8e/01/930ed6ecfce130144b32d77d8d69f5c610e6d23e6857927150adf5d7379a/ruff-0.14.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa082a8f878deeba955531f975881828fd6afd90dfa757c2b0808aadb437136e", size = 13141942, upload-time = "2025-11-06T22:07:15.386Z" }, + { url = "https://files.pythonhosted.org/packages/6a/46/a9c89b42b231a9f487233f17a89cbef9d5acd538d9488687a02ad288fa6b/ruff-0.14.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1043c6811c2419e39011890f14d0a30470f19d47d197c4858b2787dfa698f6c8", size = 14544306, upload-time = "2025-11-06T22:07:17.631Z" }, + { url = "https://files.pythonhosted.org/packages/78/96/9c6cf86491f2a6d52758b830b89b78c2ae61e8ca66b86bf5a20af73d20e6/ruff-0.14.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9f3a936ac27fb7c2a93e4f4b943a662775879ac579a433291a6f69428722649", size = 14210427, upload-time = "2025-11-06T22:07:19.832Z" }, + { url = "https://files.pythonhosted.org/packages/71/f4/0666fe7769a54f63e66404e8ff698de1dcde733e12e2fd1c9c6efb689cb5/ruff-0.14.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95643ffd209ce78bc113266b88fba3d39e0461f0cbc8b55fb92505030fb4a850", size = 13658488, upload-time = "2025-11-06T22:07:22.32Z" }, + { url = "https://files.pythonhosted.org/packages/ee/79/6ad4dda2cfd55e41ac9ed6d73ef9ab9475b1eef69f3a85957210c74ba12c/ruff-0.14.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:456daa2fa1021bc86ca857f43fe29d5d8b3f0e55e9f90c58c317c1dcc2afc7b5", size = 13354908, upload-time = "2025-11-06T22:07:24.347Z" }, + { url = "https://files.pythonhosted.org/packages/b5/60/f0b6990f740bb15c1588601d19d21bcc1bd5de4330a07222041678a8e04f/ruff-0.14.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f911bba769e4a9f51af6e70037bb72b70b45a16db5ce73e1f72aefe6f6d62132", size = 13587803, upload-time = "2025-11-06T22:07:26.327Z" }, + { url = "https://files.pythonhosted.org/packages/c9/da/eaaada586f80068728338e0ef7f29ab3e4a08a692f92eb901a4f06bbff24/ruff-0.14.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:76158a7369b3979fa878612c623a7e5430c18b2fd1c73b214945c2d06337db67", size = 12279654, upload-time = "2025-11-06T22:07:28.46Z" }, + { url = "https://files.pythonhosted.org/packages/66/d4/b1d0e82cf9bf8aed10a6d45be47b3f402730aa2c438164424783ac88c0ed/ruff-0.14.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f3b8f3b442d2b14c246e7aeca2e75915159e06a3540e2f4bed9f50d062d24469", size = 12357520, upload-time = "2025-11-06T22:07:31.468Z" }, + { url = "https://files.pythonhosted.org/packages/04/f4/53e2b42cc82804617e5c7950b7079d79996c27e99c4652131c6a1100657f/ruff-0.14.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c62da9a06779deecf4d17ed04939ae8b31b517643b26370c3be1d26f3ef7dbde", size = 12719431, upload-time = "2025-11-06T22:07:33.831Z" }, + { url = "https://files.pythonhosted.org/packages/a2/94/80e3d74ed9a72d64e94a7b7706b1c1ebaa315ef2076fd33581f6a1cd2f95/ruff-0.14.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5a443a83a1506c684e98acb8cb55abaf3ef725078be40237463dae4463366349", size = 13464394, upload-time = "2025-11-06T22:07:35.905Z" }, + { url = "https://files.pythonhosted.org/packages/54/1a/a49f071f04c42345c793d22f6cf5e0920095e286119ee53a64a3a3004825/ruff-0.14.4-py3-none-win32.whl", hash = "sha256:643b69cb63cd996f1fc7229da726d07ac307eae442dd8974dbc7cf22c1e18fff", size = 12493429, upload-time = "2025-11-06T22:07:38.43Z" }, + { url = "https://files.pythonhosted.org/packages/bc/22/e58c43e641145a2b670328fb98bc384e20679b5774258b1e540207580266/ruff-0.14.4-py3-none-win_amd64.whl", hash = "sha256:26673da283b96fe35fa0c939bf8411abec47111644aa9f7cfbd3c573fb125d2c", size = 13635380, upload-time = "2025-11-06T22:07:40.496Z" }, + { url = "https://files.pythonhosted.org/packages/30/bd/4168a751ddbbf43e86544b4de8b5c3b7be8d7167a2a5cb977d274e04f0a1/ruff-0.14.4-py3-none-win_arm64.whl", hash = "sha256:dd09c292479596b0e6fec8cd95c65c3a6dc68e9ad17b8f2382130f87ff6a75bb", size = 12663065, upload-time = "2025-11-06T22:07:42.603Z" }, ] [[package]] @@ -5391,7 +5396,7 @@ version = "3.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "astroid", version = "3.3.11", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, - { name = "astroid", version = "4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "astroid", version = "4.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "jinja2" }, { name = "pyyaml" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, @@ -6519,11 +6524,11 @@ wheels = [ [[package]] name = "types-pytz" -version = "2025.2.0.20250809" +version = "2025.2.0.20251108" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/e2/c774f754de26848f53f05defff5bb21dd9375a059d1ba5b5ea943cf8206e/types_pytz-2025.2.0.20250809.tar.gz", hash = "sha256:222e32e6a29bb28871f8834e8785e3801f2dc4441c715cd2082b271eecbe21e5", size = 10876, upload-time = "2025-08-09T03:14:17.453Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/ff/c047ddc68c803b46470a357454ef76f4acd8c1088f5cc4891cdd909bfcf6/types_pytz-2025.2.0.20251108.tar.gz", hash = "sha256:fca87917836ae843f07129567b74c1929f1870610681b4c92cb86a3df5817bdb", size = 10961, upload-time = "2025-11-08T02:55:57.001Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/d0/91c24fe54e565f2344d7a6821e6c6bb099841ef09007ea6321a0bac0f808/types_pytz-2025.2.0.20250809-py3-none-any.whl", hash = "sha256:4f55ed1b43e925cf851a756fe1707e0f5deeb1976e15bf844bcaa025e8fbd0db", size = 10095, upload-time = "2025-08-09T03:14:16.674Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c1/56ef16bf5dcd255155cc736d276efa6ae0a5c26fd685e28f0412a4013c01/types_pytz-2025.2.0.20251108-py3-none-any.whl", hash = "sha256:0f1c9792cab4eb0e46c52f8845c8f77cf1e313cb3d68bf826aa867fe4717d91c", size = 10116, upload-time = "2025-11-08T02:55:56.194Z" }, ] [[package]]