]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - webapp/handlers_iuse.py
handlers base: Load logging module
[people/shoehn/ipfire.org.git] / webapp / handlers_iuse.py
CommitLineData
c37ec602
MT
1#!/usr/bin/python
2
abc3bb31 3import logging
e8478c5e
MT
4import os
5import random
c37ec602
MT
6import tornado.web
7
8from handlers_base import *
9import backend
10
11class IUseImage(BaseHandler):
30bb04e2 12 def write_error(self, status_code, **kwargs):
e8478c5e
MT
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
30bb04e2 27 imgdata = None
e8478c5e 28 with open(image, "rb") as f:
30bb04e2
MT
29 imgdata = f.read()
30
31 self.finish(imgdata)
e8478c5e 32
c37ec602 33 def get(self, profile_id, image_id):
abc3bb31 34 image = None
b3250465
MT
35 # Try to get the image from memcache. If we have a cache miss we
36 # build a new one.
abc3bb31
MT
37 mem_id = "iuse-%s-%s-%s" % (profile_id, image_id, self.locale.code)
38
39 cache = self.get_argument("cache", "true")
40 if cache == "true":
41 image = self.memcached.get(mem_id)
42
43 if image:
44 logging.debug("Got image from cache for profile: %s" % profile_id)
45 else:
46 logging.info("Rendering new image for profile: %s" % profile_id)
c37ec602 47
b3250465
MT
48 image_cls = self.iuse.get_imagetype(image_id)
49 if not image_cls:
50 raise tornado.web.HTTPError(404, "Image class is unknown: %s" % image_id)
c37ec602 51
66862195 52 profile = self.fireinfo.get_profile(profile_id)
b3250465
MT
53 if not profile:
54 raise tornado.web.HTTPError(404, "Profile '%s' was not found." % profile_id)
55
56 # Render the image
9068dba1 57 image = image_cls(self.backend, self, profile).to_string()
c37ec602 58
66862195
MT
59 # Save the image to the memcache for 60 minutes
60 self.memcached.set(mem_id, image, 3600)
c37ec602 61
192f0bdf 62 self.set_header("Content-Type", "image/png")
b3250465 63 self.write(image)
c37ec602 64