Mercurial > mamba
changeset 335:b0ac80c7db04
Cache online levels.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 16 Sep 2011 21:33:16 +0200 |
parents | 387b901bb462 |
children | 3ec7acdf3065 |
files | mamba/habitats/userlevelmenu.py |
diffstat | 1 files changed, 29 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mamba/habitats/userlevelmenu.py Fri Sep 16 21:15:59 2011 +0200 +++ b/mamba/habitats/userlevelmenu.py Fri Sep 16 21:33:16 2011 +0200 @@ -9,14 +9,36 @@ class UserLevelMenu(LevelMenu): LEVEL_SERVER_URL = "http://localhost:5000/" + TIMEOUT = 5.0 # in seconds + CACHE = {} + + @classmethod + def _url_data(cls, route): + url = "%s%s" % (cls.LEVEL_SERVER_URL, route) + return urllib2.urlopen(url, timeout=cls.TIMEOUT).read() + + @classmethod + def _populate_cache(cls): + try: + data = cls._url_data("index") + except: + print "Failed to download online level index." + return + levels = [x.strip() for x in data.splitlines()] + + for name in levels: + try: + source = cls._url_data("level/%s" % name) + level = Level(name, source) + except: + print "Failed to download online level %r" % level + continue + cls.CACHE[level] = level def list_levels(self): - url = "%s%s" % (self.LEVEL_SERVER_URL, "index") - data = urllib2.urlopen(url).read() - levels = [x.strip() for x in data.splitlines()] - return levels + if not self.CACHE: + self._populate_cache() + return self.CACHE.keys() def get_level(self, name): - url = "%s%s/%s" % (self.LEVEL_SERVER_URL, "level", name) - source = urllib2.urlopen(url).read() - return Level(name, source) + return self.CACHE[name]