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

TOML cassettes (.toml) load ~2x faster than YAML and produce ~12% smaller files:

  1000 interactions
                      YAML         TOML
  save                10.59 ms     11.67 ms
  load                18.99 ms      9.79 ms
  size                768.0 KB     675.3 KB

Run uv run python benchmarks/bench.py and uv run python benchmarks/bench_formats.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.

To bulk-convert existing cassettes to a different format, use the CLI:

# Convert a single file
cassetter convert cassette.yaml cassette.toml

# Convert all cassettes in a directory (in-place, changing extension)
cassetter convert tests/cassettes/ toml

# Convert to a separate output directory
cassetter convert tests/cassettes/ output/ --to toml

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.6.0.tar.gz (46.6 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.6.0-cp314-cp314-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.14Windows x86-64

cassetter-0.6.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

cassetter-0.6.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.6.0-cp314-cp314-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.14macOS 10.12+ x86-64

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

Uploaded CPython 3.13Windows x86-64

cassetter-0.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

cassetter-0.6.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.6.0-cp313-cp313-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.12+ x86-64

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

Uploaded CPython 3.12Windows x86-64

cassetter-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

cassetter-0.6.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.6.0-cp312-cp312-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

cassetter-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

cassetter-0.6.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.6.0-cp311-cp311-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

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

Uploaded CPython 3.10Windows x86-64

cassetter-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

cassetter-0.6.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.6.0-cp310-cp310-macosx_11_0_arm64.whl (1.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cassetter-0.6.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.6.0.tar.gz.

File metadata

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

File hashes

Hashes for cassetter-0.6.0.tar.gz
Algorithm Hash digest
SHA256 4aabfbe0e5fb3dfd8c3c95311dbdef4d758ca14b46bd318a4a169accc8ce1b5b
MD5 b09061eb44aa5238cad361d89c7a49b0
BLAKE2b-256 23705c108d7c7c6f453e74f047535439dc890ddbbc8f60c3c849e6c180a1026d

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: cassetter-0.6.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.12

File hashes

Hashes for cassetter-0.6.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 105a4beb3e8174ea37c7189bd8fc13ae85dfb355bd7113bc4c3dd4062ad01862
MD5 9a9531a30b8ef5fdb9053197ae42cca1
BLAKE2b-256 854517c0766cc4121a8fa2f46b82caa52e1f6f2ba269b9ff8172229ee1de160a

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 284f2f98192a8caea30b3c618ae1209050f47beb3abf94f82266a07543cd3f58
MD5 7d1b30a87c37576270d466989fc5f03e
BLAKE2b-256 64f87eccffaad9ace47c7544e174ee0da82e325ad36baab6ebf85207fea0cc87

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6cd56f678f531e3dfd150b264d23ccf7e4ef5761776965e622aabe1996537b5f
MD5 c9d1f24adf859d475f46322e9c2f2319
BLAKE2b-256 5987185f0ef762b5ea4a2d54218763d6454b473b3b58f0bc672989bdf30e4c36

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b3d180dfb6d0b9991a75fdf2cc8be10d17b0033f4e730e0349986db617b781e
MD5 731252e7e21283917d2f31eb6481a39e
BLAKE2b-256 2f508f9eacdcdfb3899ae1ea9108ac68ae5a1dd255228242e74854485f1a0920

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 287e41bbfc4b3d35f067186abefeb9d59394fbf797eff2f30fd98a1083b011f8
MD5 9745046836b6ec05117bee16614a9215
BLAKE2b-256 36d6a645f0f49bf6516ef01c4fad5d0fdc2aedb9cf341a1f08b70de9ba8e19ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: cassetter-0.6.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.12

File hashes

Hashes for cassetter-0.6.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9b217a6b5a9ce6d36dce92372d1d40510d51949ea7c853d9c851bed99ba91803
MD5 5f87f8cf3ffc7197eeb49d0df0acc857
BLAKE2b-256 0dc5ec62f7a536d826dc80172b5aca09c42c5c0e3bbeddc2f1b92ec849f36245

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 899e74793fd8c306dcfe67d373e48108d43e0dbdda97b9f8c54a6afc748ebfcf
MD5 9a4299a048921a3830505ca8ae3c6c44
BLAKE2b-256 ff4d186a75aeb2e0ee6a7d505849a9a86b416f47b8d8715c674cbcab40b5b2c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 398d1a69c7e937bb2d23507a04ad31993ee8ca11123588e4415c1caff87127fd
MD5 7136d0ec0dee2fe021017f0fdba9ed80
BLAKE2b-256 ded15c47b7f73e564160ce9e6f8171a1bb3ab10bf5cdcca9bf0bd1c8ff4f2a3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 66d2ec15a5e90d507fe09e86df5506970e92617dc7d72ef4c4b1b0f9f2cc9e58
MD5 1cfab52180975e76f4246a7cc96d10e0
BLAKE2b-256 e79ea63782a81db45aa2b198ea81a5d49ce0aa0b3902fe7b18971484e5ea0360

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 78198fb28a808b2b230f48dcf1bbb02568cdeef27336bcb699addf94d79f6a0b
MD5 3037381eb62df3bfce278ab0b9a02aa9
BLAKE2b-256 0d6ea194230ecd8e8c665b14ad5a4ba617eb1f0a9135d1d87526ef9c7323152f

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: cassetter-0.6.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.12

File hashes

Hashes for cassetter-0.6.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 445205b41dabb3384784c082a608adaa0dd7870c98d26f478b20fc2252798827
MD5 22b89354559ffc4a3a02d8d57c8c307c
BLAKE2b-256 099754cf912e39f33255fb8b74d9e5a4a66c9c98a8393c63d0de7fa4016d32c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8ddf00378c898e39927496c9ab837783ab53b7883d0f0d7454e1fd60cda2fe56
MD5 3eccd5ee84e46e41f8d2a351753db8ce
BLAKE2b-256 441308a93f1427147a975b82db58f68f3b72b51e5279ea000bdc1b753f39b90f

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9f0a858451cbd19b60dd48ba22d0cdee548f9ff299aec099c81fea93501d1433
MD5 e84dae37d000b65cf45e5dfc085bf6ba
BLAKE2b-256 bc271dcc17bc1c8d0c7b29463b071a1b24ca49491309edb6f2ba642610af932a

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cfe5f140c934fd81d7f01a9f70f0a9f6018a94bfce2bd23649f67919db82e1c8
MD5 04c013bf4fa0d28d47d0601c7144ef87
BLAKE2b-256 2b36f9afd916298e09556f39fd0878e59f45792f617f201938b1bdf2655b36c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 187b96a7b7d0e9d73ac476a6766061ba26945df1d2dc389b0108c6a1edd8db66
MD5 249710a6af18fe876503ee52cd6cfef7
BLAKE2b-256 182ecfdb71a4c7f2732d1bc5ac7b01331adcc3708de90ff48b39d555d4c74c85

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: cassetter-0.6.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.12

File hashes

Hashes for cassetter-0.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9fb95cd581bd549efada727eb15ae7fac8c0e7b7782ed55aa5aa47d106be225f
MD5 d6e29921e1cb26b9061da7575b03e550
BLAKE2b-256 96099c68630f3c136c6fc97c5894eb2080fc3090094afc133bc3a672ecc0aa14

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 24fd5313ec83c840c29b68b4422bc2e792517dcdef02d0cd75a0e594a8b05a89
MD5 63044ac8911fc39a437cf03df38186a3
BLAKE2b-256 ba098951fd45b43a22c978456e074240fffda0b813a4e275790c6bf16a9c8f58

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7317462e6be054d24f2f1b89fa0f4b00581699128e1dbea37bf94b5fec7f5043
MD5 4a9cdd2c8fb6894a3073b67fa1100d4b
BLAKE2b-256 df2383080434ca96399d0eef1cc96a864c49e71670e652a068bdab3b5342a34b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d818adfed20aa80e9aeaa97aa7ed0de87a655eee6280147d4ce87ff1bcd775aa
MD5 67101aa70fbae52165481fcd3a7f90ba
BLAKE2b-256 abaf1a54d421f1767ac52d2692daed4e73a5b31994c69e9630c9be187f0fc629

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d798081411d381bfd16c6653ffb88778b347fe0dcb784d646fb3ae431477439c
MD5 28d31b75140e4474195640568679747d
BLAKE2b-256 2d6801f2e1381c64b5f445bd1b3afbc76fa87ea60a180bb9a756dc427457902c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cassetter-0.6.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.12

File hashes

Hashes for cassetter-0.6.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 00f22f841309c4109956ccd1c392f47e84455f5a25622ecaa1ff5c5a21fe6592
MD5 db0d99e6fcad7e5743f5d9495e1e159e
BLAKE2b-256 63f09ed03687f628ea6c8c2fd7cb5600a13f3bcbc3f59e13a479966c16ad1ffb

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df27680c4567be61027aa79d1e6a98a4f1d414056268013445fee115cb5cd60e
MD5 7fdf141483c5886bbc5ad5b7ff0f31eb
BLAKE2b-256 134eb107b8770138d2ecbf8ab012496eca5d6a1f509ba838b3d13453a6bf1386

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b19e005dcf8ccef35a3727ebd53b82d9ed8ce1704c9b716273c79f1fcaebf390
MD5 8eaa07718539afaf7c029a012f8111ee
BLAKE2b-256 f371828153814a9dd72eaefc26c5cbd2eb16e0bcf6237dc9104c7c739c566bd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 341f458938fe61eff3635d15e2cebddf22e242a0f3b7cef98d6b4954a02bc352
MD5 a45128d1cc99e9d615e1dedf3da31696
BLAKE2b-256 47d6a9d256a259e0643ecc410db06921d92cb86d98edc880daf97947588d0ab2

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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.6.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cassetter-0.6.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8bd16ed19a1458ab6a7723827677816a1fc5aa43d1a4408a27102de0752a0da4
MD5 cb3c40d6d244736296f0e662a4a71591
BLAKE2b-256 0c09786e8a05ec835c8fd04e57bd9d12cff346f854fc18b71ff9921ca43c24ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for cassetter-0.6.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