Merge pull request #202 from tohojo/meta-sort
Allow sorting on metadata keys.
This commit is contained in:
1
AUTHORS
1
AUTHORS
@@ -32,5 +32,6 @@ alphabetical order):
|
||||
- @trapperhoney
|
||||
- Thomas Misilo
|
||||
- Tobias Preuss
|
||||
- Toke Høiland-Jørgensen (@tohojo)
|
||||
- Vikram Shirgur
|
||||
- Yuce Tekol
|
||||
|
||||
@@ -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.get(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.get(meta_key, [''])[0])
|
||||
else:
|
||||
key = lambda s: strxfrm(getattr(s, medias_sort_attr))
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -90,7 +90,10 @@ def read_markdown(filename):
|
||||
pass
|
||||
else:
|
||||
output['meta'] = meta
|
||||
output['title'] = md.Meta.get('title', [''])[0]
|
||||
try:
|
||||
output['title'] = md.Meta['title'][0]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
return output
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
Title: An example sub-category
|
||||
Thumbnail: 11.jpg
|
||||
Order: 03
|
||||
|
||||
1
tests/sample/pictures/dir1/test2/21.md
Normal file
1
tests/sample/pictures/dir1/test2/21.md
Normal file
@@ -0,0 +1 @@
|
||||
Order: 01
|
||||
1
tests/sample/pictures/dir1/test2/22.md
Normal file
1
tests/sample/pictures/dir1/test2/22.md
Normal file
@@ -0,0 +1 @@
|
||||
Order: 02
|
||||
1
tests/sample/pictures/dir1/test2/index.md
Normal file
1
tests/sample/pictures/dir1/test2/index.md
Normal file
@@ -0,0 +1 @@
|
||||
Order: 01
|
||||
@@ -1 +1,2 @@
|
||||
Title: 01 First title alphabetically
|
||||
Order: 02
|
||||
|
||||
@@ -191,6 +191,18 @@ def test_albums_sort(settings):
|
||||
a.sort_subdirs('title')
|
||||
assert [im.title for im in a.albums] == list(reversed(titles))
|
||||
|
||||
orders = ['01', '02', '03']
|
||||
orders.sort()
|
||||
settings['albums_sort_reverse'] = False
|
||||
a = Album('dir1', settings, album['subdirs'], album['medias'], gal)
|
||||
a.sort_subdirs('meta.order')
|
||||
assert [d.meta['order'][0] for d in a.albums] == orders
|
||||
|
||||
settings['albums_sort_reverse'] = True
|
||||
a = Album('dir1', settings, album['subdirs'], album['medias'], gal)
|
||||
a.sort_subdirs('meta.order')
|
||||
assert [d.meta['order'][0] for d in a.albums] == list(reversed(orders))
|
||||
|
||||
|
||||
def test_medias_sort(settings):
|
||||
gal = Gallery(settings, ncpu=1)
|
||||
@@ -208,6 +220,12 @@ def test_medias_sort(settings):
|
||||
assert [im.filename for im in a.images] == ['22.jpg', '21.jpg',
|
||||
'archlinux-kiss-1024x640.png']
|
||||
|
||||
settings['medias_sort_attr'] = 'meta.order'
|
||||
settings['medias_sort_reverse'] = False
|
||||
a = Album('dir1/test2', settings, album['subdirs'], album['medias'], gal)
|
||||
a.sort_medias(settings['medias_sort_attr'])
|
||||
assert [im.filename for im in a.images] == ['archlinux-kiss-1024x640.png', '21.jpg', '22.jpg']
|
||||
|
||||
|
||||
def test_gallery(settings, tmpdir):
|
||||
"Test the Gallery class."
|
||||
|
||||
@@ -58,7 +58,7 @@ def test_read_markdown_empty_file(tmpdir):
|
||||
src = tmpdir.join("file.txt")
|
||||
src.write("content")
|
||||
m = utils.read_markdown(str(src))
|
||||
assert m['title'] == ''
|
||||
assert 'title' not in m
|
||||
assert m['meta'] == {}
|
||||
assert m['description'] == '<p>content</p>'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user