diff --git a/sigal/gallery.py b/sigal/gallery.py index 1c1a9e5..408d56b 100644 --- a/sigal/gallery.py +++ b/sigal/gallery.py @@ -220,7 +220,7 @@ class Album(UnicodeMixin): for _type, count in self.medias_count.items())) def __len__(self): - return sum(self.medias_count.values()) + return len(self.medias) def __iter__(self): return iter(self.medias) @@ -382,9 +382,21 @@ class Gallery(object): albums = self.albums = {} src_path = self.settings['source'] - for path, dirs, files in os.walk(src_path, followlinks=True): + for path, dirs, files in os.walk(src_path, followlinks=True, + topdown=False): relpath = os.path.relpath(path, src_path) - albums[relpath] = Album(relpath, self.settings, dirs, files, self) + + for d in dirs[:]: + path = join(relpath, d) if relpath != '.' else d + if path not in albums.keys(): + dirs.remove(d) + + album = Album(relpath, self.settings, dirs, files, self) + + if not album.medias and not album.albums: + self.logger.info('Skip empty album: %r', album) + else: + albums[relpath] = album self.logger.debug('Albums:\n%r', albums.values()) diff --git a/tests/test_gallery.py b/tests/test_gallery.py index 5037af4..94c49f0 100644 --- a/tests/test_gallery.py +++ b/tests/test_gallery.py @@ -157,3 +157,9 @@ def test_gallery(settings, tmpdir): html = f.read() assert 'Sigal test gallery' in html + + +def test_empty_dirs(settings): + gal = Gallery(settings, ncpu=1) + assert 'empty' not in gal.albums + assert 'dir1/empty' not in gal.albums