Skip to main content

True async SQLite — no fake async, no GIL stalls.

Project description

rapsqlite

True async SQLite — no fake async, no GIL stalls.

PyPI version Downloads Python 3.8+ License: MIT

Overview

rapsqlite provides true async SQLite operations for Python, backed by Rust, Tokio, and sqlx. Unlike libraries that wrap blocking database calls in async syntax, rapsqlite guarantees that all database operations execute outside the Python GIL, ensuring event loops never stall under load.

Roadmap Goal: Achieve drop-in replacement compatibility with aiosqlite, enabling seamless migration with true async performance. See docs/ROADMAP.md for details.

Why rap*?

Packages prefixed with rap stand for Real Async Python. Unlike many libraries that merely wrap blocking I/O in async syntax, rap* packages guarantee that all I/O work is executed outside the Python GIL using native runtimes (primarily Rust). This means event loops are never stalled by hidden thread pools, blocking syscalls, or cooperative yielding tricks. If a rap* API is async, it is structurally non-blocking by design, not by convention. The rap prefix is a contract: measurable concurrency, real parallelism, and verifiable async behavior under load.

See the rap-manifesto for philosophy and guarantees.

Features

  • True async SQLite operations
  • Native Rust-backed execution (Tokio + sqlx)
  • Zero Python thread pools
  • Event-loop-safe concurrency under load
  • GIL-independent database operations
  • Async-safe SQLite bindings
  • Verified by Fake Async Detector
  • Connection lifecycle management (async context managers)
  • Transaction support (begin, commit, rollback)
  • Type system improvements (proper Python types: int, float, str, bytes, None)
  • Cursor API (execute, executemany, fetchone, fetchall, fetchmany)
  • Enhanced error handling (custom exception classes matching aiosqlite)
  • aiosqlite-compatible API (connect function, exception types)

Requirements

  • Python 3.8+ (including Python 3.13 and 3.14)
  • Rust 1.70+ (for building from source)

Installation

pip install rapsqlite

Building from Source

git clone https://github.com/eddiethedean/rapsqlite.git
cd rapsqlite
pip install maturin
maturin develop

Usage

Basic Usage

import asyncio
import tempfile
import os
from rapsqlite import Connection

async def main():
    # Create a database file
    with tempfile.NamedTemporaryFile(suffix='.db', delete=False) as f:
        db_path = f.name
    
    try:
        # Create connection (async context manager)
        async with Connection(db_path) as conn:
            # Create table
            await conn.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)")
            
            # Insert data
            await conn.execute("INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')")
            await conn.execute("INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com')")
            
            # Fetch all rows
            rows = await conn.fetch_all("SELECT * FROM users")
            print(rows)
            # Output: [[1, 'Alice', 'alice@example.com'], [2, 'Bob', 'bob@example.com']]
            
            # Fetch single row
            user = await conn.fetch_one("SELECT * FROM users WHERE name = 'Alice'")
            print(user)
            # Output: [1, 'Alice', 'alice@example.com']
            
            # Fetch optional row
            user = await conn.fetch_optional("SELECT * FROM users WHERE name = 'Charlie'")
            print(user)
            # Output: None
    finally:
        # Cleanup
        if os.path.exists(db_path):
            os.unlink(db_path)

asyncio.run(main())

Using the connect() Function (aiosqlite-compatible)

import asyncio
from rapsqlite import connect

async def main():
    async with connect("example.db") as conn:
        await conn.execute("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)")
        await conn.execute("INSERT INTO test (value) VALUES ('hello')")
        rows = await conn.fetch_all("SELECT * FROM test")
        print(rows)

asyncio.run(main())

Transactions

import asyncio
from rapsqlite import Connection

