def get_project(self, name):
if self._cache is None:<EOL><INDENT>result = self._get_project(name)<EOL><DEDENT>elif name in self._cache:<EOL><INDENT>result = self._cache[name]<EOL><DEDENT>else:<EOL><INDENT>result = self._get_project(name)<EOL>self._cache[name] = result<EOL><DEDENT>return result<EOL>
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.