Mercurial > mamba
view mamba/habitats/userlevelmenu.py @ 362:cc8be536a7fc
Add ability to play uncurated levels via the command line.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 17 Sep 2011 00:03:46 +0200 |
parents | d4062344d8f4 |
children | d759f49c477d |
line wrap: on
line source
"""Level menu.""" from mamba.habitats.levelmenu import LevelMenu from mamba.level import Level from mamba.constants import LEVEL_SERVER import urllib2 class UserLevelApi(object): def __init__(self, ctype, url=LEVEL_SERVER, timeout=5): assert ctype in ("curated", "uncurated") assert url.endswith("/") self.ctype = ctype self.level_namespace = ctype self.url = url self.timeout = timeout self.cache = {} def _url_data(self, route): url = "%s%s/%s" % (self.url, self.ctype, route) return urllib2.urlopen(url, timeout=self.timeout).read() def _populate_level(self, name): try: source = self._url_data("level/%s" % name) level = Level(name, self.level_namespace, source) except: print "Failed to download online level %r" % name return self.cache[name] = level def _populate_cache(self): try: data = self._url_data("index") except: print "Failed to download online level index." return levels = [x.strip() for x in data.splitlines()] for name in levels: self._populate_level(name) def list_levels(self): if not self.cache: self._populate_cache() return self.cache.keys() def get_level(self, name): if name not in self.cache: self._populate_level(name) return self.cache[name] class UserLevelMenu(LevelMenu): API = UserLevelApi("curated") def list_levels(self): return self.API.list_levels() def get_level(self, name): return self.API.get_level(name)