# Samples

Samples are on a given percentage of the time. They do not require a request object and can be used in other contexts, such as management commands and tasks.

Warning

Sample values are random: if you check a Sample twice, there is no guarantee you will get the same value both times. If you need to rely on the value more than once, you should store it in a variable.

    # YES
    foo_on = sample_is_active('foo')
    if foo_on:
        pass

    # ...later...
    if foo_on:
        pass

    # NO!
    if sample_is_active('foo'):
        pass

    # ...later...
    if sample_is_active('foo'):  # INDEPENDENT of the previous check
        pass

## Sample Attributes

Samples can be administered through the Django admin site or the command line. They have the following attributes:

Name

  The name of the Sample.

Percent

  A number from 0.0 to 100.0 that determines how often the Sample will be active.

Note

  Describe where the Sample is used.

## Auto Create Missing

When a sample is evaluated in code that is missing in the database the sample returns the WAFFLE_SAMPLE_DEFAULT value but does not create a sample in the database. If you’d like waffle to create missing samples in the database whenever it encounters a missing sample you can set WAFFLE_CREATE_MISSING_SAMPLES to `True`. If WAFFLE_SAMPLE_DEFAULT is `True` then the `Percent` attribute of the sample will be created as 100.0 (so that when the sample is checked it always evaluates to `True`). Otherwise the value will be set to 0.0 so that the sample always evaluates to `False`.

## Log Missing

Whether or not you enabled Auto Create Missing Sample, it can be practical to be informed that a sample was or is missing. If you’d like waffle to log a warning, error, … you can set WAFFLE_LOG_MISSING_SAMPLES to any level known by Python default logger.