terom@1: #!/usr/bin/env python2.4
terom@4:
terom@3: import shelve
terom@1: import cgi
terom@1: import Cookie
terom@1: import os, os.path
terom@1:
terom@1: import degal
terom@1:
terom@1: #
terom@1: # load request params
terom@1: #
terom@1: vars = cgi.FieldStorage()
terom@1:
terom@3: # these are interpeted different ways, hence the generic naming
terom@3: arg1 = vars["keys"].value
terom@1: if 'index' in vars :
terom@3: arg2 = vars["index"].value
terom@1: else :
terom@3: arg2 = None
terom@1:
terom@3: # the cookie with the user's current series
terom@3: cookie = Cookie.SimpleCookie(os.environ.get('HTTP_COOKIE', None))
terom@1:
terom@3: # a special action?
terom@3: if arg1 and arg1 in ('add', 'del', 'clear', 'view') or arg2 == 'load' :
terom@3: # load the keys from the cookie
terom@1: if 'series' in cookie :
terom@1: keys = cookie["series"].value.split()
terom@1: else :
terom@1: keys = []
terom@1:
terom@3: if arg2 == 'load' :
terom@3: # set the keys in the user's cookie to those in the URL
terom@3: keys = arg1.split()
terom@3:
terom@3: elif arg1 == 'add' and arg2 not in keys :
terom@3: # add a code to the list of keys
terom@3: keys.append(arg2)
terom@3:
terom@3: elif arg1 == 'del' and arg2 in keys :
terom@3: # remove a key from the list of keys
terom@3: keys.remove(arg2)
terom@3:
terom@3: elif arg1 == 'clear' :
terom@3: # clear out the set of keys
terom@1: keys = []
terom@3:
terom@3: elif arg1 == 'view' :
terom@3: # just view them
terom@1: pass
terom@3:
terom@3: # set the series cookie value
terom@1: cookie['series'] = ' '.join(keys)
terom@1: cookie['series']['path'] = '/'
terom@3:
terom@3: # if we have keys, redirect to them, otherwise, back to index we go
terom@1: if keys :
terom@1: redirect_to = "../%s/" % ('+'.join(keys))
terom@1: else :
terom@1: redirect_to = "../.."
terom@3:
terom@3: # do the redirect
terom@1: print "Status: 302"
terom@1: print "Location: %s" % redirect_to
terom@1: print cookie
terom@1: print
terom@1: print "Redirect..."
terom@1: else :
terom@3: # we're just viewing
terom@3: keys = arg1.split()
terom@3:
terom@3: # is this "My Series"?
terom@3: my_series = 'series' in cookie and cookie['series'].value.split() == keys
terom@1:
terom@3: if arg2 :
terom@3: index = int(arg2)
terom@3: else :
terom@3: index = None
terom@1:
terom@1: # load DB
terom@3: db = shelve.open('shorturls2', 'r')
terom@1:
terom@1: # get the Image objects
terom@1: photos = []
terom@3:
terom@3: #
terom@3: # Start ugly code-misreuse
terom@3: #
terom@1:
terom@1: # monkey-patch the templates
terom@1: rendered_templates = []
terom@1:
terom@1: def _myRenderTo (self, path, **vars) :
terom@1: rendered_templates.append(self.render(**vars))
terom@1:
terom@3: # lalalalala... ooh, look;
terom@3:
terom@1: degal.Template.renderTo = _myRenderTo
terom@3: #
terom@3: # vvvvvvvvvvvvvvvvvvvv
terom@3: # vvvvvvvvvvvvvvvvvvvv
terom@3: #
terom@3: # >>>> SHINY PINK ELEPHANT! <<<<
terom@3: #
terom@3: # ^^^^^^^^^^^^^^^^^^^^
terom@3: # ^^^^^^^^^^^^^^^^^^^^
terom@1:
terom@1: # our own version of Folder
terom@1: class Series (degal.Folder) :
terom@1: def __init__ (self) :
terom@1: super(Series, self).__init__()
terom@1:
terom@1: self.alive = True
terom@1: self.filtered = False
terom@1: self.subdirs = {}
terom@1: self.images = {}
terom@1: self.sorted_images = []
terom@1: self.title = "Series"
terom@1:
terom@1: if my_series :
terom@4: self.descr = 'Clear your series'
terom@1: else :
terom@4: self.descr = 'Load as your series'
terom@1:
terom@1: self.shorturl_code = ''
terom@1:
terom@1: def breadcrumb (self) :
terom@1: return [('../..', 'Gallery'), ('.', 'Series')]
terom@1:
terom@1: def inRoot (self, *fnames) :
terom@1: return os.path.join('../..', *fnames)
terom@1:
terom@1: class Image (degal.Image) :
terom@1: def __init__ (self, series, key, i) :
terom@3: type, self.dir_name, self.image_name = db[key]
terom@1:
terom@1: super(Image, self).__init__(series, self.image_name)
terom@1:
terom@3: self.path = self._path()
terom@1: self.shorturl_code = key
terom@1: self.html_path = self.html_name = str(i + 1)
terom@1: self.title = 'Image %d' % (i + 1, )
terom@1: self.descr = 'Standalone image: %s' % (self._path(), self._path().lstrip('./'))
terom@1: self.img_size = (-1, -1)
terom@1: self.filesize = 0
terom@1: self.timestamp = 0
terom@1:
terom@1: if my_series :
terom@1: self.series_act = "del"
terom@1: self.series_verb = "Remove from"
terom@1: else :
terom@1: self.series_act = self.series_verb = ""
terom@1:
terom@1: def breadcrumb (self) :
terom@1: return [('../..', 'Gallery'), ('.', 'Series'), (self.html_name, self.title)]
terom@1:
terom@1: def _path (self, blaa='') :
terom@1: return os.path.join('../..', self.dir_name, blaa, self.image_name)
terom@1:
terom@1: def thumbImgTag (self) :
terom@3: return degal.link(self.html_name, "" % (self._path(degal.THUMB_DIR), '', self.title))
terom@1:
terom@1: def previewImgTag (self) :
terom@3: return degal.link(self._path(), "" % (self._path(degal.PREVIEW_DIR), '', self.title))
terom@1:
terom@1: series = Series()
terom@1:
terom@1: try :
terom@1: prev = None
terom@1:
terom@1: for i, key in enumerate(keys) :
terom@1: img = Image(series, key, i)
terom@1:
terom@1: if prev :
terom@1: prev.next = img
terom@1:
terom@1: img.prev = prev
terom@1: prev = img
terom@1:
terom@1: series.sorted_images.append(img)
terom@1: finally :
terom@1: db.close()
terom@1:
terom@1: if index :
terom@1: img = series.sorted_images[index - 1]
terom@1:
terom@1: img.render()
terom@1: else :
terom@1: series.render()
terom@1:
terom@1: print "Content-Type: text/html"
terom@1: print
terom@1: print rendered_templates[0]
terom@1: