Decorator for :class:`Reftrack` methods.
    A decorated method will check if its restriction with :meth:`Reftrack.is_restricted`
    and raises a :class:`RestrictionError` if it is restricted.

    :param m: The :class:`Reftrack` method to wrap
    :type m: :class:`Reftrack` method
    :returns: a wrapped method
    :rtype: method
    :raises: None

def restrictable(m):
    """Decorator for :class:`Reftrack` methods.
    A decorated method will check if its restriction with :meth:`Reftrack.is_restricted`
    and raises a :class:`RestrictionError` if it is restricted.

    :param m: The :class:`Reftrack` method to wrap
    :type m: :class:`Reftrack` method
    :returns: a wrapped method
    :rtype: method
    :raises: None
    """
    @functools.wraps(m)
    def wrapper(*args, **kwds):
        self = args[0]
        if wrapper in self._restricted:
            msg = "Method: %s restricted on %s" % (m.__name__, self)
            raise ReftrackIntegrityError(msg=msg, reftracks=[self])
        return m(*args, **kwds)
    return wrapper