annotate mamba/habitats/userlevelmenu.py @ 336:3ec7acdf3065

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