Skip to main content

Native Python bindings for Betterleaks

Project description

PyBetterleaks

PyBetterleaks: Python-native Betterleaks with bundled platform wheels and no runtime subprocess

PyPI Python License Wheels Docs

Python-native Betterleaks. No CLI wrapper. No Go toolchain in your runtime image. No runtime subprocess.

pip install pybetterleaks

The power of Betterleaks with Gitleaks-style secret detection, in the palm of your Python hand:

from pybetterleaks import scan_text

result = scan_text(
    "AGE-SECRET-KEY-"
    + "1QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7LQPZRY9X8GF2TVDW0S3JN54KHCE",
    validation=True,
    redact=True,
)

for finding in result.findings:
    print(f"{finding.rule_id}: {finding.secret}")
    # age-secret-key: REDACTED

Need app-specific rules, validation metadata, and safe logs? Keep redaction on, let Betterleaks' built-in classifier shape the finding, and ask the native engine to validate when the rule supports it:

from pybetterleaks import BetterleaksConfig, Rule, scan_text

config = BetterleaksConfig(
    rules=[
        Rule.prefixed_token_rule(
            id="service-token",
            description="Internal service token",
            prefix="SERVICE_TOKEN_",
            token_pattern=r"[A-Z0-9]{16}",
            validate='{"result":"needs_validation","provider":"internal"}',
        )
    ]
)

result = scan_text(
    "SERVICE_TOKEN_0123456789ABCDEF",
    config=config,
    validation=True,
    redact=True,
)

finding = result.findings[0]
print(finding.rule_id)           # service-token
print(finding.secret)            # REDACTED
print(finding.validation_status) # needs_validation
print(finding.validation_meta["provider"]) # internal

The same importable API scans directories and Git worktrees without a Betterleaks CLI process:

from pybetterleaks import scan_dir, scan_git

dir_result = scan_dir("src", validation=True, redact=True)
git_result = scan_git(".", scope="worktree", redact=True)

PyBetterleaks wraps the Betterleaks Go engine through a tiny ctypes JSON ABI and returns typed Python dataclasses. It is built for CI jobs, Python services, notebooks, agent tools, and Docker images that should stay simple.

Status: alpha. PyPI wheels are published for CPython 3.9-3.15 on supported glibc Linux, macOS, and Windows targets. Musllinux/Alpine remains unsupported for the current Go c-shared design; see Platforms.

Getting Started

From a checkout:

uv sync --all-extras --dev
uv run python scripts/build_native.py
uv run coverage run -m pytest
uv run coverage report

Run a scan with the bundled Betterleaks defaults:

uv run python - <<'PY'
from pybetterleaks import betterleaks_version, scan_text

print("Betterleaks:", betterleaks_version())

result = scan_text(
    "AGE-SECRET-KEY-"
    + "1QPZRY9X8GF2TVDW0S3JN54KHCE6MUA7LQPZRY9X8GF2TVDW0S3JN54KHCE"
)

for finding in result.findings:
    print(f"{finding.rule_id}: {finding.secret}")
PY

Expected output:

Betterleaks: v1.6.1
age-secret-key: REDACTED

The example secrets are synthetic fixtures.

Why Not Subprocess?

Shelling out is fine for one script. It becomes awkward as an SDK boundary:

  • process output becomes the API contract
  • quoting and path behavior leak into user code
  • Docker images need extra binaries
  • errors are process-shaped instead of Python-shaped
  • async and agent workflows pay process startup overhead

PyBetterleaks keeps the Betterleaks engine native and gives Python an importable API:

Python app
  -> pybetterleaks
    -> ctypes JSON ABI
      -> bundled Go shared library
        -> Betterleaks

API

from pybetterleaks import SUPPORTED_GIT_SCOPES, betterleaks_version, scan_dir, scan_git, scan_text

print(betterleaks_version())
print(SUPPORTED_GIT_SCOPES)

text_result = scan_text("token goes here", validation=False, redact=True)
dir_result = scan_dir(".", config_path=".betterleaks.toml")
git_result = scan_git(".", scope="worktree", config_path=".betterleaks.toml")

scan_git currently supports local worktree scans. It validates that the target is inside a Git worktree, skips .git metadata, and does not invoke the Git executable. The supported scope is explicit: SUPPORTED_GIT_SCOPES == ("worktree",).

Programmatic config uses Betterleaks' TOML concepts directly, with helpers for filters, validation results, common rule shapes, and relative extend.path handling:

from pybetterleaks import BetterleaksConfig, Expr, Rule, Validation, scan_dir

config = BetterleaksConfig.with_defaults(
    rules=[
        Rule.regex_rule(
            id="internal-token",
            description="Internal service token",
            regex=r"INTERNAL_[A-Z0-9]{16}",
            keywords=["INTERNAL_"],
            filter=Expr.min_entropy(3.5),
            validate=Validation.needs_validation(provider="internal"),
        )
    ],
    disabled_rules=["generic-api-key"],
)

result = scan_dir("src", config=config, validation=True)

Async wrappers run the blocking native scan in an executor and request cooperative cancellation from the Go bridge when the task is cancelled:

import asyncio
from pybetterleaks import scan_text_async

async def main() -> None:
    result = await scan_text_async("INTERNAL_0123456789ABCDEF", timeout_seconds=5)
    print(result.ok, len(result.findings))

asyncio.run(main())

Docker

FROM python:3.12-slim

RUN pip install --only-binary=:all: pybetterleaks

COPY . /app
WORKDIR /app

CMD ["python", "scan.py"]

No go install. No Betterleaks CLI. No install-time binary downloads.

Platforms

Target wheel matrix:

Platform Status
Linux x86_64 manylinux wheels published
macOS arm64 macOS 11+ wheels published
macOS x86_64 macOS 11+ wheels published
Windows amd64 win_amd64 wheels published
Linux arm64 future CI capacity
Alpine/musllinux unsupported; no wheels published

Previous Alpine experiments failed while loading the Go shared library through Python ctypes on musl:

initial-exec TLS resolves to dynamic definition

This is a Go + musl shared-library loader limitation, not a missing Docker package. The same failure reproduces with Go c-shared and a Go c-archive linked into a musl shared object, so the project will not publish musllinux wheels until that loader path is fixed. Use Debian/Ubuntu-style glibc Python images, such as python:3.12-slim, for supported Linux runtime images. Track musllinux work in issue #1.

Local Development

uv sync --all-extras --dev
uv run python scripts/build_native.py
uv run coverage run -m pytest
uv run coverage report
uv run ruff check .
uv run mypy python
uv run --group docs mkdocs build --strict

Build a local wheel after the native library exists:

uv build --wheel

Run the Docker packaging E2E:

bash e2e/run.sh

Verify the published PyPI wheel in a temporary virtual environment:

uv run python scripts/pypi_smoke.py

Benchmarks

Synthetic benchmarks live in benchmarks/:

uv run python benchmarks/bench.py --rounds 10 --files 50 --secrets-per-file 2

To compare against a local Betterleaks CLI:

uv run python benchmarks/bench.py --cli --cli-path /path/to/betterleaks

README numbers will stay blank until they are measured on release hardware. No fake charts.

Security And Supply Chain

  • Betterleaks is pinned in bridge/go.mod
  • the bundled Betterleaks pin is documented in docs/betterleaks-pin.md
  • CI checks that go.mod, go.sum, and the bridge version constant agree
  • wheels are built in GitHub Actions
  • release artifacts get SHA256 checksums and checksum verification
  • GitHub releases attach SHA256SUMS
  • GitHub artifact attestations tie wheels back to the release workflow
  • PyPI publication uses trusted publishing
  • runtime installs never download native binaries
  • wheel smoke tests import the package, run betterleaks_version(), scan text, and exercise typed config plus async wrappers
  • Docker E2E installs a locally built wheel into a no-Go runtime image
  • post-publish smoke tests install from PyPI in a temporary virtual environment

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

