misc. fixes, it runs now, but HTML output is corrupt (no flattening)
--- 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$
--- 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)
--- 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) :
"""
--- 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 :
--- 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")
--- 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 "???"
--- 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'<xx>\\n', u'\\tyy\\n', u'</xx>\\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
--- 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)
)
--- 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
--- 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