collects the plugins from the `entry_points`. If `entry_points` is not
        explicitly defined, this method will pull from the internal state
        defined using the add/set entry points methods.

        `entry_points` can be a single object or an iterable, but must be
        either a string or an iterable of strings.

        returns a list of plugins or an empty list.

def collect_plugins(self,
                        entry_points=None,
                        verify_requirements=False,
                        return_dict=False):

        """
        collects the plugins from the `entry_points`. If `entry_points` is not
        explicitly defined, this method will pull from the internal state
        defined using the add/set entry points methods.

        `entry_points` can be a single object or an iterable, but must be
        either a string or an iterable of strings.

        returns a list of plugins or an empty list.
        """

        if entry_points is None:
            entry_points = self.entry_point_names
        else:
            entry_points = util.return_set(entry_points)

        plugins = []
        plugin_names = []
        for name in entry_points:
            for entry_point in pkg_resources.iter_entry_points(name):
                if (hasattr(entry_point, 'resolve') and
                        hasattr(entry_point, 'require')):

                    if verify_requirements:
                        entry_point.require()

                    plugin = entry_point.resolve()
                else:
                    plugin = entry_point.load()

                plugins.append(plugin)
                plugin_names.append(entry_point.name)

        if return_dict:
            return {n: v for n, v in zip(plugin_names, plugins)}

        return plugins, plugin_names