view mamba/habitats/userlevelmenu.py @ 346:c2f7920563e4

Remove debugging print.
author Simon Cross <hodgestar@gmail.com>
date Fri, 16 Sep 2011 23:03:54 +0200
parents 04bb1ffcd054
children d4062344d8f4
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 UserLevelMenu(LevelMenu):

    LEVEL_SERVER_URL = LEVEL_SERVER + "curated/"
    TIMEOUT = 5.0  # in seconds
    CACHE = {}

    @classmethod
    def _url_data(cls, route):
        url = "%s%s" % (cls.LEVEL_SERVER_URL, route)
        return urllib2.urlopen(url, timeout=cls.TIMEOUT).read()

    @classmethod
    def _populate_cache(cls):
        try:
            data = cls._url_data("index")
        except:
            print "Failed to download online level index."
            return
        levels = [x.strip() for x in data.splitlines()]

        for name in levels:
            try:
                source = cls._url_data("level/%s" % name)
                level = Level(name, source)
            except:
                print "Failed to download online level %r" % name
                continue
            cls.CACHE[level] = level

    def list_levels(self):
        if not self.CACHE:
            self._populate_cache()
        return self.CACHE.keys()

    def get_level(self, name):
        return self.CACHE[name]