async def main():
    async with Connection("example.db") as conn:
        await conn.execute("CREATE TABLE accounts (id INTEGER PRIMARY KEY, balance INTEGER)")
        await conn.execute("INSERT INTO accounts (balance) VALUES (1000)")
        
        # Begin transaction
        await conn.begin()
        try:
            await conn.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1")
            await conn.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2")
            await conn.commit()
            print("Transaction committed")
        except Exception:
            await conn.rollback()
            print("Transaction rolled back")

asyncio.run(main())

Using Cursors

import asyncio
from rapsqlite import Connection

async def main():
    async with Connection("example.db") as conn:
        await conn.execute("CREATE TABLE items (id INTEGER PRIMARY KEY, name TEXT)")
        await conn.execute("INSERT INTO items (name) VALUES ('item1')")
        await conn.execute("INSERT INTO items (name) VALUES ('item2')")
        
        # Use cursor
        cursor = conn.cursor()
        await cursor.execute("SELECT * FROM items")
        
        # Fetch one row
        row = await cursor.fetchone()
        print(row)  # Output: [1, 'item1']
        
        # Fetch all rows
        rows = await cursor.fetchall()
        print(rows)  # Output: [[1, 'item1'], [2, 'item2']]
        
        # Fetch many rows
        await cursor.execute("SELECT * FROM items")
        rows = await cursor.fetchmany(1)
        print(rows)  # Output: [[1, 'item1']]

asyncio.run(main())

Concurrent Database Operations

import asyncio
from rapsqlite import Connection

async def main():
    async with Connection("example.db") as conn:
        await conn.execute("CREATE TABLE data (id INTEGER PRIMARY KEY, value INTEGER)")
        
        # Execute multiple inserts concurrently
        tasks = [
            conn.execute(f"INSERT INTO data (value) VALUES ({i})")
            for i in range(100)
        ]
        await asyncio.gather(*tasks)
        
        # Fetch all results
        rows = await conn.fetch_all("SELECT * FROM data")
        print(f"Inserted {len(rows)} rows")

asyncio.run(main())

Error Handling

import asyncio
from rapsqlite import Connection, IntegrityError, OperationalError

async def main():
    async with Connection("example.db") as conn:
        await conn.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, email TEXT UNIQUE)")
        await conn.execute("INSERT INTO users (email) VALUES ('alice@example.com')")
        
        try:
            # This will raise IntegrityError
            await conn.execute("INSERT INTO users (email) VALUES ('alice@example.com')")
        except IntegrityError as e:
            print(f"Integrity constraint violation: {e}")

asyncio.run(main())

API Reference

connect(path: str, **kwargs: Any) -> Connection

Connect to a SQLite database (aiosqlite-compatible API).

Parameters:

  • path (str): Path to the SQLite database file
  • **kwargs: Additional arguments (currently ignored, reserved for future use)

Returns:

  • Connection: An async SQLite connection

Example:

async with connect("example.db") as conn:
    await conn.execute("CREATE TABLE test (id INTEGER)")

Connection(path: str)

Create a new async SQLite connection.

Parameters:

  • path (str): Path to the SQLite database file

Example:

conn = Connection("example.db")
async with conn:
    await conn.execute("CREATE TABLE test (id INTEGER)")

Connection Methods

Connection.execute(query: str) -> None

Execute a SQL statement (CREATE, INSERT, UPDATE, DELETE, etc.).

Parameters:

  • query (str): SQL query to execute

Raises:

  • OperationalError: If the query execution fails
  • ProgrammingError: For SQL syntax errors
  • IntegrityError: For constraint violations

Connection.fetch_all(query: str) -> List[List[Any]]

Execute a SELECT query and return all rows.

Parameters:

  • query (str): SELECT query to execute

Returns:

  • List[List[Any]]: List of rows, where each row is a list of values (int, float, str, bytes, or None)

Raises:

  • OperationalError: If the query execution fails
  • ProgrammingError: For SQL syntax errors

Connection.fetch_one(query: str) -> List[Any]

Execute a SELECT query and return a single row.

Parameters:

  • query (str): SELECT query to execute

