'For a given project, get a dictionary mapping available versions to Distribution
instances.
This calls _get_project to do all the work, and just implements a caching layer on top.'

def get_project(self, name):

    if (self._cache is None):
        result = self._get_project(name)
    elif (name in self._cache):
        result = self._cache[name]
    else:
        result = self._get_project(name)
        self._cache[name] = result
    return result
