#!/usr/bin/env python2.4
import dbm
import cgi
import Cookie
import os, os.path
#import pprint
import degal
#
# load request params
#
vars = cgi.FieldStorage()
# keys = what photos are in the series
keys = vars["keys"].value.split()
# index = what photo to show, or the index
if 'index' in vars :
index = vars["index"].value
else :
index = None
if keys and keys[0] in ('add', 'del', 'clear', 'view') or index == 'load' :
cookie = Cookie.SimpleCookie(os.environ.get('HTTP_COOKIE', None))
act = keys[0]
_keys = keys
if 'series' in cookie :
keys = cookie["series"].value.split()
else :
keys = []
if index == 'load' :
keys = _keys
elif act == 'add' and index not in keys :
keys.append(index)
elif act == 'del' :
keys.remove(index)
elif act == 'clear' :
keys = []
elif act == 'view' :
pass
cookie['series'] = ' '.join(keys)
cookie['series']['path'] = '/'
if keys :
redirect_to = "../%s/" % ('+'.join(keys))
else :
redirect_to = "../.."
print "Status: 302"
print "Location: %s" % redirect_to
print cookie
print
print "Redirect..."
else :
cookie = Cookie.SimpleCookie(os.environ.get('HTTP_COOKIE', None))
my_series = 'series' in cookie and cookie['series'].value.split() == keys
if index :
index = int(index)
#
# load DB
#
db = dbm.open('shorturls', 'r')
#
# get the Image objects
#
photos = []
INDEX_URL = "/series/%s/"
IMAGE_URL = "/series/%s/%d"
# monkey-patch the templates
rendered_templates = []
def _myRenderTo (self, path, **vars) :
rendered_templates.append(self.render(**vars))
degal.Template.renderTo = _myRenderTo
# our own version of Folder
class Series (degal.Folder) :
def __init__ (self) :
super(Series, self).__init__()
self.alive = True
self.filtered = False
self.subdirs = {}
self.images = {}
self.sorted_images = []
self.title = "Series"
if my_series :
self.descr = '<a href="../clear/">Clear your series</a>'
else :
self.descr = '<a href="load">Load as your series</a>'
self.shorturl_code = ''
def breadcrumb (self) :
return [('../..', 'Gallery'), ('.', 'Series')]
def inRoot (self, *fnames) :
return os.path.join('../..', *fnames)
# def pathFor (self, *fnames) :
# return os.path.join(fnames)
class Image (degal.Image) :
def __init__ (self, series, key, i) :
path = db[key]
path = path.rstrip(".html")
self.dir_name, self.image_name = os.path.split(path)
super(Image, self).__init__(series, self.image_name)
self.path = path
self.shorturl_code = key
self.html_path = self.html_name = str(i + 1)
self.title = 'Image %d' % (i + 1, )
self.descr = '<span style="font-size: x-small">Standalone image: <a href="%s.html">%s</a></span>' % (self._path(), self._path().lstrip('./'))
self.img_size = (-1, -1)
self.filesize = 0
self.timestamp = 0
if my_series :
self.series_act = "del"
self.series_verb = "Remove from"
else :
self.series_act = self.series_verb = ""
def breadcrumb (self) :
return [('../..', 'Gallery'), ('.', 'Series'), (self.html_name, self.title)]
def _path (self, blaa='') :
return os.path.join('../..', self.dir_name, blaa, self.image_name)
def thumbImgTag (self) :
return degal.link(self.html_name, "<img src='%s' alt='%s' title='%s'>" % (os.path.join('../..', self.dir_name, degal.THUMB_DIR, self.image_name), '', self.title))
def previewImgTag (self) :
return degal.link(os.path.join('../..', self.dir_name, self.image_name), "<img src='%s' alt='%s' title='%s'>" % (os.path.join('../..', self.dir_name, degal.PREVIEW_DIR, self.image_name), '', self.title))
series = Series()
try :
prev = None
for i, key in enumerate(keys) :
img = Image(series, key, i)
if prev :
prev.next = img
img.prev = prev
prev = img
# series.images[str(i + 1)] = img
series.sorted_images.append(img)
finally :
db.close()
if index :
img = series.sorted_images[index - 1]
img.render()
else :
series.render()
print "Content-Type: text/html"
print
print rendered_templates[0]