Returns:

  • List[Any]: A single row as a list of values

Raises:

  • OperationalError: If no row is found or query execution fails
  • ProgrammingError: For SQL syntax errors

Connection.fetch_optional(query: str) -> Optional[List[Any]]

Execute a SELECT query and return a single row or None.

Parameters:

  • query (str): SELECT query to execute

Returns:

  • Optional[List[Any]]: A single row as a list of values, or None if no row is found

Raises:

  • OperationalError: If the query execution fails
  • ProgrammingError: For SQL syntax errors

Connection.begin() -> None

Begin a transaction.

Raises:

  • OperationalError: If a transaction is already in progress

Connection.commit() -> None

Commit the current transaction.

Raises:

  • OperationalError: If no transaction is in progress

Connection.rollback() -> None

Rollback the current transaction.

Raises:

  • OperationalError: If no transaction is in progress

Connection.last_insert_rowid() -> int

Get the row ID of the last inserted row.

Returns:

  • int: The row ID of the last INSERT operation

Connection.changes() -> int

Get the number of rows affected by the last statement.

Returns:

  • int: The number of rows affected

Connection.cursor() -> Cursor

Create a cursor for this connection.

Returns:

  • Cursor: A new cursor object

Connection.close() -> None

Close the connection and release resources.

Cursor Methods

Cursor.execute(query: str) -> None

Execute a SQL statement.

Parameters:

  • query (str): SQL query to execute

Raises:

  • OperationalError: If the query execution fails
  • ProgrammingError: For SQL syntax errors

Cursor.executemany(query: str, parameters: List[List[Any]]) -> None

Execute a SQL statement multiple times with different parameters.

Parameters:

  • query (str): SQL query to execute
  • parameters (List[List[Any]]): List of parameter lists

Note: Parameter binding is currently a placeholder and will be implemented in Phase 2.

Raises:

  • OperationalError: If the query execution fails
  • ProgrammingError: For SQL syntax errors

Cursor.fetchone() -> Optional[List[Any]]

Fetch the next row from the query result.

Returns:

  • Optional[List[Any]]: A single row as a list of values, or None if no more rows

Raises:

  • ProgrammingError: If no query has been executed

Cursor.fetchall() -> List[List[Any]]

Fetch all remaining rows from the query result.

Returns:

  • List[List[Any]]: List of rows

Raises:

  • ProgrammingError: If no query has been executed

Cursor.fetchmany(size: Optional[int] = None) -> List[List[Any]]

Fetch multiple rows from the query result.

Parameters:

  • size (Optional[int]): Number of rows to fetch (default: 1, or all if not specified)

Returns:

  • List[List[Any]]: List of rows

Note: For Phase 1, this returns all rows. Proper size-based slicing will be implemented in Phase 2.

Raises:

  • ProgrammingError: If no query has been executed

Exception Classes

The following exception classes are available, matching the aiosqlite API:

  • Error: Base exception class for all rapsqlite errors
  • Warning: Warning exception class
  • DatabaseError: Base exception class for database-related errors
  • OperationalError: Exception raised for operational errors (database locked, connection issues, etc.)
  • ProgrammingError: Exception raised for programming errors (SQL syntax errors, etc.)
  • IntegrityError: Exception raised for integrity constraint violations (UNIQUE constraint, FOREIGN KEY constraint, etc.)

Type System

rapsqlite automatically converts SQLite types to appropriate Python types:

  • INTEGERint
  • REALfloat
  • TEXTstr
  • BLOBbytes
  • NULLNone

Benchmarks

This package passes the Fake Async Detector. Benchmarks are available in the rap-bench repository.

Run the detector yourself:

pip install rap-bench
rap-bench detect rapsqlite

Roadmap

See docs/ROADMAP.md for detailed development plans. Key goals include:

  • ✅ Phase 1: Connection lifecycle, transactions, type system, error handling, cursor API (complete)
  • ⏳ Phase 2: Prepared statements and parameterized queries
  • ⏳ Phase 3: Advanced SQLite features and ecosystem integration

