Skip to main content

Crash-safe embedded key-value store — TTL, reverse iterators, iterator seek, put_if_absent, column families, ACID transactions

Project description

SNKV Python Bindings

Build PyPI License

Idiomatic Python 3.8+ bindings for SNKV — a lightweight, ACID-compliant embedded key-value store built directly on SQLite's B-Tree engine.

If you find it useful, a ⭐ on GitHub goes a long way!


Features

  • Dict-style APIdb["key"] = value, val = db["key"], del db["key"], "key" in db
  • Context managerswith KVStore(...) as db and with db.create_column_family(...) as cf for guaranteed cleanup
  • Prefix iterators — efficient namespace scans with db.prefix_iterator(b"user:")
  • Reverse iterators — walk keys in descending order with db.reverse_iterator() and db.reverse_prefix_iterator(b"user:")
  • WAL checkpoint control — PASSIVE / FULL / RESTART / TRUNCATE modes via db.checkpoint()
  • Auto-checkpoint — set wal_size_limit=N to checkpoint automatically after every N WAL frames
  • Typed exceptionsNotFoundError, BusyError, LockedError, ReadOnlyError, CorruptError all subclass snkv.Error
  • No Python dependencies — pure CPython C extension; only requires a C compiler and python3-dev
  • Native TTL — per-key expiry with put(ttl=seconds), dict-style db[key, ttl] = value, lazy expiry on get, and purge_expired()
  • Seek iterators — jump to any key in O(log N) with it.seek(key), chainable and works on prefix/reverse iterators
  • Conditional insert — atomic put_if_absent(key, value, ttl=None) returns True if inserted; safe for distributed locks and dedup
  • Bulk cleardb.clear() / cf.clear() truncates all keys in O(pages) without dropping the store
  • Key countdb.count() / cf.count() returns entry count in O(pages); CF counts are fully isolated
  • Extended statsdb.stats() exposes 12 counters including bytes_read, bytes_written, wal_commits, ttl_expired, db_pages; reset with db.stats_reset()
  • 352 tests — full pytest suite covering ACID, WAL, crash recovery, concurrency, column families, TTL, and more

Installation

From PyPI (recommended)

Pre-built binary wheels are available for Linux, macOS, and Windows — no compiler needed.

Windows / macOS:

pip install snkv

Linux (Debian/Ubuntu):

python3 -m venv .venv
source .venv/bin/activate
pip install snkv

Linux system Python is "externally managed" (PEP 668) and blocks system-wide pip installs. Use a virtual environment.

Build from Source

# System dependencies
sudo apt-get install -y build-essential python3-dev python3-pip

# Python build dependencies
pip3 install setuptools wheel pytest

# Build
cd python
python3 setup.py build_ext --inplace

macOS

# Compiler (skip if already installed)
xcode-select --install

# Python build dependencies
pip3 install setuptools wheel pytest

# Build
cd python
python3 setup.py build_ext --inplace

Windows — Native Python (recommended)

  1. Install Python 3.8+ — check "Add Python to PATH"
  2. Install Visual Studio Build Tools — select "Desktop development with C++"
  3. Open "x64 Native Tools Command Prompt for VS 2022" from the Start Menu (required for 64-bit Python; "Developer PowerShell for VS" defaults to 32-bit and will fail)
:: Python build dependencies
pip install setuptools wheel pytest

:: Build
cd python
python setup.py build_ext --inplace

Windows — MSYS2 MinGW64 shell

Open the MSYS2 MinGW64 shell (not plain MSYS2, not cmd.exe):

# System + Python dependencies (one-time)
pacman -S --needed mingw-w64-x86_64-python \
                   mingw-w64-x86_64-python-pip \
                   mingw-w64-x86_64-python-setuptools \
                   mingw-w64-x86_64-python-pytest

# Build
cd python
python3 setup.py build_ext --inplace

On all platforms, setup.py automatically locates snkv.h — no manual header step needed. On Linux/macOS it regenerates it via make snkv.h; on Windows it falls back to the pre-built snkv.h included in the repo.


Quick Start

from snkv import KVStore

with KVStore("mydb.db") as db:
    db["hello"] = "world"
    print(db["hello"].decode())   # world

API Reference

Opening a store

from snkv import KVStore, JOURNAL_WAL, JOURNAL_DELETE, SYNC_NORMAL, SYNC_OFF, SYNC_FULL

