# HG changeset patch # User Simon Cross # Date 1316201596 -7200 # Node ID b0ac80c7db047baf83caec1ad3393f49637e0e90 # Parent 387b901bb462289b4d11042b724041bdc631e61b Cache online levels. diff -r 387b901bb462 -r b0ac80c7db04 mamba/habitats/userlevelmenu.py --- 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]