changeset 145:f07025da528b

Thumbnails are now dynamically generated by a view function; if things get slow, we'll rely on a front-end cache like squid to speed it up.
author Atul Varma <varmaa@toolness.com>
date Fri, 04 Apr 2008 10:41:50 -0700
parents c718e2f5d0d2
children 612212345759
files personasbackend/personas/models.py personasbackend/personas/views.py
diffstat 2 files changed, 19 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/personasbackend/personas/models.py	Fri Apr 04 07:54:48 2008 -0700
+++ b/personasbackend/personas/models.py	Fri Apr 04 10:41:50 2008 -0700
@@ -66,8 +66,6 @@
 LEGACY_FOOTER_URL = LEGACY_PREFIX + "%(name)s/stbar-%(name)s.jpg"
 LEGACY_HEADER_URL = LEGACY_PREFIX + "%(name)s/tbox-%(name)s.jpg"
 
-NO_THUMBNAIL_IMAGE = "https://addons.mozilla.org/img/addon-icn.png"
-
 THUMBNAIL_DIR = "thumbnails"
 
 def generate_thumbnail( header_file, footer_file ):
@@ -323,7 +321,7 @@
 
         return success
 
-    def create_thumbnail_and_get_url( self ):
+    def create_thumbnail( self ):
         from distutils.dir_util import mkpath
 
         abspath = self.thumbnail_filename
@@ -333,12 +331,9 @@
             mkpath( thumbnail_dir )
         if ( (not os.path.exists( abspath ))
              and (not self.__make_thumbnail( abspath )) ):
-            return NO_THUMBNAIL_IMAGE
+            return False
         else:
-            return make_absolute_url(
-                "%s%s/%s" % (settings.MEDIA_URL, THUMBNAIL_DIR,
-                             os.path.basename(abspath))
-                )
+            return True
 
     def __clear_thumbnail( self ):
         if os.path.exists( self.thumbnail_filename ):
--- a/personasbackend/personas/views.py	Fri Apr 04 07:54:48 2008 -0700
+++ b/personasbackend/personas/views.py	Fri Apr 04 10:41:50 2008 -0700
@@ -1,3 +1,6 @@
+import os
+import mimetypes
+
 from django.http import HttpResponseRedirect, HttpResponseForbidden
 from django.http import Http404
 from django.http import HttpResponse, HttpResponseBadRequest
@@ -9,6 +12,8 @@
 from personasbackend.personas import models
 from personasbackend.personas import forms
 
+NO_THUMBNAIL_IMAGE = "https://addons.mozilla.org/img/addon-icn.png"
+
 def _render_static_persona( img_src, action ):
     if action == "footer":
         position = "bottom left"
@@ -57,7 +62,17 @@
 def thumbnail( request, persona_id ):
     persona = get_object_or_404( models.Persona, id=persona_id )
 
-    return HttpResponseRedirect( persona.create_thumbnail_and_get_url() )
+    if not persona.create_thumbnail():
+        return HttpResponseRedirect( NO_THUMBNAIL_IMAGE )
+
+    filename = persona.thumbnail_filename
+
+    mimetype = mimetypes.types_map[ os.path.splitext( filename )[1] ]
+
+    image_data = open( filename, "rb" ).read()
+
+    return HttpResponse( image_data,
+                         mimetype = mimetype )
 
 def list_view( request ):
     personas = models.Persona.objects.filter( status="published" )