# Record Modes

Betamax, like VCR, has four modes that it can use to record cassettes:

- `'all'`

- `'new_episodes'`

- `'none'`

- `'once'`

You can only ever use one record mode. Below are explanations and examples of each record mode. The explanations are blatantly taken from VCR’s own Record Modes documentation.

## All

The `'all'` record mode will:

- Record new interactions.

- Never replay previously recorded interactions.

This can be temporarily used to force VCR to re-record a cassette (i.e., to ensure the responses are not out of date) or can be used when you simply want to log all HTTP requests.

Given our file, `examples/record_modes/all/example.py`,

Every time we run it, our cassette (`examples/record_modes/all/all-example.json`) will be updated with new values.

## New Episodes

The `'new_episodes'` record mode will:

- Record new interactions.

- Replay previously recorded interactions.

It is similar to the `'once'` record mode, but will always record new interactions, even if you have an existing recorded one that is similar (but not identical, based on the :match_request_on option).

Given our file, `examples/record_modes/new_episodes/example_original.py`, with which we have already recorded `examples/record_modes/new_episodes/new-episodes-example.json`

If we then run `examples/record_modes/new_episodes/example_updated.py`

The new request at the end of the file will be added to the cassette without updating the other interactions that were already recorded.

## None

The `'none'` record mode will:

- Replay previously recorded interactions.

- Cause an error to be raised for any new requests.

This is useful when your code makes potentially dangerous HTTP requests. The `'none'` record mode guarantees that no new HTTP requests will be made.

Given our file, `examples/record_modes/none/example_original.py`, with a cassette that already has interactions recorded in `examples/record_modes/none/none-example.json`

If we then run `examples/record_modes/none/example_updated.py`

We’ll see an exception indicating that new interactions were prevented:

## Once

The `'once'` record mode will:

- Replay previously recorded interactions.

- Record new interactions if there is no cassette file.

- Cause an error to be raised for new requests if there is a cassette file.

It is similar to the `'new_episodes'` record mode, but will prevent new, unexpected requests from being made (i.e. because the request URI changed or whatever).

`'once'` is the default record mode, used when you do not set one.

If we have a file, `examples/record_modes/once/example_original.py`,

And we run it, we’ll see a cassette named `examples/record_modes/once/once-example.json` has been created.

If we then run `examples/record_modes/once/example_updated.py`,

We’ll see an exception similar to the one we see when using the `'none'` record mode.