Mercurial > mamba
annotate mamba/habitats/userlevelmenu.py @ 340:5456db312f7f
Curated and uncurated levels.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 16 Sep 2011 22:20:48 +0200 |
parents | 3ec7acdf3065 |
children | 04bb1ffcd054 |
rev | line source |
---|---|
334 | 1 """Level menu.""" |
2 | |
3 from mamba.habitats.levelmenu import LevelMenu | |
4 from mamba.level import Level | |
5 | |
6 import urllib2 | |
7 | |
8 | |
9 class UserLevelMenu(LevelMenu): | |
10 | |
340
5456db312f7f
Curated and uncurated levels.
Simon Cross <hodgestar@gmail.com>
parents:
336
diff
changeset
|
11 LEVEL_SERVER_URL = "http://localhost:5000/curated/" |
335 | 12 TIMEOUT = 5.0 # in seconds |
13 CACHE = {} | |
14 | |
15 @classmethod | |
16 def _url_data(cls, route): | |
17 url = "%s%s" % (cls.LEVEL_SERVER_URL, route) | |
18 return urllib2.urlopen(url, timeout=cls.TIMEOUT).read() | |
19 | |
20 @classmethod | |
21 def _populate_cache(cls): | |
22 try: | |
23 data = cls._url_data("index") | |
24 except: | |
25 print "Failed to download online level index." | |
26 return | |
27 levels = [x.strip() for x in data.splitlines()] | |
28 | |
29 for name in levels: | |
30 try: | |
31 source = cls._url_data("level/%s" % name) | |
32 level = Level(name, source) | |
33 except: | |
336
3ec7acdf3065
Fix bug in error printing.
Simon Cross <hodgestar@gmail.com>
parents:
335
diff
changeset
|
34 print "Failed to download online level %r" % name |
335 | 35 continue |
36 cls.CACHE[level] = level | |
334 | 37 |
38 def list_levels(self): | |
335 | 39 if not self.CACHE: |
40 self._populate_cache() | |
41 return self.CACHE.keys() | |
334 | 42 |
43 def get_level(self, name): | |
335 | 44 return self.CACHE[name] |