Related Projects

Changelog

v0.1.1 (2026-01-16)

Python 3.14 Support:

  • ✅ Added Python 3.14 support with ABI3 forward compatibility
  • ✅ Updated CI/CD workflows to test and build for Python 3.14

Python 3.13 Support:

  • ✅ Added Python 3.13 support with ABI3 forward compatibility
  • ✅ Updated CI/CD workflows to test and build for Python 3.13
  • ✅ Fixed exception handling for ABI3 compatibility (using create_exception! macro)
  • ✅ Explicitly registered exception classes in Python module

Bug Fixes:

  • Fixed exception registration issue where exceptions created with create_exception! were not accessible from Python

Compatibility:

  • Python 3.8 through 3.14 supported
  • All platforms: Ubuntu (x86-64, aarch64), macOS (aarch64, x86-64), Windows (x86-64, aarch64)

v0.1.0 (2025-01-12)

Initial Release - Phase 1 Complete:

  • Connection lifecycle management (async context managers)
  • Transaction support (begin, commit, rollback)
  • Type system improvements (proper Python types: int, float, str, bytes, None)
  • Enhanced error handling (custom exception classes matching aiosqlite)
  • API improvements (fetch_one, fetch_optional, execute_many, last_insert_rowid, changes)
  • Cursor API (execute, executemany, fetchone, fetchall, fetchmany)
  • aiosqlite compatibility (connect function, exception types)
  • Security fixes: Upgraded dependencies (pyo3 0.27, pyo3-async-runtimes 0.27, sqlx 0.8)
  • Connection pooling: Connection reuses connection pool across operations
  • Input validation: Added path validation (non-empty, no null bytes)
  • Improved error handling: Enhanced error messages with database path and query context
  • Type stubs: Added .pyi type stubs for better IDE support and type checking

Limitations (v0.1.1)

Current limitations:

  • ⏳ Parameterized queries not yet supported (placeholder for Phase 2)
  • Cursor.fetchmany() returns all rows (size-based slicing in Phase 2)
  • ⏳ Limited SQL dialect support (basic SQLite features)
  • ⏳ Not yet a complete drop-in replacement for aiosqlite (work in progress)
  • ⏳ Not designed for synchronous use cases

Phase 1 improvements (v0.1.0 - v0.1.1):

  • ✅ Connection lifecycle management (async context managers)
  • ✅ Transaction support (begin, commit, rollback)
  • ✅ Type system improvements (proper Python types: int, float, str, bytes, None)
  • ✅ Enhanced error handling (custom exception classes matching aiosqlite)
  • ✅ API improvements (fetch_one, fetch_optional, execute_many, last_insert_rowid, changes)
  • ✅ Cursor API (execute, executemany, fetchone, fetchall, fetchmany)
  • ✅ aiosqlite compatibility (connect function, exception types)
  • ✅ Security fixes: Upgraded dependencies (pyo3 0.27, pyo3-async-runtimes 0.27, sqlx 0.8)
  • ✅ Connection pooling: Connection reuses connection pool across operations
  • ✅ Input validation: Added path validation (non-empty, no null bytes)
  • ✅ Improved error handling: Enhanced error messages with database path and query context
  • ✅ Type stubs: Added .pyi type stubs for better IDE support and type checking

Roadmap: See docs/ROADMAP.md for planned improvements. Our goal is to achieve drop-in replacement compatibility with aiosqlite while providing true async performance with GIL-independent database operations.

Contributing

Contributions are welcome! Please see our contributing guidelines (coming soon).

License

MIT

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

rapsqlite-0.1.2.tar.gz (41.2 kB view details)

Uploaded Source

Built Distributions

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

rapsqlite-0.1.2-cp314-cp314-win_arm64.whl (1.6 MB view details)

Uploaded CPython 3.14Windows ARM64

