From 0b577af48e8337f27fb0d43ee4595a6ef4a66a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= Date: Wed, 27 Apr 2016 10:17:30 +0200 Subject: [PATCH] Allow sorting on metadata keys. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes it possible to specify metadata keys for the albums_sort_attr and medias_sort_attr configuration options. This is done by prefixing the key with 'meta.', so e.g. albums_sort_attr = 'meta.order' will sort albums on the 'order' metadata key (collected from the .md files in each directory). Signed-off-by: Toke Høiland-Jørgensen --- sigal/gallery.py | 10 +++++++++- sigal/templates/sigal.conf.py | 6 ++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/sigal/gallery.py b/sigal/gallery.py index 90b22c8..5561548 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -314,7 +314,12 @@ class Album(UnicodeMixin): if self.subdirs: if albums_sort_attr: root_path = self.path if self.path != '.' else '' - key = lambda s: strxfrm(getattr( + if albums_sort_attr.startswith("meta."): + meta_key = albums_sort_attr.split(".", 1)[1] + key = lambda s: strxfrm( + self.gallery.albums[join(root_path, s)].meta[meta_key][0]) + else: + key = lambda s: strxfrm(getattr( self.gallery.albums[join(root_path, s)], albums_sort_attr)) else: key = strxfrm @@ -328,6 +333,9 @@ class Album(UnicodeMixin): if self.medias: if medias_sort_attr == 'date': key = lambda s: s.date or datetime.now() + elif medias_sort_attr.startswith('meta.'): + meta_key = medias_sort_attr.split(".", 1)[1] + key = lambda s: strxfrm(s.meta[meta_key]) else: key = lambda s: strxfrm(getattr(s, medias_sort_attr)) diff --git a/sigal/templates/sigal.conf.py b/sigal/templates/sigal.conf.py index 8dca8be..a733ecc 100644 --- a/sigal/templates/sigal.conf.py +++ b/sigal/templates/sigal.conf.py @@ -101,14 +101,16 @@ thumb_size = (280, 210) # Use symbolic links instead of copying the original images # orig_link = False -# Attribute of Album objects which is used to sort medias (eg 'title'). +# Attribute of Album objects which is used to sort medias (eg 'title'). To sort +# on a metadata key, use 'meta.key'. # albums_sort_attr = 'name' # Reverse sort for albums # albums_sort_reverse = False # Attribute of Media objects which is used to sort medias. 'date' can be used -# to sort with EXIF dates. +# to sort with EXIF dates, and 'meta.key' to sort on a metadata key (which then +# must exist for all images). # medias_sort_attr = 'filename' # Reverse sort for medias