def recursive_repr(fillvalue='...'):

    def decorating_function(user_function):
        repr_running = set()

        def wrapper(self):
            key = id(self), get_ident()
            if key in repr_running:
                return fillvalue
            repr_running.add(key)
            try:
                result = user_function(self)
            finally:
                repr_running.discard(key)
            return result

        # Can't use functools.wraps() here because of bootstrap issues
        wrapper.__module__ = getattr(user_function, '__module__')
        wrapper.__doc__ = getattr(user_function, '__doc__')
        wrapper.__name__ = getattr(user_function, '__name__')
        wrapper.__annotations__ = getattr(user_function, '__annotations__', {})
        return wrapper

    return decorating_function
Verifies this filter set can process the result data.
dataset/ETHPy150Open amrdraz/kodr/app/brython/www/src/Lib/reprlib.py/recursive_repr--crossover with--dataset/ETHPy150Open google/grr/grr/lib/checks/filters.py/BaseHandler.Validate