Hello community, here is the log from the commit of package python-pelican for openSUSE:Factory checked in at 2018-12-03 10:10:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pelican (Old) and /work/SRC/openSUSE:Factory/.python-pelican.new.19453 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pelican" Mon Dec 3 10:10:55 2018 rev:3 rq:653204 version:4.0.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pelican/python-pelican.changes 2018-11-15 12:41:44.026162313 +0100 +++ /work/SRC/openSUSE:Factory/.python-pelican.new.19453/python-pelican.changes 2018-12-03 10:11:23.475653483 +0100 @@ -1,0 +2,9 @@ +Fri Nov 30 21:04:35 UTC 2018 - BenoƮt Monin <[email protected]> + +- update to version 4.0.1: + * Refactor pelican.server logging + * Fix bug in which all static files were processed as "draft" + * Bug fixes for Invoke/Makefile automation, Importer, and other + miscellanea + +------------------------------------------------------------------- Old: ---- pelican-4.0.0.tar.gz New: ---- pelican-4.0.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pelican.spec ++++++ --- /var/tmp/diff_new_pack.jD52GR/_old 2018-12-03 10:11:29.655647763 +0100 +++ /var/tmp/diff_new_pack.jD52GR/_new 2018-12-03 10:11:29.659647760 +0100 @@ -18,7 +18,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-pelican -Version: 4.0.0 +Version: 4.0.1 Release: 0 Summary: A tool to generate a static blog from reStructuredText or Markdown input files License: AGPL-3.0-only ++++++ pelican-4.0.0.tar.gz -> pelican-4.0.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/PKG-INFO new/pelican-4.0.1/PKG-INFO --- old/pelican-4.0.0/PKG-INFO 2018-11-13 14:31:41.000000000 +0100 +++ new/pelican-4.0.1/PKG-INFO 2018-11-30 17:15:49.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: pelican -Version: 4.0.0 +Version: 4.0.1 Summary: Static site generator supporting reStructuredText and Markdown source content. Home-page: https://getpelican.com/ Author: Alexis Metaireau @@ -75,6 +75,21 @@ Release history ############### + 4.0.1 (2018-11-30) + ================== + + * Refactor ``pelican.server`` logging + * Fix bug in which all static files were processed as "draft" + * Bug fixes for Invoke/Makefile automation, Importer, and other miscellanea + + If upgrading from 3.7.x or earlier, please note that slug-related settings in + 4.0+ use ``{slug}`` and/or ``{lang}`` rather than ``%s``. If ``%s``-style + settings are encountered, Pelican will emit a warning and fall back to the + default setting. Some user-submitted themes might try to format setting values + but fail upon site build with a ``TypeError``. In such cases, the theme needs + to be updated. For example, instead of ``TAG_FEED_ATOM|format(tag.slug)``, use + ``TAG_FEED_ATOM|format(slug=tag.slug)`` + 4.0.0 (2018-11-13) ================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/docs/changelog.rst new/pelican-4.0.1/docs/changelog.rst --- old/pelican-4.0.0/docs/changelog.rst 2018-11-13 14:17:45.000000000 +0100 +++ new/pelican-4.0.1/docs/changelog.rst 2018-11-29 17:26:57.000000000 +0100 @@ -1,6 +1,21 @@ Release history ############### +4.0.1 (2018-11-30) +================== + +* Refactor ``pelican.server`` logging +* Fix bug in which all static files were processed as "draft" +* Bug fixes for Invoke/Makefile automation, Importer, and other miscellanea + +If upgrading from 3.7.x or earlier, please note that slug-related settings in +4.0+ use ``{slug}`` and/or ``{lang}`` rather than ``%s``. If ``%s``-style +settings are encountered, Pelican will emit a warning and fall back to the +default setting. Some user-submitted themes might try to format setting values +but fail upon site build with a ``TypeError``. In such cases, the theme needs +to be updated. For example, instead of ``TAG_FEED_ATOM|format(tag.slug)``, use +``TAG_FEED_ATOM|format(slug=tag.slug)`` + 4.0.0 (2018-11-13) ================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican/__init__.py new/pelican-4.0.1/pelican/__init__.py --- old/pelican-4.0.0/pelican/__init__.py 2018-11-13 14:21:47.000000000 +0100 +++ new/pelican-4.0.1/pelican/__init__.py 2018-11-30 17:10:26.000000000 +0100 @@ -29,7 +29,7 @@ folder_watcher, maybe_pluralize) from pelican.writers import Writer -__version__ = "4.0.0" +__version__ = "4.0.1" DEFAULT_CONFIG_NAME = 'pelicanconf.py' logger = logging.getLogger(__name__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican/contents.py new/pelican-4.0.1/pelican/contents.py --- old/pelican-4.0.0/pelican/contents.py 2018-11-12 08:19:18.000000000 +0100 +++ new/pelican-4.0.1/pelican/contents.py 2018-11-29 16:47:50.000000000 +0100 @@ -213,7 +213,6 @@ 'lang': getattr(self, 'lang', 'en'), 'date': getattr(self, 'date', SafeDatetime.now()), 'author': self.author.slug if hasattr(self, 'author') else '', - 'tag': self.tag.slug if hasattr(self, 'tag') else '', 'category': self.category.slug if hasattr(self, 'category') else '' }) return metadata @@ -527,7 +526,11 @@ @python_2_unicode_compatible -class Static(Page): +class Static(Content): + mandatory_properties = ('title',) + default_status = 'published' + default_template = None + def __init__(self, *args, **kwargs): super(Static, self).__init__(*args, **kwargs) self._output_location_referenced = False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican/readers.py new/pelican-4.0.1/pelican/readers.py --- old/pelican-4.0.0/pelican/readers.py 2018-11-12 08:19:18.000000000 +0100 +++ new/pelican-4.0.1/pelican/readers.py 2018-11-29 16:47:50.000000000 +0100 @@ -9,6 +9,7 @@ import docutils import docutils.core import docutils.io +from docutils.parsers.rst.languages import get_language as get_docutils_lang from docutils.writers.html4css1 import HTMLTranslator, Writer import six @@ -218,6 +219,14 @@ def __init__(self, *args, **kwargs): super(RstReader, self).__init__(*args, **kwargs) + lang_code = self.settings.get('DEFAULT_LANG', 'en') + if get_docutils_lang(lang_code): + self._language_code = lang_code + else: + logger.warning("Docutils has no localization for '%s'." + " Using 'en' instead.", lang_code) + self._language_code = 'en' + def _parse_metadata(self, document, source_path): """Return the dict containing document metadata""" formatted_fields = self.settings['FORMATTED_FIELDS'] @@ -256,7 +265,7 @@ extra_params = {'initial_header_level': '2', 'syntax_highlight': 'short', 'input_encoding': 'utf-8', - 'language_code': self.settings.get('DEFAULT_LANG'), + 'language_code': self._language_code, 'halt_level': 2, 'traceback': True, 'warning_stream': StringIO(), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican/server.py new/pelican-4.0.1/pelican/server.py --- old/pelican-4.0.0/pelican/server.py 2018-11-11 11:35:30.000000000 +0100 +++ new/pelican-4.0.1/pelican/server.py 2018-11-29 16:47:50.000000000 +0100 @@ -17,6 +17,9 @@ from six.moves import SimpleHTTPServer as srvmod from six.moves import urllib +from pelican.log import init as init_logging +logger = logging.getLogger(__name__) + def parse_arguments(): parser = argparse.ArgumentParser( @@ -71,22 +74,23 @@ self.path = self.get_path_that_exists(original_path) if not self.path: - logging.warning("Unable to find `%s` or variations.", - original_path) return - logging.info("Found `%s`.", self.path) srvmod.SimpleHTTPRequestHandler.do_GET(self) def get_path_that_exists(self, original_path): # Try to strip trailing slash original_path = original_path.rstrip('/') # Try to detect file by applying various suffixes + tries = [] for suffix in self.SUFFIXES: path = original_path + suffix if os.path.exists(self.translate_path(path)): return path - logging.info("Tried to find `%s`, but it doesn't exist.", path) + tries.append(path) + logger.warning("Unable to find `%s` or variations:\n%s", + original_path, + '\n'.join(tries)) return None def guess_type(self, path): @@ -108,11 +112,12 @@ if __name__ == '__main__': - logging.warning("'python -m pelican.server' is deprecated. The " - "Pelican development server should be run via " - "'pelican --listen' or 'pelican -l' (this can be combined " - "with regeneration as 'pelican -lr'). Rerun 'pelican-" - "quickstart' to get new Makefile and tasks.py files.") + init_logging(level=logging.INFO) + logger.warning("'python -m pelican.server' is deprecated.\nThe " + "Pelican development server should be run via " + "'pelican --listen' or 'pelican -l'.\nThis can be combined " + "with regeneration as 'pelican -lr'.\nRerun 'pelican-" + "quickstart' to get new Makefile and tasks.py files.") args = parse_arguments() RootedHTTPServer.allow_reuse_address = True try: @@ -123,16 +128,16 @@ httpd.socket, keyfile=args.key, certfile=args.cert, server_side=True) except ssl.SSLError as e: - logging.error("Couldn't open certificate file %s or key file %s", - args.cert, args.key) - logging.error("Could not listen on port %s, server %s.", - args.port, args.server) + logger.error("Couldn't open certificate file %s or key file %s", + args.cert, args.key) + logger.error("Could not listen on port %s, server %s.", + args.port, args.server) sys.exit(getattr(e, 'exitcode', 1)) - logging.info("Serving at port %s, server %s.", - args.port, args.server) + logger.info("Serving at port %s, server %s.", + args.port, args.server) try: httpd.serve_forever() except KeyboardInterrupt as e: - logging.info("Shutting down server.") + logger.info("Shutting down server.") httpd.socket.close() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican/tests/test_contents.py new/pelican-4.0.1/pelican/tests/test_contents.py --- old/pelican-4.0.0/pelican/tests/test_contents.py 2018-11-12 08:19:18.000000000 +0100 +++ new/pelican-4.0.1/pelican/tests/test_contents.py 2018-11-29 16:47:50.000000000 +0100 @@ -11,7 +11,7 @@ import six -from pelican.contents import Article, Author, Category, Page, Static, Tag +from pelican.contents import Article, Author, Category, Page, Static from pelican.settings import DEFAULT_CONFIG from pelican.signals import content_object_init from pelican.tests.support import LoggedTestCase, get_context, get_settings,\ @@ -609,19 +609,6 @@ article = Article(**article_kwargs) self.assertEqual(article.url, 'fedora.qa/this-week-in-fedora-qa/') - def test_slugify_tags_with_dots(self): - settings = get_settings() - settings['TAG_REGEX_SUBSTITUTIONS'] = [ - ('Fedora QA', 'fedora.qa'), - ] - settings['ARTICLE_URL'] = '{tag}/{slug}/' - article_kwargs = self._copy_page_kwargs() - article_kwargs['metadata']['tag'] = Tag('Fedora QA', settings) - article_kwargs['metadata']['title'] = 'This Week in Fedora QA' - article_kwargs['settings'] = settings - article = Article(**article_kwargs) - self.assertEqual(article.url, 'fedora.qa/this-week-in-fedora-qa/') - def test_valid_save_as_detects_breakout(self): settings = get_settings() article_kwargs = self._copy_page_kwargs() @@ -917,3 +904,18 @@ self.settings['INDEX_SAVE_AS'])) + '">link</a>') self.assertEqual(content, expected_html) + + def test_not_save_as_draft(self): + """Static.save_as is not affected by draft status.""" + + static = Static( + content=None, + metadata=dict(status='draft',), + settings=self.settings, + source_path=os.path.join('dir', 'foo.jpg'), + context=self.settings.copy()) + + expected_save_as = os.path.join('dir', 'foo.jpg') + self.assertEqual(static.status, 'draft') + self.assertEqual(static.save_as, expected_save_as) + self.assertEqual(static.url, path_to_url(expected_save_as)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican/tests/test_importer.py new/pelican-4.0.1/pelican/tests/test_importer.py --- old/pelican-4.0.0/pelican/tests/test_importer.py 2018-11-11 11:35:30.000000000 +0100 +++ new/pelican-4.0.1/pelican/tests/test_importer.py 2018-11-29 16:47:50.000000000 +0100 @@ -44,7 +44,7 @@ def setUp(self): self.old_locale = locale.setlocale(locale.LC_ALL) locale.setlocale(locale.LC_ALL, str('C')) - self.posts = list(blogger2fields(BLOGGER_XML_SAMPLE)) + self.posts = blogger2fields(BLOGGER_XML_SAMPLE) def tearDown(self): locale.setlocale(locale.LC_ALL, self.old_locale) @@ -53,14 +53,15 @@ """Check that importer only outputs pages, articles and comments, that these are correctly identified and that titles are correct. """ - kinds = {x[8] for x in self.posts} + test_posts = list(self.posts) + kinds = {x[8] for x in test_posts} self.assertEqual({'page', 'article', 'comment'}, kinds) - page_titles = {x[0] for x in self.posts if x[8] == 'page'} + page_titles = {x[0] for x in test_posts if x[8] == 'page'} self.assertEqual({'Test page', 'Test page 2'}, page_titles) - article_titles = {x[0] for x in self.posts if x[8] == 'article'} + article_titles = {x[0] for x in test_posts if x[8] == 'article'} self.assertEqual({'Black as Egypt\'s Night', 'The Steel Windpipe'}, article_titles) - comment_titles = {x[0] for x in self.posts if x[8] == 'comment'} + comment_titles = {x[0] for x in test_posts if x[8] == 'comment'} self.assertEqual({'Mishka, always a pleasure to read your ' 'adventures!...'}, comment_titles) @@ -69,15 +70,16 @@ """Check that importerer outputs only statuses 'published' and 'draft', that these are correctly identified and that filenames are correct. """ - statuses = {x[7] for x in self.posts} + test_posts = list(self.posts) + statuses = {x[7] for x in test_posts} self.assertEqual({'published', 'draft'}, statuses) - draft_filenames = {x[2] for x in self.posts if x[7] == 'draft'} + draft_filenames = {x[2] for x in test_posts if x[7] == 'draft'} # draft filenames are id-based self.assertEqual({'page-4386962582497458967', 'post-1276418104709695660'}, draft_filenames) - published_filenames = {x[2] for x in self.posts if x[7] == 'published'} + published_filenames = {x[2] for x in test_posts if x[7] == 'published'} # published filenames are url-based, except comments self.assertEqual({'the-steel-windpipe', 'test-page', @@ -91,8 +93,8 @@ def setUp(self): self.old_locale = locale.setlocale(locale.LC_ALL) locale.setlocale(locale.LC_ALL, str('C')) - self.posts = list(wp2fields(WORDPRESS_XML_SAMPLE)) - self.custposts = list(wp2fields(WORDPRESS_XML_SAMPLE, True)) + self.posts = wp2fields(WORDPRESS_XML_SAMPLE) + self.custposts = wp2fields(WORDPRESS_XML_SAMPLE, True) def tearDown(self): locale.setlocale(locale.LC_ALL, self.old_locale) @@ -242,6 +244,8 @@ self.assertFalse(out_name.endswith(filename)) def test_can_toggle_raw_html_code_parsing(self): + test_posts = list(self.posts) + def r(f): with open(f, encoding='utf-8') as infile: return infile.read() @@ -250,16 +254,16 @@ with temporary_folder() as temp: rst_files = (r(f) for f - in silent_f2p(self.posts, 'markdown', temp)) + in silent_f2p(test_posts, 'markdown', temp)) self.assertTrue(any('<iframe' in rst for rst in rst_files)) rst_files = (r(f) for f - in silent_f2p(self.posts, 'markdown', + in silent_f2p(test_posts, 'markdown', temp, strip_raw=True)) self.assertFalse(any('<iframe' in rst for rst in rst_files)) # no effect in rst - rst_files = (r(f) for f in silent_f2p(self.posts, 'rst', temp)) + rst_files = (r(f) for f in silent_f2p(test_posts, 'rst', temp)) self.assertFalse(any('<iframe' in rst for rst in rst_files)) - rst_files = (r(f) for f in silent_f2p(self.posts, 'rst', temp, + rst_files = (r(f) for f in silent_f2p(test_posts, 'rst', temp, strip_raw=True)) self.assertFalse(any('<iframe' in rst for rst in rst_files)) @@ -417,20 +421,22 @@ self.assertTrue(self.attachments) for post in self.attachments.keys(): if post is None: - expected = ('https://upload.wikimedia.org/wikipedia/commons/' - 'thumb/2/2c/Pelican_lakes_entrance02.jpg/' - '240px-Pelican_lakes_entrance02.jpg') - self.assertEqual(self.attachments[post][0], expected) + expected = { + ('https://upload.wikimedia.org/wikipedia/commons/' + 'thumb/2/2c/Pelican_lakes_entrance02.jpg/' + '240px-Pelican_lakes_entrance02.jpg') + } + self.assertEqual(self.attachments[post], expected) elif post == 'with-excerpt': expected_invalid = ('http://thisurlisinvalid.notarealdomain/' 'not_an_image.jpg') expected_pelikan = ('http://en.wikipedia.org/wiki/' 'File:Pelikan_Walvis_Bay.jpg') - self.assertEqual(self.attachments[post][0], expected_invalid) - self.assertEqual(self.attachments[post][1], expected_pelikan) + self.assertEqual(self.attachments[post], + {expected_invalid, expected_pelikan}) elif post == 'with-tags': expected_invalid = ('http://thisurlisinvalid.notarealdomain') - self.assertEqual(self.attachments[post][0], expected_invalid) + self.assertEqual(self.attachments[post], {expected_invalid}) else: self.fail('all attachments should match to a ' 'filename or None, {}' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican/tools/pelican_import.py new/pelican-4.0.1/pelican/tools/pelican_import.py --- old/pelican-4.0.0/pelican/tools/pelican_import.py 2018-11-11 11:35:30.000000000 +0100 +++ new/pelican-4.0.1/pelican/tools/pelican_import.py 2018-11-29 16:47:50.000000000 +0100 @@ -131,11 +131,11 @@ return soup -def get_filename(filename, post_id): - if filename is not None: - return filename - else: +def get_filename(post_name, post_id): + if post_name is None or post_name.isspace(): return post_id + else: + return post_name def wp2fields(xml, wp_custpost=False): @@ -154,9 +154,9 @@ title = 'No title [%s]' % item.find('post_name').string logger.warning('Post "%s" is lacking a proper title', title) - filename = item.find('post_name').string + post_name = item.find('post_name').string post_id = item.find('post_id').string - filename = get_filename(filename, post_id) + filename = get_filename(post_name, post_id) content = item.find('encoded').string raw_date = item.find('post_date').string @@ -690,16 +690,16 @@ for item in items: kind = item.find('post_type').string - filename = item.find('post_name').string + post_name = item.find('post_name').string post_id = item.find('post_id').string if kind == 'attachment': attachments.append((item.find('post_parent').string, item.find('attachment_url').string)) else: - filename = get_filename(filename, post_id) + filename = get_filename(post_name, post_id) names[post_id] = filename - attachedposts = defaultdict(list) + attachedposts = defaultdict(set) for parent, url in attachments: try: parent_name = names[parent] @@ -707,7 +707,7 @@ # attachment's parent is not a valid post parent_name = None - attachedposts[parent_name].append(url) + attachedposts[parent_name].add(url) return attachedposts @@ -739,9 +739,8 @@ return locations -def is_pandoc_needed(fields): - in_markup_idx = 9 - return filter(lambda f: f[in_markup_idx] in ('html', 'wp-html'), fields) +def is_pandoc_needed(in_markup): + return in_markup in ('html', 'wp-html') def get_pandoc_version(): @@ -772,11 +771,7 @@ wp_custpost=False, wp_attach=False, attachments=None): pandoc_version = get_pandoc_version() - - if is_pandoc_needed(fields) and not pandoc_version: - error = ('Pandoc must be installed to complete the ' - 'requested import action.') - exit(error) + posts_require_pandoc = [] settings = read_settings() slug_subs = settings['SLUG_REGEX_SUBSTITUTIONS'] @@ -785,6 +780,9 @@ kind, in_markup) in fields: if filter_author and filter_author != author: continue + if is_pandoc_needed(in_markup) and not pandoc_version: + posts_require_pandoc.append(filename) + slug = not disable_slugs and filename or None if wp_attach and attachments: @@ -869,6 +867,11 @@ with open(out_filename, 'w', encoding='utf-8') as fs: fs.write(header + content) + + if posts_require_pandoc: + logger.error("Pandoc must be installed to import the following posts:" + "\n {}".format("\n ".join(posts_require_pandoc))) + if wp_attach and attachments and None in attachments: print("downloading attachments that don't have a parent post") urls = attachments[None] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican/tools/templates/Makefile.jinja2 new/pelican-4.0.1/pelican/tools/templates/Makefile.jinja2 --- old/pelican-4.0.0/pelican/tools/templates/Makefile.jinja2 2018-07-22 11:20:16.000000000 +0200 +++ new/pelican-4.0.1/pelican/tools/templates/Makefile.jinja2 2018-11-29 16:47:50.000000000 +0100 @@ -123,7 +123,7 @@ ssh_upload: publish scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) -{%- set upload = upload + ["rsync_upload"] -%} +{% set upload = upload + ["rsync_upload"] %} rsync_upload: publish rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --cvs-exclude --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican/tools/templates/tasks.py.jinja2 new/pelican-4.0.1/pelican/tools/templates/tasks.py.jinja2 --- old/pelican-4.0.0/pelican/tools/templates/tasks.py.jinja2 2018-11-11 11:35:30.000000000 +0100 +++ new/pelican-4.0.1/pelican/tools/templates/tasks.py.jinja2 2018-11-29 16:47:50.000000000 +0100 @@ -4,14 +4,10 @@ import shutil import sys import datetime -try: - import socketserver -except ImportError: - import SocketServer as socketserver from invoke import task from invoke.util import cd -from pelican.server import ComplexHTTPRequestHandler +from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer CONFIG = { # Local path configuration (can be absolute or relative to tasks.py) @@ -61,12 +57,12 @@ @task def serve(c): """Serve site at http://localhost:8000/""" - os.chdir(CONFIG['deploy_path']) - class AddressReuseTCPServer(socketserver.TCPServer): + class AddressReuseTCPServer(RootedHTTPServer): allow_reuse_address = True server = AddressReuseTCPServer( + CONFIG['deploy_path'], ('', CONFIG['port']), ComplexHTTPRequestHandler) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/pelican.egg-info/PKG-INFO new/pelican-4.0.1/pelican.egg-info/PKG-INFO --- old/pelican-4.0.0/pelican.egg-info/PKG-INFO 2018-11-13 14:31:40.000000000 +0100 +++ new/pelican-4.0.1/pelican.egg-info/PKG-INFO 2018-11-30 17:15:48.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: pelican -Version: 4.0.0 +Version: 4.0.1 Summary: Static site generator supporting reStructuredText and Markdown source content. Home-page: https://getpelican.com/ Author: Alexis Metaireau @@ -75,6 +75,21 @@ Release history ############### + 4.0.1 (2018-11-30) + ================== + + * Refactor ``pelican.server`` logging + * Fix bug in which all static files were processed as "draft" + * Bug fixes for Invoke/Makefile automation, Importer, and other miscellanea + + If upgrading from 3.7.x or earlier, please note that slug-related settings in + 4.0+ use ``{slug}`` and/or ``{lang}`` rather than ``%s``. If ``%s``-style + settings are encountered, Pelican will emit a warning and fall back to the + default setting. Some user-submitted themes might try to format setting values + but fail upon site build with a ``TypeError``. In such cases, the theme needs + to be updated. For example, instead of ``TAG_FEED_ATOM|format(tag.slug)``, use + ``TAG_FEED_ATOM|format(slug=tag.slug)`` + 4.0.0 (2018-11-13) ================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pelican-4.0.0/setup.py new/pelican-4.0.1/setup.py --- old/pelican-4.0.0/setup.py 2018-11-13 14:22:36.000000000 +0100 +++ new/pelican-4.0.1/setup.py 2018-11-30 17:10:53.000000000 +0100 @@ -28,7 +28,7 @@ setup( name='pelican', - version='4.0.0', + version='4.0.1', url='https://getpelican.com/', author='Alexis Metaireau', maintainer='Justin Mayer',
