Skip to main content

Rust-powered HTTP cassette recorder for Python tests. Safe by default.

Project description

Cassetter

Rust-powered HTTP cassette recorder for Python tests. Safe by default.

Why?

VCR.py works, but has fundamental problems:

  • Unsafe by default - doesn't filter sensitive headers, tokens, or API keys
  • Unsafe YAML - uses yaml.load() with an unsafe loader that can execute arbitrary Python code from cassette files
  • Slow - pure Python YAML parsing, matching, and serialization
  • Fragile - relies on undocumented internals that break on minor version bumps
  • Poor readability - JSON bodies stored as escaped strings in YAML

cassetter fixes all of this with a Rust core (PyO3) for speed, safe-by-default security filtering, and secure YAML parsing.

Install

uv add cassetter

Quick start

With pytest (recommended)

Mark tests with @pytest.mark.vcr:

import httpx
import pytest

@pytest.mark.vcr
async def test_api_call():
    async with httpx.AsyncClient() as client:
        response = await client.get("https://api.example.com/users")
    assert response.status_code == 200

First run records real HTTP interactions. Subsequent runs replay from the cassette file - no network needed.

If you need direct access to the cassette (e.g. to inspect recorded interactions), request the fixture explicitly:

from cassetter import Cassette

@pytest.mark.vcr
async def test_with_cassette(cassette: Cassette):
    ...
    assert len(cassette.interactions) == 1

With the context manager

from cassetter import use_cassette

with use_cassette("tests/cassettes/my_test.yaml", record_mode="once"):
    async with httpx.AsyncClient() as client:
        response = await client.get("https://api.example.com/users")

Record modes

Mode Behavior
none Replay only. Raises if no match found.
once Record if cassette doesn't exist. Replay if it does.
new_episodes Replay existing interactions. Record new ones.
all Record everything, overwriting the cassette.

Set via CLI: pytest --record-mode=none

Safe by default

Sensitive data is filtered at write time - cassettes never contain secrets. These headers are stripped automatically:

authorization, cookie, set-cookie, x-api-key, api-key, x-auth-token, proxy-authorization, www-authenticate

Query params like api_key, access_token, token, client_secret are replaced with [FILTERED].

JSON body fields like password, access_token, refresh_token, client_secret are scrubbed.

Customize filtering:

from cassetter import use_cassette

with use_cassette(
    "cassette.yaml",
    filter_headers=["x-custom-secret"],
    body_scrub_patterns=["my_secret_field"],
    filter_replacement="***REDACTED***",
):
    ...

Cassette format

Cassettes can be stored as YAML (default) or TOML. The format is detected by file extension (.yaml / .yml for YAML, .toml for TOML).

YAML (default)

JSON bodies are stored as structured YAML - not escaped strings:

version: 1
interactions:
  - request:
      method: POST
      uri: https://api.openai.com/v1/chat/completions
      headers:
        content-type:
          - application/json
      body:
        type: json
        content:
          model: gpt-4o
          messages:
            - role: user
              content: Hello!
    response:
      status: 200
      headers:
        content-type:
          - application/json
      body:
        type: json
        content:
          id: chatcmpl-abc123
          choices:
            - message:
                role: assistant
                content: Hi there!
    recorded_at: '2026-02-20T10:30:01Z'

TOML

Use .toml extension for TOML cassettes. Body content is stored as a JSON string since TOML cannot represent null values or heterogeneous arrays:

with use_cassette("cassette.toml"):
    ...

TOML loads ~2x faster than YAML and produces ~12% smaller files.

Request matching

Default: match on method + URI. Configurable:

from cassetter import use_cassette

with use_cassette(
    "cassette.yaml",
    match_on=["method", "uri", "json_body"],
    ignore_json_paths=["request_id", "timestamp"],
):
    ...

Available matchers: method, uri, headers, body, json_body.

Supported libraries

Library Protocol Interception method
httpx HTTP AsyncBaseTransport / BaseTransport
aiohttp HTTP Session _request patch
requests HTTP Session send patch
urllib3 HTTP HTTPConnectionPool.urlopen patch
grpcio gRPC grpc.aio.Channel wrapper
websockets WebSocket websockets.connect patch

By default, interceptors are auto-detected based on which libraries are installed. To limit interception to specific libraries:

with use_cassette("cassette.yaml", intercept=["httpx", "aiohttp"]):
    ...

Concurrency

Multiple cassettes can run concurrently in the same process - each use_cassette context gets its own isolated cassette via contextvars.ContextVar. This works out of the box with asyncio.gather, anyio.create_task_group, and any framework that creates async tasks (e.g. Pydantic Evals with max_concurrency > 1).