with KVStore(
    "mydb.db",
    journal_mode=JOURNAL_WAL,   # JOURNAL_WAL (default) or JOURNAL_DELETE
    sync_level=SYNC_NORMAL,     # SYNC_NORMAL (default), SYNC_OFF, SYNC_FULL
    cache_size=2000,            # pages (~8 MB default)
    page_size=4096,             # bytes; new databases only
    busy_timeout=5000,          # ms to retry on SQLITE_BUSY (default 0)
    read_only=False,            # open read-only
    wal_size_limit=100,         # auto-checkpoint every 100 WAL frames (0 = off)
) as db:
    ...

CRUD

# Write
db["key"] = b"value"          # bytes or str keys/values are both accepted
db["key"] = "value"           # str is UTF-8 encoded automatically

# Read
val = db["key"]               # returns bytes; raises NotFoundError if missing
val = db.get("key")           # returns bytes or None
val = db.get("key", b"def")   # with default

# Check existence
exists = "key" in db
exists = db.exists(b"key")

# Delete
del db["key"]
db.delete(b"key")             # same as del; no error if key absent

# Upsert
db.put(b"key", b"value")      # identical to db["key"] = value

Transactions

db.begin(write=True)
db["a"] = "1"
db["b"] = "2"
db.commit()          # persist

db.begin(write=True)
db["c"] = "3"
db.rollback()        # discard — "c" is never written

Auto-commit is the default: each db["key"] = value outside an explicit transaction is committed immediately.

Column Families

Logical namespaces within a single database file. Always close cf before db.

# Create (first use)
with db.create_column_family("users") as cf:
    cf[b"alice"] = b"admin"
    cf[b"bob"]   = b"viewer"

# Open (subsequent uses)
with db.open_column_family("users") as cf:
    print(cf[b"alice"])       # b"admin"

# List all column families
names = db.list_column_families()   # ["users", ...]

# Drop
db.drop_column_family("users")

Iterators

# Full scan — yields (key, value) tuples in key order
for key, value in db.iterator():
    print(key, value)

# Prefix scan
for key, value in db.prefix_iterator(b"user:"):
    print(key, value)

# Manual control
it = db.iterator()
it.first()
while not it.eof:
    print(it.key, it.value)
    it.next()
it.close()

# As a context manager
with db.iterator() as it:
    for key, value in it:
        ...

Reverse Iterators

Walk keys in descending order — no full scan, no sort, pure B-tree traversal.

# Full reverse scan
for key, value in db.reverse_iterator():
    print(key, value)

# Reverse prefix scan — visits only matching keys, largest first
for key, value in db.reverse_prefix_iterator(b"user:"):
    print(key, value)

# Manual control
it = db.reverse_iterator()
it.last()
while not it.eof:
    print(it.key, it.value)
    it.prev()
it.close()

# As a context manager
with db.reverse_prefix_iterator(b"log:") as it:
    for key, value in it:
        ...

Column families support reverse iterators identically via cf.reverse_iterator() and cf.reverse_prefix_iterator().

WAL Checkpoint

from snkv import CHECKPOINT_PASSIVE, CHECKPOINT_FULL, CHECKPOINT_RESTART, CHECKPOINT_TRUNCATE

# Returns (nLog, nCkpt) — WAL frames total / frames written to DB
nlog, nckpt = db.checkpoint(CHECKPOINT_PASSIVE)    # copy frames without blocking
nlog, nckpt = db.checkpoint(CHECKPOINT_FULL)       # wait for writers, flush all
nlog, nckpt = db.checkpoint(CHECKPOINT_RESTART)    # like FULL, reset write position
nlog, nckpt = db.checkpoint(CHECKPOINT_TRUNCATE)   # like RESTART, truncate WAL file

Must be called outside an active write transaction. Use wal_size_limit to auto-checkpoint instead.

Iterator Seek

Jump to any position in O(log N) without scanning from the start.

with db.iterator() as it:
    it.seek(b"user:bob")        # forward: position at first key >= target
    while not it.eof:
        print(it.key, it.value)
        it.next()

with db.iterator(reverse=True) as it:
    it.last()
    it.seek(b"user:bob")        # reverse: position at last key <= target
    while not it.eof:
        print(it.key, it.value)
        it.prev()

# Works on prefix iterators too — boundary still enforced
with db.iterator(prefix=b"user:") as it:
    it.seek(b"user:carol")      # skip straight to "user:carol"
    while not it.eof:
        print(it.key)
        it.next()

# seek() returns self for chaining
key = db.iterator().seek(b"target").key

Conditional Insert

Atomically insert a key only when it is absent — safe for distributed locks and deduplication.

# Returns True if inserted, False if the key already existed.
inserted = db.put_if_absent(b"lock", b"owner:alice")

# With TTL — the key auto-releases after the given number of seconds.
inserted = db.put_if_absent(b"session:42", b"token-xyz", ttl=30)

# Column families support the same method.
with db.create_column_family("dedup") as cf:
    if cf.put_if_absent(b"msg:001", b"hello"):
        process(b"msg:001")     # only the first caller reaches here

Bulk Clear

Truncate all entries from a store or column family in O(pages) — no iterating, no individual deletes.

db.clear()      # remove every key from the default CF

with db.create_column_family("cache") as cf:
    cf.clear()  # only this CF is affected; other CFs are untouched

TTL index entries are cleared atomically alongside data entries. Close all iterators before calling clear().

Key Count

Count entries without scanning individual keys.

n = db.count()                           # total entries in the default CF

with db.open_column_family("users") as cf:
    n = cf.count()                       # only this CF; TTL index not counted

# count() includes expired-but-not-yet-purged keys.
# Call purge_expired() first for an accurate live count.
db.purge_expired()
n = db.count()

Maintenance

db.sync()                 # flush OS write buffers (fsync)
db.vacuum(100)            # reclaim up to 100 unused pages incrementally
db.integrity_check()      # raises CorruptError if database is corrupt

# Extended stats — 12 counters
stats = db.stats()
# Keys: puts, gets, deletes, iterations, errors,
#       bytes_read, bytes_written, wal_commits, checkpoints,
#       ttl_expired, ttl_purged, db_pages

# Reset all cumulative counters (db_pages is always live)
db.stats_reset()

TTL — Native Key Expiry

Per-key TTL with automatic lazy expiry on read.

# Put with TTL (seconds, float precision)
db.put(b"session", b"tok123", ttl=60)   # expires in 60 s
db[b"token", 30] = b"bearer-xyz"        # dict-style shorthand

# Get — expired keys are silently evicted and raise NotFoundError
val = db.get(b"session")                # returns bytes or None if expired

# Check remaining lifetime
from snkv import NotFoundError
try:
    remaining = db.ttl(b"session")      # seconds remaining (float)
except NotFoundError:
    remaining = None                    # key expired or never set

# Purge all expired keys from disk (returns count removed)
n = db.purge_expired()

# Column families support TTL identically
with db.create_column_family("cache") as cf:
    cf.put(b"item", b"data", ttl=10)
    cf[b"item2", 5] = b"data2"
    n = cf.purge_expired()

Error Hierarchy

snkv.Error (base)
├── snkv.NotFoundError   (also KeyError — raised by db["missing"])
├── snkv.BusyError       (SQLITE_BUSY — another writer holds the lock)
├── snkv.LockedError     (SQLITE_LOCKED)
├── snkv.ReadOnlyError   (write attempted on read-only store)
└── snkv.CorruptError    (database file is corrupt)
import snkv

try:
    val = db["missing_key"]
except snkv.NotFoundError:
    val = b"default"

try:
    db["key"] = b"value"
except snkv.BusyError:
    # retry after a delay
    ...

Running Tests

Linux / macOS

cd python
python3 -m pytest tests/ -v

Windows — Native Python (x64 Native Tools Command Prompt for VS 2022)

cd python
set PYTHONPATH=.
python -m pytest tests\ -v

Windows — MSYS2 MinGW64 shell

cd python
PYTHONPATH=. python3 -m pytest tests/ -v

All 352 tests should pass.


Running Examples

Linux / macOS

cd python
PYTHONPATH=. python3 examples/basic.py           # CRUD, binary data, in-memory store
PYTHONPATH=. python3 examples/transactions.py    # begin/commit/rollback
PYTHONPATH=. python3 examples/column_families.py # logical namespaces
PYTHONPATH=. python3 examples/iterators.py       # ordered scan, prefix scan
PYTHONPATH=. python3 examples/config.py          # journal mode, sync, cache, WAL limit
PYTHONPATH=. python3 examples/checkpoint.py      # manual + auto WAL checkpoint
PYTHONPATH=. python3 examples/session_store.py   # real-world session store pattern
PYTHONPATH=. python3 examples/ttl.py             # TTL expiry, rate limiter demo
PYTHONPATH=. python3 examples/iterator_reverse.py # reverse iterators, descending scans
PYTHONPATH=. python3 examples/new_apis.py        # seek, put_if_absent, clear, count, stats
PYTHONPATH=. python3 examples/multiprocess.py    # 5 concurrent processes, busy_timeout