pybetterleaks-0.6.1-cp315-cp315-win_amd64.whl (12.6 MB view details)

Uploaded CPython 3.15Windows x86-64

pybetterleaks-0.6.1-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (12.5 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pybetterleaks-0.6.1-cp315-cp315-macosx_11_0_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.15macOS 11.0+ x86-64

pybetterleaks-0.6.1-cp315-cp315-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.15macOS 11.0+ ARM64

pybetterleaks-0.6.1-cp314-cp314-win_amd64.whl (12.6 MB view details)

Uploaded CPython 3.14Windows x86-64

pybetterleaks-0.6.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (12.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pybetterleaks-0.6.1-cp314-cp314-macosx_11_0_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

pybetterleaks-0.6.1-cp314-cp314-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pybetterleaks-0.6.1-cp313-cp313-win_amd64.whl (12.4 MB view details)

Uploaded CPython 3.13Windows x86-64

pybetterleaks-0.6.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (12.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pybetterleaks-0.6.1-cp313-cp313-macosx_11_0_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

pybetterleaks-0.6.1-cp313-cp313-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pybetterleaks-0.6.1-cp312-cp312-win_amd64.whl (12.4 MB view details)

Uploaded CPython 3.12Windows x86-64

pybetterleaks-0.6.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (12.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pybetterleaks-0.6.1-cp312-cp312-macosx_11_0_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

pybetterleaks-0.6.1-cp312-cp312-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pybetterleaks-0.6.1-cp311-cp311-win_amd64.whl (12.4 MB view details)

Uploaded CPython 3.11Windows x86-64

pybetterleaks-0.6.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (12.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pybetterleaks-0.6.1-cp311-cp311-macosx_11_0_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

pybetterleaks-0.6.1-cp311-cp311-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pybetterleaks-0.6.1-cp310-cp310-win_amd64.whl (12.4 MB view details)

Uploaded CPython 3.10Windows x86-64

pybetterleaks-0.6.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (12.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pybetterleaks-0.6.1-cp310-cp310-macosx_11_0_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

pybetterleaks-0.6.1-cp310-cp310-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pybetterleaks-0.6.1-cp39-cp39-win_amd64.whl (12.4 MB view details)

Uploaded CPython 3.9Windows x86-64

pybetterleaks-0.6.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (12.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

pybetterleaks-0.6.1-cp39-cp39-macosx_11_0_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.9macOS 11.0+ x86-64

pybetterleaks-0.6.1-cp39-cp39-macosx_11_0_arm64.whl (6.9 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file pybetterleaks-0.6.1-cp315-cp315-win_amd64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp315-cp315-win_amd64.whl
Algorithm Hash digest
SHA256 55f63c89bb88129fd27856c29b25f56b6be0bf9b7ae581ec7a4ca3e5912313fe
MD5 fc443a3ee0a790c5a009bdaeba174de4
BLAKE2b-256 48cb42364a1dd11c44eff639c6c1462a761dc8e2fecd22119ea92d6b9617268c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp315-cp315-win_amd64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 cd988363ca716ccbec4e633ec364bbfa52e634fedda594be99b2c42a7f0756c8
MD5 32f28b3ad3f81d216914955c6868e7bd
BLAKE2b-256 591daff9b2139aa8586977b1cb1745811bf4203ef9acc2b9ea8eb03f0ec4d391

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp315-cp315-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp315-cp315-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0aa48fa1b2ed00ab778e60e1539759c62134e8a3873c4aa8a1830f7193d0d6a3
MD5 7f6aa34903e08627970451a1f55079f0
BLAKE2b-256 7ad33bd4fb7318e018b356521a47ce3d02caea20f295ec879cf737f94b8871df

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp315-cp315-macosx_11_0_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp315-cp315-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp315-cp315-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e20921b3251201d285f3bf9680e5a11497aaf23efbe98d054b3ec5cce79fa266
MD5 ba0ed20856e9be6d7e5c82b28a579b55
BLAKE2b-256 f99cf803b81a3d52a099630f602cf0a21d23752130d3acaf2f8eb147902ada3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp315-cp315-macosx_11_0_arm64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 055675391cd73c6bdb3c28a86b33f28ca810a2ff87acf2d42a6f967ebc538417
MD5 13bff86859584ca759d2074d0e0529ce
BLAKE2b-256 fcf72509ac64ef43e7bb7170d94e6028df469d9cea7f73af135a7e3234d3f1c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 9ebe0b82704208089b9eeada82f0b5c8d839fc3e670da1c24601c4cf53fad6e9
MD5 a3e0189d0621167cf51dbe6595891919
BLAKE2b-256 e65641bbc6e00829ddb483e7b2e9d5de6d550fde434a6e17ca24c429e495ba41

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 66bbf9030dacc26821b0d69c7e37f0a11144bdef925f16efa51f58fe7b5bc9b4
MD5 bd45e3fb6fa3fdf5f47692f3ce518611
BLAKE2b-256 3ec6f415a92a1003079f03afa87f8d92094e82b1065c37a4d11a722372218c70

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp314-cp314-macosx_11_0_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bf99a56c3f03f00de6f1d0d8e4136b2b2dec160791fd9fe38a4095df38e19694
MD5 22a9fa64c947f35f82c5558d179412d8
BLAKE2b-256 3c0b95de409620ba124bc157f66f973f35b7961fbd62a00d4b620f83c2e786bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a7594f47868e4a1ae3bda68f8b960adcdc12ac14272a08566d5b55d7eaead716
MD5 085e707a7de4ba0fc2339c9f38d6246f
BLAKE2b-256 b4a90f36409084a439aba77ef64cf91dffd3fd10d30144601be51b1ffa96a945

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 0ec250a6c3cdc41d8ddcaf89754be74ad12ff104fe0d9db862b96ae163ddf0e3
MD5 54ac62c560c69c18a61aff0728069bf9
BLAKE2b-256 f065c6855d29f8e2bda2aa4d663c7f3b96e1daeb1a53b40ea93336050024e965

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 9d794d6abe9a956cde45551560c09b4dadab42b5e033549c8dea5b87408c418e
MD5 5b130ec6a7045bf9e5656f0cac5457ca
BLAKE2b-256 0f5393ec35e1f35f1d43cd85cbf433ec78df4104380f5fead74b9398f145dab4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp313-cp313-macosx_11_0_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bfa98771cf454c426a6b84c5a73fb232361e13da7b9baee12ade0e1d398ad801
MD5 56fb1e37884c94ce9b307f1e9dedd838
BLAKE2b-256 3320c7a5ae0bc612bfe061f570004d62fea365bb6bdf6e7c8cbad8d32246c731

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ac4484ca5ca8cab59ef104f7cbc289841d7061f247dc6c8de164d22bc3a6d6ff
MD5 d47ffefbaa38af2079ff5da467853ab9
BLAKE2b-256 c12c8020491e0a57c7be1f326f9f4063293352dfc313480632f74a81bfa7bfab

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 37430c7d4b15206059b18785efe7cfd8632191d6d3ea4c43c8026ff9fa46488c
MD5 1e7f037b80bd78fbd2d3113eac4b093e
BLAKE2b-256 f969cd59bda3fff2e329d5e941501461760ae5a7e6a73d7e114c566cfff64e77

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 475e91090579d8b3c544324065da9ce55b0eaaffd5fac16a927be6d9170fd464
MD5 66056379e4400a3931772934fcc5450f
BLAKE2b-256 bae4fe82586d7c729262f8a50595bac06397c831314fe76a56314bd7654845a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp312-cp312-macosx_11_0_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cddc9e15bb00a88a56799c765b969ec3ead1586eab795102fb4418aaf5ee29ff
MD5 695ab949dd1989a665f5f5e9a388fadc
BLAKE2b-256 28c1f165f048e7259a30ef0fbce4b67bbb16572c391046faa345f07cd4320cbe

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b8016beedd56a63fdf558178d3014c621054bf1d6cc821d128cb18f8f615667c
MD5 f79a4524aa5bc8032ccd350ec8a894eb
BLAKE2b-256 dfa0217d0e319acb0dde8eb691f4c950307c96315212be9daaf87c3baf8eb315

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 b28bb9ba849d7b19d5db0e0baf1f5906c845cd0325460ef5321c48cee7155e09
MD5 b78eb8b8ebfed9d02d4c86e7b7e17c21
BLAKE2b-256 215bc29f6bdf26df811f1a59539e240551452dd5b8ea553ca392536dfe8705d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 5d830732235d9759a869ed6f463743a4439883098befb3e5a65da79b58fe8efb
MD5 0169dda98d2630f3c618629152dbc8a2
BLAKE2b-256 9d8dcd38c83ce1fa67346136b8d20a6ceb9b4a3d189a08e756fa9b89578b1768

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp311-cp311-macosx_11_0_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5104e893783d9ec65f5cdeb2a67481cbaa4c709b0d9f2fe6cad376b326538279
MD5 2951a9292e1a850a2fa161b7e016a1d6
BLAKE2b-256 31541f51fc1e583b61943dab4688947279de4a621dfbcb9187be40a4d4b7a8ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 eac2e8f0719c06c018c351cdff2f29e139f1486377a7885196dd4acafa723366
MD5 80d2ae71ca8bf8bc1a664e84bcba2d60
BLAKE2b-256 e7598f7af7c7f36d3d879db084becb768e8f93d915409b3efadd5efe81d82968

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 a395121e89b8c503e9b11eb22445cda35e4c081e905fe702431a6d61c1a2e1e4
MD5 bb95d5c589abfaf261ee85d29dd5099c
BLAKE2b-256 a3bda9df40fa24d856a82df52f7819280f735a4fb5a09c4200964b26037e5d61

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 ff54cb4ce6f66bcfea2973162ef069de96d56431ba434ea0eb732ff15fecd708
MD5 f4120b747abd62d756898648aa02927d
BLAKE2b-256 0e8a986165cd4706903524125adb56a601a996c7668c3b1848da0b40ef11781f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp310-cp310-macosx_11_0_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bcaede10ea9e89dd9a238ac0292f41a871a5ffbc8baa44b3d4c1e7e30103004a
MD5 2d4a58bc493b664942160f58c9a0ba1d
BLAKE2b-256 cb1d0b66ad0292a5f0f5b9f8e8d386973925c5b82bdea95f644e9f8283ca3bad

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 b2496a311bc9d3a486f9ee84e6dfd770fff1db3daeffdc8ceea12ef68cb6171a
MD5 ba44e41980b39ba9577a5c3e3ff20437
BLAKE2b-256 d7d49d86faa79f3cff8fa8c923a740c7430e2ec46abeeab0582f41c3572c61cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp39-cp39-win_amd64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 18340d83b4c15d279e4aa2c1f9b27825767392daf9c60d2b358429e92c9fde6d
MD5 073327146bbf1c5b15261367784e8f79
BLAKE2b-256 3b4eeef14576b9fd0440bd62317964bbac5f5cc4148fb8056bd79cae98729a3b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 75e287ce29c7b656d3c5a369b18fe5fcae296df2ed1b2eadc336b6c2b144a01f
MD5 974d679963c0c5daf9dd0c1475f4a1b6
BLAKE2b-256 df8a7b8558ff46e89e35f7ca1c131f607f16bc5ec2c3642d6b74ee1684928f4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp39-cp39-macosx_11_0_x86_64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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

File details

Details for the file pybetterleaks-0.6.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pybetterleaks-0.6.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d42ace0f4794e0a409c4186a286eaaaf18369c0b8a6147e11f2eedf353638118
MD5 78a95addf567449637277d0d6f777d5b
BLAKE2b-256 8986cf2a23377852768d164c574bbc65b3679575809ea81a595a80573c5be9a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pybetterleaks-0.6.1-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: publish.yml on roymezan/pybetterleaks

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