code: def restrictable(m):
      
      @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
docs: 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