async def task_a():
    with use_cassette("cassettes/a.yaml", record_mode="none"):
        async with httpx.AsyncClient() as client:
            return await client.get("https://api.example.com/data")

async def task_b():
    with use_cassette("cassettes/b.yaml", record_mode="none"):
        async with httpx.AsyncClient() as client:
            return await client.get("https://api.example.com/data")

# Each task uses its own cassette - no cross-contamination
results = await asyncio.gather(task_a(), task_b())

Nested cassettes work too - the inner cassette overrides the outer, and the outer is restored when the inner exits.

Threads

For ThreadPoolExecutor, each thread has its own context by default (no cassette). To propagate the current cassette into a thread, use contextvars.copy_context():

with use_cassette("cassette.yaml", record_mode="none"):
    ctx = contextvars.copy_context()

    def work():
        with httpx.Client() as client:
            return client.get("https://api.example.com/data")

    with ThreadPoolExecutor() as pool:
        future = pool.submit(ctx.run, work)
        result = future.result()

Without copy_context(), threads see no active cassette and requests pass through to the real server.

gRPC support

Install the gRPC extra:

uv add "cassetter[grpc]"

Record and replay gRPC calls by adding "grpc" to the interceptor list:

with use_cassette("cassette.yaml", intercept=["grpc"]):
    channel = grpc.aio.insecure_channel("localhost:50051")
    stub = my_service_pb2_grpc.MyServiceStub(channel)
    response = await stub.Echo(my_service_pb2.EchoRequest(message="hello"))

All four gRPC call patterns are supported: unary-unary, server streaming, client streaming, and bidirectional streaming. Request and response bodies are stored as binary in the cassette, with an optional json_debug section for human-readable protobuf representation (when google.protobuf is available):

grpc_interactions:
  - request:
      method: /mypackage.MyService/Echo
      metadata: {}
      body:
        type: binary
        content: 0a0568656c6c6f
    response:
      status_code: 0
      status_message: OK
      metadata: {}
      body:
        type: binary
        content: 0a0568656c6c6f
    json_debug:
      request:
        message: hello
      response:
        message: hello

Streaming responses use length-prefixed binary encoding - multiple response chunks are stored in a single body field and decoded back into individual messages on replay.

WebSocket support

Install the WebSocket extra:

uv add "cassetter[websockets]"

Record and replay WebSocket connections:

with use_cassette("cassette.yaml", intercept=["websockets"]):
    async with websockets.connect("wss://ws.example.com/stream") as ws:
        await ws.send('{"subscribe": "ticker"}')
        data = await ws.recv()

WebSocket interactions record each frame with direction, type, and timing offset:

ws_interactions:
  - uri: wss://ws.example.com/stream
    headers: {}
    frames:
      - direction: send
        frame_type: text
        body:
          type: text
          content: '{"subscribe": "ticker"}'
        offset_ms: 0
      - direction: recv
        frame_type: text
        body:
          type: json
          content:
            price: 42.5
        offset_ms: 120

On replay, recv() returns recorded frames in order without a real connection. send() is a no-op. Both text and binary frames are supported.

Streaming / SSE support

SSE (Server-Sent Events) responses - used by OpenAI, Anthropic, Groq, and other LLM APIs for streaming - work out of the box. The full response body is recorded as readable text in the cassette:

response:
  status: 200
  headers:
    content-type:
      - text/event-stream
  body:
    type: text
    content: |+
      data: {"id":"chatcmpl-abc","choices":[{"delta":{"role":"assistant"}}]}

      data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"Hello"}}]}

      data: [DONE]

On replay, the buffered body is returned to the client SDK, which parses SSE events from it. This matches how VCR.py handles streaming - chunk boundaries aren't preserved, but SSE parsers split on \n\n boundaries regardless of how bytes are delivered.

Request filtering

Ignore hosts

Bypass the cassette entirely for requests to specific hosts. Matched requests pass through to the real server - no recording, no replay:

with use_cassette(
    "cassette.yaml",
    ignore_hosts=["*.googleapis.com", "accounts.google.com"],
):
    ...

Patterns use fnmatch syntax (* matches any sequence of characters). Combine with ignore_localhost for full control:

with use_cassette(
    "cassette.yaml",
    ignore_localhost=True,
    ignore_hosts=["*.googleapis.com"],
):
    ...

Before record request hook

Use a callback that runs before each request is recorded or replayed. Return the (possibly modified) RawRequest. Raise SkipRecording to let the request pass through live:

from cassetter import RawRequest, SkipRecording, use_cassette

def my_hook(request: RawRequest) -> RawRequest:
    if not request.uri.startswith("https://api.mycompany.com"):
        raise SkipRecording
    # Strip auth header before recording
    request.headers.pop("authorization", None)
    return request

with use_cassette("cassette.yaml", before_record_request=my_hook):
    ...

Before record response hook

Modify or discard responses before they are recorded. Return the (possibly modified) RawResponse. Raise SkipRecording to skip recording the interaction:

from cassetter import RawResponse, SkipRecording, use_cassette

def my_hook(response: RawResponse) -> RawResponse:
    if response.status >= 500:
        raise SkipRecording  # don't record server errors
    # Strip a volatile header
    response.headers.pop("x-request-id", None)
    return response

with use_cassette("cassette.yaml", before_record_response=my_hook):
    ...

Both hooks work with the pytest plugin via vcr_config:

@pytest.fixture(scope="module")
def vcr_config():
    return {
        "ignore_hosts": ["*.googleapis.com"],
    }

Cassette expiry

Force re-recording when cassettes get stale:

with use_cassette("cassette.yaml", max_age="30d", on_expiry="rerecord"):
    ...

max_age accepts durations like "24h", "7d", "4w". on_expiry controls the behavior:

Action Behavior
warn Emit a warning (default)
fail Raise CassetteExpiredError
rerecord Delete and re-record the cassette

Also configurable via pytest:

[tool.pytest.ini_options]
vcr_max_age = "30d"
vcr_on_expiry = "warn"

Or per-test:

@pytest.mark.vcr(max_age="7d", on_expiry="fail")
async def test_fresh_data():
    ...

Orphan detection

Find cassette files that no test uses:

pytest --vcr-check-orphans=tests/cassettes/

Performance

Rust-powered YAML parsing and serialization is 3-6x faster than vcrpy (which uses PyYAML/libyaml):

  1000 interactions
                    cassetter    vcrpy         speedup
  load              13.53 ms          58.90 ms      4.4x
  match             0.98 ms           1.29 ms       1.3x
  save              7.58 ms           45.64 ms      6.0x

Run uv run python benchmarks/bench.py to reproduce.

YAML safety

vcrpy uses yaml.load() with an unsafe loader (CLoader/Loader) that can execute arbitrary Python via !!python/object tags. A malicious cassette file could run code when loaded.

cassetter parses YAML in Rust, which has no concept of Python object construction - only data types are supported.

Migrating from pytest-recording / VCR.py

cassetter is designed as a drop-in replacement. Most projects can migrate with minimal changes.

Cassette files

Existing VCR cassettes work as-is - cassetter reads both VCR format and its own format. On the next re-record, cassettes are written in cassetter's format with structured JSON bodies instead of escaped strings.

pytest plugin

cassetter uses the same @pytest.mark.vcr marker, vcr_config fixture, and --record-mode CLI flag. Key differences:

pytest-recording / VCR.py cassetter Notes
vcr fixture cassette fixture vcr is available as an alias
vcr_cassette_dir fixture vcr_cassette_dir fixture Same name, same behavior
filter_query_parameters filter_query_parameters Same name
decode_compressed_response (automatic) Always decompresses - no config needed
before_record_response before_record_response Same name, same behavior
filter_post_data_parameters body_scrub_patterns Regex-based instead of parameter-name-based
before_record_request before_record_request Same name, same behavior
before_playback_response (not supported) VCR hook to modify/filter responses during playback
allow_playback_repeats (not supported) VCR can replay the same interaction multiple times
record_on_exception (not supported) VCR can skip saving when the test raises
Custom matchers (not supported) VCR supports register_matcher for user-defined matching
@pytest.mark.block_network (not supported)
--disable-recording (not supported)

Development

Requires Rust toolchain and Python 3.10+.

git clone https://github.com/marcelotryle/cassetter.git
cd cassetter
uv sync
uv run maturin develop
uv run pytest

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

cassetter-0.5.0.tar.gz (44.9 kB view details)

Uploaded Source

Built Distributions

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

cassetter-0.5.0-cp314-cp314-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.14Windows x86-64

cassetter-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

cassetter-0.5.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

cassetter-0.5.0-cp314-cp314-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cassetter-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

cassetter-0.5.0-cp313-cp313-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.13Windows x86-64

cassetter-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

cassetter-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

cassetter-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cassetter-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

cassetter-0.5.0-cp312-cp312-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.12Windows x86-64

cassetter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

cassetter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

cassetter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cassetter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

cassetter-0.5.0-cp311-cp311-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.11Windows x86-64

cassetter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

cassetter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

cassetter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cassetter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

cassetter-0.5.0-cp310-cp310-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.10Windows x86-64

cassetter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

cassetter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

cassetter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cassetter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for cassetter-0.5.0.tar.gz
Algorithm Hash digest
SHA256 93f83df3e8256e96fb4133c75fbf2120eed4f6b51cf98dc2ae0e894452c5a7e7
MD5 062c24d5606b16943d353468b03d35f4
BLAKE2b-256 748fc6d586d34e9d51b8c4985d9594696471b6b39ed7014377a24a1a25625f10

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

Details for the file cassetter-0.5.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: cassetter-0.5.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cassetter-0.5.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e49b76a169e196d586fc910faf7e6900c560ac1251480c38074d58042a810584
MD5 e25b964475d338d03faca18679d5a2d3
BLAKE2b-256 ff862891805d88dd03b946fd929b08edfcb5afa3c45b7e136f7891e2af5862e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.5.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on Kludex/cassetter

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

File details

Details for the file cassetter-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8717b2e74e036c1cbda37aed8f0f6cb43e54869ad81cbd1bd00925fcb517d24e
MD5 a29f7c4266fc236d6b91cc712d6c0395
BLAKE2b-256 6f2a13f107a2369101594067d3bb401cc7dc4eff9339b450202ee3a1345c2ce0

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on Kludex/cassetter

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

File details

Details for the file cassetter-0.5.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cassetter-0.5.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 229c2efabf72b339fc63f7548087452b5809a177140dc155dbd20f4517b49b21
MD5 3e5356762e7583ee8d567ec1016e12c0
BLAKE2b-256 e9f8740f80bd842bb93f11294dd31bf17a96673c1d777027481dfe8bf47bec82

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.5.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on Kludex/cassetter

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

File details

Details for the file cassetter-0.5.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cassetter-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0e0656a1e7f5c39f3de47b570a1ea0a8396b94b9b5d3024973a6d5d6136879f6
MD5 da354859032886c0a79829693927dbbf
BLAKE2b-256 fa6353418779de6a9d3be51179fae8d98ad72d037023e78d195a78dc4b4efecd

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.5.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on Kludex/cassetter

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

File details

Details for the file cassetter-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 99e49c141106e49931f1bfa3ea0485b31142a0ee342beac9a8503b7fd242ba15
MD5 9bcda1b1c773b6ac06a0c558ef4880c3
BLAKE2b-256 351c1c2144d900cd2b546df3e9c50975ef7e269e57d090773b0b0c255646e0e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

  • Download URL: cassetter-0.5.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • 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 cassetter-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 427b8dffe347dcf6be654b64a6ae08930cb26f57b2d4f11058f47d6e27937562
MD5 6ece84fc73cdf5a28addc6471c53f799
BLAKE2b-256 37cc49dba0a21ba00216b862bf3d61ef3369ab57c70ac177d85773704e00317c

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de53b4073a455d2cab49d920f7991ec51b87f09ef167a22e58c0c56b77731480
MD5 dbc13621661f301a3d11bdaacad5f018
BLAKE2b-256 e75e435b909bc9caedb0df129f09f4053a6dee43b1ad9fb572afb267ff714d00

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bd1dbce210f17790dbfac0fc91b46002c0ea97d7648cdf9fcba0aedff9a3a97d
MD5 16bfe4d53d43ad289d69cfcc0660ec6c
BLAKE2b-256 b50340dc6d5a680ec261598bd86df45fb24bf2cba7c421f69c74a0d3dd77b0de

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4ec07e78de83f87cd703af6e4d4185353f9d78fdaca79bc04f0af28a6b046aa4
MD5 35f09d5ff285c585158d857691772d8c
BLAKE2b-256 a4204ea86844d61b286b4a6d12d1fab43475880c5fd1439b449a05b028d19e62

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

Details for the file cassetter-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 af21f7ed482169ffc7587ffd300b1b6686f1a4f6c457515b2623274a344a5c0c
MD5 1f60c0a42264c0a677de056c91d91d89
BLAKE2b-256 af083212c1df22872797f014407dd74d858cf97c33252870d1ed4c7c64681428

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

  • Download URL: cassetter-0.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • 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 cassetter-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9e16d7e5bc5405437d23fc677a0c5a5660d37cd6cdea8a8e65c72a8439f41739
