Source code for tolerance.utils

# coding=utf-8
"""
tolerance utility module
"""
__author__ = 'Alisue <lambdalisue@hashnote.net>'

DEFAULT_ARGUMENT_NAME = 'fail_silently'

[docs]def argument_switch_generator(argument_name = None, default=True, reverse=False, keep=False): """ Create switch function which return the status from specified named argument Parameters ---------- argument_name : string or None An argument name which is used to judge the status. If ``None`` is specified, the value of ``tolerance.utils.DEFAULT_ARGUMENT_NAME`` will be used instead. default : boolean A default value of this switch function. It is used when specifid ``**kwargs`` does not have named argument reverse : boolean Reverse the status (Default: ``False``) keep : boolean If it is ``True``, keep named argument in ``**kwargs``. Returns ------- function A switch function which return status, args, and kwargs respectively. Examples -------- >>> # >>> # generate switch function with default parameters >>> # >>> fn = argument_switch_generator('fail_silently') >>> # return `default` value and specified *args and **kwargs when >>> # `fail_silently` is not specified in **kwargs >>> fn() == (True, tuple(), {}) True >>> # return `fail_silently` value when it is specified >>> fn(fail_silently=True) == (True, tuple(), {}) True >>> fn(fail_silently=False) == (False, tuple(), {}) True >>> # >>> # generate switch function with `default=False` >>> # >>> fn = argument_switch_generator('fail_silently', default=False) >>> # return `default` value so `False` is returned back >>> fn() == (False, tuple(), {}) True >>> # >>> # generate switch function with `reverse=True` >>> # >>> fn = argument_switch_generator('fail_silently', reverse=True) >>> # `default` value is independent from `reverse=True` >>> fn() == (True, tuple(), {}) True >>> # `fail_silently` value is influenced by `reverse=True` >>> fn(fail_silently=True) == (False, tuple(), {}) True >>> fn(fail_silently=False) == (True, tuple(), {}) True >>> # >>> # generate switch function with `keep=True` >>> # >>> fn = argument_switch_generator('fail_silently', keep=True) >>> # `fail_silently` attribute remains even in returned back kwargs >>> status, args, kwargs = fn(fail_silently=True) >>> 'fail_silently' in kwargs True """ if argument_name is None: argument_name = DEFAULT_ARGUMENT_NAME def switch_function(*args, **kwargs): if argument_name in kwargs: if keep: status = kwargs.get(argument_name) else: status = kwargs.pop(argument_name) if reverse: status = not status else: status = default return bool(status), args, kwargs return switch_function
if __name__ == '__main__': import doctest; doctest.testmod()