Skip to main content

Type hints for sqlean.py (sqlite3 + extensions)

Project description

sqlean-stubs

Type hints for sqlean.py - Python's sqlite3 + extensions.

Installation

pip install sqlean-stubs

or with uv:

uv add sqlean-stubs

Usage

Type hints enable IDE autocomplete and type checking for sqlean code:

from typing import Optional
import sqlean

def main_sqlean():
    print("Hello from try-sqlean-stubs!")
    conn: sqlean.Connection = sqlean.connect(":memory:")
    cursor: sqlean.Cursor = conn.cursor()

    # Create repos table
    cursor.execute("""
        CREATE TABLE repos (
            id INTEGER PRIMARY KEY,
            package_name TEXT NOT NULL,
            github_url TEXT NOT NULL
        )
    """)

    # Insert test data
    cursor.execute(
        "INSERT INTO repos (package_name, github_url) VALUES (?, ?)",
        ("sqlean.py", "https://github.com/nalgeon/sqlean.py")
    )
    cursor.execute(
        "INSERT INTO repos (package_name, github_url) VALUES (?, ?)",
        ("sqlean-stubs", "https://github.com/kracekumar/sqlean-stubs")
    )

    # Query the table
    cursor.execute("SELECT * FROM repos")

    # fetchone() returns Optional[Any]
    row: Optional[sqlean.Row] = cursor.fetchone()
    if row is not None:
        print(f"ID: {row[0]}, Package: {row[1]}, URL: {row[2]}")

    # User-defined functions
    def double(x: int) -> int:
        return x * 2

    conn.create_function("double", 1, double)
    conn.close()

if __name__ == "__main__":
    main_sqlean()

Benefits:

  • IDE autocomplete and navigation
  • Catch type errors before runtime with mypy or ty
  • Better code documentation and refactoring safety

Features

  • Complete type hints for Connection, Cursor, and Row objects
  • Support for custom factories and row factories
  • Type hints for user-defined functions and aggregates
  • Callbacks support (authorizer, progress handler, trace callback, busy handler)
  • Window function support
  • Extensions management API
  • Compatible with mypy, ty, pyright, and other type checkers

Requirements

  • Python 3.9 or later
  • pip, uv, or pipx for installation

Contributing

Development Setup

git clone https://github.com/nalgeon/sqlean-stubs.git
cd sqlean-stubs
uv sync

Running Tests

# Run all tests
uv run pytest tests/

# Linting
uv run ruff check .

# Type checking
uv run mypy tests/test_mypy.py
uv run ty check

# Test multiple Python versions (3.9-3.14)
uv run tox

Project Structure

  • sqlean/dbapi2.pyi - Main DB-API 2.0 interface
  • sqlean/extensions.pyi - Extension management API
  • sqlean/py.typed - PEP 561 marker file
  • tests/test_types.py - Runtime tests
  • tests/test_mypy.py - Type checking tests

Adding Type Hints

  1. Update the .pyi stub file
  2. Add runtime test in tests/test_types.py
  3. Add type checking test in tests/test_mypy.py
  4. Run pytest tests/, mypy tests/test_mypy.py, and ty check

Code Style

  • Follow PEP 484 for type hints
  • Use Optional[X] instead of X | None (Python 3.9 compatibility)
  • Use Literal types for constrained values
  • Include docstrings for complex types

Before Submitting

uv run ruff check .
uv run pytest tests/ -v
uv run mypy tests/test_mypy.py
uv run ty check

License

Zlib (same as sqlean.py)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlean_stubs-0.0.7.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqlean_stubs-0.0.7-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file sqlean_stubs-0.0.7.tar.gz.

File metadata

  • Download URL: sqlean_stubs-0.0.7.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.3

File hashes

Hashes for sqlean_stubs-0.0.7.tar.gz
Algorithm Hash digest
SHA256 d8f9090bac0702a20ce7515d326caa27f7abbab0f2c899bf908ac183c0bbd9e2
MD5 5e935633c4057444ea664e258053f04b
BLAKE2b-256 488d9251cf1ae959eb180876d605eac4febd4d9687dd2e51a2dcececbdf9ed5c

See more details on using hashes here.

File details

Details for the file sqlean_stubs-0.0.7-py3-none-any.whl.

File metadata

File hashes

Hashes for sqlean_stubs-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 262f06f616aa71b32262d1245a12dc25e4bb7738ccfb03bceb94798949dce10e
MD5 80068caaec60c455232a76bdca6468c0
BLAKE2b-256 c836940aca6a6c62807cc0805dc316a0b7e98af11d138f271da89d64c8f16b44

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page