]> git.ipfire.org Git - ipfire.org.git/blob - webapp/handlers_iuse.py
Major update of the webapp.
[ipfire.org.git] / webapp / handlers_iuse.py
1 #!/usr/bin/python
2
3 import logging
4 import os
5 import random
6 import tornado.web
7
8 from handlers_base import *
9 import backend
10
11 class IUseImage(BaseHandler):
12 def get_error_html(self, status_code, **kwargs):
13 """
14 Select a random image from the errors directory
15 and return the content.
16 """
17 self.set_header("Content-Type", "image/png")
18
19 template_path = self.application.settings.get("template_path", "")
20 template_path = os.path.join(template_path, "i-use", "errors")
21
22 images = os.listdir(template_path)
23 if images:
24 image = random.choice(images)
25 image = os.path.join(template_path, image)
26
27 with open(image, "rb") as f:
28 return f.read()
29
30 def get(self, profile_id, image_id):
31 image = None
32 # Try to get the image from memcache. If we have a cache miss we
33 # build a new one.
34 mem_id = "iuse-%s-%s-%s" % (profile_id, image_id, self.locale.code)
35
36 cache = self.get_argument("cache", "true")
37 if cache == "true":
38 image = self.memcached.get(mem_id)
39
40 if image:
41 logging.debug("Got image from cache for profile: %s" % profile_id)
42 else:
43 logging.info("Rendering new image for profile: %s" % profile_id)
44
45 image_cls = self.iuse.get_imagetype(image_id)
46 if not image_cls:
47 raise tornado.web.HTTPError(404, "Image class is unknown: %s" % image_id)
48
49 profile = self.stasy.get_profile(profile_id)
50 if not profile:
51 raise tornado.web.HTTPError(404, "Profile '%s' was not found." % profile_id)
52
53 # Render the image
54 image = image_cls(self.backend, self, profile).to_string()
55
56 # Save the image to the memcache for 15 minutes
57 self.memcached.set(mem_id, image, 15*60)
58
59 self.set_header("Content-Type", "image/png")
60 self.write(image)
61