Source code for djstripe.context_managers

# -*- coding: utf-8 -*-
"""
.. module:: djstripe.context_managers.

   :synopsis: dj-stripe Context Managers

.. moduleauthor:: Bill Huneke (@wahuneke)
.. moduleauthor:: Alex Kavanaugh (@akavanau)
.. moduleauthor:: Lee Skillen (@lskillen)

"""
from __future__ import absolute_import, division, print_function, unicode_literals

from contextlib import contextmanager

from . import settings as djstripe_settings


@contextmanager
def stripe_temporary_api_version(version, validate=True):
    """
    Temporarily replace the global api_version used in stripe API calls with the given value.

    The original value is restored as soon as context exits.
    """
    old_version = djstripe_settings.get_stripe_api_version()

    try:
        djstripe_settings.set_stripe_api_version(version, validate=validate)
        yield
    finally:
        # Validation is bypassed since we're restoring a previous value.
        djstripe_settings.set_stripe_api_version(old_version, validate=False)