rapsqlite-0.1.2-cp314-cp314-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.14Windows x86-64

rapsqlite-0.1.2-cp314-cp314-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

rapsqlite-0.1.2-cp314-cp314-manylinux_2_28_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

rapsqlite-0.1.2-cp314-cp314-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

rapsqlite-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

rapsqlite-0.1.2-cp313-cp313-win_arm64.whl (1.6 MB view details)

Uploaded CPython 3.13Windows ARM64

rapsqlite-0.1.2-cp313-cp313-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.13Windows x86-64

rapsqlite-0.1.2-cp313-cp313-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

rapsqlite-0.1.2-cp313-cp313-manylinux_2_28_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

rapsqlite-0.1.2-cp313-cp313-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rapsqlite-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

rapsqlite-0.1.2-cp312-cp312-win_arm64.whl (1.6 MB view details)

Uploaded CPython 3.12Windows ARM64

rapsqlite-0.1.2-cp312-cp312-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.12Windows x86-64

rapsqlite-0.1.2-cp312-cp312-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

rapsqlite-0.1.2-cp312-cp312-manylinux_2_28_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

rapsqlite-0.1.2-cp312-cp312-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rapsqlite-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

rapsqlite-0.1.2-cp311-cp311-win_arm64.whl (1.6 MB view details)

Uploaded CPython 3.11Windows ARM64

rapsqlite-0.1.2-cp311-cp311-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.11Windows x86-64

rapsqlite-0.1.2-cp311-cp311-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

rapsqlite-0.1.2-cp311-cp311-manylinux_2_28_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

rapsqlite-0.1.2-cp311-cp311-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rapsqlite-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rapsqlite-0.1.2-cp310-cp310-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.10Windows x86-64

rapsqlite-0.1.2-cp310-cp310-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

rapsqlite-0.1.2-cp310-cp310-manylinux_2_28_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

rapsqlite-0.1.2-cp310-cp310-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rapsqlite-0.1.2-cp310-cp310-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

rapsqlite-0.1.2-cp39-cp39-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.9Windows x86-64

rapsqlite-0.1.2-cp39-cp39-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

rapsqlite-0.1.2-cp39-cp39-manylinux_2_28_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

rapsqlite-0.1.2-cp39-cp39-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

rapsqlite-0.1.2-cp39-cp39-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

rapsqlite-0.1.2-cp38-cp38-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.8Windows x86-64

rapsqlite-0.1.2-cp38-cp38-manylinux_2_28_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

rapsqlite-0.1.2-cp38-cp38-manylinux_2_28_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

rapsqlite-0.1.2-cp38-cp38-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

rapsqlite-0.1.2-cp38-cp38-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file rapsqlite-0.1.2.tar.gz.

File metadata

  • Download URL: rapsqlite-0.1.2.tar.gz
  • Upload date:
  • Size: 41.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2.tar.gz
