# HG changeset patch # User Tero Marttila # Date 1244235554 -10800 # Node ID 2a53c5ade43440b58bc2b52e167f30e6f3cfe22b # Parent e22d9f6990815aaba01c456e2f7263a8b5cb8377 misc. fixes, it runs now, but HTML output is corrupt (no flattening) diff -r e22d9f699081 -r 2a53c5ade434 .hgignore --- a/.hgignore Fri Jun 05 23:42:03 2009 +0300 +++ b/.hgignore Fri Jun 05 23:59:14 2009 +0300 @@ -2,5 +2,6 @@ ^MANIFEST$ ^dist/ +^test/ \.sw[op]$ \.pyc$ diff -r e22d9f699081 -r 2a53c5ade434 degal/config.py --- a/degal/config.py Fri Jun 05 23:42:03 2009 +0300 +++ b/degal/config.py Fri Jun 05 23:59:14 2009 +0300 @@ -66,4 +66,6 @@ # XXX: move elsewhere? def get_renderer (self) : + import render + return render.RenderMachine(self) diff -r e22d9f699081 -r 2a53c5ade434 degal/filesystem.py --- a/degal/filesystem.py Fri Jun 05 23:42:03 2009 +0300 +++ b/degal/filesystem.py Fri Jun 05 23:59:14 2009 +0300 @@ -205,9 +205,11 @@ else : raise - # alias str/unicode - __str__ = path - __unicode__ = unicodepath + def __str__ (self) : + return self.path + + def __unicode__ (self) : + return self.unicodepath def __repr__ (self) : """ @@ -314,7 +316,8 @@ _, fileext = os.path.splitext(self.name) - return fileext.rstrip('.') + # strip leading . + return fileext[1:] def matchext (self, ext_list) : """ @@ -347,14 +350,14 @@ return codecs.open(self.path, mode, encoding, errors, bufsize) else : - return open(self.path, mode, bufsize) + return open(self.path, mode, *(arg for arg in (bufsize, ) if arg is not None)) - def open_write (self, encoding=None, errors=None, bufsize=None) : + def open_write (self, *args, **kwargs) : """ Open for write using open('w'). """ - return self.open('w', encoding, errors, bufsize) + return self.open('w', *args, **kwargs) def copy_from (self, file) : """ @@ -393,7 +396,7 @@ # create it! subdir.mkdir() - return dir + return subdir def test_subdir (self, name, create=False) : """ @@ -429,7 +432,7 @@ Returns a File object representing the name underneath this dir """ - return Directory(self, name=name) + return File(self, name=name) def test (self) : """ diff -r e22d9f699081 -r 2a53c5ade434 degal/folder.py --- a/degal/folder.py Fri Jun 05 23:42:03 2009 +0300 +++ b/degal/folder.py Fri Jun 05 23:59:14 2009 +0300 @@ -67,7 +67,7 @@ continue # create new - img = image.Image(node, prev) + img = image.Image(node) # link up if prev : diff -r e22d9f699081 -r 2a53c5ade434 degal/format.py --- a/degal/format.py Fri Jun 05 23:42:03 2009 +0300 +++ b/degal/format.py Fri Jun 05 23:59:14 2009 +0300 @@ -28,5 +28,5 @@ Returns a human-readable string describing the given file timestamp """ - return datetime.fromtimestamp(ts).strftime("%Y-%m-%d %H:%M:%S") + return datetime.datetime.fromtimestamp(ts).strftime("%Y-%m-%d %H:%M:%S") diff -r e22d9f699081 -r 2a53c5ade434 degal/gallery.py --- a/degal/gallery.py Fri Jun 05 23:42:03 2009 +0300 +++ b/degal/gallery.py Fri Jun 05 23:59:14 2009 +0300 @@ -46,3 +46,10 @@ return stylesheet + @lazy_load + def version (self) : + """ + Return version string + """ + + return "???" diff -r e22d9f699081 -r 2a53c5ade434 degal/html.py --- a/degal/html.py Fri Jun 05 23:42:03 2009 +0300 +++ b/degal/html.py Fri Jun 05 23:59:14 2009 +0300 @@ -27,7 +27,7 @@ [u'\\n', u'\\tyy\\n', u'\\n'] """ - for line in self.render_raw_lines(indent) : + for line in self.render_raw_lines(indent=indent) : yield line + newline def render_unicode (self, **render_opts) : @@ -69,7 +69,7 @@ Render output to given file, overwriteing anything already there """ - self.render_out(self, file.open_write(encoding), **render_opts) + self.render_out(file.open_write(encoding), **render_opts) # default output __str__ = render_str diff -r e22d9f699081 -r 2a53c5ade434 degal/image.py --- a/degal/image.py Fri Jun 05 23:42:03 2009 +0300 +++ b/degal/image.py Fri Jun 05 23:59:14 2009 +0300 @@ -4,7 +4,7 @@ from __future__ import with_statement -import filesystem, render, html +import filesystem, render, html, format from utils import lazy_load import PIL.Image @@ -20,7 +20,7 @@ Initialize as an Image based on the given Node, linked with the given previous node """ - super(Image, self).__init__(node) + super(Image, self).__init__(*args, **kwargs) # links self.prev = None @@ -33,77 +33,65 @@ self.title = self.name self.description = None - # lazy-loading - self.img = None - self.exif = None - self.metadata = None - self.stat_data = None - - def load_stat (self) : + @lazy_load + def stat (self) : """ Load and return the os.stat info for this file """ - if not self.stat_data : - self.stat_data = self.stat() - - return self.stat_data - - def load_image (self) : + return super(Image, self).stat() + + @lazy_load + def image (self) : """ Loads the image as a PIL.Image """ - if not self.img : - # open it up - self.img = PIL.Image.open(self.path) + # open it up + return PIL.Image.open(self.path) - return self.img - - def load_exif (self) : + @lazy_load + def exif (self) : """ Loads the EXIF data for the image and returns as a dict of EXIF tag names -> values. Returns None if no exif data was found """ - if self.exif is None : - # load - with self.open('rb') as fh : - # XXX: details=False? - self.exif = EXIF.process_file(fh) + # load + with self.open('rb') as fh : + # XXX: details=False? + exif = EXIF.process_file(fh) # empty dict -> no exif data - if self.exif : - return self.exif + if exif : + return exif else : return None - - def load_metadata (self) : + + @lazy_load + def metadata (self) : """ Load and return the metadata for the image as a dictionary """ - if not self.metadata : - # load stuff - stat = self.load_stat() - exif = self.load_exif() + # load stuff + stat = self.stat + exif = self.exif - # XXX: avoid having to open the image? - size = self.load_image().size - - # build - self.metadata = dict({ - "File name": self.name, - "Resolution": "%dx%d" % size, - "File size": format.filesize(stat.st_size), - "Last modified": format.filetime(stat.st_mtime), - }, **dict( - (name, exif[tag]) for tag, name in self.config.exif_tags if exif and tag in exif - )) - - return self.metadata + # XXX: avoid having to open the image? + size = self.image.size + + # build + return dict({ + "File name": self.name, + "Resolution": "%dx%d" % size, + "File size": format.filesize(stat.st_size), + "Last modified": format.filetime(stat.st_mtime), + }, **dict( + (name, exif[tag]) for tag, name in self.config.exif_tags if exif and tag in exif + )) @lazy_load def thumb (self) : @@ -117,7 +105,7 @@ # render if needed return render_machine.render_lazy(self, - self.config.thumb_size, self.parent.load_thumb_dir.subnode(self.name) + self.config.thumb_size, self.parent.thumb_dir.subnode(self.name) ) @lazy_load @@ -131,6 +119,6 @@ render_machine = self.config.get_renderer() return render_machine.render_lazy(self, - self.config.preview_size, self.parent.load_preview_dir.subnode(self.name) + self.config.preview_size, self.parent.preview_dir.subnode(self.name) ) diff -r e22d9f699081 -r 2a53c5ade434 degal/render.py --- a/degal/render.py Fri Jun 05 23:42:03 2009 +0300 +++ b/degal/render.py Fri Jun 05 23:59:14 2009 +0300 @@ -26,7 +26,7 @@ """ # load the PIL.Image - img = image.load_image() + img = image.image # we need to create a copy, as .thumbnail mutates the Image img_out = img.copy() @@ -48,10 +48,10 @@ out_stat = out.stat(soft=True) # compare - if not out_stat or out_stat.st_mtime < image.load_stat().st_mtime : + if not out_stat or out_stat.st_mtime < image.stat.st_mtime : # render anew - return self.render_out(image, size, file) + return self.render_out(image, size, out) else : # already rendered - return file + return out diff -r e22d9f699081 -r 2a53c5ade434 degal/templates.py --- a/degal/templates.py Fri Jun 05 23:42:03 2009 +0300 +++ b/degal/templates.py Fri Jun 05 23:59:14 2009 +0300 @@ -14,12 +14,12 @@ return tags.a(href=to_page.path_from(from_page)) -def image_link (from_page, image) : +def image_link (from_page, image, image_html) : """ Link to the given image """ - return link_from(from_page, imgae.html)( + return link_from(from_page, image_html)( tags.img(src=image.path_from(from_page)) ) @@ -36,13 +36,13 @@ # image-links tags.p( # prev thumb - image_link(image.html, image.prev.thumb) if image.prev else None, + image_link(image.html, image.prev.thumb, image.prev.html) if image.prev else None, # preview - image_link(image.html, image.preview), + image_link(image.html, image.preview, image), # next thumb - image_link(image.html, image.next.thumb) if image.next else None + image_link(image.html, image.next.thumb, image.next.html) if image.next else None ), # optional description @@ -122,7 +122,7 @@ # image thumbnails (( - image_link(folder, image) + image_link(folder, image, image.html) ) for image in folder.images), # lower paginate