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

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'

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

For advanced filtering, use a callback that runs before each request is recorded or replayed. Raise BypassCassette to let the request pass through live:

from cassetter import BypassCassette, RawRequest, use_cassette

def my_hook(request: RawRequest) -> None:
    if not request.uri.startswith("https://api.mycompany.com"):
        raise BypassCassette

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

Both options 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.

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.3.0.tar.gz (42.7 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.3.0-cp314-cp314-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.14Windows x86-64

cassetter-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

cassetter-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

cassetter-0.3.0-cp314-cp314-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cassetter-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

cassetter-0.3.0-cp313-cp313-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.13Windows x86-64

cassetter-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

cassetter-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

cassetter-0.3.0-cp313-cp313-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cassetter-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

cassetter-0.3.0-cp312-cp312-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.12Windows x86-64

cassetter-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

cassetter-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

cassetter-0.3.0-cp312-cp312-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cassetter-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

cassetter-0.3.0-cp311-cp311-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.11Windows x86-64

cassetter-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

cassetter-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

cassetter-0.3.0-cp311-cp311-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cassetter-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

cassetter-0.3.0-cp310-cp310-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.10Windows x86-64

cassetter-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

cassetter-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

cassetter-0.3.0-cp310-cp310-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cassetter-0.3.0-cp310-cp310-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for cassetter-0.3.0.tar.gz
Algorithm Hash digest
SHA256 d6e4b661b229357da761003d51bdfbd80047c1390897709bb4d800d5314b6efa
MD5 c9337448233436948bd3f6aaca23e567
BLAKE2b-256 f5198eaf739bb960518f3e5d017df8ff8feef75fd49acd2bc5c535be6039c5c6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: cassetter-0.3.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.6 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.3.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a2cebc9bb86e3beb949e022f004d9548925019476f11ac51aeaeaadbf31c018a
MD5 2339c6df836322c84d3b9e66f60207cf
BLAKE2b-256 a10d6ee84b59e8d1c0eeef0c2bc2061804a2e76b18411f34fee050ddbf08eea8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6f2731c7256f7439dedccd0a6bd6c2acb4f7bd2728009af257280440406731a5
MD5 fe7d8ebfbc3a7c46da6617bf6a6f3e88
BLAKE2b-256 dd3d61bd0ab1f5b67219e989765bc100567608d5d3597240b551603ab5ef92da

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 eed926eab4300689e0715e41aed7bab8d8b16abbfadb02a67de7f5d1431e6917
MD5 bd14187b0e6f06cdcfb26b3dfd040766
BLAKE2b-256 b74c9937e33baf9c0f07cbd18fb7047db0e7992bc99fbf9ec3e2cf4cca1c5775

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ca55fec657ff48aae760fd133fe0d84de184cb386d87a35bca1dff534df0603
MD5 789458f61f8e0e8af03282e4ba060061
BLAKE2b-256 895b832521e2c605f518d7769a3a4562adbb2d764cb1fbfe6c8d2da3bc1b2c16

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 62701094fd4338b139e986b45eb64194d85d0df9a8020b6c54f60af933f54c95
MD5 3fc0fe7e93a0a1f60b7fccbf6758fd57
BLAKE2b-256 99832214e320935af143e1a9e17aae0b5ada299eaf319d7024b6267cdc4814a7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: cassetter-0.3.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.6 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.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e252af94e6eca7fb8bb3c0fbb50229351d7f4082a70efdf0731a2d063393b06c
MD5 2e30f3df461d65876163a7995a04624b
BLAKE2b-256 318311a8a13bbfb57a789f7663f4fdce05809db378ca1eaea0f5d4d989c5a2a9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 24713897cd6c13e8c3dde4b97b6eaeaddf0d198068aa22b44f588e506fbe16ef
MD5 d444574f34edfcfeda8515a8ad2a9f75
BLAKE2b-256 a357fe2b846ae39f48d414d38fb24a941848bbe66a6305386e71e6797c323bdf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a5a65458c21a86d4d9ce8dc4b970588cf6a41553a7c02ed022d0c1c84bacdae0
MD5 d69bf72175eb4613655fd3aea5b75a96
BLAKE2b-256 789fb5f30c2a906d23ce59d4f5b1d027542bf839da127dc2a8580dc76822c314

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 497b7e16ca16d0aa88954e3dc1c593b61065d5d7117ac46d49cff4a31860ce14
MD5 82f90dbe7ee7002c344718e825ddc703
BLAKE2b-256 a8bd2156f5e4697c53957fd99cf3313fccd024f6c7b12b64023fb8f1c31d0e04

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 38f9a1033620b98cd0118c8ec7ca1f5c6043787ef84ab8183726d3b73dad10f0
MD5 0694bbffc188553f0806e102c453fcc4
BLAKE2b-256 2b0f02d84f6a3616ad7880162039583da48e845a7a437eecc2a46208c565287b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: cassetter-0.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.6 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.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 87ac31adfc65e5b597e2c8849f959484eabceb7e656590446074e9ec136ad505
MD5 26c28a50356161587155bc69b103a341
BLAKE2b-256 2eeb7328b02bf3bf5a40fda801ce3b145173545ed68fd21051e963c2f35d3363

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e0a1f55facb0135c0d7bede5898279d77f2bf3a8c2520bf291eff64038e416d8
MD5 5b8bab4550bd4dada20faf0fef17b4f7
BLAKE2b-256 2b2365d633961714cfe093988f8989c7d6eb0c6ba131b3cb2af806d1b83ca957

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9f6c47555fbb3a12f19cb8ba5729c27ddbbbfcafa114cb5d64a446f0ae38f4d2
MD5 fb981b725689c2866f856f520afd8436
BLAKE2b-256 97b3ba11f08d139ef3706762b665d548749dee2ef26a7ab9079f4b7a0158e5dd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a3fba087a151b32716db7f8858e974fa70b5d95cefc2172e9f39a40e154e1298
MD5 ff37c9fffeaaefb5a0f317d747187b2c
BLAKE2b-256 09e0a4b8962397208e8b59161c77b7b9ec21399983be48f6d2b34c10bb9a3e56

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a16882677064d34723e4ce38ebd3644603945094760219169bc5f913381a9ed7
MD5 4900c431324c056b286421577b985614
BLAKE2b-256 d897f74a16ff53a63f45eef6927b734968960e7229b78fd85b40fa883e0d34d7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: cassetter-0.3.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.6 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.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3f993133524f4543e7700ed9f8a095ebab6504393e72b50273624adbd8c3f249
MD5 4272abe2803e1611f732a5dd130b7ab9
BLAKE2b-256 04c0eb3a537801fc10be28d408b3ac2cce9bdf342754d8cba7662c00faa4e9bd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c7267f7cd3089a54ac9cd2c398ab08e55044e04776734db15403c921cc389bb6
MD5 c9549b9f025e8bdd1fd40b4e1ab3e48b
BLAKE2b-256 f3a49341f29ec88d3757980e6dfa493a1fc721bc88ff8873311d26d354ac8f0c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8ffa3b6049eae3d604fc9971e619ccc6a4087748b1f5154dffd8827c39e4331b
MD5 d61fbf409c82fed3774f9634ecfb1fc7
BLAKE2b-256 b6a113aab89564362dce84d78be7fbc06ba6d8153b70ab64014a934c9e715cb0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 141299b4c8b87f0ca751abfe4cbb08fc1a57a9efbc8feffc8ab702bce11b520e
MD5 0ea108b16c2ec2c1b5fdb6f1921a9b04
BLAKE2b-256 f189ca3bd4f2eaad8557f52f804893455ce5c605ef00f999604a8553881e5a76

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 659e2fe0ee7a3b89afd4d39a796b0ab5aa2172af335963945d650dc7c54c0871
MD5 d698c380a37369905ea90b9606ae8761
BLAKE2b-256 ec2e785493f61bcb61a5620505808cccdff4067291fb920a04aeee1918245b00

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: cassetter-0.3.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.6 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.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9ae5a0a20639fd6c3f322041f548a7713e9b729527472540806f2a3f8808d7bc
MD5 b41402573eaf307cc5540cd801ff80c0
BLAKE2b-256 b35eaa03fbf18e751f63762e169ec7ddbe21b486df8f6dd2633779ec378ed39a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 552ce308b5059bd33e0fc54d672ad7ba6540778e89e56eb36121d2cfbc4290d9
MD5 755787c341ac7cc0d864969cbd01d967
BLAKE2b-256 59bb6e317c6f7bb162f50022ea1334afc57998e34a80a355a8eabac71d639ac8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 313a712cac1c40384799d580e3a2ba3d96c8762d14e4f62d54db0f9a3116ae1a
MD5 166c1c28c28dc46ecc2d3bdde8a8a63e
BLAKE2b-256 e0974dc5ded13ae75d48baf251aa75af38167c8a85ecb4f49d1d139ff87150b1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 42d34ecfc767253ad6cdfe99ddfb00ec5740bf7d24080bbdacd58ce981629054
MD5 e47ff59ecd4b2aa49ef2213f8a03cde4
BLAKE2b-256 2ee3dd83f9544371b38d8bfd1b912149dcd7e598fe5ba2d44895b78fe153e926

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for cassetter-0.3.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3f602a308dcc328584e2beb851e377c3180cf7fe729ee42db48745259bde526b
MD5 2282fe06fae561a3606b07bcc30adb31
BLAKE2b-256 e6bfc67ead6dd3d33247db576ce080a029d8fae4117b360ed4793f79ca633d72

See more details on using hashes here.

Provenance

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