Mercurial > mamba
annotate mamba/habitats/userlevelmenu.py @ 361:d4062344d8f4
Level namespaces (for telling that a level is complete, no matter where it came from)
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Fri, 16 Sep 2011 23:53:34 +0200 |
parents | c2f7920563e4 |
children | cc8be536a7fc |
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 | |
361
d4062344d8f4
Level namespaces (for telling that a level is complete, no matter where it came from)
Stefano Rivera <stefano@rivera.za.net>
parents:
346
diff
changeset
|
12 level_namespace = 'curated' |
345
04bb1ffcd054
Activated ctpug level server.
Simon Cross <hodgestar@gmail.com>
parents:
340
diff
changeset
|
13 LEVEL_SERVER_URL = LEVEL_SERVER + "curated/" |
335 | 14 TIMEOUT = 5.0 # in seconds |
15 CACHE = {} | |
16 | |
17 @classmethod | |
18 def _url_data(cls, route): | |
19 url = "%s%s" % (cls.LEVEL_SERVER_URL, route) | |
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) | |
361
d4062344d8f4
Level namespaces (for telling that a level is complete, no matter where it came from)
Stefano Rivera <stefano@rivera.za.net>
parents:
346
diff
changeset
|
34 level = Level(name, cls.level_namespace, source) |
335 | 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] |