Varsnap Python

Build Status

Python Varsnap Client


Install from PyPI - pip install varsnap


The client depends on three environment variables to be set:

  • VARSNAP - Should be either true or false. Varsnap will be disabled if the variable is anything other than true.
  • ENV - If set to development, the client will receive events from production. If set to production, the client will emit events.
  • VARSNAP_PRODUCER_TOKEN - Only clients with this token may emit production snapshots. Copied from
  • VARSNAP_CONSUMER_TOKEN - Only clients with this token may emit development snapshots. Copied from


Add the varsnap decorator in front of any function you’d like to make better:

from varsnap import varsnap

def example(args, **kwargs):
    return 'output'


With the proper environment variables set, in a test file, add:

import unittest
from varsnap import test

class TestIntegration(unittest.TestCase):
    def test_varsnap(self):
        matches, logs = test()
        if matches is None:
            raise'No Snaps found')
        self.assertTrue(matches, logs)

If you’re testing a Flask application, set up a test request context when testing:

# app = Flask()
with app.test_request_context():
    matches, logs = test()


Decorators changing function names

Using decorators may change the name of functions. In order to not confuse varsnap, set the decorated function’s __qualname__ and __signature__ to match the original function:

import inspect

def decorator(func):
    def decorated(*args, **kwargs):
        func(*args, **kwargs)
    decorated.__qualname__ = func.__qualname__
    wrapper.__signature__ = inspect.signature(func)
    return decorated


pip install build twine
python -m build
twine upload dist/*