From b5c97b0f613fa7417eae8b76effba7693e321c02 Mon Sep 17 00:00:00 2001 From: "D.S. Ljungmark" Date: Fri, 21 Aug 2015 18:04:24 +0200 Subject: [PATCH] Fix the code to actually work on Python3 .keys() is an iterator ,and .iteritems() is items() --- examples/siglican_gallery.html | 2 +- siglican.py | 56 ++++++++++++++++++---------------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/examples/siglican_gallery.html b/examples/siglican_gallery.html index 6e2c660..39a86f0 100644 --- a/examples/siglican_gallery.html +++ b/examples/siglican_gallery.html @@ -4,7 +4,7 @@ {% block content %}

albums

diff --git a/siglican.py b/siglican.py index bcbc3fb..9084aae 100644 --- a/siglican.py +++ b/siglican.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- # Copyright (c) 2014 - Scott Boone -# +# # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights @@ -11,7 +11,7 @@ # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -37,7 +37,7 @@ from .writer import Writer logger = logging.getLogger(__name__) -# Default config from Sigal's settings module. These have been changed to +# Default config from Sigal's settings module. These have been changed to # upper case because Pelican does not recognize lower case configuration names. # note: if a default is changed, please also update README.md _DEFAULT_SIGLICAN_SETTINGS = { @@ -83,9 +83,9 @@ class SigalGalleryGenerator(Generator): # reference: methods provided by Pelican Generator: # def _update_context(self, items): adds more items to the context dict # def get_template(self, name): returns templates from theme based on theme - # def get_files(self, paths, exclude=[], extensions=None): paths to search, + # def get_files(self, paths, exclude=[], extensions=None): paths to search, # exclude, allowed extensions - + def __init__(self, *args, **kwargs): """Initialize gallery dict and load in custom Sigal settings.""" @@ -94,7 +94,7 @@ class SigalGalleryGenerator(Generator): # this needs to be first to establish pelican settings: super(SigalGalleryGenerator, self).__init__(*args, **kwargs) # add default sigal settings to generator settings: - for k in _DEFAULT_SIGLICAN_SETTINGS.keys()[:]: + for k in list(_DEFAULT_SIGLICAN_SETTINGS.keys()): self.settings[k] = self.settings.get(k, _DEFAULT_SIGLICAN_SETTINGS[k]) #logger.debug("sigal.pelican: setting %s: %s",k,self.settings[k]) self._clean_settings() @@ -103,18 +103,18 @@ class SigalGalleryGenerator(Generator): def _clean_settings(self): """Checks existence of directories and normalizes image size settings.""" - + # create absolute paths to source, theme and destination directories: init_source = self.settings['SIGLICAN_SOURCE'] - self.settings['SIGLICAN_SOURCE'] = os.path.normpath(self.settings['PATH'] + + self.settings['SIGLICAN_SOURCE'] = os.path.normpath(self.settings['PATH'] + "/../" + self.settings['SIGLICAN_SOURCE'] + '/images') self.settings['SIGLICAN_THEME'] = os.path.normpath(self.settings['PATH'] + "/../" + init_source + "/" + self.settings['SIGLICAN_THEME']) self.settings['SIGLICAN_DESTINATION'] = os.path.normpath( self.settings['OUTPUT_PATH'] + "/" + self.settings['SIGLICAN_DESTINATION']) - + enc = locale.getpreferredencoding() if PY2 else None - + # test for existence of source directories pathkeys = ['SIGLICAN_SOURCE', 'SIGLICAN_THEME'] for k in pathkeys: @@ -127,7 +127,7 @@ class SigalGalleryGenerator(Generator): logger.error("siglican: missing source directory %s: %s", k,self.settings[k]) sys.exit(1) - + # normalize sizes as e landscape for key in ('SIGLICAN_IMG_SIZE', 'SIGLICAN_THUMB_SIZE', 'SIGLICAN_VIDEO_SIZE'): w, h = self.settings[key] @@ -135,11 +135,11 @@ class SigalGalleryGenerator(Generator): self.settings[key] = (h, w) logger.warning("siglican: The %s setting should be specified " "with the largest value first.", key) - + if not self.settings['SIGLICAN_IMG_PROCESSOR']: logger.info('No Processor, images will not be resized') - - # based on Sigal's Gallery.__init__() method: + + # based on Sigal's Gallery.__init__() method: def generate_context(self): """"Update the global Pelican context that's shared between generators.""" @@ -167,14 +167,14 @@ class SigalGalleryGenerator(Generator): logger.debug('siglican: Files before filtering: %r', files) files = [os.path.split(f)[1] for f in files_path] logger.debug('siglican: Files after filtering: %r', files) - + # Remove sub-directories that have been ignored in a previous # iteration (as topdown=False, sub-directories are processed before # their parent for d in dirs[:]: path = os.path.join(relpath, d) if relpath != '.' else d if path not in self.albums.keys(): - dirs.remove(d) + dirs.remove(d) album = Album(relpath, self.settings, dirs, files, self) if not album.medias and not album.albums: @@ -189,27 +189,27 @@ class SigalGalleryGenerator(Generator): self.context['ALBUMS'] = self.albums # ** change to SIGLICAN_ALBUMS? # update the jinja context with the default sigal settings: - for k,v in _DEFAULT_SIGLICAN_SETTINGS.iteritems(): + for k,v in _DEFAULT_SIGLICAN_SETTINGS.items(): if not k in self.context: self.context[k] = v def generate_output(self, writer): """ Creates gallery destination directories, thumbnails, resized images, and moves everything into the destination.""" - + # note: ignore the writer sent by Pelican because it's not certain # which Writer it will send. if another active plugin also implements # Writer, Pelican may send that instead of one of its core Writers. # I logged a feature request here: # https://github.com/getpelican/pelican/issues/1459 - + # create destination directory if not os.path.isdir(self.settings['SIGLICAN_DESTINATION']): os.makedirs(self.settings['SIGLICAN_DESTINATION']) - - # github7 ** improve exception catching + + # github7 ** improve exception catching # github8 ** re-integrate multiprocessing logic from Sigal - + # generate thumbnails, process images, and move them to the destination if logger.getEffectiveLevel() > logging.INFO: print('siglican is processing media: ', end='') @@ -239,7 +239,7 @@ class SigalGalleryGenerator(Generator): media.dst_path),self.settings) if logger.getEffectiveLevel() > logging.INFO: print('') - + # generate the index.html files for the albums if self.settings['SIGLICAN_WRITE_HTML']: # defaults to True # locate the theme; check for a custom theme in ./sigal/themes, if not @@ -254,19 +254,21 @@ class SigalGalleryGenerator(Generator): if not os.path.exists(self.theme): raise Exception("siglican: unable to find theme: %s" % os.path.basename(self.theme)) - + logger.info("siglican theme: %s", self.theme) - + self.writer = Writer(self.context, self.theme, 'album') for album in self.albums.values(): self.writer.write(album) - + ## possible cleanup: ## - bring back Writer options that Sigal had? ## - make sure thumbnails don't break in some cases [fixed?] + def get_generators(generators): return SigalGalleryGenerator + def register(): - signals.get_generators.connect(get_generators) \ No newline at end of file + signals.get_generators.connect(get_generators)