Mercurial > personas_backend
changeset 140:e48318d2ff8a
Thumbnails now look better, although the internal architecture used to generate them on-the-fly is a bit questionable.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Thu, 03 Apr 2008 23:51:30 -0700 |
parents | be98236e2b34 |
children | eb0a2b924b89 |
files | .hgignore personasbackend/personas/models.py personasbackend/personas/templates/personas/list.html personasbackend/personas/urls.py personasbackend/personas/views.py |
diffstat | 5 files changed, 74 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Thu Apr 03 22:25:58 2008 -0700 +++ b/.hgignore Thu Apr 03 23:51:30 2008 -0700 @@ -5,3 +5,4 @@ *~ media/hosted-content/footers/* media/hosted-content/headers/* +media/thumbnails/*
--- a/personasbackend/personas/models.py Thu Apr 03 22:25:58 2008 -0700 +++ b/personasbackend/personas/models.py Thu Apr 03 23:51:30 2008 -0700 @@ -49,6 +49,7 @@ published and accessible by clients. """ +import os import datetime from django.db import models @@ -66,6 +67,8 @@ NO_THUMBNAIL_IMAGE = "https://addons.mozilla.org/img/addon-icn.png" +THUMBNAIL_DIR = "thumbnails" + def generate_thumbnail( header_file, footer_file ): """ Given a header and footer file--which can be either file-like @@ -291,19 +294,67 @@ resolved_url = property(__get_resolved_url) - def __get_thumbnail_url( self ): - if not self.url: - return self.get_absolute_header_img_url() + def __make_thumbnail( self, thumbnail_path ): + import urllib2 + from cStringIO import StringIO + + print "make thumbnail" + success = True + if self.header_img and self.footer_img: + header_file = self.get_header_img_filename() + footer_file = self.get_footer_img_filename() + else: + viewinfo = parse_personas_view_url( self.url ) + if not viewinfo: + success = False + elif viewinfo['view'] == 'legacy-cbeard-persona': + header_url = LEGACY_HEADER_URL % viewinfo['kwargs'] + footer_url = LEGACY_FOOTER_URL % viewinfo['kwargs'] + print "getting header" + header_contents = urllib2.urlopen( header_url ).read() + header_file = StringIO( header_contents ) + print "getting footer" + footer_contents = urllib2.urlopen( footer_url ).read() + footer_file = StringIO( footer_contents ) + else: + success = False + + if success: + print "generating thumbnail" + img = generate_thumbnail( header_file, footer_file ) + print "Saving %s" % thumbnail_path + img.save( thumbnail_path, quality=95 ) - viewinfo = parse_personas_view_url( self.url ) - image = NO_THUMBNAIL_IMAGE - if not viewinfo: - # TODO: Fix this. - pass - elif viewinfo['view'] == 'legacy-cbeard-persona': - image = LEGACY_HEADER_URL % viewinfo['kwargs'] + return success + + def create_thumbnail_and_get_url( self ): + from distutils.dir_util import mkpath + + from django.conf import settings - return image + print "get" + thumbnail_dir = os.path.join( settings.MEDIA_ROOT, + THUMBNAIL_DIR ) + if not os.path.exists( thumbnail_dir ): + mkpath( thumbnail_dir ) + thumbnail_filename = "%d.jpg" % self.id + thumbnail_path = os.path.join( thumbnail_dir, + thumbnail_filename ) + print thumbnail_path + if ( (not os.path.exists( thumbnail_path )) + and (not self.__make_thumbnail( thumbnail_path )) ): + return NO_THUMBNAIL_IMAGE + else: + return make_absolute_url( + "%s%s/%s" % (settings.MEDIA_URL, THUMBNAIL_DIR, + thumbnail_filename) + ) + + def __get_thumbnail_url( self ): + return reverse( + 'persona-thumbnail', + kwargs = {'persona_id' : str(self.id)} + ) thumbnail_url = property( __get_thumbnail_url )
--- a/personasbackend/personas/templates/personas/list.html Thu Apr 03 22:25:58 2008 -0700 +++ b/personasbackend/personas/templates/personas/list.html Thu Apr 03 23:51:30 2008 -0700 @@ -41,7 +41,7 @@ <img persona="{{ persona.json_id }}" category="{{ persona.category.json_id }}" src="{{ persona.thumbnail_url }}" class="preview-image" - width="300" height="20" alt="" /> + alt="" /> </div> <div class="persona-title"> <h2 class="persona-name">{{ persona.name }}</h2>
--- a/personasbackend/personas/urls.py Thu Apr 03 22:25:58 2008 -0700 +++ b/personasbackend/personas/urls.py Thu Apr 03 23:51:30 2008 -0700 @@ -20,6 +20,11 @@ 'personasbackend.personas.views.hosted_static_persona', name='hosted-static-persona'), + # Thumbnail images + url(r'^(?P<persona_id>\d+)/thumbnail/$', + 'personasbackend.personas.views.thumbnail', + name='persona-thumbnail'), + # Auth url(r'^login/$', 'django.contrib.auth.views.login', {'template_name':'personas/login.html'},
--- a/personasbackend/personas/views.py Thu Apr 03 22:25:58 2008 -0700 +++ b/personasbackend/personas/views.py Thu Apr 03 23:51:30 2008 -0700 @@ -54,6 +54,11 @@ return _render_static_persona( img_src, action ) +def thumbnail( request, persona_id ): + persona = get_object_or_404( models.Persona, id=persona_id ) + + return HttpResponseRedirect( persona.create_thumbnail_and_get_url() ) + def list_view( request ): personas = models.Persona.objects.filter( status="published" ) return render_to_response(