Resolve a symbol using the entrypoint group.

        :param symbol: The symbol being resolved.

        :returns: The value of that symbol.  If the symbol cannot be
                  found, or if no entrypoint group was passed to the
                  constructor, will return ``None``.

def resolve(self, symbol):
        """
        Resolve a symbol using the entrypoint group.

        :param symbol: The symbol being resolved.

        :returns: The value of that symbol.  If the symbol cannot be
                  found, or if no entrypoint group was passed to the
                  constructor, will return ``None``.
        """

        # Search for a corresponding symbol
        if symbol not in self._resolve_cache:
            result = None

            # Search through entrypoints only if we have a group
            if self._group is not None:
                for ep in pkg_resources.iter_entry_points(self._group, symbol):
                    try:
                        result = ep.load()
                    except (ImportError, AttributeError,
                            pkg_resources.UnknownExtra):
                        continue

                    # We found the result we were looking for
                    break

            # Cache the result
            self._resolve_cache[symbol] = result

        return self._resolve_cache[symbol]