From 8143e2a453bbd48f9d66e5d05a863b6fc3ddedf6 Mon Sep 17 00:00:00 2001 From: Bowen Ding Date: Sat, 11 Apr 2020 19:28:15 +0800 Subject: [PATCH] Use natrual sorting --- setup.cfg | 1 + sigal/gallery.py | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/setup.cfg b/setup.cfg index 67bab00..dcefa38 100644 --- a/setup.cfg +++ b/setup.cfg @@ -35,6 +35,7 @@ install_requires = Markdown Pillow>=4.0.0 pilkit + natsort [options.extras_require] all = boto; brotli; feedgenerator; zopfli diff --git a/sigal/gallery.py b/sigal/gallery.py index 7e8ac12..d495b21 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -38,6 +38,7 @@ from os.path import isfile, join, splitext from urllib.parse import quote as url_quote from click import get_terminal_size, progressbar +from natsort import natsort_keygen, ns from . import image, signals, video from .image import (get_exif_data, get_exif_tags, get_iptc_data, get_size, @@ -377,14 +378,15 @@ class Album: root_path = self.path if self.path != '.' else '' if albums_sort_attr.startswith("meta."): meta_key = albums_sort_attr.split(".", 1)[1] - key = lambda s: locale.strxfrm( - self.gallery.albums[join(root_path, s)].meta.get(meta_key, [''])[0]) + key = natsort_keygen(key=lambda s: + self.gallery.albums[join(root_path, s)].meta.get(meta_key, [''])[0], + alg=ns.LOCALE) else: - key = lambda s: locale.strxfrm( - getattr(self.gallery.albums[join(root_path, s)], - albums_sort_attr)) + key = natsort_keygen(key=lambda s: + getattr(self.gallery.albums[join(root_path, s)], albums_sort_attr), + alg=ns.LOCALE) else: - key = locale.strxfrm + key = natsort_keygen(alg=ns.LOCALE) self.subdirs.sort(key=key, reverse=self.settings['albums_sort_reverse']) @@ -397,9 +399,11 @@ class Album: 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: locale.strxfrm(s.meta.get(meta_key, [''])[0]) + key = natsort_keygen(key=lambda s: s.meta.get(meta_key, [''])[0], + alg=ns.LOCALE) else: - key = lambda s: locale.strxfrm(getattr(s, medias_sort_attr)) + key = natsort_keygen(key=lambda s: getattr(s, medias_sort_attr), + alg=ns.LOCALE) self.medias.sort(key=key, reverse=self.settings['medias_sort_reverse'])