#!/usr/bin/python import cgi, Image, config, os, sys, re, urllib, urlparse from cStringIO import StringIO form = cgi.FieldStorage() def transform(s): return re.sub(r'[^A-Za-z0-9.]','-',s).lower() if form.has_key("url"): url = form["url"].value else: url = '' CACHEROOT = os.path.normpath(os.path.join(config.py['datadir'],'../../thumbnailcache','favatars')) def loadResizeImage(url): try: fp = urllib.urlopen(url) data = fp.read() rct = fp.headers['content-type'] fp.close() im = StringIO() im.write(data) im.seek(0) i = Image.open(im) except: i = Image.open(os.path.join(CACHEROOT,'blank')) ct = 'image/png' i=i.resize((40,40)) thumb = StringIO() i.save(thumb,'PNG') return thumb,ct def saveToCache(sio,cp): cdir = os.path.split(cp)[0] umask = os.umask(0) try: os.makedirs(cdir) except: pass # ignore it if it already exists os.umask(umask) fp = open(cp,'wb') fp.write(sio.getvalue()) fp.close() def streamData(sio,ct): print "Content-type:%s\n" % ct sio.seek(0) print sio.getvalue() def streamFromCache(cp): fp = open(cp) print "Content-type: image/png\n" print fp.read() fp.close() faviconurl = urlparse.urljoin(url,'/favicon.ico') if faviconurl == '/favicon.ico': cachepath = os.path.join(CACHEROOT,'blank') else: cachepath = os.path.join(CACHEROOT,transform(faviconurl)) if os.path.isfile(cachepath): streamFromCache(cachepath) else: outStringIO, contenttype = loadResizeImage(faviconurl) saveToCache(outStringIO,cachepath) streamData(outStringIO,contenttype)