def recursive(func):
    @functools.wraps(func)
    def recursive_func(obj, *args, **kwargs):
        if isinstance(obj, collections.Mapping):
            return dict((k, recursive_func(v, *args, **kwargs))
                        for (k, v) in obj.iteritems())
        if isinstance(obj, (tuple, list)):
            iter_cls = tuple if isinstance(obj, tuple) else list
            return iter_cls([recursive_func(item, *args, **kwargs)
                             for item in obj])
        return func(obj)

    return recursive_func
L{checkers.UNIXAuthorizedKeysFiles.getAuthorizedKeys} returns only
dataset/ETHPy150Open Xion/pyqcy/pyqcy/utils.py/recursive--crossover with--dataset/ETHPy150Open twisted/twisted/twisted/conch/test/test_checkers.py/UNIXAuthorizedKeysFilesTests.test_ignoresNonexistantFile