docs: def handle(self, object, *args, **kw):
      '''
      Calls each plugin in this PluginSet with the specified object,
      arguments, and keywords in the standard group plugin order. The
      return value from each successive invoked plugin is passed as the
      first parameter to the next plugin. The final return value is the
      object returned from the last plugin.
  
      If this plugin set is empty (i.e. no plugins exist or matched the
      spec), then a ValueError exception is thrown.
      '''
      if not bool(self):
        if not self.spec or self.spec == SPEC_ALL:
          raise ValueError('No plugins available in group %r' % (self.group,))
        raise ValueError(
          'No plugins in group %r matched %r' % (self.group, self.spec))
      for plugin in self.plugins:
        object = plugin.handle(object, *args, **kw)
      return object