Windows — Native Python (x64 Native Tools Command Prompt for VS 2022)

cd python
set PYTHONPATH=.
python examples\basic.py
python examples\transactions.py
python examples\column_families.py
python examples\iterators.py
python examples\config.py
python examples\checkpoint.py
python examples\session_store.py
python examples\ttl.py
python examples\iterator_reverse.py
python examples\new_apis.py
python examples\multiprocess.py
python examples\all_apis.py

Windows — MSYS2 MinGW64 shell

cd python
PYTHONPATH=. python3 examples/basic.py
PYTHONPATH=. python3 examples/transactions.py
# ... same pattern for all examples

Thread Safety

Each thread must use its own KVStore instance. WAL mode serialises concurrent writers at the SQLite level — a BusyError is raised (or retried up to busy_timeout ms) when two writers collide. Multiple readers always make progress concurrently in WAL mode.

import threading
from snkv import KVStore, JOURNAL_WAL

def worker(db_path, worker_id):
    # Each thread opens its own connection
    with KVStore(db_path, journal_mode=JOURNAL_WAL, busy_timeout=5000) as db:
        db[f"key_{worker_id}".encode()] = b"value"

threads = [threading.Thread(target=worker, args=("mydb.db", i)) for i in range(4)]
for t in threads: t.start()
for t in threads: t.join()

License

Apache License 2.0 © 2025 Hash Anu

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

snkv-0.5.0.tar.gz (56.6 kB view details)

Uploaded Source

Built Distributions

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

snkv-0.5.0-cp313-cp313-win_amd64.whl (158.3 kB view details)

Uploaded CPython 3.13Windows x86-64

snkv-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (675.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

snkv-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (666.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

snkv-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (202.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

snkv-0.5.0-cp313-cp313-macosx_10_13_x86_64.whl (211.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

snkv-0.5.0-cp312-cp312-win_amd64.whl (158.3 kB view details)

Uploaded CPython 3.12Windows x86-64

snkv-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (675.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

snkv-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (666.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

snkv-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (202.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

snkv-0.5.0-cp312-cp312-macosx_10_13_x86_64.whl (211.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

snkv-0.5.0-cp311-cp311-win_amd64.whl (158.2 kB view details)

Uploaded CPython 3.11Windows x86-64

snkv-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (674.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

snkv-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (666.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

snkv-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (202.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

snkv-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl (209.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

snkv-0.5.0-cp310-cp310-win_amd64.whl (158.2 kB view details)

Uploaded CPython 3.10Windows x86-64

snkv-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (673.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

snkv-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (665.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

snkv-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (202.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

snkv-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl (209.7 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

snkv-0.5.0-cp39-cp39-win_amd64.whl (158.3 kB view details)

Uploaded CPython 3.9Windows x86-64

snkv-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (672.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

snkv-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (665.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

snkv-0.5.0-cp39-cp39-macosx_11_0_arm64.whl (202.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

snkv-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl (209.7 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

snkv-0.5.0-cp38-cp38-win_amd64.whl (158.3 kB view details)

Uploaded CPython 3.8Windows x86-64

snkv-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (673.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

snkv-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (665.8 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

snkv-0.5.0-cp38-cp38-macosx_11_0_arm64.whl (202.3 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

snkv-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl (209.6 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file snkv-0.5.0.tar.gz.

File metadata

  • Download URL: snkv-0.5.0.tar.gz
  • Upload date:
  • Size: 56.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0.tar.gz
Algorithm Hash digest
SHA256 9c3b8c96e8df3676941ee49cfa2db5cef002c0767f68fbb5f4316d924d640666
MD5 0ac8f249b0a1cf07a2d2e17cdcd5f714
BLAKE2b-256 15298bd9965f42c72f945629a5fbb3e99fb30cbf3115a419a73f8b68966e08d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0.tar.gz:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 158.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 55965a13e25855a6ff6a64fb09ec15b1e10f0d41299cd200ec8f0ef727a96ac9
MD5 5bd26a375c5e4a719444e790617f171d
BLAKE2b-256 ddc537fc18d11dc56ec28cc9eb964708f09e4b5bea15b387abbf6c0fa09056d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 15a60e7b5a6db9097b21b17394477c43bc88eb125dc59b97b904b668f738d95f
MD5 ee758a6a3e6dc7bb28af1f30b908eac8
BLAKE2b-256 25c72317488e7222cd61b5300e2ddd6496548a2dd7725e5828b212b50ac72d1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a5e2936f37b8f270b6016b314f5556ea0f063060752a4ae43a26a7bcea294197
MD5 318ea1f7b0a1512529d9d525df51cce8
BLAKE2b-256 cf7c0b311fe53cf81e90566dab7976e50cdb231e45bb68b4b102531cb1a3bedb

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4be102264d7ef8a0c099f1e3d3a06311f17cf8a0a3b29b745d3a10f6dc941470
MD5 f7065e33760d247518a611197b13a5f1
BLAKE2b-256 6f3604767c3f9fba6d8311ded0981172affe98f8b46077f05b57eeb7aae3eaee

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7f440d444eb3e351e97bf15cf47a4edc9a7718e7c42a214f92a09d19150ec6c0
MD5 9ff2b11994c25647553b7df1969d0fae
BLAKE2b-256 c56bd5863a6e3aee19237c17ef6e6c01be1917696594c586aa79a13b6a0a4b1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 158.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6f5c36c89deb7f4d04131d1976f9bfdb7d0cc367ab0fa6ff22046393f41a2fe1
MD5 1020d77a5c844317a3e1443977062ef4
BLAKE2b-256 e14ca8e42585ba28a26a273c1b1fa581eecea2f34e52bb09c87b37fd919d646d

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de5b4306493355de27f2dbfa6c13205073dd6bf36f1338ac4e6e7f079d4189cf
MD5 fb180f2816b42fb5389df2f2531486fa
BLAKE2b-256 b41b4b7ea874936ed4b1fd0f8d5447b065d86349420db35dc3d512a5fe4af0e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 baa9eebe7443471648b4800362bbc6bc8f3861fa30f719700640a513a3b224ef
MD5 24b227154e46f1c2147b8cc146a59bc5
BLAKE2b-256 618b3e075e5c4eafc0d3c343a7c0db1684ae073d923133bd3b62f5fc3714d709

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 11b6db8ebdd709c8055dc084b3b3ed91a90ce9c0854f74ef017caf0377866533
MD5 c4519c4dfd382977713d90bbc7fb56f1
BLAKE2b-256 8f33804b19ed196ec82c28b89f6c37224c71cb47c19f238379a52fa219d41626

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 1d647c20c47270ca86257706b59fbd74d052c721eb3594dfa8782dd339db81ae
MD5 4e2e89e2e290f390fbfa30984fa5812b
BLAKE2b-256 e94b541acfad56472a114eccc78f10f616a7c30b296a252525a22b50732b936f

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 158.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3e156c9f84e43cbe819e56b649356bc987da61c1a65533cd1419132a7b45da0c
MD5 9703f5c59da9c15d122255679827cb93
BLAKE2b-256 54036965f31c3c49c553b094de715af249a86bb0e4b102c1d75210005c90bbee

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bee4ae79eeea939f2d5861fc42153188f20fe85894597d458ec6d3e3b2aa0242
MD5 0cc59b05c7df2f6d6ca8f703b988674b
BLAKE2b-256 171c89290bc12bfdecc8fd85d21233335f3ab02d2abd138cb4c7a4f504a1cc2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 08d0e5e54ff64b223b32263f64b594649d0b525836ad266fd5ccbb523a949b96
MD5 41574321c0c438577860d9f57201d98c
BLAKE2b-256 00a5c2f9315c92ee14c6d09e64073d66d607afb8c03776e9398feaa8091d9b59

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f4aa670c51caf9a676982f13e9e7b97f14f21bdeccda307db4ca0ac1d7baa464
MD5 6d6524314d3a206ff4a8068e403eb03d
BLAKE2b-256 b7976b03283d476a3145f20553fbd2370127e16f4fed0f25caedea91ef72ab43

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 36627afc213e20e079601976e85c69317005934a26a2312ff6745f13f0a69598
MD5 e23e801407b5c486bf41788210911e40
BLAKE2b-256 9da90c3a5c64c6d69ff3cbe911b7d7e5605f060dc50e40beaa126ca6fdccce94

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 158.2 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 56d012a37c7e9825151fa34ef02b6f9e197c8912a19ba8ed015cedacdc70cd2c
MD5 b06220546cdf7faf82653f3591c54e1b
BLAKE2b-256 5433377cd71b365782fe788d43e1fc840b4249936b0bdd2ef77fba98271471e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e0fb98c9d4f837af126d01caaacb022e1e5faeebc8be0c2d13f1299ca265c004
MD5 c0be968624ccb8cefdf8a9ad78ae709f
BLAKE2b-256 46d633a023b58bc5833d29dac3a3666cdc20384f53a1c921b8097018d33850f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ba9468c300dd436adf3d5c33e007f465bb69966df05a862a84acc25862e15c33
MD5 1aaed2483487ed1341dba6f7433079a6
BLAKE2b-256 7a05466ca32028a50c21828c5943e88bd2c0c1a34d6f255f0f0af47b18602d7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e56c89068b79c6860921342ce85ab2f97fff87fbd9bcc094e0668c6d08d0f7dc
MD5 4b787cbe6ae3900bbb565c437b60bcd8
BLAKE2b-256 dcb64c115bfdc5d4e05070efac6b61430238ed2971b0361da4c8ddbd7cc86005

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c36821d10c5aef5a6fcae2b2399a11f93eefb52f728f5c8d95e76b31448f83ca
MD5 76c54cac020835e35fc76dd81dee898e
BLAKE2b-256 ddf7c87755cb85e327b174f8c4be79599393efef7e33ebc514288ee122cf21b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 158.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 63fa39ffcdee7eba822a47a166119ca5bd7f8550247c7fd463b8be592b1072e1
MD5 a234320e0e1babdf44a306572526efc3
BLAKE2b-256 ba813d552d0f7d550fc2707de4c910d1b31770a4fb3b8a574980836b7c4df9d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp39-cp39-win_amd64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9ffc25a53949d39497952168a10c8fc1c5c419ccb8128f84f94af9ae21481305
MD5 4c4f42132ec0f69ba7ca3c4bc2f0d684
BLAKE2b-256 dd7c601fe371c0f1263c36ef3ef4aa3af12efb41db3923070a68ff4aaa13c30d

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 09d6352a0de7fda5d5cf5e058c629696ff81c8cedb0ec6b67e71a4b4155bdf50
MD5 4287a5f8449cb719cbfa91d62536ace4
BLAKE2b-256 5ea26b1cc881eba2a57a823779ac6a63f185d27f91127335b1f385e207a82984

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 202.3 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 30839fa62c875cc15bbaef95e31a2b91d1a3b065f8f8b81ac1c050cf8f833134
MD5 f36b624d5fa7480ace88718be53c0635
BLAKE2b-256 b95a436ec5ee2935ce95a4f8badcf16c678690d188833b1393e2a8149cd057c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 209.7 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7ad97afb6242db0101def0d3cfa63ed45b36e70b5634f283e64b248738b27800
MD5 de01bbfc1b51fd277b1696ee89b1e6de
BLAKE2b-256 56e5bc91db777f545414207e4a46599329086fceabd30568c0a88228d9087320

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 158.3 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 5e41ef185fce71cdb5512dc5203e1600d6dd4d04040260c348a3474bd56f3c4a
MD5 f87e33e190c46dec66dfc69b666c688d
BLAKE2b-256 760c30b331fcf83d918f7e514adb56702474725ea32373ee3232db6b19a0d7c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp38-cp38-win_amd64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d3f83c15e6908c550306806ef2ca53d8ea79df259df565a9b740b40556d673d3
MD5 1b16350afbbafec4da31fd19c10b5373
BLAKE2b-256 9c44f4b745a19b7876434a1cdbe291d2aab659a8f17c2edf6b1cbfe324b09500

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for snkv-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 abdf7e5487f44ef4ebbb9b7ef3e88ef628c9297b86dfae7e2c60d0bc98d3c7d1
MD5 9f13ce3ced617821de98cf1e95c02a89
BLAKE2b-256 d0e7f50349fbe808a842a214ea08558925bd5bcf7066d9c2e2c6f25ce18ca4ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 202.3 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f006b4d3388505fe403c15505f9c6909290720e7d84b02b952286e21d75c9c95
MD5 c96ec027c9d48dc1991709691d744707
BLAKE2b-256 4b4ed535da10d6de2f8eb8c2b89a33631f2dc0b83634f90703ccc12f8ea17108

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snkv-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: snkv-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 209.6 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for snkv-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 55ba6aafa46548fc51d4c9f2ef696de6892823d0cc32bbb1344c73fa4492f9df
MD5 68b71e7d0b0ce9bbcf6aa4027033269a
BLAKE2b-256 0ce6fc04ba6b3ef89b7c70ca665361621466b3805f1defe96b27e08689d35dea

See more details on using hashes here.

Provenance

The following attestation bundles were made for snkv-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl:

Publisher: publish.yml on hash-anu/snkv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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