code: def get_project(self, name):
          
          if self._cache is None:  # pragma: no cover
              result = self._get_project(name)
          elif name in self._cache:
              result = self._cache[name]
          else:
              self.clear_errors()
              result = self._get_project(name)
              self._cache[name] = result
          return result
docs: 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.