diff -r 5dbdcb79024b -r 740133ab6353 series.cgi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/series.cgi Thu Nov 08 17:06:03 2007 +0000
@@ -0,0 +1,182 @@
+#!/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 = 'Clear your series'
+ else :
+ self.descr = 'Load as your series'
+
+ 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 = 'Standalone image: %s' % (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, "" % (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), "" % (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]
+