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