MD5 c85e00c1b9e870510dee01bb2fdfb9fb
BLAKE2b-256 8bce7bdcbf1bb47ed9937b4c8a58df6e6af23fa337dd33eb41e404a55681f594

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9539dcaa544bb5c0325c980821b63a458fddc5840fc1e30403df955422080f99
MD5 4348535091367bd83637548348ec6c7c
BLAKE2b-256 eb6974bfa23d51f71ff4a3867a6fc8124c8bbc156cb28b03ff004b9cf17325ac

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6b37413d853f9a6b3e7775292e6be669f0d169955c1c0705c0795d1f791c987e
MD5 334662b2011d54cccf8703fd39fc7776
BLAKE2b-256 a1326e951f6dd714e5f014a013c1438813b4f92cab99ca9039504f31fe67f74b

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 43345a513e279053f23a640bad4698c74e4a854ed2c335f8dcb6bbcb7be59b48
MD5 d82422e19bf2b5682435a975222452af
BLAKE2b-256 a46c088c0089b0fca6c93cca7c5f4fb9242d5722aa07740734b7f47a136be150

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

Details for the file cassetter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ebd6bd4f70b51574af82e3df83480550e78cfa24e11dad4b11c38e9051195e56
MD5 4d712284b5ebab90f969bf46886242c3
BLAKE2b-256 deee2249a055ea4e4e3c585916a09788859dc482156f16fbce0ca114ef07db17

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

  • Download URL: cassetter-0.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • 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 cassetter-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 97c4de5f88c9db7444a233d189c3e6b21b4e2b6a8604621a89aab97a1a15ac67
MD5 904592fc07b4c60df550ebc660916be7
BLAKE2b-256 e39ef6b187bdb8140ae627fdc2784c8e529427d337b314e91be3c09a7400e0d6

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 acf4d3f07bd8b37d99686a31b072b0119823a32adf2440205927d079d333c6ea
MD5 9370d8b48c6e6270be8513c19b28185b
BLAKE2b-256 75f7695cd8a0269eebfd11c4cd07a9511da962daefa3569a7377caca5e62f24c

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9dcf8b4f334a01aa7ecbfe963c7615b0ec744fd92e9a3f79415315ae26a7b5ed
MD5 31c5d555e5ac1a64f5effa4fa4025adf
BLAKE2b-256 a481efbd9b879920b0f1703f342a8bb3986a9c2380ae78e37b10e71589b777c8

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d87abdb85683ed044b8b82d8d93d032272194fdc0887cd019fedd4e0fe4b289a
MD5 3f2a912ddf402a4da091763d20f626b3
BLAKE2b-256 27ecdf451b3c44476dc865733896d029391681a812d5a5e27c6f7ad1f6e77b6c

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

Details for the file cassetter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 039ffa734488e636f32d178cfd6227dc867fe2f69f105cb81a37d481fed375dc
MD5 eeb714381620bb4a06425db25527e5b6
BLAKE2b-256 09f4c496a0ca4a3506cbed667083101849ab2cb299c80c5d19399ac2a914cbad

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

  • Download URL: cassetter-0.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • 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 cassetter-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 28e792f4a2ac6b099c5e0c8be8033f62dd368e0ef760925ff991ed3fcacf48ad
MD5 b246c4955da3c7e705ff2df9971cdf13
BLAKE2b-256 fd3496d66066f101e35f75de0a1b94e2f1982ea29d886d231be57fddd3fcb518

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6759bf5d82826db8e1a36dbae4c2e668aa63f6e90d477b1d884407dbaa80ef35
MD5 24678e4201c9e0c28c8ce407f1d0fbce
BLAKE2b-256 4d1087d28758e2404ac2be57aeca689171729df21b789545ec06e6ca9ac0dca2

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 132799010ac980374fa4a6324e3af3391f9f50fa5da6d6f2e53e69df08f67972
MD5 d1592fba0c27c13f98e29d7e0ea901bb
BLAKE2b-256 d7c632af1bf84c572a2085795db236f27e431e3212fb20a73749d7ba347cda4e

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

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

File metadata

File hashes

Hashes for cassetter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7fbd9c84d5c83aa3d1e97cf4b38a05354441753fbb2698636026430bb7be4f71
MD5 8ac8656d66d18cd149f35c4955c18d83
BLAKE2b-256 36ebbd1419df8f47008e54a9e85b0a3d8d5b40d4ced10c18afd1d2bdc5156c18

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on Kludex/cassetter

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

File details

Details for the file cassetter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e6f78bc5ec120136136b2b394203e94bccc845d03cedacbdb29eb5a5cf57f9b7
MD5 93ed151a6bd337150ec31a23c9f8bfe3
BLAKE2b-256 ebf55e2ccc38a2ae9e8f3aadeb536fc39febc02951769a88d0ae7237db909615

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: publish.yml on Kludex/cassetter

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