Algorithm Hash digest
SHA256 162b2215c52ca9061f6a2ccca29bdbbba8764553b242181ea2abb43fbe5d8e21
MD5 163a3f99df9f2badfcf8ecb2c5a72d53
BLAKE2b-256 7068753bd6e8eae395d7a49ef0c3c1966192c2ca3dc411cfb5c55d8f3d3cbc5f

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 885b90f10b5bb93b1ad6d7a6b74d3ed14ca2798a7714b6612e12e7e50ffe97e1
MD5 c6aa90044ca0de5261c3fbbeb7d0979d
BLAKE2b-256 613e5a28d84fbf11a70640e6e98f1b7e0a801f2ae7d7f83980ee39d342cb1461

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1d15364b70907f61ef051cfae76854fda51e9ab2e98f5b82b47773568ca39b1b
MD5 820d5710b0e2ecca6b57033e772f96bd
BLAKE2b-256 6ae1a06e91e45129ef83c8259bd2d3fe84413b1e23d4f373382b11f2f8190af9

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6980f9236c0922a077f0ffe04b1a855286e17d0852648eb12bac0d83a4a13aa7
MD5 dbd99fdbb2355a7354a3e7a1f329664d
BLAKE2b-256 d5593b22382966940f27260d48daaa2fc45776635d5acf4f4c1f8e984c676f2d

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6ab0456d1d113436e5b42ac22b9b6bb24838ee36bde36494b22c332e6c37dc18
MD5 abcfdad90f0068b75f6038c9e68f9ef4
BLAKE2b-256 6ad5bbe1bd0f9ab87e04130e13298fd1f0b1c78872afcc40f6b4decd684f680b

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2a085c5528115c2bfdfffcc142a86c7840338a99915a0795f69af6841854a171
MD5 ba2d7948b82217e94fe523d4d5fd5286
BLAKE2b-256 8bc1b2d0e521b259af8648671abf5c9bd9562f1974369f74443cd041ef9305e0

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 aa75cf2bcffffddb944f85868c8bfb70ea33c7b84b4c9dcb6446a50e51016607
MD5 820f51513012d638a14f7cd2bb5f733a
BLAKE2b-256 f81a589ad84de995d89fbec2628ffb6d6779ae182fdebddd7ece2ae70197efb8

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 d1fff8982af5296424406319a1ab1841cc0c643e570d3d29b06a15f797ae5ef5
MD5 6d2272d0e8b1e606b3622599faa92342
BLAKE2b-256 56c5aa828dbaec9bca34a6df3870ce7b62324668c09ac0633769d835d193878f

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0557826f0a1e0457c939f91e210ac56560ccc75aa414cf3035162af99b1c02ff
MD5 bc56620ce32446c748d73a110ee0874a
BLAKE2b-256 f965a0cd657c3ab1ea5d2aaa886fedf59983bf5600c970bdc54d3acd8a34ce04

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e69ac0c6336ddfa4b09bd5852f954beb09f3ea7cb6cf082caa06003e5fcb2d1
MD5 0334bb9c385f01da040e0ad3dd94660a
BLAKE2b-256 75326ee18569f7bc4866f6d7527c82a0d3b81b8643c0380d8f137dd98403750c

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f23e64705b47c83f2dc43de93f59cdfaf3e821acd2e267324718126937e43ad0
MD5 8f81343e1464f2e556785a4f63977866
BLAKE2b-256 2bd56a8dae272201e09f076498b076d5e38dd2b76f4cda479572fe29e7147752

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ca0385050caaa8117495d6a13b8ed791828563ac7a808ef31a9dbf1ecafe0f44
MD5 e004904d7fb984ef977b88d67e77cd00
BLAKE2b-256 20984afe8421041806ab9853652809d6353abfe40b55f4ea04a8f3b469d68c0a

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0f8b5f83bc5aa359e2ae042796c24c7b2c7d110119b3a7ae2a821abf43adabbd
MD5 83938c6eb64020eef5eb32f8d85b450f
BLAKE2b-256 d0119f3ac3c086a4ba7130c2aba5ed9be590a5acbc4172ec911bc739ebdc3d90

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 f884e74a2322b93f3f469780a34f6ebfccefffc47e6ce28fd268e24583566605
MD5 0bdb821e2bdd8a4fa567b67270a66586
BLAKE2b-256 24df731187221a436d863124ccbd834d92c6f23a2abc4934d675dfe50ddd51c5

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f31b3fafb1fd37eaf1fc74100b76348ec6fd59de05ec63b266fd737226b40d69
MD5 f047391bbae646a9964c3c95a4994f25
BLAKE2b-256 e904d896392bef4f33828c2147856e960f6dfc7085ae6151fb2f40ba69d44147

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 947e05265f3214f1367be59ff25ba4646b3627c531101fd01ef47b9e4c456dd2
MD5 6bd0695f0ca1802b8999d79cfd744cd1
BLAKE2b-256 9cdf793652b23f34a19d2465212c8dfaed759451cfa09ac18819534fd89ee517

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0b36bba3b7f1747ca7014ae5d558ac4029bdbd5907b66a782febff838f977b04
MD5 2fbaf5f5c23a6e8d68de0b932de0457b
BLAKE2b-256 5d7b8e4efabf8e22ec2098e6611bdcd3b4da7114f7d78356810e35a471303c1f

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80fe2f386725358d78268acdf9394ba77b11d11aa1bba7a0ed4e88711e2cea2d
MD5 e6b938cc95e750032b235c6f6d829be7
BLAKE2b-256 0d60db263e09aab28060346f26e86355426a4ee5de08758b7e7b521a4cd9c905

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7cb8c4e4ae03ec21a4838009440d36f7f0c61bc9d4de9d21c2ed349f6adc1ef4
MD5 cbe006b22aec91251de2f4a1b650c2b4
BLAKE2b-256 60388c3d72bd8e106063dcbead11a0b0e6c255a24c66cdd55eefd517f3c4a6e3

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 c0f7f632b8459a78b034832f6685c2f5be3cfd8c49338065fb39c0c576b19dc3
MD5 7458f6ff629ac90d896255b41589e02e
BLAKE2b-256 640c69f0080770e3c28743fabe1310c4bb2d14a786b2ca4cff3396687391a22f

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7e79b02e7bf0d347f3fd7dee6299ca6332830f79a1d18410d6dc5357807d33f7
MD5 4d2e1daa596900220cf0e0b540586bad
BLAKE2b-256 e716a0671fc1b623e58e9162c9bc19c7f8f812d597648a98f628adb43e2153ac

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f8a981cbd15d1e3e4542b8ce6f63ddbf176202f5428e7f132b1beffcaf0c476f
MD5 0b3d800b3002385cd40657eb793dad91
BLAKE2b-256 57a1f6d94208453f15c377315c54f92bb770716ba94ff3015bed9ed987b15b2b

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5330867ba3f73993da9fb46c793f2080624b36508965e75285abbdbecdb3ec85
MD5 d69306c6576c7614f3fd234c7f42c6f1
BLAKE2b-256 b939d68469d174a53169aa3a30a0599dd57ef45aa7586f97e16bbb46497e904f

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 891068488f101b389871842f02eb3ab0b6feb5831a177bc04a61e860f3091494
MD5 39ada23a308746000fb330aad669dd80
BLAKE2b-256 6bb153d75a8d62f6f89b53ae9de4cc7cd3d8f8e8f15791b695b760c39f76bd65

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cc5fbe1a4b1191ce601b6a4f27f5f0905109c5a7c52c41a8c05651b9af39a39e
MD5 9f7bb2c0b7f2b290ab7eaa7d102acb8a
BLAKE2b-256 95350218bc9517ae5f620ea9caa4151628fa02d6e44c47bfa3a63dbfad4d3cd7

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 29bd760aa8f48d546de47b169d63f4ca760ec37828afe00537d73c40b0593ae4
MD5 3a25a9a237e2317c284d45585f10775f
BLAKE2b-256 02153fc60b475e8e1dd24fd598aeb38386ab44c580921a9f32ddd2dc9d4701c9

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 174b1c24009c68665b19603166d8e14986e30dc6f3161b84d7abb7a9bd092457
MD5 e81636db78e9407f0a949cbd459d6dd5
BLAKE2b-256 34f84af287b48771bf6094044b82d953b578e1827547e9f5c0590b35f28b8ee8

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c136ffdbf4fb3a8415c83eef36c09030961578ccb5842de474aa378f2f8588e8
MD5 6cd70bff40d42cc4075f00ac0274802b
BLAKE2b-256 8570ab6c49e0c926c96ab9c24ee7d31cd00a7ed1ac882766184076ea9b2d4eaa

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b3c36c48cad4eb3ab401d61ac19cce24dc872dccc8ea02592767d4f79ae64ba
MD5 4e6a723f560bf016a63a7a6c7867e19c
BLAKE2b-256 bc90e02c011ca1030d0e35e2f7b39643c80c7dbd97211638d0b40538f2fda3b5

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3e77784c73690899eb8d10ebd2a541ab505c8cb463ece0a33cc07f6ec930808c
MD5 07e92afcf30e4b93074718c445948b7b
BLAKE2b-256 b413eac5f11bce41d16f6e3eddba48bf863dbbb0335ab0412bbc4c329d37fb72

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 0c9941288f3a458062cba3e1cac2e778bff8275443da40619033a196e42d7115
MD5 aeaf8112d9feb1932fc56d0bea863fa0
BLAKE2b-256 2e0eeb1fa9d29de1c396c3dd225e4250d035b2f1aff9e791327e9dd78248c149

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7dcd0aa6d963e070766676aa098b2bee160f781071adc8d35dc41da34a5fef86
MD5 37e15f46e82d3cc194717d7d89c1a77b
BLAKE2b-256 febdc8e8f36011515573df70db5f3b6bae1f5519c80466b52de1ee0e5360e57f

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d66e888288ad702ba6239600294c81f658db62621f6be9233fd4fa4677178f4
MD5 5523b27126948fb6ef9af6bccbdfa1e6
BLAKE2b-256 15089aa161f29e7c8d5f22f6dcce90511f80f0040bb1a6fea6068aafc9ea6bfb

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 83c8f6ba312bdcd95652fdf0809c92a74aaeaff9ac8ece762b770bce69a7e822
MD5 1e0ce8b502fd85c679ec5030ea86557f
BLAKE2b-256 5f309499314b1db8bf77729ffdb3d16fa3a2a8e7dcecb3277c731c7cea4cb95a

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 43298f1dc93f79dff5e97ccc5cdb7cf01ebcae05433e131687541096908e8c45
MD5 167f7d110701ddafefbb84ac639acb27
BLAKE2b-256 5a3c1cfe773cf8cb8d46f17730d420691a68aeeb135b2eda8fdd7715ce237aec

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: rapsqlite-0.1.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for rapsqlite-0.1.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 bd19d452cf29ee7c013d3d7d66f012d7063a5e4247e4f252a02c4aaef3839b5d
MD5 4ffe6ff0c4c1dd4d9e36c225eb2f616c
BLAKE2b-256 6eaab682951bda19707de705a57a15d4f80b72f1b5bc02f92ae6468cf128b236

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ff118b6a2bc1ca5128136ed893595644982fcb8e810d9fa75adac38cc25ab852
MD5 2a9ecedc38e1fe663a4a73ea1c699103
BLAKE2b-256 42bf51bb542f3194c7769885622fdeff28240d9d47641139d35cb8bd931b407a

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ff7c7ec2b8b56827aee4d43f009627b8c9c25e864c5ec0926a89bd05e576701b
MD5 47e98ce87ffa7c280eb18740304efabe
BLAKE2b-256 4c8ce926a52739417b7ef83d02ad9d4ea192ee69c77e0d52159949f452dd444a

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ab1ba1c9562ed03896e5cb26eb8b1b7351db08448780c5e84c0d60259256b781
MD5 9534b005c0e3e62576d6883d261b548f
BLAKE2b-256 7ea04d8e0e5970f726db72b6613856b221fcb81fd950346dda904e337b0b2eed

See more details on using hashes here.

File details

Details for the file rapsqlite-0.1.2-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rapsqlite-0.1.2-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 09dd97fb85c7e2f2d67caa3843918b5b14ff1f5909d8046b263ef69e2a85ecaa
MD5 35a7db14070d692492028a442e05f547
BLAKE2b-256 57e708a5ce9c9558e70c8e1f157ac726552ab793df13a7eba6619aef3859e5cb

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