From 24a1254f034a238f481f8b889a961dbde99c551d Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Fri, 30 Sep 2016 15:29:14 +0200 Subject: [PATCH 001/867] Explicitly disallow duplications of URL and save_as. --- pelican/readers.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/pelican/readers.py b/pelican/readers.py index 415e7558..56e54355 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -31,6 +31,20 @@ except ImportError: # This means that _filter_discardable_metadata() must be called on processed # metadata dicts before use, to remove the items with the special value. _DISCARD = object() + +DUPLICATES_DEFINITIONS_ALLOWED = { + 'tags': False, + 'date': False, + 'modified': False, + 'status': False, + 'category': False, + 'author': False, + 'save_as': False, + 'URL': False, + 'authors': False, + 'slug': False +} + METADATA_PROCESSORS = { 'tags': lambda x, y: ([ Tag(tag, y) @@ -264,7 +278,7 @@ class MarkdownReader(BaseReader): self._md.reset() formatted = self._md.convert(formatted_values) output[name] = self.process_metadata(name, formatted) - elif name in METADATA_PROCESSORS: + elif not DUPLICATES_DEFINITIONS_ALLOWED.get(name, True): if len(value) > 1: logger.warning( 'Duplicate definition of `%s` ' From 9e574e9d8c6e4d6377a6fcefe1579bb998c7223a Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Fri, 30 Sep 2016 15:33:05 +0200 Subject: [PATCH 002/867] Just in case someone forgot the DUPLICATES_DEFINITIONS_ALLOWED but add in METADATA_PROCESSORS. --- pelican/readers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pelican/readers.py b/pelican/readers.py index 56e54355..5220f1a0 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -278,7 +278,8 @@ class MarkdownReader(BaseReader): self._md.reset() formatted = self._md.convert(formatted_values) output[name] = self.process_metadata(name, formatted) - elif not DUPLICATES_DEFINITIONS_ALLOWED.get(name, True): + elif (not DUPLICATES_DEFINITIONS_ALLOWED.get(name, True) or + name in METADATA_PROCESSORS): if len(value) > 1: logger.warning( 'Duplicate definition of `%s` ' From e8a87e5d3cb82081127a8a07da574059668688de Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Mon, 10 Oct 2016 12:23:26 +0200 Subject: [PATCH 003/867] As not allowing duplicates in processed items is counter intuitive, let's allow it. Also it may be allowed in the future (to process multiple values). Also @avaris think it's bad to test something twice (see https://github.com/getpelican/pelican/pull/2017), but for me confusion lies in the "Why is list processing forbidden?", so, in a way, our ideas converges in "let's not disallow processed items to be lists". This reverts commit 9e574e9d8c6e4d6377a6fcefe1579bb998c7223a. --- pelican/readers.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pelican/readers.py b/pelican/readers.py index 503db679..a7712f0b 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -278,8 +278,7 @@ class MarkdownReader(BaseReader): self._md.reset() formatted = self._md.convert(formatted_values) output[name] = self.process_metadata(name, formatted) - elif (not DUPLICATES_DEFINITIONS_ALLOWED.get(name, True) or - name in METADATA_PROCESSORS): + elif not DUPLICATES_DEFINITIONS_ALLOWED.get(name, True): if len(value) > 1: logger.warning( 'Duplicate definition of `%s` ' From e07c53a09dab16ec33e44a84a1c5db5e58deb61c Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Wed, 26 Oct 2016 08:34:52 +0200 Subject: [PATCH 004/867] FIX: Those keys are looked up lowercased. --- pelican/readers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pelican/readers.py b/pelican/readers.py index a7712f0b..74b617e6 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -40,7 +40,7 @@ DUPLICATES_DEFINITIONS_ALLOWED = { 'category': False, 'author': False, 'save_as': False, - 'URL': False, + 'url': False, 'authors': False, 'slug': False } From 0936d5f6ee19908d455d9bae35552019237f13da Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Wed, 14 Dec 2016 13:56:47 -0800 Subject: [PATCH 005/867] Prepare version 3.7.1.dev0 for next development cycle --- docs/changelog.rst | 5 +++++ pelican/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 129499c2..31868353 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,11 @@ Release history ############### +Next release +============ + +- Nothing yet + 3.7.0 (2016-12-12) ================== diff --git a/pelican/__init__.py b/pelican/__init__.py index 159121fa..cdcd98b1 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -25,7 +25,7 @@ from pelican.utils import (clean_output_dir, file_watcher, folder_watcher, maybe_pluralize) from pelican.writers import Writer -__version__ = "3.7.0" +__version__ = "3.7.1.dev0" DEFAULT_CONFIG_NAME = 'pelicanconf.py' logger = logging.getLogger(__name__) diff --git a/setup.py b/setup.py index 345ba0db..e69080f5 100755 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ CHANGELOG = open('docs/changelog.rst').read() setup( name='pelican', - version='3.7.0', + version='3.7.1.dev0', url='http://getpelican.com/', author='Alexis Metaireau', maintainer='Justin Mayer', From 5c6ae32f99c807364c0a3c439985e30c1c0f572d Mon Sep 17 00:00:00 2001 From: "L. E. Segovia" Date: Wed, 14 Dec 2016 14:08:09 +0100 Subject: [PATCH 006/867] For python 2+, initialize locale. Fixes #2043 --- pelican/tools/pelican_quickstart.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pelican/tools/pelican_quickstart.py b/pelican/tools/pelican_quickstart.py index 6b4eb5a5..ecbc3510 100755 --- a/pelican/tools/pelican_quickstart.py +++ b/pelican/tools/pelican_quickstart.py @@ -21,6 +21,8 @@ import six from pelican import __version__ +if (sys.version_info.major == 2): + locale.setlocale(locale.LC_ALL, '') _TEMPLATES_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates") From c96edef571aaddc138f8e15946b99fd15c8cca64 Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Fri, 23 Dec 2016 07:41:52 -0800 Subject: [PATCH 007/867] Ignore samples for GitHub language stats analysis Fixes #2069 --- .gitattributes | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitattributes b/.gitattributes index dfe07704..1b6f7c89 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,5 @@ # Auto detect text files and perform LF normalization * text=auto + +# Improve accuracy of GitHub's Linguist-powered language statistics +samples/* linguist-vendored From fc9227215b86914baf2082dba36f485743183679 Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Fri, 23 Dec 2016 08:00:45 -0800 Subject: [PATCH 008/867] Ignore test content & output in language analysis Refs #2069 --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitattributes b/.gitattributes index 1b6f7c89..da974e4b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,4 +2,6 @@ * text=auto # Improve accuracy of GitHub's Linguist-powered language statistics +pelican/tests/content/* +pelican/tests/output/* samples/* linguist-vendored From 98d1d4e3387dc70a062f1897fa5d8f71d5431e2c Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Fri, 23 Dec 2016 08:03:57 -0800 Subject: [PATCH 009/867] Add missing .gitattributes attributes. Refs #2069 --- .gitattributes | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitattributes b/.gitattributes index da974e4b..9053428d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,6 +2,6 @@ * text=auto # Improve accuracy of GitHub's Linguist-powered language statistics -pelican/tests/content/* -pelican/tests/output/* +pelican/tests/content/* linguist-vendored +pelican/tests/output/* linguist-vendored samples/* linguist-vendored From 84920e8fdf754b642b9a137cad38c38f9417bde5 Mon Sep 17 00:00:00 2001 From: Lucas Chavez Date: Wed, 21 Dec 2016 13:22:29 -0700 Subject: [PATCH 010/867] Set locale to LC_ALL in Quickstart script. Fixes #2043 --- pelican/tools/pelican_quickstart.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pelican/tools/pelican_quickstart.py b/pelican/tools/pelican_quickstart.py index ecbc3510..39e58f6f 100755 --- a/pelican/tools/pelican_quickstart.py +++ b/pelican/tools/pelican_quickstart.py @@ -21,8 +21,12 @@ import six from pelican import __version__ -if (sys.version_info.major == 2): - locale.setlocale(locale.LC_ALL, '') +locale.setlocale(locale.LC_ALL, '') +_DEFAULT_LANGUAGE = locale.getlocale()[0] +if _DEFAULT_LANGUAGE is None: + _DEFAULT_LANGUAGE = 'English' +else: + _DEFAULT_LANGUAGE = _DEFAULT_LANGUAGE.split('_')[0] _TEMPLATES_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates") @@ -51,7 +55,7 @@ CONF = { 'github_pages_branch': _GITHUB_PAGES_BRANCHES['project'], 'default_pagination': 10, 'siteurl': '', - 'lang': locale.getlocale()[0].split('_')[0], + 'lang': _DEFAULT_LANGUAGE, 'timezone': _DEFAULT_TIMEZONE } From b46fbb78793a873e6280a791b37ab2d42055eefc Mon Sep 17 00:00:00 2001 From: Alexandre de Verteuil Date: Sat, 23 Jul 2016 03:04:04 -0400 Subject: [PATCH 011/867] Add two STATIC_ settings. Fix #1982 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit STATIC_CREATE_LINKS = False Create links instead of copying files. If the content and output directories are on the same device, then create hard links. Falls back to symbolic links if the output directory is on a different filesystem. If symlinks are created, don’t forget to add the -L or --copy-links option to rsync when uploading your site. STATIC_CHECK_IF_MODIFIED = False If set to True, and STATIC_CREATE_LINKS is False, compare mtimes of content and output files, and only copy content files that are newer than existing output files. --- docs/settings.rst | 14 +++ pelican/generators.py | 107 +++++++++++++++----- pelican/settings.py | 2 + pelican/tests/test_generators.py | 164 ++++++++++++++++++++++++++++++- 4 files changed, 261 insertions(+), 26 deletions(-) diff --git a/docs/settings.rst b/docs/settings.rst index aef9f674..54797c83 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -230,6 +230,20 @@ Basic settings ``PAGE_PATHS``. If you are trying to publish your site's source files, consider using the ``OUTPUT_SOURCES`` setting instead. +.. data:: STATIC_CREATE_LINKS = False + + Create links instead of copying files. If the content and output + directories are on the same device, then create hard links. Falls + back to symbolic links if the output directory is on a different + filesystem. If symlinks are created, don't forget to add the ``-L`` + or ``--copy-links`` option to rsync when uploading your site. + +.. data:: STATIC_CHECK_IF_MODIFIED = False + + If set to ``True``, and ``STATIC_CREATE_LINKS`` is ``False``, compare + mtimes of content and output files, and only copy content files that + are newer than existing output files. + .. data:: TYPOGRIFY = False If set to True, several typographical improvements will be incorporated into diff --git a/pelican/generators.py b/pelican/generators.py index 88752392..f3590155 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -2,6 +2,7 @@ from __future__ import print_function, unicode_literals import calendar +import errno import fnmatch import logging import os @@ -20,9 +21,8 @@ from pelican import signals from pelican.cache import FileStampDataCacher from pelican.contents import Article, Draft, Page, Static, is_valid_content from pelican.readers import Readers -from pelican.utils import (DateFormatter, copy, copy_file_metadata, mkdir_p, - posixize_path, process_translations, - python_2_unicode_compatible) +from pelican.utils import (DateFormatter, copy, mkdir_p, posixize_path, + process_translations, python_2_unicode_compatible) logger = logging.getLogger(__name__) @@ -682,21 +682,9 @@ class StaticGenerator(Generator): def __init__(self, *args, **kwargs): super(StaticGenerator, self).__init__(*args, **kwargs) + self.fallback_to_symlinks = False signals.static_generator_init.send(self) - def _copy_paths(self, paths, source, destination, output_path, - final_path=None): - """Copy all the paths from source to destination""" - for path in paths: - if final_path: - copy(os.path.join(source, path), - os.path.join(output_path, destination, final_path), - self.settings['IGNORE_FILES']) - else: - copy(os.path.join(source, path), - os.path.join(output_path, destination, path), - self.settings['IGNORE_FILES']) - def generate_context(self): self.staticfiles = [] for f in self.get_files(self.settings['STATIC_PATHS'], @@ -724,13 +712,88 @@ class StaticGenerator(Generator): self._copy_paths(self.settings['THEME_STATIC_PATHS'], self.theme, self.settings['THEME_STATIC_DIR'], self.output_path, os.curdir) - # copy all Static files for sc in self.context['staticfiles']: - source_path = os.path.join(self.path, sc.source_path) - save_as = os.path.join(self.output_path, sc.save_as) - mkdir_p(os.path.dirname(save_as)) - logger.info('Copying %s to %s', sc.source_path, sc.save_as) - copy_file_metadata(source_path, save_as) + if self._file_update_required(sc): + self._link_or_copy_staticfile(sc) + else: + logger.debug('%s is up to date, not copying', sc.source_path) + + def _copy_paths(self, paths, source, destination, output_path, + final_path=None): + """Copy all the paths from source to destination""" + for path in paths: + if final_path: + copy(os.path.join(source, path), + os.path.join(output_path, destination, final_path), + self.settings['IGNORE_FILES']) + else: + copy(os.path.join(source, path), + os.path.join(output_path, destination, path), + self.settings['IGNORE_FILES']) + + def _file_update_required(self, staticfile): + source_path = os.path.join(self.path, staticfile.source_path) + save_as = os.path.join(self.output_path, staticfile.save_as) + if not os.path.exists(save_as): + return True + elif (self.settings['STATIC_CREATE_LINKS'] and + os.path.samefile(source_path, save_as)): + return False + elif (self.settings['STATIC_CREATE_LINKS'] and + os.path.realpath(save_as) == source_path): + return False + elif not self.settings['STATIC_CHECK_IF_MODIFIED']: + return True + else: + return self._source_is_newer(staticfile) + + def _source_is_newer(self, staticfile): + source_path = os.path.join(self.path, staticfile.source_path) + save_as = os.path.join(self.output_path, staticfile.save_as) + s_mtime = os.path.getmtime(source_path) + d_mtime = os.path.getmtime(save_as) + return s_mtime > d_mtime + + def _link_or_copy_staticfile(self, sc): + if self.settings['STATIC_CREATE_LINKS']: + self._link_staticfile(sc) + else: + self._copy_staticfile(sc) + + def _copy_staticfile(self, sc): + source_path = os.path.join(self.path, sc.source_path) + save_as = os.path.join(self.output_path, sc.save_as) + self._mkdir(os.path.dirname(save_as)) + copy(source_path, save_as) + logger.info('Copying %s to %s', sc.source_path, sc.save_as) + + def _link_staticfile(self, sc): + source_path = os.path.join(self.path, sc.source_path) + save_as = os.path.join(self.output_path, sc.save_as) + self._mkdir(os.path.dirname(save_as)) + try: + if os.path.lexists(save_as): + os.unlink(save_as) + logger.info('Linking %s and %s', sc.source_path, sc.save_as) + if self.fallback_to_symlinks: + os.symlink(source_path, save_as) + else: + os.link(source_path, save_as) + except OSError as err: + if err.errno == errno.EXDEV: # 18: Invalid cross-device link + logger.debug( + "Cross-device links not valid. " + "Creating symbolic links instead." + ) + self.fallback_to_symlinks = True + self._link_staticfile(sc) + else: + raise err + + def _mkdir(self, path): + if os.path.lexists(path) and not os.path.isdir(path): + os.unlink(path) + mkdir_p(path) class SourceFileGenerator(Generator): diff --git a/pelican/settings.py b/pelican/settings.py index 1b0bd67d..0088d3d2 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -82,6 +82,8 @@ DEFAULT_CONFIG = { 'PAGE_LANG_SAVE_AS': posix_join('pages', '{slug}-{lang}.html'), 'STATIC_URL': '{path}', 'STATIC_SAVE_AS': '{path}', + 'STATIC_CREATE_LINKS': False, + 'STATIC_CHECK_IF_MODIFIED': False, 'CATEGORY_URL': 'category/{slug}.html', 'CATEGORY_SAVE_AS': posix_join('category', '{slug}.html'), 'TAG_URL': 'tag/{slug}.html', diff --git a/pelican/tests/test_generators.py b/pelican/tests/test_generators.py index 3c4684df..5f2151c3 100644 --- a/pelican/tests/test_generators.py +++ b/pelican/tests/test_generators.py @@ -5,7 +5,7 @@ import locale import os from codecs import open -from shutil import rmtree +from shutil import copy, rmtree from tempfile import mkdtemp from pelican.generators import (ArticlesGenerator, Generator, PagesGenerator, @@ -674,6 +674,30 @@ class TestStaticGenerator(unittest.TestCase): def setUp(self): self.content_path = os.path.join(CUR_DIR, 'mixed_content') + self.temp_content = mkdtemp(prefix='testcontent.') + self.temp_output = mkdtemp(prefix='testoutput.') + self.settings = get_settings() + self.settings['PATH'] = self.temp_content + self.settings['STATIC_PATHS'] = ["static"] + self.settings['OUTPUT_PATH'] = self.temp_output + os.mkdir(os.path.join(self.temp_content, "static")) + self.startfile = os.path.join(self.temp_content, + "static", "staticfile") + self.endfile = os.path.join(self.temp_output, "static", "staticfile") + self.generator = StaticGenerator( + context={'filenames': {}}, + settings=self.settings, + path=self.temp_content, + theme="", + output_path=self.temp_output, + ) + + def tearDown(self): + rmtree(self.temp_content) + rmtree(self.temp_output) + + def set_ancient_mtime(self, path, timestamp=1): + os.utime(path, (timestamp, timestamp)) def test_static_excludes(self): """Test that StaticGenerator respects STATIC_EXCLUDES. @@ -687,7 +711,7 @@ class TestStaticGenerator(unittest.TestCase): StaticGenerator( context=context, settings=settings, - path=settings['PATH'], output_path=None, + path=settings['PATH'], output_path=self.temp_output, theme=settings['THEME']).generate_context() staticnames = [os.path.basename(c.source_path) @@ -716,7 +740,7 @@ class TestStaticGenerator(unittest.TestCase): for generator_class in (PagesGenerator, StaticGenerator): generator_class( context=context, settings=settings, - path=settings['PATH'], output_path=None, + path=settings['PATH'], output_path=self.temp_output, theme=settings['THEME']).generate_context() staticnames = [os.path.basename(c.source_path) @@ -733,7 +757,7 @@ class TestStaticGenerator(unittest.TestCase): for generator_class in (PagesGenerator, StaticGenerator): generator_class( context=context, settings=settings, - path=settings['PATH'], output_path=None, + path=settings['PATH'], output_path=self.temp_output, theme=settings['THEME']).generate_context() staticnames = [os.path.basename(c.source_path) @@ -742,3 +766,135 @@ class TestStaticGenerator(unittest.TestCase): self.assertTrue( any(name.endswith(".md") for name in staticnames), "STATIC_EXCLUDE_SOURCES=False failed to include a markdown file") + + def test_copy_one_file(self): + with open(self.startfile, "w") as f: + f.write("staticcontent") + self.generator.generate_context() + self.generator.generate_output(None) + with open(self.endfile, "r") as f: + self.assertEqual(f.read(), "staticcontent") + + @unittest.skipUnless(MagicMock, 'Needs Mock module') + def test_file_update_required_when_dest_does_not_exist(self): + staticfile = MagicMock() + staticfile.source_path = self.startfile + staticfile.save_as = self.endfile + with open(staticfile.source_path, "w") as f: + f.write("a") + update_required = self.generator._file_update_required(staticfile) + self.assertTrue(update_required) + + @unittest.skipUnless(MagicMock, 'Needs Mock module') + def test_dest_and_source_mtimes_are_equal(self): + staticfile = MagicMock() + staticfile.source_path = self.startfile + staticfile.save_as = self.endfile + self.settings['STATIC_CHECK_IF_MODIFIED'] = True + with open(staticfile.source_path, "w") as f: + f.write("a") + os.mkdir(os.path.join(self.temp_output, "static")) + copy(staticfile.source_path, staticfile.save_as) + isnewer = self.generator._source_is_newer(staticfile) + self.assertFalse(isnewer) + + @unittest.skipUnless(MagicMock, 'Needs Mock module') + def test_source_is_newer(self): + staticfile = MagicMock() + staticfile.source_path = self.startfile + staticfile.save_as = self.endfile + with open(staticfile.source_path, "w") as f: + f.write("a") + os.mkdir(os.path.join(self.temp_output, "static")) + copy(staticfile.source_path, staticfile.save_as) + self.set_ancient_mtime(staticfile.save_as) + isnewer = self.generator._source_is_newer(staticfile) + self.assertTrue(isnewer) + + def test_skip_file_when_source_is_not_newer(self): + self.settings['STATIC_CHECK_IF_MODIFIED'] = True + with open(self.startfile, "w") as f: + f.write("staticcontent") + os.mkdir(os.path.join(self.temp_output, "static")) + with open(self.endfile, "w") as f: + f.write("staticcontent") + expected = os.path.getmtime(self.endfile) + self.set_ancient_mtime(self.startfile) + self.generator.generate_context() + self.generator.generate_output(None) + self.assertEqual(os.path.getmtime(self.endfile), expected) + + def test_dont_link_by_default(self): + with open(self.startfile, "w") as f: + f.write("staticcontent") + self.generator.generate_context() + self.generator.generate_output(None) + self.assertFalse(os.path.samefile(self.startfile, self.endfile)) + + def test_output_file_is_linked_to_source(self): + self.settings['STATIC_CREATE_LINKS'] = True + with open(self.startfile, "w") as f: + f.write("staticcontent") + self.generator.generate_context() + self.generator.generate_output(None) + self.assertTrue(os.path.samefile(self.startfile, self.endfile)) + + def test_output_file_exists_and_is_newer(self): + self.settings['STATIC_CREATE_LINKS'] = True + with open(self.startfile, "w") as f: + f.write("staticcontent") + os.mkdir(os.path.join(self.temp_output, "static")) + with open(self.endfile, "w") as f: + f.write("othercontent") + self.generator.generate_context() + self.generator.generate_output(None) + self.assertTrue(os.path.samefile(self.startfile, self.endfile)) + + def test_can_symlink_when_hardlink_not_possible(self): + self.settings['STATIC_CREATE_LINKS'] = True + with open(self.startfile, "w") as f: + f.write("staticcontent") + os.mkdir(os.path.join(self.temp_output, "static")) + self.generator.fallback_to_symlinks = True + self.generator.generate_context() + self.generator.generate_output(None) + self.assertTrue(os.path.islink(self.endfile)) + + def test_existing_symlink_is_considered_up_to_date(self): + self.settings['STATIC_CREATE_LINKS'] = True + with open(self.startfile, "w") as f: + f.write("staticcontent") + os.mkdir(os.path.join(self.temp_output, "static")) + os.symlink(self.startfile, self.endfile) + staticfile = MagicMock() + staticfile.source_path = self.startfile + staticfile.save_as = self.endfile + requires_update = self.generator._file_update_required(staticfile) + self.assertFalse(requires_update) + + def test_invalid_symlink_is_overwritten(self): + self.settings['STATIC_CREATE_LINKS'] = True + with open(self.startfile, "w") as f: + f.write("staticcontent") + os.mkdir(os.path.join(self.temp_output, "static")) + os.symlink("invalid", self.endfile) + staticfile = MagicMock() + staticfile.source_path = self.startfile + staticfile.save_as = self.endfile + requires_update = self.generator._file_update_required(staticfile) + self.assertTrue(requires_update) + self.generator.fallback_to_symlinks = True + self.generator.generate_context() + self.generator.generate_output(None) + self.assertEqual(os.path.realpath(self.endfile), self.startfile) + + def test_delete_existing_file_before_mkdir(self): + with open(self.startfile, "w") as f: + f.write("staticcontent") + with open(os.path.join(self.temp_output, "static"), "w") as f: + f.write("This file should be a directory") + self.generator.generate_context() + self.generator.generate_output(None) + self.assertTrue( + os.path.isdir(os.path.join(self.temp_output, "static"))) + self.assertTrue(os.path.isfile(self.endfile)) From 01d536d7c9ddd6e1090d69b5f4445e37d4019d40 Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Sat, 31 Dec 2016 15:10:46 -0800 Subject: [PATCH 012/867] Replace m-dash with semi-colon in changelog Stop-gap measure to address: https://github.com/getpelican/pelican/commit/e3ab685a26b3dd2d198319b625d380c4f80afbf7#commitcomment-20333961 --- docs/changelog.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 31868353..1956e47c 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -14,7 +14,7 @@ Next release ```` for modifications * Simplify Atom feed ID generation and support URL fragments * Produce category feeds with category-specific titles -* RSS feeds now default to summary instead of full content — +* RSS feeds now default to summary instead of full content; set ``RSS_FEED_SUMMARY_ONLY = False`` to revert to previous behavior * Replace ``MD_EXTENSIONS`` with ``MARKDOWN`` setting * Replace ``JINJA_EXTENSIONS`` with more-robust ``JINJA_ENVIRONMENT`` setting From 6fe2fecb1327e8a72008e58b68329b8c25dbb667 Mon Sep 17 00:00:00 2001 From: Deniz Turgut Date: Tue, 3 Jan 2017 21:51:23 +0300 Subject: [PATCH 013/867] Specify encoding for README and CHANGELOG in setup.py --- setup.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index e69080f5..f221930d 100755 --- a/setup.py +++ b/setup.py @@ -1,6 +1,8 @@ #!/usr/bin/env python +from io import open from os import walk from os.path import join, relpath +import sys from setuptools import setup @@ -17,8 +19,12 @@ entry_points = { ] } -README = open('README.rst').read() -CHANGELOG = open('docs/changelog.rst').read() +README = open('README.rst', encoding='utf-8').read() +CHANGELOG = open('docs/changelog.rst', encoding='utf-8').read() + +description = u'\n'.join([README, CHANGELOG]) +if sys.version_info.major < 3: + description = description.encode('utf-8') setup( name='pelican', @@ -29,7 +35,7 @@ setup( author_email='authors@getpelican.com', description="Static site generator supporting reStructuredText and " "Markdown source content.", - long_description=README + '\n' + CHANGELOG, + long_description=description, packages=['pelican', 'pelican.tools'], package_data={ # we manually collect the package data, as opposed to using, From ce38e318bd4905f75c988ee930620ebcd65588c0 Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Tue, 10 Jan 2017 13:34:09 -0800 Subject: [PATCH 014/867] Bump version 3.7.1 --- docs/changelog.rst | 7 ++++--- docs/conf.py | 2 +- pelican/__init__.py | 2 +- setup.py | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 1956e47c..31c50182 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,10 +1,11 @@ Release history ############### -Next release -============ +3.7.1 (2017-01-10) +================== -- Nothing yet +* Fix locale issues in Quickstart script +* Specify encoding for README and CHANGELOG in setup.py 3.7.0 (2016-12-12) ================== diff --git a/docs/conf.py b/docs/conf.py index 63a4a269..81a06e3a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -21,7 +21,7 @@ copyright = '2015, Alexis Metaireau and contributors' exclude_patterns = ['_build'] release = __version__ version = '.'.join(release.split('.')[:1]) -last_stable = '3.7.0' +last_stable = '3.7.1' rst_prolog = ''' .. |last_stable| replace:: :pelican-doc:`{0}` '''.format(last_stable) diff --git a/pelican/__init__.py b/pelican/__init__.py index cdcd98b1..25da26e2 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -25,7 +25,7 @@ from pelican.utils import (clean_output_dir, file_watcher, folder_watcher, maybe_pluralize) from pelican.writers import Writer -__version__ = "3.7.1.dev0" +__version__ = "3.7.1" DEFAULT_CONFIG_NAME = 'pelicanconf.py' logger = logging.getLogger(__name__) diff --git a/setup.py b/setup.py index f221930d..62ce8124 100755 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ if sys.version_info.major < 3: setup( name='pelican', - version='3.7.1.dev0', + version='3.7.1', url='http://getpelican.com/', author='Alexis Metaireau', maintainer='Justin Mayer', From 25732f7be68bfcfd1b761f10b56ff55a14c44dde Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Tue, 10 Jan 2017 13:51:37 -0800 Subject: [PATCH 015/867] Prepare version 3.7.2.dev0 for next development cycle --- docs/changelog.rst | 5 +++++ pelican/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 31c50182..2b365a45 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,11 @@ Release history ############### +Next release +============ + +- Nothing yet + 3.7.1 (2017-01-10) ================== diff --git a/pelican/__init__.py b/pelican/__init__.py index 25da26e2..69332706 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -25,7 +25,7 @@ from pelican.utils import (clean_output_dir, file_watcher, folder_watcher, maybe_pluralize) from pelican.writers import Writer -__version__ = "3.7.1" +__version__ = "3.7.2.dev0" DEFAULT_CONFIG_NAME = 'pelicanconf.py' logger = logging.getLogger(__name__) diff --git a/setup.py b/setup.py index 62ce8124..3645dc04 100755 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ if sys.version_info.major < 3: setup( name='pelican', - version='3.7.1', + version='3.7.2.dev0', url='http://getpelican.com/', author='Alexis Metaireau', maintainer='Justin Mayer', From d61e2ccd6ba051ff581cc356c384936d240ea495 Mon Sep 17 00:00:00 2001 From: Sjoerd Date: Sat, 14 Jan 2017 13:51:10 +0100 Subject: [PATCH 016/867] Use better headers in tips docs Instead of "Tip 1", "Tip 2" under "Extra tips", use headers describing the content. Also, remove the "hint" pointer as it is not really a hint and the document consists of tips anyway. --- docs/tips.rst | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/docs/tips.rst b/docs/tips.rst index 9f45f877..50160380 100644 --- a/docs/tips.rst +++ b/docs/tips.rst @@ -105,10 +105,8 @@ Custom 404 Pages GitHub Pages will display the custom 404 page described above, as noted in the relevant `GitHub docs `_. -Extra Tips ----------- - -Tip #1: +Update your site on each commit +------------------------------- To automatically update your Pelican site on each commit, you can create a post-commit hook. For example, you can add the following to @@ -116,7 +114,8 @@ a post-commit hook. For example, you can add the following to pelican content -o output -s pelicanconf.py && ghp-import output && git push origin gh-pages -Tip #2: +Copy static files to the root of your site +------------------------------------------ To use a `custom domain `_ with @@ -131,9 +130,8 @@ output directory. For example:: Note: use forward slashes, ``/``, even on Windows. -.. hint:: - You can also use the ``EXTRA_PATH_METADATA`` mechanism - to place a ``favicon.ico`` or ``robots.txt`` at the root of any site. +You can also use the ``EXTRA_PATH_METADATA`` mechanism +to place a ``favicon.ico`` or ``robots.txt`` at the root of any site. How to add YouTube or Vimeo Videos ================================== From 927d9c7ea5d40e5c1f930746d0f6d003a8503579 Mon Sep 17 00:00:00 2001 From: Bernhard Scheirle Date: Mon, 16 Jan 2017 11:33:13 +0100 Subject: [PATCH 017/867] Add new signal: feed_generated This signal gets emitted before a feed gets written to disk. Therefore it allows plugins to do arbitrary changes to the feed. --- docs/changelog.rst | 2 +- docs/plugins.rst | 2 ++ pelican/signals.py | 1 + pelican/writers.py | 1 + 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 2b365a45..aa594a2c 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -4,7 +4,7 @@ Release history Next release ============ -- Nothing yet +* New signal: ``feed_generated`` 3.7.1 (2017-01-10) ================== diff --git a/docs/plugins.rst b/docs/plugins.rst index 6a850100..008e7551 100644 --- a/docs/plugins.rst +++ b/docs/plugins.rst @@ -118,6 +118,8 @@ static_generator_init static_generator invoked in th static_generator_finalized static_generator invoked at the end of StaticGenerator.generate_context content_object_init content_object invoked at the end of Content.__init__ content_written path, context invoked each time a content file is written. +feed_generated context, feed invoked each time a feed gets generated. Can be used to modify a feed + object before it gets written. feed_written path, context, feed invoked each time a feed file is written. ================================= ============================ =========================================================================== diff --git a/pelican/signals.py b/pelican/signals.py index aeeea9f6..0b10fdfa 100644 --- a/pelican/signals.py +++ b/pelican/signals.py @@ -47,4 +47,5 @@ content_object_init = signal('content_object_init') # Writers signals content_written = signal('content_written') +feed_generated = signal('feed_generated') feed_written = signal('feed_written') diff --git a/pelican/writers.py b/pelican/writers.py index d1c8069a..48388481 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -122,6 +122,7 @@ class Writer(object): for i in range(max_items): self._add_item_to_the_feed(feed, elements[i]) + signals.feed_generated.send(context, feed=feed) if path: complete_path = os.path.join(self.output_path, path) try: From 9cca567bede872ad3383683478f0994576bb8ad5 Mon Sep 17 00:00:00 2001 From: derwinlu Date: Mon, 23 Jan 2017 23:45:08 +0100 Subject: [PATCH 018/867] Add python3.6 test environment * Add py36 environment to tox * Unify dependencies across manual installation and tox * Mention tox in the docs --- docs/contribute.rst | 5 ++++- requirements/developer.pip | 7 ++----- requirements/docs.pip | 2 ++ requirements/style.pip | 2 ++ tox.ini | 11 +++++------ 5 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 requirements/docs.pip create mode 100644 requirements/style.pip diff --git a/docs/contribute.rst b/docs/contribute.rst index 0ed82dfd..1fdc8212 100644 --- a/docs/contribute.rst +++ b/docs/contribute.rst @@ -47,13 +47,16 @@ Or using ``pip``:: $ pip install -e . +To conveniently test vs multiple python versions we also provide a tox file. + + Building the docs ================= If you make changes to the documentation, you should preview your changes before committing them:: - $ pip install sphinx + $ pip install -r requirements/docs.pip $ cd src/pelican/docs $ make html diff --git a/requirements/developer.pip b/requirements/developer.pip index e5507151..5c2f5a69 100644 --- a/requirements/developer.pip +++ b/requirements/developer.pip @@ -1,6 +1,3 @@ -r test.pip - -# Development -flake8 -flake8-import-order -sphinx==1.4.9 +-r docs.pip +-r style.pip diff --git a/requirements/docs.pip b/requirements/docs.pip new file mode 100644 index 00000000..525bdc40 --- /dev/null +++ b/requirements/docs.pip @@ -0,0 +1,2 @@ +sphinx==1.4.9 +sphinx_rtd_theme diff --git a/requirements/style.pip b/requirements/style.pip new file mode 100644 index 00000000..90225d01 --- /dev/null +++ b/requirements/style.pip @@ -0,0 +1,2 @@ +flake8 +flake8-import-order diff --git a/tox.ini b/tox.ini index cb400ea7..95cd5273 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py{27,33,34,35},docs,flake8 +envlist = py{27,33,34,35,36},docs,flake8 [testenv] basepython = @@ -7,10 +7,11 @@ basepython = py33: python3.3 py34: python3.4 py35: python3.5 + py36: python3.6 passenv = * usedevelop=True deps = - -rrequirements/developer.pip + -rrequirements/test.pip nose nose-cov coveralls @@ -24,8 +25,7 @@ commands = [testenv:docs] basepython = python2.7 deps = - sphinx==1.4.9 - sphinx_rtd_theme + -rrequirements/docs.pip changedir = docs commands = sphinx-build -W -b html -d {envtmpdir}/doctrees . _build/html @@ -37,8 +37,7 @@ import-order-style = cryptography [testenv:flake8] basepython = python2.7 deps = - flake8 <= 2.4.1 - git+https://github.com/public/flake8-import-order@2ac7052a4e02b4a8a0125a106d87465a3b9fd688 + -rrequirements/style.pip commands = flake8 --version flake8 pelican From a982e0c4f437328f625e45b21762971c4ec94654 Mon Sep 17 00:00:00 2001 From: derwinlu Date: Tue, 24 Jan 2017 00:04:58 +0100 Subject: [PATCH 019/867] Add py36 to travis builds --- .travis.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7bb5a89f..5699cff1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,11 +7,12 @@ env: - TOX_ENV=py27 - TOX_ENV=py33 - TOX_ENV=py34 + - TOX_ENV=py35 matrix: - include: - - python: 3.5 - env: - - TOX_ENV=py35 + include: + - python: 3.6 + env: + - TOX_ENV=py36 addons: apt_packages: - pandoc From 5a19887a22eedc7060fe39711b383a61f57c4fa2 Mon Sep 17 00:00:00 2001 From: derwinlu Date: Tue, 24 Jan 2017 00:07:15 +0100 Subject: [PATCH 020/867] Correct new flake8 warnings --- pelican/log.py | 1 + pelican/rstdirectives.py | 2 ++ pelican/tools/pelican_quickstart.py | 3 +++ pelican/tools/pelican_themes.py | 1 + 4 files changed, 7 insertions(+) diff --git a/pelican/log.py b/pelican/log.py index cec07bf0..70e069d3 100644 --- a/pelican/log.py +++ b/pelican/log.py @@ -197,6 +197,7 @@ class FatalLogger(LimitLogger): if FatalLogger.errors_fatal: raise RuntimeError('Error encountered') + logging.setLoggerClass(FatalLogger) diff --git a/pelican/rstdirectives.py b/pelican/rstdirectives.py index b52785dd..def67cc7 100644 --- a/pelican/rstdirectives.py +++ b/pelican/rstdirectives.py @@ -70,6 +70,7 @@ class Pygments(Directive): parsed = highlight('\n'.join(self.content), lexer, formatter) return [nodes.raw('', parsed, format='html')] + directives.register_directive('code-block', Pygments) directives.register_directive('sourcecode', Pygments) @@ -90,4 +91,5 @@ def abbr_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): expl = m.group(1) return [abbreviation(abbr, abbr, explanation=expl)], [] + roles.register_local_role('abbr', abbr_role) diff --git a/pelican/tools/pelican_quickstart.py b/pelican/tools/pelican_quickstart.py index 39e58f6f..ae0e8c9d 100755 --- a/pelican/tools/pelican_quickstart.py +++ b/pelican/tools/pelican_quickstart.py @@ -70,6 +70,7 @@ def _input_compat(prompt): r = raw_input(prompt) return r + if six.PY3: str_compat = str else: @@ -81,6 +82,7 @@ else: class _DEFAULT_PATH_TYPE(str_compat): is_default_path = True + _DEFAULT_PATH = _DEFAULT_PATH_TYPE(os.curdir) @@ -412,5 +414,6 @@ needed by Pelican. print('Done. Your new project is available at %s' % CONF['basedir']) + if __name__ == "__main__": main() diff --git a/pelican/tools/pelican_themes.py b/pelican/tools/pelican_themes.py index e4bcb7c9..fd60c424 100755 --- a/pelican/tools/pelican_themes.py +++ b/pelican/tools/pelican_themes.py @@ -14,6 +14,7 @@ def err(msg, die=None): if die: sys.exit((die if type(die) is int else 1)) + try: import pelican except: From dcb6882fbcd243cc146df73b04b1066c332aa9db Mon Sep 17 00:00:00 2001 From: derwinlu Date: Tue, 24 Jan 2017 00:32:37 +0100 Subject: [PATCH 021/867] Update tox to 2.5.0 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5699cff1..f4b68501 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,7 +20,7 @@ before_install: - sudo apt-get update -qq - sudo locale-gen fr_FR.UTF-8 tr_TR.UTF-8 install: - - pip install tox==2.0.1 + - pip install tox==2.5.0 script: tox -e $TOX_ENV notifications: irc: From 22208a9471b37a75af113fdede8d9bdb13608f4c Mon Sep 17 00:00:00 2001 From: derwinlu Date: Mon, 23 Jan 2017 23:54:38 +0100 Subject: [PATCH 022/867] Add test checking url replcmnt of unkn. file There was no test case checking the behaviour of what happens when trying to {filename} an unknown file. Also changed the braces to `'` chars that we use elseware. --- pelican/contents.py | 2 +- pelican/tests/test_contents.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pelican/contents.py b/pelican/contents.py index 1ded6cdb..0e842b39 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -246,7 +246,7 @@ class Content(object): origin = origin.replace('\\', '/') # for Windows paths. else: logger.warning( - "Unable to find `%s`, skipping url replacement.", + "Unable to find '%s', skipping url replacement.", value.geturl(), extra={ 'limit_msg': ("Other resources were not found " "and their urls not replaced")}) diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index 2f774a6e..29a219f5 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -731,3 +731,19 @@ class TestStatic(LoggedTestCase): msg="Replacement Indicator 'unknown' not recognized, " "skipping replacement", level=logging.WARNING) + + def test_link_to_unknown_file(self): + "{filename} link to unknown file should trigger warning." + + html = 'link' + page = Page(content=html, + metadata={'title': 'fakepage'}, settings=self.settings, + source_path=os.path.join('dir', 'otherdir', 'fakepage.md'), + context=self.context) + content = page.get_content('') + + self.assertEqual(content, html) + self.assertLogCountEqual( + count=1, + msg="Unable to find 'foo', skipping url replacement.", + level=logging.WARNING) From 4006554a493f81e2303f63c1bf803915828e125c Mon Sep 17 00:00:00 2001 From: Jonas Wielicki Date: Thu, 2 Feb 2017 20:38:42 +0100 Subject: [PATCH 023/867] Prevent to write outside the output directory This is crude and simply raises RuntimeError. We would generally want to have earlier checks which log a warning and do not call write at all. --- pelican/writers.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/pelican/writers.py b/pelican/writers.py index d1c8069a..88a2bcfd 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -21,6 +21,18 @@ if not six.PY3: logger = logging.getLogger(__name__) +def _sanitised_join(base_directory, *parts): + joined = os.path.abspath(os.path.join(base_directory, *parts)) + if not joined.startswith(base_directory): + raise RuntimeError( + "attempt to break out of output directory to {}".format( + joined + ) + ) + + return joined + + class Writer(object): def __init__(self, output_path, settings=None): @@ -123,7 +135,8 @@ class Writer(object): self._add_item_to_the_feed(feed, elements[i]) if path: - complete_path = os.path.join(self.output_path, path) + complete_path = _sanitised_join(self.output_path, path) + try: os.makedirs(os.path.dirname(complete_path)) except Exception: @@ -169,7 +182,8 @@ class Writer(object): if localcontext['localsiteurl']: context['localsiteurl'] = localcontext['localsiteurl'] output = template.render(localcontext) - path = os.path.join(output_path, name) + path = _sanitised_join(output_path, name) + try: os.makedirs(os.path.dirname(path)) except Exception: From 018f4468cc480b533c9a7c6c8d48904e2019b4da Mon Sep 17 00:00:00 2001 From: Jonas Wielicki Date: Fri, 3 Feb 2017 09:13:14 +0100 Subject: [PATCH 024/867] Check safety of save_as earlier if possible The check in the writer still serves as a safety net. --- pelican/contents.py | 34 +++++++++++++++++++++++++++++++--- pelican/tests/test_contents.py | 24 ++++++++++++++++++++++++ pelican/tests/test_utils.py | 33 +++++++++++++++++++++++++++++++++ pelican/utils.py | 12 ++++++++++++ pelican/writers.py | 18 +++--------------- 5 files changed, 103 insertions(+), 18 deletions(-) diff --git a/pelican/contents.py b/pelican/contents.py index 1ded6cdb..db63dd9e 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -17,8 +17,9 @@ from pelican import signals from pelican.settings import DEFAULT_CONFIG from pelican.utils import (SafeDatetime, deprecated_attribute, memoized, path_to_url, posixize_path, - python_2_unicode_compatible, set_date_tzinfo, - slugify, strftime, truncate_html_words) + python_2_unicode_compatible, sanitised_join, + set_date_tzinfo, slugify, strftime, + truncate_html_words) # Import these so that they're avalaible when you import from pelican.contents. from pelican.urlwrappers import (Author, Category, Tag, URLWrapper) # NOQA @@ -161,6 +162,22 @@ class Content(object): if not hasattr(self, prop): raise NameError(prop) + def valid_save_as(self): + """Return true if save_as doesn't write outside output path, false + otherwise.""" + try: + output_path = self.settings["OUTPUT_PATH"] + except KeyError: + # we cannot check + return True + + try: + sanitised_join(output_path, self.save_as) + except RuntimeError: # outside output_dir + return False + + return True + @property def url_format(self): """Returns the URL, formatted with the proper values""" @@ -470,9 +487,20 @@ class Static(Page): def is_valid_content(content, f): try: content.check_properties() - return True except NameError as e: logger.error( "Skipping %s: could not find information about '%s'", f, six.text_type(e)) return False + + if not content.valid_save_as(): + logger.error( + "Skipping %s: file %r would be written outside output path", + f, + content.save_as, + ) + # Note: future code might want to use a result variable instead, to + # allow showing multiple error messages at once. + return False + + return True diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index 2f774a6e..7f37edf1 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -497,6 +497,30 @@ class TestArticle(TestPage): 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() + article_kwargs['metadata']['slug'] = '../foo' + article_kwargs['settings'] = settings + article = Article(**article_kwargs) + self.assertFalse(article.valid_save_as()) + + def test_valid_save_as_detects_breakout_to_root(self): + settings = get_settings() + article_kwargs = self._copy_page_kwargs() + article_kwargs['metadata']['slug'] = '/foo' + article_kwargs['settings'] = settings + article = Article(**article_kwargs) + self.assertFalse(article.valid_save_as()) + + def test_valid_save_as_passes_valid(self): + settings = get_settings() + article_kwargs = self._copy_page_kwargs() + article_kwargs['metadata']['slug'] = 'foo' + article_kwargs['settings'] = settings + article = Article(**article_kwargs) + self.assertTrue(article.valid_save_as()) + class TestStatic(LoggedTestCase): diff --git a/pelican/tests/test_utils.py b/pelican/tests/test_utils.py index 040707ca..9a7109d6 100644 --- a/pelican/tests/test_utils.py +++ b/pelican/tests/test_utils.py @@ -11,6 +11,8 @@ from tempfile import mkdtemp import pytz +import six + from pelican import utils from pelican.generators import TemplatePagesGenerator from pelican.settings import read_settings @@ -666,3 +668,34 @@ class TestDateFormatter(unittest.TestCase): with utils.pelican_open(output_path) as output_file: self.assertEqual(output_file, utils.strftime(self.date, 'date = %A, %d %B %Y')) + + +class TestSanitisedJoin(unittest.TestCase): + def test_detect_parent_breakout(self): + with six.assertRaisesRegex( + self, + RuntimeError, + "Attempted to break out of output directory to /foo/test"): + utils.sanitised_join( + "/foo/bar", + "../test" + ) + + def test_detect_root_breakout(self): + with six.assertRaisesRegex( + self, + RuntimeError, + "Attempted to break out of output directory to /test"): + utils.sanitised_join( + "/foo/bar", + "/test" + ) + + def test_pass_deep_subpaths(self): + self.assertEqual( + utils.sanitised_join( + "/foo/bar", + "test" + ), + os.path.join("/foo/bar", "test") + ) diff --git a/pelican/utils.py b/pelican/utils.py index 9d780039..a521d3a8 100644 --- a/pelican/utils.py +++ b/pelican/utils.py @@ -36,6 +36,18 @@ except ImportError: logger = logging.getLogger(__name__) +def sanitised_join(base_directory, *parts): + joined = os.path.abspath(os.path.join(base_directory, *parts)) + if not joined.startswith(os.path.abspath(base_directory)): + raise RuntimeError( + "Attempted to break out of output directory to {}".format( + joined + ) + ) + + return joined + + def strftime(date, date_format): ''' Replacement for built-in strftime diff --git a/pelican/writers.py b/pelican/writers.py index 88a2bcfd..049b05b2 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -13,7 +13,7 @@ import six from pelican import signals from pelican.paginator import Paginator from pelican.utils import (get_relative_path, is_selected_for_writing, - path_to_url, set_date_tzinfo) + path_to_url, sanitised_join, set_date_tzinfo) if not six.PY3: from codecs import open @@ -21,18 +21,6 @@ if not six.PY3: logger = logging.getLogger(__name__) -def _sanitised_join(base_directory, *parts): - joined = os.path.abspath(os.path.join(base_directory, *parts)) - if not joined.startswith(base_directory): - raise RuntimeError( - "attempt to break out of output directory to {}".format( - joined - ) - ) - - return joined - - class Writer(object): def __init__(self, output_path, settings=None): @@ -135,7 +123,7 @@ class Writer(object): self._add_item_to_the_feed(feed, elements[i]) if path: - complete_path = _sanitised_join(self.output_path, path) + complete_path = sanitised_join(self.output_path, path) try: os.makedirs(os.path.dirname(complete_path)) @@ -182,7 +170,7 @@ class Writer(object): if localcontext['localsiteurl']: context['localsiteurl'] = localcontext['localsiteurl'] output = template.render(localcontext) - path = _sanitised_join(output_path, name) + path = sanitised_join(output_path, name) try: os.makedirs(os.path.dirname(path)) From 490e3646ba4274a60e261319e5ce42235f6a3696 Mon Sep 17 00:00:00 2001 From: derwinlu Date: Mon, 27 Feb 2017 22:29:27 +0100 Subject: [PATCH 025/867] Implement review feedback * improve wording on testing with fox (contribute.rst) * fix whitespace (.travis.xml) --- .travis.yml | 8 ++++---- docs/contribute.rst | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index f4b68501..a7a8732d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,10 +9,10 @@ env: - TOX_ENV=py34 - TOX_ENV=py35 matrix: - include: - - python: 3.6 - env: - - TOX_ENV=py36 + include: + - python: 3.6 + env: + - TOX_ENV=py36 addons: apt_packages: - pandoc diff --git a/docs/contribute.rst b/docs/contribute.rst index 1fdc8212..187c3007 100644 --- a/docs/contribute.rst +++ b/docs/contribute.rst @@ -47,7 +47,7 @@ Or using ``pip``:: $ pip install -e . -To conveniently test vs multiple python versions we also provide a tox file. +To conveniently test on multiple Python versions, we also provide a .tox file. Building the docs From b65a790b500a62a660afc54a0b49812013fe9794 Mon Sep 17 00:00:00 2001 From: fxfitz Date: Mon, 13 Mar 2017 17:59:43 -0500 Subject: [PATCH 026/867] Switch over to use awscli --- pelican/tools/templates/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pelican/tools/templates/Makefile.in b/pelican/tools/templates/Makefile.in index 079b2844..06880c44 100644 --- a/pelican/tools/templates/Makefile.in +++ b/pelican/tools/templates/Makefile.in @@ -111,7 +111,7 @@ ftp_upload: publish lftp ftp://$$(FTP_USER)@$$(FTP_HOST) -e "mirror -R $$(OUTPUTDIR) $$(FTP_TARGET_DIR) ; quit" s3_upload: publish - s3cmd sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl-public --delete-removed --guess-mime-type --no-mime-magic --no-preserve + aws s3 sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl public-read --delete cf_upload: publish cd $(OUTPUTDIR) && swift -v -A https://auth.api.rackspacecloud.com/v1.0 -U $(CLOUDFILES_USERNAME) -K $(CLOUDFILES_API_KEY) upload -c $(CLOUDFILES_CONTAINER) . From 4917b8618aa71221f640bbf749cee7944eba32f3 Mon Sep 17 00:00:00 2001 From: Tim Wienk Date: Sat, 11 Mar 2017 13:38:54 +0100 Subject: [PATCH 027/867] Fix setting None metadata from FILENAME_METADATA matches. This is relevant when using optional items in the expression. E.g. if an optional captured group is not matched, the result of `match.groupdict()` contains the captured group with value `None`. --- pelican/readers.py | 2 +- pelican/tests/test_readers.py | 38 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/pelican/readers.py b/pelican/readers.py index e899838a..a620a1e8 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -672,7 +672,7 @@ def parse_path_metadata(source_path, settings=None, process=None): # .items() for py3k compat. for k, v in match.groupdict().items(): k = k.lower() # metadata must be lowercase - if k not in metadata: + if v is not None and k not in metadata: if process: v = process(k, v) metadata[k] = v diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index ac0f81dc..0d22bf44 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -166,6 +166,25 @@ class RstReaderTest(ReaderTest): } self.assertDictHasSubset(page.metadata, expected) + def test_article_with_optional_filename_metadata(self): + page = self.read_file( + path='2012-11-29_rst_w_filename_meta#foo-bar.rst', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + expected = { + 'date': SafeDatetime(2012, 11, 29), + 'reader': 'rst', + } + self.assertDictHasSubset(page.metadata, expected) + + page = self.read_file( + path='article.rst', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + expected = { + 'reader': 'rst', + } + self.assertDictHasSubset(page.metadata, expected) + self.assertNotIn('date', page.metadata, 'Date should not be set.') + def test_article_metadata_key_lowercase(self): # Keys of metadata should be lowercase. reader = readers.RstReader(settings=get_settings()) @@ -561,6 +580,25 @@ class MdReaderTest(ReaderTest): } self.assertDictHasSubset(page.metadata, expected) + def test_article_with_optional_filename_metadata(self): + page = self.read_file( + path='2012-11-30_md_w_filename_meta#foo-bar.md', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + expected = { + 'date': SafeDatetime(2012, 11, 30), + 'reader': 'markdown', + } + self.assertDictHasSubset(page.metadata, expected) + + page = self.read_file( + path='empty.md', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + expected = { + 'reader': 'markdown', + } + self.assertDictHasSubset(page.metadata, expected) + self.assertNotIn('date', page.metadata, 'Date should not be set.') + def test_duplicate_tags_or_authors_are_removed(self): reader = readers.MarkdownReader(settings=get_settings()) content, metadata = reader.read( From 89b28fd36b38e61fcea6d4057b47d173bfd19dc0 Mon Sep 17 00:00:00 2001 From: derwinlu Date: Mon, 27 Mar 2017 16:06:07 +0200 Subject: [PATCH 028/867] Fix warnings originating from bad regexes Starting with python 3.6 warnings are issued for invalid escape sequences in regular expressions. This commit corrects all DeprecationWarning's via properly declaring the offending regular expressions as raw strings. Resolves #2095. --- docs/settings.rst | 4 ++-- pelican/__init__.py | 4 ++-- pelican/readers.py | 6 +++--- pelican/rstdirectives.py | 2 +- pelican/settings.py | 2 +- pelican/utils.py | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/settings.rst b/docs/settings.rst index aef9f674..4d09ec4c 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -712,7 +712,7 @@ Metadata The default metadata you want to use for all articles and pages. -.. data:: FILENAME_METADATA = '(?P\d{4}-\d{2}-\d{2}).*' +.. data:: FILENAME_METADATA = r'(?P\d{4}-\d{2}-\d{2}).*' The regexp that will be used to extract any metadata from the filename. All named groups that are matched will be set in the metadata object. The @@ -720,7 +720,7 @@ Metadata For example, to extract both the date and the slug:: - FILENAME_METADATA = '(?P\d{4}-\d{2}-\d{2})_(?P.*)' + FILENAME_METADATA = r'(?P\d{4}-\d{2}-\d{2})_(?P.*)' See also ``SLUGIFY_SOURCE``. diff --git a/pelican/__init__.py b/pelican/__init__.py index 69332706..fa636bb0 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -111,10 +111,10 @@ class Pelican(object): structure = self.settings['ARTICLE_PERMALINK_STRUCTURE'] # Convert %(variable) into {variable}. - structure = re.sub('%\((\w+)\)s', '{\g<1>}', structure) + structure = re.sub(r'%\((\w+)\)s', '{\g<1>}', structure) # Convert %x into {date:%x} for strftime - structure = re.sub('(%[A-z])', '{date:\g<1>}', structure) + structure = re.sub(r'(%[A-z])', '{date:\g<1>}', structure) # Strip a / prefix structure = re.sub('^/', '', structure) diff --git a/pelican/readers.py b/pelican/readers.py index a620a1e8..afc0c4bf 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -650,9 +650,9 @@ def parse_path_metadata(source_path, settings=None, process=None): ... settings=settings, ... process=reader.process_metadata) >>> pprint.pprint(metadata) # doctest: +ELLIPSIS - {'category': , - 'date': SafeDatetime(2013, 1, 1, 0, 0), - 'slug': 'my-slug'} + ... {'category': , + ... 'date': SafeDatetime(2013, 1, 1, 0, 0), + ... 'slug': 'my-slug'} """ metadata = {} dirname, basename = os.path.split(source_path) diff --git a/pelican/rstdirectives.py b/pelican/rstdirectives.py index def67cc7..b4f44aa1 100644 --- a/pelican/rstdirectives.py +++ b/pelican/rstdirectives.py @@ -75,7 +75,7 @@ directives.register_directive('code-block', Pygments) directives.register_directive('sourcecode', Pygments) -_abbr_re = re.compile('\((.*)\)$', re.DOTALL) +_abbr_re = re.compile(r'\((.*)\)$', re.DOTALL) class abbreviation(nodes.Inline, nodes.TextElement): diff --git a/pelican/settings.py b/pelican/settings.py index 1b0bd67d..99840119 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -121,7 +121,7 @@ DEFAULT_CONFIG = { 'DEFAULT_PAGINATION': False, 'DEFAULT_ORPHANS': 0, 'DEFAULT_METADATA': {}, - 'FILENAME_METADATA': '(?P\d{4}-\d{2}-\d{2}).*', + 'FILENAME_METADATA': r'(?P\d{4}-\d{2}-\d{2}).*', 'PATH_METADATA': '', 'EXTRA_PATH_METADATA': {}, 'DEFAULT_STATUS': 'published', diff --git a/pelican/utils.py b/pelican/utils.py index a521d3a8..ef9da23b 100644 --- a/pelican/utils.py +++ b/pelican/utils.py @@ -305,8 +305,8 @@ def slugify(value, substitutions=()): replace = replace and not skip if replace: - value = re.sub('[^\w\s-]', '', value).strip() - value = re.sub('[-\s]+', '-', value) + value = re.sub(r'[^\w\s-]', '', value).strip() + value = re.sub(r'[-\s]+', '-', value) else: value = value.strip() From 623eb0a4c0ff817bf656f15d513628af1d143668 Mon Sep 17 00:00:00 2001 From: derwinlu Date: Wed, 29 Mar 2017 10:19:47 +0200 Subject: [PATCH 029/867] Fix more python 3.6 regex DeprecationWarning's --- pelican/__init__.py | 4 ++-- pelican/readers.py | 4 ++-- pelican/tests/test_contents.py | 2 +- pelican/tests/test_readers.py | 40 ++++++++++++++++----------------- pelican/tools/pelican_import.py | 2 +- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/pelican/__init__.py b/pelican/__init__.py index fa636bb0..70013804 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -111,10 +111,10 @@ class Pelican(object): structure = self.settings['ARTICLE_PERMALINK_STRUCTURE'] # Convert %(variable) into {variable}. - structure = re.sub(r'%\((\w+)\)s', '{\g<1>}', structure) + structure = re.sub(r'%\((\w+)\)s', r'{\g<1>}', structure) # Convert %x into {date:%x} for strftime - structure = re.sub(r'(%[A-z])', '{date:\g<1>}', structure) + structure = re.sub(r'(%[A-z])', r'{date:\g<1>}', structure) # Strip a / prefix structure = re.sub('^/', '', structure) diff --git a/pelican/readers.py b/pelican/readers.py index afc0c4bf..fda60596 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -640,9 +640,9 @@ def parse_path_metadata(source_path, settings=None, process=None): >>> import pprint >>> settings = { - ... 'FILENAME_METADATA': '(?P[^.]*).*', + ... 'FILENAME_METADATA': r'(?P[^.]*).*', ... 'PATH_METADATA': - ... '(?P[^/]*)/(?P\d{4}-\d{2}-\d{2})/.*', + ... r'(?P[^/]*)/(?P\d{4}-\d{2}-\d{2})/.*', ... } >>> reader = BaseReader(settings=settings) >>> metadata = parse_path_metadata( diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index b4146150..ac59f5a4 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -105,7 +105,7 @@ class TestPage(LoggedTestCase): self.assertEqual(page._get_summary(), TEST_SUMMARY) self.assertLogCountEqual( count=1, - msg="_get_summary\(\) has been deprecated since 3\.6\.4\. " + msg=r"_get_summary\(\) has been deprecated since 3\.6\.4\. " "Use the summary decorator instead", level=logging.WARNING) diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index 0d22bf44..4db4938e 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -67,7 +67,7 @@ class TestAssertDictHasSubset(ReaderTest): six.assertRaisesRegex( self, AssertionError, - 'Expected.*key-c.*to have value.*val-c.*but was not in Dict', + r'Expected.*key-c.*to have value.*val-c.*but was not in Dict', self.assertDictHasSubset, self.dictionary, {'key-c': 'val-c'}) @@ -76,7 +76,7 @@ class TestAssertDictHasSubset(ReaderTest): six.assertRaisesRegex( self, AssertionError, - 'Expected .*key-a.* to have value .*val-b.* but was .*val-a.*', + r'Expected .*key-a.* to have value .*val-b.* but was .*val-a.*', self.assertDictHasSubset, self.dictionary, {'key-a': 'val-b'}) @@ -139,7 +139,7 @@ class RstReaderTest(ReaderTest): page = self.read_file( path='2012-11-29_rst_w_filename_meta#foo-bar.rst', - FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2}).*') + FILENAME_METADATA=r'(?P\d{4}-\d{2}-\d{2}).*') expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -152,9 +152,9 @@ class RstReaderTest(ReaderTest): page = self.read_file( path='2012-11-29_rst_w_filename_meta#foo-bar.rst', FILENAME_METADATA=( - '(?P\d{4}-\d{2}-\d{2})' - '_(?P.*)' - '#(?P.*)-(?P.*)')) + r'(?P\d{4}-\d{2}-\d{2})' + r'_(?P.*)' + r'#(?P.*)-(?P.*)')) expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -169,7 +169,7 @@ class RstReaderTest(ReaderTest): def test_article_with_optional_filename_metadata(self): page = self.read_file( path='2012-11-29_rst_w_filename_meta#foo-bar.rst', - FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + FILENAME_METADATA=r'(?P\d{4}-\d{2}-\d{2})?') expected = { 'date': SafeDatetime(2012, 11, 29), 'reader': 'rst', @@ -178,7 +178,7 @@ class RstReaderTest(ReaderTest): page = self.read_file( path='article.rst', - FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + FILENAME_METADATA=r'(?P\d{4}-\d{2}-\d{2})?') expected = { 'reader': 'rst', } @@ -200,9 +200,9 @@ class RstReaderTest(ReaderTest): page_metadata = self.read_file( path=input_with_metadata, FILENAME_METADATA=( - '(?P\d{4}-\d{2}-\d{2})' - '_(?P.*)' - '#(?P.*)-(?P.*)' + r'(?P\d{4}-\d{2}-\d{2})' + r'_(?P.*)' + r'#(?P.*)-(?P.*)' ), EXTRA_PATH_METADATA={ input_with_metadata: { @@ -250,9 +250,9 @@ class RstReaderTest(ReaderTest): page = self.read_file( path=input_file_path, FILENAME_METADATA=( - '(?P\d{4}-\d{2}-\d{2})' - '_(?P.*)' - '#(?P.*)-(?P.*)' + r'(?P\d{4}-\d{2}-\d{2})' + r'_(?P.*)' + r'#(?P.*)-(?P.*)' ), EXTRA_PATH_METADATA={ input_file_path: { @@ -557,7 +557,7 @@ class MdReaderTest(ReaderTest): page = self.read_file( path='2012-11-30_md_w_filename_meta#foo-bar.md', - FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2}).*') + FILENAME_METADATA=r'(?P\d{4}-\d{2}-\d{2}).*') expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -568,9 +568,9 @@ class MdReaderTest(ReaderTest): page = self.read_file( path='2012-11-30_md_w_filename_meta#foo-bar.md', FILENAME_METADATA=( - '(?P\d{4}-\d{2}-\d{2})' - '_(?P.*)' - '#(?P.*)-(?P.*)')) + r'(?P\d{4}-\d{2}-\d{2})' + r'_(?P.*)' + r'#(?P.*)-(?P.*)')) expected = { 'category': 'yeah', 'author': 'Alexis Métaireau', @@ -583,7 +583,7 @@ class MdReaderTest(ReaderTest): def test_article_with_optional_filename_metadata(self): page = self.read_file( path='2012-11-30_md_w_filename_meta#foo-bar.md', - FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + FILENAME_METADATA=r'(?P\d{4}-\d{2}-\d{2})?') expected = { 'date': SafeDatetime(2012, 11, 30), 'reader': 'markdown', @@ -592,7 +592,7 @@ class MdReaderTest(ReaderTest): page = self.read_file( path='empty.md', - FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + FILENAME_METADATA=r'(?P\d{4}-\d{2}-\d{2})?') expected = { 'reader': 'markdown', } diff --git a/pelican/tools/pelican_import.py b/pelican/tools/pelican_import.py index 204ab7b0..ef4a20e0 100755 --- a/pelican/tools/pelican_import.py +++ b/pelican/tools/pelican_import.py @@ -88,7 +88,7 @@ def decode_wp_content(content, br=True): content = re.sub(r'

]*)>', "

", content) content = content.replace('

', '

') content = re.sub(r'

\s*(]*>)', "\\1", content) - content = re.sub(r'(]*>)\s*

', "\\1", content) + content = re.sub(r'(]*>)\s*

', "\\1", content) if br: def _preserve_newline(match): return match.group(0).replace("\n", "") From f49037e0ca1f1786b123fe25ca35a978653f410d Mon Sep 17 00:00:00 2001 From: derwinlu Date: Wed, 29 Mar 2017 10:45:41 +0200 Subject: [PATCH 030/867] Fixup 89b28fd We need to mark the whole doctest string as raw as it contains regular expressions. --- pelican/readers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pelican/readers.py b/pelican/readers.py index fda60596..46055962 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -636,7 +636,7 @@ def path_metadata(full_path, source_path, settings=None): def parse_path_metadata(source_path, settings=None, process=None): - """Extract a metadata dictionary from a file's path + r"""Extract a metadata dictionary from a file's path >>> import pprint >>> settings = { @@ -650,9 +650,9 @@ def parse_path_metadata(source_path, settings=None, process=None): ... settings=settings, ... process=reader.process_metadata) >>> pprint.pprint(metadata) # doctest: +ELLIPSIS - ... {'category': , - ... 'date': SafeDatetime(2013, 1, 1, 0, 0), - ... 'slug': 'my-slug'} + {'category': , + 'date': SafeDatetime(2013, 1, 1, 0, 0), + 'slug': 'my-slug'} """ metadata = {} dirname, basename = os.path.split(source_path) From ad38d602c710355fe5051f7857793fcb036d8bad Mon Sep 17 00:00:00 2001 From: jvoisin Date: Wed, 8 Mar 2017 14:05:57 +0100 Subject: [PATCH 031/867] Improve the regexp used in _update_content a html tag always starts with <[a-z], < [a-z] is invalid a space can be found after the = in href='bleh' This function is taking 10% of the compilation time, with caching enabled, maybe it's worth optimising the regexp a bit more, I don't know. --- pelican/contents.py | 4 ++-- pelican/tests/test_contents.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/pelican/contents.py b/pelican/contents.py index 3187f328..3d1128c9 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -219,8 +219,8 @@ class Content(object): instrasite_link_regex = self.settings['INTRASITE_LINK_REGEX'] regex = r""" - (?P<\s*[^\>]* # match tag with all url-value attributes - (?:href|src|poster|data|cite|formaction|action)\s*=) + (?P<[^\>]+ # match tag with all url-value attributes + (?:href|src|poster|data|cite|formaction|action)\s*=\s*) (?P["\']) # require value to be quoted (?P{0}(?P.*?)) # the url value diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index b4146150..11fa958a 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -771,3 +771,24 @@ class TestStatic(LoggedTestCase): count=1, msg="Unable to find 'foo', skipping url replacement.", level=logging.WARNING) + + def test_index_link_syntax_with_spaces(self): + """{index} link syntax triggers url replacement + with spaces around the equal sign.""" + + html = 'link' + page = Page( + content=html, + metadata={'title': 'fakepage'}, + settings=self.settings, + source_path=os.path.join('dir', 'otherdir', 'fakepage.md'), + context=self.context) + content = page.get_content('') + + self.assertNotEqual(content, html) + + expected_html = ('link') + self.assertEqual(content, expected_html) From 77faffa6f75e69c7028f798b80e7a0bbe68ad794 Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Sun, 16 Apr 2017 13:45:45 +0200 Subject: [PATCH 032/867] Add Python 3.6 classifier to setup.py --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 3645dc04..f3a0ebcb 100755 --- a/setup.py +++ b/setup.py @@ -63,6 +63,7 @@ setup( 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', 'Topic :: Internet :: WWW/HTTP', 'Topic :: Software Development :: Libraries :: Python Modules', ], From 651ccbcddfbaef74de2e5a2b247686e525ebe017 Mon Sep 17 00:00:00 2001 From: MinchinWeb Date: Thu, 20 Apr 2017 13:40:19 -0600 Subject: [PATCH 033/867] Pelican trove classifier now on PyPI https://github.com/pypa/warehouse/issues/1650 (now sorted alphabetically) --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index f3a0ebcb..c26f1e71 100755 --- a/setup.py +++ b/setup.py @@ -55,6 +55,7 @@ setup( classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Console', + 'Framework :: Pelican', 'License :: OSI Approved :: GNU Affero General Public License v3', 'Operating System :: OS Independent', 'Programming Language :: Python :: 2', From 24c41195a669070d0970ad5d62f3fa5887902900 Mon Sep 17 00:00:00 2001 From: MinchinWeb Date: Wed, 26 Apr 2017 10:34:47 -0600 Subject: [PATCH 034/867] Use 4-space indentation --- setup.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/setup.py b/setup.py index c26f1e71..be038971 100755 --- a/setup.py +++ b/setup.py @@ -53,20 +53,20 @@ setup( install_requires=requires, entry_points=entry_points, classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Environment :: Console', - 'Framework :: Pelican', - 'License :: OSI Approved :: GNU Affero General Public License v3', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Topic :: Internet :: WWW/HTTP', - 'Topic :: Software Development :: Libraries :: Python Modules', + 'Development Status :: 5 - Production/Stable', + 'Environment :: Console', + 'Framework :: Pelican', + 'License :: OSI Approved :: GNU Affero General Public License v3', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Topic :: Internet :: WWW/HTTP', + 'Topic :: Software Development :: Libraries :: Python Modules', ], test_suite='pelican.tests', ) From 32c154be95cd71ea96284b1dbee1d3fa04a9adb1 Mon Sep 17 00:00:00 2001 From: Brandon B Date: Fri, 28 Apr 2017 19:18:44 -0700 Subject: [PATCH 035/867] Update tips.rst I found that one of the easiest ways to publish to GitHub User Pages is to make Pelican a subdirectory within the ``.github.io`` project, then generate the output files in the root level of ``.github.io`` and push the entire project to GitHub. --- docs/tips.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/tips.rst b/docs/tips.rst index 50160380..bf0b3599 100644 --- a/docs/tips.rst +++ b/docs/tips.rst @@ -98,6 +98,18 @@ by the ``ghp-import`` command) to the ``elemoine.github.io`` repository's To publish your Pelican site as User Pages, feel free to adjust the ``github`` target of the Makefile. + +Another option for publishing to User Pages is to generate the output files in the root directory of the project. + +For example, your main project folder is ``.github.io`` and you can create the Pelican project in a subdirectory called ``Pelican``. Then from inside the ``Pelican`` folder you can run:: + + $ pelican content -o .. -s pelicanconf.py + +Now you can push the whole project ``.github.io`` to the master branch of your GitHub repository:: + + $ git push origin master + +(assuming origin is set to your remote repository). Custom 404 Pages ---------------- From c68958e6b89459bbd0488208279d843a41cc5681 Mon Sep 17 00:00:00 2001 From: derwinlu Date: Fri, 5 May 2017 16:02:48 +0200 Subject: [PATCH 036/867] Fixup ec5c77b25145f7c20fee24c6b85b478295dbc956 fix forgotten PAGES -> pages --- pelican/themes/notmyidea/templates/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pelican/themes/notmyidea/templates/index.html b/pelican/themes/notmyidea/templates/index.html index 6019987b..20ca7eee 100644 --- a/pelican/themes/notmyidea/templates/index.html +++ b/pelican/themes/notmyidea/templates/index.html @@ -51,7 +51,7 @@ {% else %}

Pages

- {% for page in PAGES %} + {% for page in pages %}
  • {{ page.title }}
  • {% endfor %}
    From fdf355c377627d82026765872b8660086715a419 Mon Sep 17 00:00:00 2001 From: evilroot Date: Thu, 8 Jun 2017 22:54:12 +0100 Subject: [PATCH 037/867] Fix rsync_upload in Makefile template --- pelican/tools/templates/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pelican/tools/templates/Makefile.in b/pelican/tools/templates/Makefile.in index 06880c44..5dc81baa 100644 --- a/pelican/tools/templates/Makefile.in +++ b/pelican/tools/templates/Makefile.in @@ -102,7 +102,7 @@ ssh_upload: publish scp -P $$(SSH_PORT) -r $$(OUTPUTDIR)/* $$(SSH_USER)@$$(SSH_HOST):$$(SSH_TARGET_DIR) rsync_upload: publish - rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude + rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --cvs-exclude --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) dropbox_upload: publish cp -r $$(OUTPUTDIR)/* $$(DROPBOX_DIR) From 7336de45cbb5f60e934b65f823d0583b48a6c96b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 6 Jun 2017 20:34:56 +0200 Subject: [PATCH 038/867] Ability to override docutils HTML writer/translator. The RstReader class can now use user-specified writer/translator classes instead of the hardcoded ones from docutils. This allows for far easier overriding of the default HTML output -- in the past one would need to override the internal _parse_metadata() and _get_publisher() functions. With hypothetical Html5Writer and Html5FieldBodyTranslator classes, based for example on docutils.writers.html5_polyglot.Writer and docutils.writers.html5_polyglot.HTMLTranslator, a plugin that overrides the default behavior would now look just like this: # (definition of Writer / Translator classes omitted) class Html5RstReader(RstReader): writer_class = Html5Writer field_body_translator_class = Html5FieldBodyTranslator def add_reader(readers): readers.reader_classes['rst'] = Html5RstReader def register(): pelican.signals.readers_init.connect(add_reader) --- pelican/readers.py | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/pelican/readers.py b/pelican/readers.py index 46055962..61126c9c 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -9,7 +9,7 @@ from collections import OrderedDict import docutils import docutils.core import docutils.io -from docutils.writers.html4css1 import HTMLTranslator +from docutils.writers.html4css1 import HTMLTranslator, Writer import six from six.moves.html_parser import HTMLParser @@ -135,12 +135,19 @@ class _FieldBodyTranslator(HTMLTranslator): pass -def render_node_to_html(document, node): - visitor = _FieldBodyTranslator(document) +def render_node_to_html(document, node, field_body_translator_class): + visitor = field_body_translator_class(document) node.walkabout(visitor) return visitor.astext() +class PelicanHTMLWriter(Writer): + + def __init__(self): + Writer.__init__(self) + self.translator_class = PelicanHTMLTranslator + + class PelicanHTMLTranslator(HTMLTranslator): def visit_abbreviation(self, node): @@ -160,11 +167,26 @@ class PelicanHTMLTranslator(HTMLTranslator): class RstReader(BaseReader): - """Reader for reStructuredText files""" + """Reader for reStructuredText files + + By default the output HTML is written using + docutils.writers.html4css1.Writer and translated using a subclass of + docutils.writers.html4css1.HTMLTranslator. If you want to override it with + your own writer/translator (e.g. a HTML5-based one), pass your classes to + these two attributes. Look in the source code for details. + + writer_class Used for writing contents + field_body_translator_class Used for translating metadata such + as article summary + + """ enabled = bool(docutils) file_extensions = ['rst'] + writer_class = PelicanHTMLWriter + field_body_translator_class = _FieldBodyTranslator + class FileInput(docutils.io.FileInput): """Patch docutils.io.FileInput to remove "U" mode in py3. @@ -192,7 +214,9 @@ class RstReader(BaseReader): name_elem, body_elem = element.children name = name_elem.astext() if name in formatted_fields: - value = render_node_to_html(document, body_elem) + value = render_node_to_html( + document, body_elem, + self.field_body_translator_class) else: value = body_elem.astext() elif element.tagname == 'authors': # author list @@ -217,10 +241,10 @@ class RstReader(BaseReader): extra_params.update(user_params) pub = docutils.core.Publisher( + writer=self.writer_class(), source_class=self.FileInput, destination_class=docutils.io.StringOutput) pub.set_components('standalone', 'restructuredtext', 'html') - pub.writer.translator_class = PelicanHTMLTranslator pub.process_programmatic_settings(None, extra_params, None) pub.set_source(source_path=source_path) pub.publish(enable_exit_status=True) From 43ec3c4f7dd188bfa5a9ad430618a7b1fe570ffd Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Wed, 19 Jul 2017 13:29:04 -0700 Subject: [PATCH 039/867] Fix copyright year to date of first publication --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 81a06e3a..3748fd75 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,7 +17,7 @@ extensions = ['sphinx.ext.autodoc', source_suffix = '.rst' master_doc = 'index' project = 'Pelican' -copyright = '2015, Alexis Metaireau and contributors' +copyright = '2010, Alexis Metaireau and contributors' exclude_patterns = ['_build'] release = __version__ version = '.'.join(release.split('.')[:1]) From 1c96d8c933aaf8770b83a228d22936e36e40da3d Mon Sep 17 00:00:00 2001 From: Jonas Lundholm Bertelsen Date: Mon, 24 Jul 2017 12:25:21 +0200 Subject: [PATCH 040/867] Correct import of socketserver on Python 3 --- pelican/tools/templates/fabfile.py.in | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pelican/tools/templates/fabfile.py.in b/pelican/tools/templates/fabfile.py.in index 18131d5f..d3c50a83 100644 --- a/pelican/tools/templates/fabfile.py.in +++ b/pelican/tools/templates/fabfile.py.in @@ -3,7 +3,10 @@ import fabric.contrib.project as project import os import shutil import sys -import SocketServer +try: + import socketserver +except ImportError: + import SocketServer as socketserver from pelican.server import ComplexHTTPRequestHandler @@ -48,7 +51,7 @@ def serve(): """Serve site at http://localhost:8000/""" os.chdir(env.deploy_path) - class AddressReuseTCPServer(SocketServer.TCPServer): + class AddressReuseTCPServer(socketserver.TCPServer): allow_reuse_address = True server = AddressReuseTCPServer(('', PORT), ComplexHTTPRequestHandler) From 089b46b7eb86cb55491d3c8e8bccb956b6dceeff Mon Sep 17 00:00:00 2001 From: winlu Date: Mon, 24 Jul 2017 19:01:14 +0200 Subject: [PATCH 041/867] Consolidate validation of content (#2128) * Consolidate validation of content Previously we validated content outside of the content class via calls to `is_valid_content` and some additional checks in page / article generators (valid status). This commit moves those checks all into content.valid() resulting in a cleaner code structure. This allows us to restructure how generators interact with content, removing several old bugs in pelican (#1748, #1356, #2098). - move verification function into content class - move generator verifying content to contents class - remove unused quote class - remove draft class (no more rereading drafts) - move auto draft status setter into Article.__init__ - add now parsing draft to basic test output - remove problematic DEFAULT_STATUS setting - add setter/getter for content.status removes need for lower() calls when verifying status * expand c4b184fa32f73a737ff9bade440ce0f7914dc350 Mostly implement feedback by @iKevinY. * rename content.valid to content.is_valid * rename valid_* functions to has_valid_* * update tests and function calls in code accordingly --- pelican/contents.py | 108 +++++++++++------- pelican/generators.py | 54 +++------ pelican/settings.py | 1 - .../output/basic/drafts/a-draft-article.html | 69 +++++++++++ pelican/tests/test_contents.py | 16 +-- 5 files changed, 159 insertions(+), 89 deletions(-) create mode 100644 pelican/tests/output/basic/drafts/a-draft-article.html diff --git a/pelican/contents.py b/pelican/contents.py index 3d1128c9..15770fc8 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -138,14 +138,7 @@ class Content(object): # manage status if not hasattr(self, 'status'): - self.status = settings['DEFAULT_STATUS'] - if not settings['WITH_FUTURE_DATES'] and hasattr(self, 'date'): - if self.date.tzinfo is None: - now = SafeDatetime.now() - else: - now = SafeDatetime.utcnow().replace(tzinfo=pytz.utc) - if self.date > now: - self.status = 'draft' + self.status = getattr(self, 'default_status', None) # store the summary metadata if it is set if 'summary' in metadata: @@ -156,13 +149,17 @@ class Content(object): def __str__(self): return self.source_path or repr(self) - def check_properties(self): + def _has_valid_mandatory_properties(self): """Test mandatory properties are set.""" for prop in self.mandatory_properties: if not hasattr(self, prop): - raise NameError(prop) + logger.error( + "Skipping %s: could not find information about '%s'", + self, prop) + return False + return True - def valid_save_as(self): + def _has_valid_save_as(self): """Return true if save_as doesn't write outside output path, false otherwise.""" try: @@ -174,10 +171,35 @@ class Content(object): try: sanitised_join(output_path, self.save_as) except RuntimeError: # outside output_dir + logger.error( + "Skipping %s: file %r would be written outside output path", + self, + self.save_as, + ) return False return True + def _has_valid_status(self): + if hasattr(self, 'allowed_statuses'): + if self.status not in self.allowed_statuses: + logger.error( + "Unknown status '%s' for file %s, skipping it.", + self.status, + self + ) + return False + + # if undefined we allow all + return True + + def is_valid(self): + """Validate Content""" + # Use all() to not short circuit and get results of all validations + return all([self._has_valid_mandatory_properties(), + self._has_valid_save_as(), + self._has_valid_status()]) + @property def url_format(self): """Returns the URL, formatted with the proper values""" @@ -194,8 +216,10 @@ class Content(object): }) return metadata - def _expand_settings(self, key): - fq_key = ('%s_%s' % (self.__class__.__name__, key)).upper() + def _expand_settings(self, key, klass=None): + if not klass: + klass = self.__class__.__name__ + fq_key = ('%s_%s' % (klass, key)).upper() return self.settings[fq_key].format(**self.url_format) def get_url_setting(self, key): @@ -338,6 +362,15 @@ class Content(object): """Dummy function""" pass + @property + def status(self): + return self._status + + @status.setter + def status(self, value): + # TODO maybe typecheck + self._status = value.lower() + @property def url(self): return self.get_url_setting('url') @@ -383,21 +416,36 @@ class Content(object): class Page(Content): mandatory_properties = ('title',) + allowed_statuses = ('published', 'hidden') + default_status = 'published' default_template = 'page' -class Article(Page): +class Article(Content): mandatory_properties = ('title', 'date', 'category') + allowed_statuses = ('published', 'draft') + default_status = 'published' default_template = 'article' + def __init__(self, *args, **kwargs): + super(Article, self).__init__(*args, **kwargs) -class Draft(Page): - mandatory_properties = ('title', 'category') - default_template = 'article' + # handle WITH_FUTURE_DATES (designate article to draft based on date) + if not self.settings['WITH_FUTURE_DATES'] and hasattr(self, 'date'): + if self.date.tzinfo is None: + now = SafeDatetime.now() + else: + now = SafeDatetime.utcnow().replace(tzinfo=pytz.utc) + if self.date > now: + self.status = 'draft' + # if we are a draft and there is no date provided, set max datetime + if not hasattr(self, 'date') and self.status == 'draft': + self.date = SafeDatetime.max -class Quote(Page): - base_properties = ('author', 'date') + def _expand_settings(self, key): + klass = 'article' if self.status == 'published' else 'draft' + return super(Article, self)._expand_settings(key, klass) @python_2_unicode_compatible @@ -482,25 +530,3 @@ class Static(Page): self.override_save_as = new_save_as self.override_url = new_url - - -def is_valid_content(content, f): - try: - content.check_properties() - except NameError as e: - logger.error( - "Skipping %s: could not find information about '%s'", - f, six.text_type(e)) - return False - - if not content.valid_save_as(): - logger.error( - "Skipping %s: file %r would be written outside output path", - f, - content.save_as, - ) - # Note: future code might want to use a result variable instead, to - # allow showing multiple error messages at once. - return False - - return True diff --git a/pelican/generators.py b/pelican/generators.py index f3590155..eb97c115 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -19,7 +19,7 @@ import six from pelican import signals from pelican.cache import FileStampDataCacher -from pelican.contents import Article, Draft, Page, Static, is_valid_content +from pelican.contents import Article, Page, Static from pelican.readers import Readers from pelican.utils import (DateFormatter, copy, mkdir_p, posixize_path, process_translations, python_2_unicode_compatible) @@ -509,12 +509,10 @@ class ArticlesGenerator(CachingGenerator): for f in self.get_files( self.settings['ARTICLE_PATHS'], exclude=self.settings['ARTICLE_EXCLUDES']): - article_or_draft = self.get_cached_data(f, None) - if article_or_draft is None: - # TODO needs overhaul, maybe nomad for read_file - # solution, unified behaviour + article = self.get_cached_data(f, None) + if article is None: try: - article_or_draft = self.readers.read_file( + article = self.readers.read_file( base_path=self.path, path=f, content_class=Article, context=self.context, preread_signal=signals.article_generator_preread, @@ -528,34 +526,17 @@ class ArticlesGenerator(CachingGenerator): self._add_failed_source_path(f) continue - if not is_valid_content(article_or_draft, f): + if not article.is_valid(): self._add_failed_source_path(f) continue - if article_or_draft.status.lower() == "published": - pass - elif article_or_draft.status.lower() == "draft": - article_or_draft = self.readers.read_file( - base_path=self.path, path=f, content_class=Draft, - context=self.context, - preread_signal=signals.article_generator_preread, - preread_sender=self, - context_signal=signals.article_generator_context, - context_sender=self) - else: - logger.error( - "Unknown status '%s' for file %s, skipping it.", - article_or_draft.status, f) - self._add_failed_source_path(f) - continue + self.cache_data(f, article) - self.cache_data(f, article_or_draft) - - if article_or_draft.status.lower() == "published": - all_articles.append(article_or_draft) - else: - all_drafts.append(article_or_draft) - self.add_source_path(article_or_draft) + if article.status == "published": + all_articles.append(article) + elif article.status == "draft": + all_drafts.append(article) + self.add_source_path(article) self.articles, self.translations = process_translations( all_articles, @@ -634,22 +615,15 @@ class PagesGenerator(CachingGenerator): self._add_failed_source_path(f) continue - if not is_valid_content(page, f): - self._add_failed_source_path(f) - continue - - if page.status.lower() not in ("published", "hidden"): - logger.error( - "Unknown status '%s' for file %s, skipping it.", - page.status, f) + if not page.is_valid(): self._add_failed_source_path(f) continue self.cache_data(f, page) - if page.status.lower() == "published": + if page.status == "published": all_pages.append(page) - elif page.status.lower() == "hidden": + elif page.status == "hidden": hidden_pages.append(page) self.add_source_path(page) diff --git a/pelican/settings.py b/pelican/settings.py index 831e1851..d1249a24 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -126,7 +126,6 @@ DEFAULT_CONFIG = { 'FILENAME_METADATA': r'(?P\d{4}-\d{2}-\d{2}).*', 'PATH_METADATA': '', 'EXTRA_PATH_METADATA': {}, - 'DEFAULT_STATUS': 'published', 'ARTICLE_PERMALINK_STRUCTURE': '', 'TYPOGRIFY': False, 'TYPOGRIFY_IGNORE_TAGS': [], diff --git a/pelican/tests/output/basic/drafts/a-draft-article.html b/pelican/tests/output/basic/drafts/a-draft-article.html new file mode 100644 index 00000000..64d56ff9 --- /dev/null +++ b/pelican/tests/output/basic/drafts/a-draft-article.html @@ -0,0 +1,69 @@ + + + + + A draft article + + + + + + + + +
    +
    +
    +

    + A draft article

    +
    + +
    +
    + + Published: + + +

    In misc.

    + +

    This is a draft article, it should live under the /drafts/ folder and not be +listed anywhere else.

    + +
    + +
    +
    +
    + +
    + + + + + \ No newline at end of file diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index 56928b81..d028c7a1 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -69,11 +69,13 @@ class TestPage(LoggedTestCase): def test_mandatory_properties(self): # If the title is not set, must throw an exception. page = Page('content') - with self.assertRaises(NameError): - page.check_properties() - + self.assertFalse(page._has_valid_mandatory_properties()) + self.assertLogCountEqual( + count=1, + msg="Skipping .*: could not find information about 'title'", + level=logging.ERROR) page = Page('content', metadata={'title': 'foobar'}) - page.check_properties() + self.assertTrue(page._has_valid_mandatory_properties()) def test_summary_from_metadata(self): # If a :summary: metadata is given, it should be used @@ -503,7 +505,7 @@ class TestArticle(TestPage): article_kwargs['metadata']['slug'] = '../foo' article_kwargs['settings'] = settings article = Article(**article_kwargs) - self.assertFalse(article.valid_save_as()) + self.assertFalse(article._has_valid_save_as()) def test_valid_save_as_detects_breakout_to_root(self): settings = get_settings() @@ -511,7 +513,7 @@ class TestArticle(TestPage): article_kwargs['metadata']['slug'] = '/foo' article_kwargs['settings'] = settings article = Article(**article_kwargs) - self.assertFalse(article.valid_save_as()) + self.assertFalse(article._has_valid_save_as()) def test_valid_save_as_passes_valid(self): settings = get_settings() @@ -519,7 +521,7 @@ class TestArticle(TestPage): article_kwargs['metadata']['slug'] = 'foo' article_kwargs['settings'] = settings article = Article(**article_kwargs) - self.assertTrue(article.valid_save_as()) + self.assertTrue(article._has_valid_save_as()) class TestStatic(LoggedTestCase): From 68724e9682f91763104811ff72e092f07d9ad6b5 Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Tue, 25 Jul 2017 09:00:41 -0700 Subject: [PATCH 042/867] Encourage use of https:// in SITEURL Refs #2183 #2186 --- docs/settings.rst | 8 +++++--- pelican/tools/pelican_quickstart.py | 2 +- pelican/tools/templates/publishconf.py.in | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/settings.rst b/docs/settings.rst index 462f9d36..e5ce19f5 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -203,10 +203,12 @@ Basic settings .. data:: SITEURL - Base URL of your website. Not defined by default, so it is best to specify + Base URL of your web site. Not defined by default, so it is best to specify your SITEURL; if you do not, feeds will not be generated with - properly-formed URLs. You should include ``http://`` and your domain, with - no trailing slash at the end. Example: ``SITEURL = 'http://mydomain.com'`` + properly-formed URLs. If your site is available via HTTPS, this setting + should begin with ``https://`` — otherwise use ``http://``. Then append your + domain, with no trailing slash at the end. + Example: ``SITEURL = 'https://example.com'`` .. data:: STATIC_PATHS = ['images'] diff --git a/pelican/tools/pelican_quickstart.py b/pelican/tools/pelican_quickstart.py index ae0e8c9d..eb63ed1f 100755 --- a/pelican/tools/pelican_quickstart.py +++ b/pelican/tools/pelican_quickstart.py @@ -246,7 +246,7 @@ needed by Pelican. CONF['lang'] = ask('What will be the default language of this web site?', str_compat, args.lang or CONF['lang'], 2) - if ask('Do you want to specify a URL prefix? e.g., http://example.com ', + if ask('Do you want to specify a URL prefix? e.g., https://example.com ', answer=bool, default=True): CONF['siteurl'] = ask('What is your URL prefix? (see ' 'above example; no trailing slash)', diff --git a/pelican/tools/templates/publishconf.py.in b/pelican/tools/templates/publishconf.py.in index d1ed994d..473490a9 100755 --- a/pelican/tools/templates/publishconf.py.in +++ b/pelican/tools/templates/publishconf.py.in @@ -10,6 +10,7 @@ import sys sys.path.append(os.curdir) from pelicanconf import * +# If your site is available via HTTPS, make sure SITEURL begins with https:// SITEURL = '$siteurl' RELATIVE_URLS = False From 9495a6c3df8d0417568a78fb03f6c0eccc7adf72 Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Sun, 30 Jul 2017 17:41:03 +0200 Subject: [PATCH 043/867] Remove trailing whitespaces from notmyidea --- pelican/themes/notmyidea/static/css/main.css | 64 +++++++++---------- .../themes/notmyidea/static/css/typogrify.css | 2 +- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/pelican/themes/notmyidea/static/css/main.css b/pelican/themes/notmyidea/static/css/main.css index 03a77e69..8f3deef0 100644 --- a/pelican/themes/notmyidea/static/css/main.css +++ b/pelican/themes/notmyidea/static/css/main.css @@ -43,7 +43,7 @@ h1, h2, h3, h4, h5, h6 { } h3, h4, h5, h6 { margin-top: .8em; } - + hr { border: 2px solid #EEEEEE; } /* Anchors */ @@ -64,7 +64,7 @@ a:hover, a:active { h1 a:hover { background-color: inherit } - + /* Paragraphs */ div.line-block, p { margin-top: 1em; @@ -124,7 +124,7 @@ div.note { /* Tables */ table {margin: .5em auto 1.5em auto; width: 98%;} - + /* Thead */ thead th {padding: .5em .4em; text-align: left;} thead td {} @@ -132,14 +132,14 @@ table {margin: .5em auto 1.5em auto; width: 98%;} /* Tbody */ tbody td {padding: .5em .4em;} tbody th {} - + tbody .alt td {} tbody .alt th {} - + /* Tfoot */ tfoot th {} tfoot td {} - + /* HTML5 tags */ header, section, footer, aside, nav, article, figure { @@ -173,9 +173,9 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} color: #C74350; text-shadow: none; } - + #banner h1 strong {font-size: 0.36em; font-weight: normal;} - + /* Main Nav */ #banner nav { background: #000305; @@ -186,15 +186,15 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} padding: 0; text-align: center; width: 800px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } - + #banner nav ul {list-style: none; margin: 0 auto; width: 800px;} #banner nav li {float: left; display: inline; margin: 0;} - + #banner nav a:link, #banner nav a:visited { color: #fff; display: inline-block; @@ -208,12 +208,12 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} color: #fff; text-shadow: none !important; } - + #banner nav li:first-child a { border-top-left-radius: 5px; -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; - + border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; @@ -228,7 +228,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} overflow: hidden; padding: 20px; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -257,7 +257,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} overflow: hidden; padding: 20px 20px; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -292,21 +292,21 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} float: left; width: 615px; } - + #extras .blogroll li {float: left; margin: 0 20px 0 0; width: 185px;} - + /* Social */ #extras .social { float: right; width: 175px; } - + #extras div[class='social'] a { background-repeat: no-repeat; background-position: 3px 6px; padding-left: 25px; } - + /* Icons */ .social a[href*='about.me'] {background-image: url('../images/icons/aboutme.png');} .social a[href*='bitbucket.org'] {background-image: url('../images/icons/bitbucket.png');} @@ -346,7 +346,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} padding: 20px; text-align: left; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -390,7 +390,7 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} /* Blog Index */ #posts-list {list-style: none; margin: 0;} #posts-list .hentry {padding-left: 10px; position: relative;} - + #posts-list footer { left: 10px; position: relative; @@ -398,7 +398,7 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} top: 0.5em; width: 190px; } - + /* About the Author */ #about-author { background: #f9f9f9; @@ -406,21 +406,21 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} font-style: normal; margin: 2em 0; padding: 10px 20px 15px 20px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } - + #about-author strong { color: #C64350; clear: both; display: block; font-size: 1.429em; } - + #about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;} - + /* Comments */ #comments-list {list-style: none; margin: 0 1em;} #comments-list blockquote { @@ -429,24 +429,24 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} font-style: normal; margin: 0; padding: 15px 20px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } #comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;} - + #comments-list li:nth-child(2n) blockquote {background: #F5f5f5;} - + /* Add a Comment */ #add-comment label {clear: left; float: left; text-align: left; width: 150px;} #add-comment input[type='text'], #add-comment input[type='email'], #add-comment input[type='url'] {float: left; width: 200px;} - + #add-comment textarea {float: left; height: 150px; width: 495px;} - + #add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;} - + #add-comment input[type='submit'] {float: right; margin: 0 .5em;} #add-comment * {margin-bottom: .5em;} diff --git a/pelican/themes/notmyidea/static/css/typogrify.css b/pelican/themes/notmyidea/static/css/typogrify.css index c9b34dc8..3bae4976 100644 --- a/pelican/themes/notmyidea/static/css/typogrify.css +++ b/pelican/themes/notmyidea/static/css/typogrify.css @@ -1,3 +1,3 @@ .caps {font-size:.92em;} -.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} +.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} .dquo {margin-left:-.38em;} From 9ce09c07151e6876025bab2460fcd6b79af3e9da Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Sun, 30 Jul 2017 17:46:18 +0200 Subject: [PATCH 044/867] Store fonts of notmyidea theme locally Used google-font-download ((commit ecc521e894c55e83773351264fe5bbef99ae70ad)) to download the fonts. font-download -f 'woff woff2' -l 'latin' 'Yanone Kaffeesatz:400' --- pelican/themes/notmyidea/static/css/fonts.css | 12 + pelican/themes/notmyidea/static/css/main.css | 2 +- .../static/fonts/Yanone_Kaffeesatz_400.eot | Bin 0 -> 20932 bytes .../static/fonts/Yanone_Kaffeesatz_400.svg | 407 ++++++++++++++++++ .../static/fonts/Yanone_Kaffeesatz_400.ttf | Bin 0 -> 39168 bytes .../static/fonts/Yanone_Kaffeesatz_400.woff | Bin 0 -> 22256 bytes .../static/fonts/Yanone_Kaffeesatz_400.woff2 | Bin 0 -> 18320 bytes .../themes/notmyidea/static/fonts/font.css | 12 + 8 files changed, 432 insertions(+), 1 deletion(-) create mode 100644 pelican/themes/notmyidea/static/css/fonts.css create mode 100644 pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.eot create mode 100644 pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.svg create mode 100644 pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.ttf create mode 100644 pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff create mode 100644 pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff2 create mode 100644 pelican/themes/notmyidea/static/fonts/font.css diff --git a/pelican/themes/notmyidea/static/css/fonts.css b/pelican/themes/notmyidea/static/css/fonts.css new file mode 100644 index 00000000..56015076 --- /dev/null +++ b/pelican/themes/notmyidea/static/css/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('../fonts/Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('../fonts/Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/pelican/themes/notmyidea/static/css/main.css b/pelican/themes/notmyidea/static/css/main.css index 8f3deef0..9673ca45 100644 --- a/pelican/themes/notmyidea/static/css/main.css +++ b/pelican/themes/notmyidea/static/css/main.css @@ -12,7 +12,7 @@ @import url("reset.css"); @import url("pygment.css"); @import url("typogrify.css"); -@import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz&subset=latin); +@import url("fonts.css"); /***** Global *****/ /* Body */ diff --git a/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.eot b/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.eot new file mode 100644 index 0000000000000000000000000000000000000000..b3b90dbc3ef34775a8689ab6a4494810c14c5a59 GIT binary patch literal 20932 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 mb?#}R*%4j(VLYH*AKF5oS rn0PZ0T66rs0j%h=b^w~umnB; literal 0 HcmV?d00001 diff --git a/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.svg b/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.svg new file mode 100644 index 00000000..a69669b5 --- /dev/null +++ b/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.svg @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.ttf b/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6f4feb02d14c849ba1fb7dc112243386b2ad8f2f GIT binary patch literal 39168 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 literal 0 HcmV?d00001 diff --git a/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff2 b/pelican/themes/notmyidea/static/fonts/Yanone_Kaffeesatz_400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7b18f7ea49098fff3aac28a1feb0cecc429bb2ec GIT binary patch literal 18320 zcmV)KK)SzoPew8T0RR9107sAj5dZ)H0GaFn07okT0RR9100000000000000000000 z0000Qb{n549D+OsU;ufwyW4gH`|mHUcCAhbROf1%m(wg)Iz$ zBO9BBHSCy4;dTI2MCvzL6m?;f3q4^J3 zn?jvX8Rux$3dW)$94I=8FC$C<0{zJt^8&Yqj6l~elaNO@3y$q?#~9ZE+u6q*p|MYL zf5Ov$cS+$@+Ol@U=cvx=0DaJi{b#Dq%>RFP@4%qMoF1M5(#};1>mX%R&?y)?ce#cG zSr#tM^WTp>`?b$|h$V*TmQ*7{bWP&f8;Ne+HJT=AgaQfvzdt#({>=aaMWO(KKroS@ zkS*C8=IqU}yB~|{H_dHVc`vqGUfcZ|1cw343AOGTl8RZj_jmhCrPifv_QdTNK{9zl zq3Cy?M?46Hu0mS+A7CKh|LH7e68^uHG=}A~`3OL=ldjvXuQlMIfEJiXQt0&=pt(ga z`WBIlv5k$5TC-qH#fZ^TWzY&%V`JwlHtM%oujog#{cB5sYljsWKnB#25u~8@ z&UT$LMVY6rn!g4F6J-{iAx`^%Fwrs^BDA$R_4m9$NNmtEp(PsJS(4;yvUN z(DQybYGpe}V66h|&qwpGsuXe$<;ihL!Qdqe5Fo@#EJBtQ za(=gc$Fg_!*BzYb*E6X)l0X9O)*cW5zWm=&OpL^X2#6qJa)^>O#K;BWt|z3o-Vk5m zkVsJwlLSbTEJ%(#NP!ASjao>(7D$^mNQXWU1b{0LV6uz$$cFHdP+}viA3tP`4aPki@r?ivh4s98t zxJ7X@FcXP(9moBGC`LD-1tVMm3lSWBGC9&$dy-&0>k=@4N@0RU3TOs?8qrm_6`7X> z=yp8mYUv;0eGrX22~1-Qb``}YQc-b@jp)5nmar#QOwyVWa-^WvTnK}(ETwx96N40A zNfJwQSdNP=-tRfFCO@O^M>c&7BPjq_@+XDxcq1UL#_47dFG+%GCKfhg)a2X~flG`- zf`^Z>gMxsNXzdm-XCy8e9v(eFoKZlO5Wp-m7AQ84fGroz9RiqVK+NkyL-5uUsh8du zeE5*?<%cOiIITztlu~5U$X7_ktOB%32R$)p0dw!PBY@Uwg7&sSaHP zX75*MfraE22P`cO$SvEi$OuqB0 zA>G-;^rvGevK5pW3@bR5Al`4iP_dB&MgJ<^tnYBgsAwNntx∾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 literal 0 HcmV?d00001 diff --git a/pelican/themes/notmyidea/static/fonts/font.css b/pelican/themes/notmyidea/static/fonts/font.css new file mode 100644 index 00000000..a9eb87e6 --- /dev/null +++ b/pelican/themes/notmyidea/static/fonts/font.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('Yanone_Kaffeesatz_400.woff2') format('woff2'); +} From a2d07059870def82c119d334b772cfd123c71f56 Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Sun, 30 Jul 2017 17:49:43 +0200 Subject: [PATCH 045/867] Remove Internet Explorer script, as it wasn't being used: 404 HTTP error --- pelican/themes/notmyidea/templates/base.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pelican/themes/notmyidea/templates/base.html b/pelican/themes/notmyidea/templates/base.html index 7818c235..b041faa0 100644 --- a/pelican/themes/notmyidea/templates/base.html +++ b/pelican/themes/notmyidea/templates/base.html @@ -10,10 +10,6 @@ {% if FEED_ALL_RSS %} {% endif %} - - From 9d8d555708f5a00e871e2af8dcc4683241f60cbd Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Sun, 6 Aug 2017 13:55:12 +0200 Subject: [PATCH 046/867] Regenerate tests' output --- .../basic/a-markdown-powered-article.html | 4 - pelican/tests/output/basic/archives.html | 4 - pelican/tests/output/basic/article-1.html | 4 - pelican/tests/output/basic/article-2.html | 4 - pelican/tests/output/basic/article-3.html | 4 - .../output/basic/author/alexis-metaireau.html | 4 - pelican/tests/output/basic/authors.html | 4 - pelican/tests/output/basic/categories.html | 4 - pelican/tests/output/basic/category/bar.html | 4 - pelican/tests/output/basic/category/cat1.html | 4 - pelican/tests/output/basic/category/misc.html | 4 - pelican/tests/output/basic/category/yeah.html | 4 - .../output/basic/drafts/a-draft-article.html | 4 - .../basic/filename_metadata-example.html | 4 - pelican/tests/output/basic/index.html | 4 - pelican/tests/output/basic/oh-yeah.html | 4 - .../tests/output/basic/override/index.html | 4 - .../pages/this-is-a-test-hidden-page.html | 4 - .../basic/pages/this-is-a-test-page.html | 4 - .../tests/output/basic/second-article-fr.html | 4 - .../tests/output/basic/second-article.html | 4 - pelican/tests/output/basic/tag/bar.html | 4 - pelican/tests/output/basic/tag/baz.html | 4 - pelican/tests/output/basic/tag/foo.html | 4 - pelican/tests/output/basic/tag/foobar.html | 4 - pelican/tests/output/basic/tag/oh.html | 4 - pelican/tests/output/basic/tag/yeah.html | 4 - pelican/tests/output/basic/tags.html | 4 - .../tests/output/basic/theme/css/fonts.css | 12 + pelican/tests/output/basic/theme/css/main.css | 66 +-- .../output/basic/theme/css/typogrify.css | 2 +- .../theme/fonts/Yanone_Kaffeesatz_400.eot | Bin 0 -> 20932 bytes .../theme/fonts/Yanone_Kaffeesatz_400.svg | 407 ++++++++++++++++++ .../theme/fonts/Yanone_Kaffeesatz_400.ttf | Bin 0 -> 39168 bytes .../theme/fonts/Yanone_Kaffeesatz_400.woff | Bin 0 -> 22256 bytes .../theme/fonts/Yanone_Kaffeesatz_400.woff2 | Bin 0 -> 18320 bytes .../tests/output/basic/theme/fonts/font.css | 12 + .../output/basic/this-is-a-super-article.html | 4 - pelican/tests/output/basic/unbelievable.html | 4 - .../custom/a-markdown-powered-article.html | 4 - pelican/tests/output/custom/archives.html | 4 - pelican/tests/output/custom/article-1.html | 4 - pelican/tests/output/custom/article-2.html | 4 - pelican/tests/output/custom/article-3.html | 4 - .../custom/author/alexis-metaireau.html | 4 - .../custom/author/alexis-metaireau2.html | 4 - .../custom/author/alexis-metaireau3.html | 4 - pelican/tests/output/custom/authors.html | 4 - pelican/tests/output/custom/categories.html | 4 - pelican/tests/output/custom/category/bar.html | 4 - .../tests/output/custom/category/cat1.html | 4 - .../tests/output/custom/category/misc.html | 4 - .../tests/output/custom/category/yeah.html | 4 - .../output/custom/drafts/a-draft-article.html | 4 - .../custom/filename_metadata-example.html | 4 - pelican/tests/output/custom/index.html | 4 - pelican/tests/output/custom/index2.html | 4 - pelican/tests/output/custom/index3.html | 4 - .../tests/output/custom/jinja2_template.html | 4 - pelican/tests/output/custom/oh-yeah-fr.html | 4 - pelican/tests/output/custom/oh-yeah.html | 4 - .../tests/output/custom/override/index.html | 4 - .../pages/this-is-a-test-hidden-page.html | 4 - .../custom/pages/this-is-a-test-page.html | 4 - .../output/custom/second-article-fr.html | 4 - .../tests/output/custom/second-article.html | 4 - pelican/tests/output/custom/tag/bar.html | 4 - pelican/tests/output/custom/tag/baz.html | 4 - pelican/tests/output/custom/tag/foo.html | 4 - pelican/tests/output/custom/tag/foobar.html | 4 - pelican/tests/output/custom/tag/oh.html | 4 - pelican/tests/output/custom/tag/yeah.html | 4 - pelican/tests/output/custom/tags.html | 4 - .../tests/output/custom/theme/css/fonts.css | 12 + .../tests/output/custom/theme/css/main.css | 66 +-- .../output/custom/theme/css/typogrify.css | 2 +- .../theme/fonts/Yanone_Kaffeesatz_400.eot | Bin 0 -> 20932 bytes .../theme/fonts/Yanone_Kaffeesatz_400.svg | 407 ++++++++++++++++++ .../theme/fonts/Yanone_Kaffeesatz_400.ttf | Bin 0 -> 39168 bytes .../theme/fonts/Yanone_Kaffeesatz_400.woff | Bin 0 -> 22256 bytes .../theme/fonts/Yanone_Kaffeesatz_400.woff2 | Bin 0 -> 18320 bytes .../tests/output/custom/theme/fonts/font.css | 12 + .../custom/this-is-a-super-article.html | 4 - pelican/tests/output/custom/unbelievable.html | 4 - .../tests/output/custom_locale/archives.html | 4 - .../author/alexis-metaireau.html | 4 - .../author/alexis-metaireau2.html | 4 - .../author/alexis-metaireau3.html | 4 - .../tests/output/custom_locale/authors.html | 4 - .../output/custom_locale/categories.html | 4 - .../output/custom_locale/category/bar.html | 4 - .../output/custom_locale/category/cat1.html | 4 - .../output/custom_locale/category/misc.html | 4 - .../output/custom_locale/category/yeah.html | 4 - .../custom_locale/drafts/a-draft-article.html | 4 - pelican/tests/output/custom_locale/index.html | 4 - .../tests/output/custom_locale/index2.html | 4 - .../tests/output/custom_locale/index3.html | 4 - .../output/custom_locale/jinja2_template.html | 4 - .../output/custom_locale/oh-yeah-fr.html | 4 - .../output/custom_locale/override/index.html | 4 - .../pages/this-is-a-test-hidden-page.html | 4 - .../pages/this-is-a-test-page.html | 4 - .../02/this-is-a-super-article/index.html | 4 - .../2010/octobre/15/unbelievable/index.html | 4 - .../posts/2010/octobre/20/oh-yeah/index.html | 4 - .../20/a-markdown-powered-article/index.html | 4 - .../2011/février/17/article-1/index.html | 4 - .../2011/février/17/article-2/index.html | 4 - .../2011/février/17/article-3/index.html | 4 - .../2012/février/29/second-article/index.html | 4 - .../30/filename_metadata-example/index.html | 4 - .../custom_locale/second-article-fr.html | 4 - .../tests/output/custom_locale/tag/bar.html | 4 - .../tests/output/custom_locale/tag/baz.html | 4 - .../tests/output/custom_locale/tag/foo.html | 4 - .../output/custom_locale/tag/foobar.html | 4 - .../tests/output/custom_locale/tag/oh.html | 4 - .../tests/output/custom_locale/tag/yeah.html | 4 - pelican/tests/output/custom_locale/tags.html | 4 - .../output/custom_locale/theme/css/fonts.css | 12 + .../output/custom_locale/theme/css/main.css | 66 +-- .../custom_locale/theme/css/typogrify.css | 2 +- .../theme/fonts/Yanone_Kaffeesatz_400.eot | Bin 0 -> 20932 bytes .../theme/fonts/Yanone_Kaffeesatz_400.svg | 407 ++++++++++++++++++ .../theme/fonts/Yanone_Kaffeesatz_400.ttf | Bin 0 -> 39168 bytes .../theme/fonts/Yanone_Kaffeesatz_400.woff | Bin 0 -> 22256 bytes .../theme/fonts/Yanone_Kaffeesatz_400.woff2 | Bin 0 -> 18320 bytes .../output/custom_locale/theme/fonts/font.css | 12 + 129 files changed, 1395 insertions(+), 510 deletions(-) create mode 100644 pelican/tests/output/basic/theme/css/fonts.css create mode 100644 pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.eot create mode 100644 pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.svg create mode 100644 pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.ttf create mode 100644 pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.woff create mode 100644 pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.woff2 create mode 100644 pelican/tests/output/basic/theme/fonts/font.css create mode 100644 pelican/tests/output/custom/theme/css/fonts.css create mode 100644 pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.eot create mode 100644 pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.svg create mode 100644 pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.ttf create mode 100644 pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.woff create mode 100644 pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.woff2 create mode 100644 pelican/tests/output/custom/theme/fonts/font.css create mode 100644 pelican/tests/output/custom_locale/theme/css/fonts.css create mode 100644 pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.eot create mode 100644 pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.svg create mode 100644 pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.ttf create mode 100644 pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.woff create mode 100644 pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.woff2 create mode 100644 pelican/tests/output/custom_locale/theme/fonts/font.css diff --git a/pelican/tests/output/basic/a-markdown-powered-article.html b/pelican/tests/output/basic/a-markdown-powered-article.html index f533fa3d..9053d5fe 100644 --- a/pelican/tests/output/basic/a-markdown-powered-article.html +++ b/pelican/tests/output/basic/a-markdown-powered-article.html @@ -5,10 +5,6 @@ A markdown powered article - - diff --git a/pelican/tests/output/basic/archives.html b/pelican/tests/output/basic/archives.html index 01f360eb..dcebef2c 100644 --- a/pelican/tests/output/basic/archives.html +++ b/pelican/tests/output/basic/archives.html @@ -5,10 +5,6 @@ A Pelican Blog - - diff --git a/pelican/tests/output/basic/article-1.html b/pelican/tests/output/basic/article-1.html index a5c92675..758ddf06 100644 --- a/pelican/tests/output/basic/article-1.html +++ b/pelican/tests/output/basic/article-1.html @@ -5,10 +5,6 @@ Article 1 - - diff --git a/pelican/tests/output/basic/article-2.html b/pelican/tests/output/basic/article-2.html index 1a182c5f..40d2cefd 100644 --- a/pelican/tests/output/basic/article-2.html +++ b/pelican/tests/output/basic/article-2.html @@ -5,10 +5,6 @@ Article 2 - - diff --git a/pelican/tests/output/basic/article-3.html b/pelican/tests/output/basic/article-3.html index 7fab0edd..1ef6b651 100644 --- a/pelican/tests/output/basic/article-3.html +++ b/pelican/tests/output/basic/article-3.html @@ -5,10 +5,6 @@ Article 3 - - diff --git a/pelican/tests/output/basic/author/alexis-metaireau.html b/pelican/tests/output/basic/author/alexis-metaireau.html index 3fe6c95e..bc05969e 100644 --- a/pelican/tests/output/basic/author/alexis-metaireau.html +++ b/pelican/tests/output/basic/author/alexis-metaireau.html @@ -5,10 +5,6 @@ A Pelican Blog - Alexis Métaireau - - diff --git a/pelican/tests/output/basic/authors.html b/pelican/tests/output/basic/authors.html index c580269f..c2b695c0 100644 --- a/pelican/tests/output/basic/authors.html +++ b/pelican/tests/output/basic/authors.html @@ -5,10 +5,6 @@ A Pelican Blog - Authors - - diff --git a/pelican/tests/output/basic/categories.html b/pelican/tests/output/basic/categories.html index 5aa2791f..b1c0e932 100644 --- a/pelican/tests/output/basic/categories.html +++ b/pelican/tests/output/basic/categories.html @@ -5,10 +5,6 @@ A Pelican Blog - - diff --git a/pelican/tests/output/basic/category/bar.html b/pelican/tests/output/basic/category/bar.html index 6ae80ed1..a0b06964 100644 --- a/pelican/tests/output/basic/category/bar.html +++ b/pelican/tests/output/basic/category/bar.html @@ -5,10 +5,6 @@ A Pelican Blog - bar - - diff --git a/pelican/tests/output/basic/category/cat1.html b/pelican/tests/output/basic/category/cat1.html index 369146d0..9d8a8883 100644 --- a/pelican/tests/output/basic/category/cat1.html +++ b/pelican/tests/output/basic/category/cat1.html @@ -5,10 +5,6 @@ A Pelican Blog - cat1 - - diff --git a/pelican/tests/output/basic/category/misc.html b/pelican/tests/output/basic/category/misc.html index 0ad46b6c..9012cedc 100644 --- a/pelican/tests/output/basic/category/misc.html +++ b/pelican/tests/output/basic/category/misc.html @@ -5,10 +5,6 @@ A Pelican Blog - misc - - diff --git a/pelican/tests/output/basic/category/yeah.html b/pelican/tests/output/basic/category/yeah.html index 291d43aa..c7c8e507 100644 --- a/pelican/tests/output/basic/category/yeah.html +++ b/pelican/tests/output/basic/category/yeah.html @@ -5,10 +5,6 @@ A Pelican Blog - yeah - - diff --git a/pelican/tests/output/basic/drafts/a-draft-article.html b/pelican/tests/output/basic/drafts/a-draft-article.html index 64d56ff9..7fe1b180 100644 --- a/pelican/tests/output/basic/drafts/a-draft-article.html +++ b/pelican/tests/output/basic/drafts/a-draft-article.html @@ -5,10 +5,6 @@ A draft article - - diff --git a/pelican/tests/output/basic/filename_metadata-example.html b/pelican/tests/output/basic/filename_metadata-example.html index 9c6d2747..98930240 100644 --- a/pelican/tests/output/basic/filename_metadata-example.html +++ b/pelican/tests/output/basic/filename_metadata-example.html @@ -5,10 +5,6 @@ FILENAME_METADATA example - - diff --git a/pelican/tests/output/basic/index.html b/pelican/tests/output/basic/index.html index f6d1c7bf..ed1356ed 100644 --- a/pelican/tests/output/basic/index.html +++ b/pelican/tests/output/basic/index.html @@ -5,10 +5,6 @@ A Pelican Blog - - diff --git a/pelican/tests/output/basic/oh-yeah.html b/pelican/tests/output/basic/oh-yeah.html index a8f0252b..86086bc1 100644 --- a/pelican/tests/output/basic/oh-yeah.html +++ b/pelican/tests/output/basic/oh-yeah.html @@ -5,10 +5,6 @@ Oh yeah ! - - diff --git a/pelican/tests/output/basic/override/index.html b/pelican/tests/output/basic/override/index.html index 28486f79..3b45f9e0 100644 --- a/pelican/tests/output/basic/override/index.html +++ b/pelican/tests/output/basic/override/index.html @@ -5,10 +5,6 @@ Override url/save_as - - diff --git a/pelican/tests/output/basic/pages/this-is-a-test-hidden-page.html b/pelican/tests/output/basic/pages/this-is-a-test-hidden-page.html index 16633b74..6e1bd4eb 100644 --- a/pelican/tests/output/basic/pages/this-is-a-test-hidden-page.html +++ b/pelican/tests/output/basic/pages/this-is-a-test-hidden-page.html @@ -5,10 +5,6 @@ This is a test hidden page - - diff --git a/pelican/tests/output/basic/pages/this-is-a-test-page.html b/pelican/tests/output/basic/pages/this-is-a-test-page.html index 3c29e0af..ed9bce91 100644 --- a/pelican/tests/output/basic/pages/this-is-a-test-page.html +++ b/pelican/tests/output/basic/pages/this-is-a-test-page.html @@ -5,10 +5,6 @@ This is a test page - - diff --git a/pelican/tests/output/basic/second-article-fr.html b/pelican/tests/output/basic/second-article-fr.html index 30c8ab0b..c5ceced3 100644 --- a/pelican/tests/output/basic/second-article-fr.html +++ b/pelican/tests/output/basic/second-article-fr.html @@ -5,10 +5,6 @@ Deuxième article - - diff --git a/pelican/tests/output/basic/second-article.html b/pelican/tests/output/basic/second-article.html index 090dc8dd..a68a1a6f 100644 --- a/pelican/tests/output/basic/second-article.html +++ b/pelican/tests/output/basic/second-article.html @@ -5,10 +5,6 @@ Second article - - diff --git a/pelican/tests/output/basic/tag/bar.html b/pelican/tests/output/basic/tag/bar.html index 655e97c7..b699a45d 100644 --- a/pelican/tests/output/basic/tag/bar.html +++ b/pelican/tests/output/basic/tag/bar.html @@ -5,10 +5,6 @@ A Pelican Blog - bar - - diff --git a/pelican/tests/output/basic/tag/baz.html b/pelican/tests/output/basic/tag/baz.html index c1e662d9..48a11061 100644 --- a/pelican/tests/output/basic/tag/baz.html +++ b/pelican/tests/output/basic/tag/baz.html @@ -5,10 +5,6 @@ The baz tag - - diff --git a/pelican/tests/output/basic/tag/foo.html b/pelican/tests/output/basic/tag/foo.html index 484f8884..348efcc0 100644 --- a/pelican/tests/output/basic/tag/foo.html +++ b/pelican/tests/output/basic/tag/foo.html @@ -5,10 +5,6 @@ A Pelican Blog - foo - - diff --git a/pelican/tests/output/basic/tag/foobar.html b/pelican/tests/output/basic/tag/foobar.html index c65d6a0c..34505977 100644 --- a/pelican/tests/output/basic/tag/foobar.html +++ b/pelican/tests/output/basic/tag/foobar.html @@ -5,10 +5,6 @@ A Pelican Blog - foobar - - diff --git a/pelican/tests/output/basic/tag/oh.html b/pelican/tests/output/basic/tag/oh.html index 61148527..0993e43e 100644 --- a/pelican/tests/output/basic/tag/oh.html +++ b/pelican/tests/output/basic/tag/oh.html @@ -5,10 +5,6 @@ Oh Oh Oh - - diff --git a/pelican/tests/output/basic/tag/yeah.html b/pelican/tests/output/basic/tag/yeah.html index 0eb4c4b3..2729561c 100644 --- a/pelican/tests/output/basic/tag/yeah.html +++ b/pelican/tests/output/basic/tag/yeah.html @@ -5,10 +5,6 @@ A Pelican Blog - yeah - - diff --git a/pelican/tests/output/basic/tags.html b/pelican/tests/output/basic/tags.html index 114f032e..afcd2bab 100644 --- a/pelican/tests/output/basic/tags.html +++ b/pelican/tests/output/basic/tags.html @@ -5,10 +5,6 @@ A Pelican Blog - Tags - - diff --git a/pelican/tests/output/basic/theme/css/fonts.css b/pelican/tests/output/basic/theme/css/fonts.css new file mode 100644 index 00000000..56015076 --- /dev/null +++ b/pelican/tests/output/basic/theme/css/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('../fonts/Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('../fonts/Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/pelican/tests/output/basic/theme/css/main.css b/pelican/tests/output/basic/theme/css/main.css index 03a77e69..9673ca45 100644 --- a/pelican/tests/output/basic/theme/css/main.css +++ b/pelican/tests/output/basic/theme/css/main.css @@ -12,7 +12,7 @@ @import url("reset.css"); @import url("pygment.css"); @import url("typogrify.css"); -@import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz&subset=latin); +@import url("fonts.css"); /***** Global *****/ /* Body */ @@ -43,7 +43,7 @@ h1, h2, h3, h4, h5, h6 { } h3, h4, h5, h6 { margin-top: .8em; } - + hr { border: 2px solid #EEEEEE; } /* Anchors */ @@ -64,7 +64,7 @@ a:hover, a:active { h1 a:hover { background-color: inherit } - + /* Paragraphs */ div.line-block, p { margin-top: 1em; @@ -124,7 +124,7 @@ div.note { /* Tables */ table {margin: .5em auto 1.5em auto; width: 98%;} - + /* Thead */ thead th {padding: .5em .4em; text-align: left;} thead td {} @@ -132,14 +132,14 @@ table {margin: .5em auto 1.5em auto; width: 98%;} /* Tbody */ tbody td {padding: .5em .4em;} tbody th {} - + tbody .alt td {} tbody .alt th {} - + /* Tfoot */ tfoot th {} tfoot td {} - + /* HTML5 tags */ header, section, footer, aside, nav, article, figure { @@ -173,9 +173,9 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} color: #C74350; text-shadow: none; } - + #banner h1 strong {font-size: 0.36em; font-weight: normal;} - + /* Main Nav */ #banner nav { background: #000305; @@ -186,15 +186,15 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} padding: 0; text-align: center; width: 800px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } - + #banner nav ul {list-style: none; margin: 0 auto; width: 800px;} #banner nav li {float: left; display: inline; margin: 0;} - + #banner nav a:link, #banner nav a:visited { color: #fff; display: inline-block; @@ -208,12 +208,12 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} color: #fff; text-shadow: none !important; } - + #banner nav li:first-child a { border-top-left-radius: 5px; -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; - + border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; @@ -228,7 +228,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} overflow: hidden; padding: 20px; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -257,7 +257,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} overflow: hidden; padding: 20px 20px; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -292,21 +292,21 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} float: left; width: 615px; } - + #extras .blogroll li {float: left; margin: 0 20px 0 0; width: 185px;} - + /* Social */ #extras .social { float: right; width: 175px; } - + #extras div[class='social'] a { background-repeat: no-repeat; background-position: 3px 6px; padding-left: 25px; } - + /* Icons */ .social a[href*='about.me'] {background-image: url('../images/icons/aboutme.png');} .social a[href*='bitbucket.org'] {background-image: url('../images/icons/bitbucket.png');} @@ -346,7 +346,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} padding: 20px; text-align: left; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -390,7 +390,7 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} /* Blog Index */ #posts-list {list-style: none; margin: 0;} #posts-list .hentry {padding-left: 10px; position: relative;} - + #posts-list footer { left: 10px; position: relative; @@ -398,7 +398,7 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} top: 0.5em; width: 190px; } - + /* About the Author */ #about-author { background: #f9f9f9; @@ -406,21 +406,21 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} font-style: normal; margin: 2em 0; padding: 10px 20px 15px 20px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } - + #about-author strong { color: #C64350; clear: both; display: block; font-size: 1.429em; } - + #about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;} - + /* Comments */ #comments-list {list-style: none; margin: 0 1em;} #comments-list blockquote { @@ -429,24 +429,24 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} font-style: normal; margin: 0; padding: 15px 20px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } #comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;} - + #comments-list li:nth-child(2n) blockquote {background: #F5f5f5;} - + /* Add a Comment */ #add-comment label {clear: left; float: left; text-align: left; width: 150px;} #add-comment input[type='text'], #add-comment input[type='email'], #add-comment input[type='url'] {float: left; width: 200px;} - + #add-comment textarea {float: left; height: 150px; width: 495px;} - + #add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;} - + #add-comment input[type='submit'] {float: right; margin: 0 .5em;} #add-comment * {margin-bottom: .5em;} diff --git a/pelican/tests/output/basic/theme/css/typogrify.css b/pelican/tests/output/basic/theme/css/typogrify.css index c9b34dc8..3bae4976 100644 --- a/pelican/tests/output/basic/theme/css/typogrify.css +++ b/pelican/tests/output/basic/theme/css/typogrify.css @@ -1,3 +1,3 @@ .caps {font-size:.92em;} -.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} +.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} .dquo {margin-left:-.38em;} diff --git a/pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.eot b/pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.eot new file mode 100644 index 0000000000000000000000000000000000000000..b3b90dbc3ef34775a8689ab6a4494810c14c5a59 GIT binary patch literal 20932 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 mb?#}R*%4j(VLYH*AKF5oS rn0PZ0T66rs0j%h=b^w~umnB; literal 0 HcmV?d00001 diff --git a/pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.svg b/pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.svg new file mode 100644 index 00000000..a69669b5 --- /dev/null +++ b/pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.svg @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.ttf b/pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6f4feb02d14c849ba1fb7dc112243386b2ad8f2f GIT binary patch literal 39168 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 literal 0 HcmV?d00001 diff --git a/pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.woff2 b/pelican/tests/output/basic/theme/fonts/Yanone_Kaffeesatz_400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7b18f7ea49098fff3aac28a1feb0cecc429bb2ec GIT binary patch literal 18320 zcmV)KK)SzoPew8T0RR9107sAj5dZ)H0GaFn07okT0RR9100000000000000000000 z0000Qb{n549D+OsU;ufwyW4gH`|mHUcCAhbROf1%m(wg)Iz$ zBO9BBHSCy4;dTI2MCvzL6m?;f3q4^J3 zn?jvX8Rux$3dW)$94I=8FC$C<0{zJt^8&Yqj6l~elaNO@3y$q?#~9ZE+u6q*p|MYL zf5Ov$cS+$@+Ol@U=cvx=0DaJi{b#Dq%>RFP@4%qMoF1M5(#};1>mX%R&?y)?ce#cG zSr#tM^WTp>`?b$|h$V*TmQ*7{bWP&f8;Ne+HJT=AgaQfvzdt#({>=aaMWO(KKroS@ zkS*C8=IqU}yB~|{H_dHVc`vqGUfcZ|1cw343AOGTl8RZj_jmhCrPifv_QdTNK{9zl zq3Cy?M?46Hu0mS+A7CKh|LH7e68^uHG=}A~`3OL=ldjvXuQlMIfEJiXQt0&=pt(ga z`WBIlv5k$5TC-qH#fZ^TWzY&%V`JwlHtM%oujog#{cB5sYljsWKnB#25u~8@ z&UT$LMVY6rn!g4F6J-{iAx`^%Fwrs^BDA$R_4m9$NNmtEp(PsJS(4;yvUN z(DQybYGpe}V66h|&qwpGsuXe$<;ihL!Qdqe5Fo@#EJBtQ za(=gc$Fg_!*BzYb*E6X)l0X9O)*cW5zWm=&OpL^X2#6qJa)^>O#K;BWt|z3o-Vk5m zkVsJwlLSbTEJ%(#NP!ASjao>(7D$^mNQXWU1b{0LV6uz$$cFHdP+}viA3tP`4aPki@r?ivh4s98t zxJ7X@FcXP(9moBGC`LD-1tVMm3lSWBGC9&$dy-&0>k=@4N@0RU3TOs?8qrm_6`7X> z=yp8mYUv;0eGrX22~1-Qb``}YQc-b@jp)5nmar#QOwyVWa-^WvTnK}(ETwx96N40A zNfJwQSdNP=-tRfFCO@O^M>c&7BPjq_@+XDxcq1UL#_47dFG+%GCKfhg)a2X~flG`- zf`^Z>gMxsNXzdm-XCy8e9v(eFoKZlO5Wp-m7AQ84fGroz9RiqVK+NkyL-5uUsh8du zeE5*?<%cOiIITztlu~5U$X7_ktOB%32R$)p0dw!PBY@Uwg7&sSaHP zX75*MfraE22P`cO$SvEi$OuqB0 zA>G-;^rvGevK5pW3@bR5Al`4iP_dB&MgJ<^tnYBgsAwNntx∾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 literal 0 HcmV?d00001 diff --git a/pelican/tests/output/basic/theme/fonts/font.css b/pelican/tests/output/basic/theme/fonts/font.css new file mode 100644 index 00000000..a9eb87e6 --- /dev/null +++ b/pelican/tests/output/basic/theme/fonts/font.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/pelican/tests/output/basic/this-is-a-super-article.html b/pelican/tests/output/basic/this-is-a-super-article.html index 3f576aed..f8de5f85 100644 --- a/pelican/tests/output/basic/this-is-a-super-article.html +++ b/pelican/tests/output/basic/this-is-a-super-article.html @@ -5,10 +5,6 @@ This is a super article ! - - diff --git a/pelican/tests/output/basic/unbelievable.html b/pelican/tests/output/basic/unbelievable.html index 21691b29..857b1dc1 100644 --- a/pelican/tests/output/basic/unbelievable.html +++ b/pelican/tests/output/basic/unbelievable.html @@ -5,10 +5,6 @@ Unbelievable ! - - diff --git a/pelican/tests/output/custom/a-markdown-powered-article.html b/pelican/tests/output/custom/a-markdown-powered-article.html index 9c53ec8e..86c6a98d 100644 --- a/pelican/tests/output/custom/a-markdown-powered-article.html +++ b/pelican/tests/output/custom/a-markdown-powered-article.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/archives.html b/pelican/tests/output/custom/archives.html index c256b7de..ecf57942 100644 --- a/pelican/tests/output/custom/archives.html +++ b/pelican/tests/output/custom/archives.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/article-1.html b/pelican/tests/output/custom/article-1.html index edd6f749..ee0fa3f3 100644 --- a/pelican/tests/output/custom/article-1.html +++ b/pelican/tests/output/custom/article-1.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/article-2.html b/pelican/tests/output/custom/article-2.html index 74bf32ea..cb4785e0 100644 --- a/pelican/tests/output/custom/article-2.html +++ b/pelican/tests/output/custom/article-2.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/article-3.html b/pelican/tests/output/custom/article-3.html index 850fce92..b2cffd66 100644 --- a/pelican/tests/output/custom/article-3.html +++ b/pelican/tests/output/custom/article-3.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/author/alexis-metaireau.html b/pelican/tests/output/custom/author/alexis-metaireau.html index 90d361d1..214d0e2f 100644 --- a/pelican/tests/output/custom/author/alexis-metaireau.html +++ b/pelican/tests/output/custom/author/alexis-metaireau.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/author/alexis-metaireau2.html b/pelican/tests/output/custom/author/alexis-metaireau2.html index 44e2f83b..152d2111 100644 --- a/pelican/tests/output/custom/author/alexis-metaireau2.html +++ b/pelican/tests/output/custom/author/alexis-metaireau2.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/author/alexis-metaireau3.html b/pelican/tests/output/custom/author/alexis-metaireau3.html index e8322d4d..e738511e 100644 --- a/pelican/tests/output/custom/author/alexis-metaireau3.html +++ b/pelican/tests/output/custom/author/alexis-metaireau3.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/authors.html b/pelican/tests/output/custom/authors.html index 5cd227d9..0baa4e2a 100644 --- a/pelican/tests/output/custom/authors.html +++ b/pelican/tests/output/custom/authors.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/categories.html b/pelican/tests/output/custom/categories.html index 17f44be7..a4728315 100644 --- a/pelican/tests/output/custom/categories.html +++ b/pelican/tests/output/custom/categories.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/category/bar.html b/pelican/tests/output/custom/category/bar.html index 79d9f8ba..d375b47a 100644 --- a/pelican/tests/output/custom/category/bar.html +++ b/pelican/tests/output/custom/category/bar.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/category/cat1.html b/pelican/tests/output/custom/category/cat1.html index a88094e4..f42eabe5 100644 --- a/pelican/tests/output/custom/category/cat1.html +++ b/pelican/tests/output/custom/category/cat1.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/category/misc.html b/pelican/tests/output/custom/category/misc.html index 1cd34ee9..fa964ffa 100644 --- a/pelican/tests/output/custom/category/misc.html +++ b/pelican/tests/output/custom/category/misc.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/category/yeah.html b/pelican/tests/output/custom/category/yeah.html index 444039b7..21621cbd 100644 --- a/pelican/tests/output/custom/category/yeah.html +++ b/pelican/tests/output/custom/category/yeah.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/drafts/a-draft-article.html b/pelican/tests/output/custom/drafts/a-draft-article.html index d206e546..0fc2bd25 100644 --- a/pelican/tests/output/custom/drafts/a-draft-article.html +++ b/pelican/tests/output/custom/drafts/a-draft-article.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/filename_metadata-example.html b/pelican/tests/output/custom/filename_metadata-example.html index 6a5aaec6..f66c6cd0 100644 --- a/pelican/tests/output/custom/filename_metadata-example.html +++ b/pelican/tests/output/custom/filename_metadata-example.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/index.html b/pelican/tests/output/custom/index.html index 6b7ec333..17c822c6 100644 --- a/pelican/tests/output/custom/index.html +++ b/pelican/tests/output/custom/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/index2.html b/pelican/tests/output/custom/index2.html index 7d6adf80..68940b8e 100644 --- a/pelican/tests/output/custom/index2.html +++ b/pelican/tests/output/custom/index2.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/index3.html b/pelican/tests/output/custom/index3.html index 33d6c193..0db9b8aa 100644 --- a/pelican/tests/output/custom/index3.html +++ b/pelican/tests/output/custom/index3.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/jinja2_template.html b/pelican/tests/output/custom/jinja2_template.html index a098ed49..2d1032e1 100644 --- a/pelican/tests/output/custom/jinja2_template.html +++ b/pelican/tests/output/custom/jinja2_template.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/oh-yeah-fr.html b/pelican/tests/output/custom/oh-yeah-fr.html index b32acd70..479c5291 100644 --- a/pelican/tests/output/custom/oh-yeah-fr.html +++ b/pelican/tests/output/custom/oh-yeah-fr.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/oh-yeah.html b/pelican/tests/output/custom/oh-yeah.html index ae1a43b3..5037402b 100644 --- a/pelican/tests/output/custom/oh-yeah.html +++ b/pelican/tests/output/custom/oh-yeah.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/override/index.html b/pelican/tests/output/custom/override/index.html index 8ab5f7eb..74bb4abe 100644 --- a/pelican/tests/output/custom/override/index.html +++ b/pelican/tests/output/custom/override/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/pages/this-is-a-test-hidden-page.html b/pelican/tests/output/custom/pages/this-is-a-test-hidden-page.html index 41beb5a3..9af27061 100644 --- a/pelican/tests/output/custom/pages/this-is-a-test-hidden-page.html +++ b/pelican/tests/output/custom/pages/this-is-a-test-hidden-page.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/pages/this-is-a-test-page.html b/pelican/tests/output/custom/pages/this-is-a-test-page.html index b548b52c..96f51396 100644 --- a/pelican/tests/output/custom/pages/this-is-a-test-page.html +++ b/pelican/tests/output/custom/pages/this-is-a-test-page.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/second-article-fr.html b/pelican/tests/output/custom/second-article-fr.html index 2645bc53..c48511bd 100644 --- a/pelican/tests/output/custom/second-article-fr.html +++ b/pelican/tests/output/custom/second-article-fr.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/second-article.html b/pelican/tests/output/custom/second-article.html index b15a510f..9454a041 100644 --- a/pelican/tests/output/custom/second-article.html +++ b/pelican/tests/output/custom/second-article.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/tag/bar.html b/pelican/tests/output/custom/tag/bar.html index 5f331d23..077ed625 100644 --- a/pelican/tests/output/custom/tag/bar.html +++ b/pelican/tests/output/custom/tag/bar.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/tag/baz.html b/pelican/tests/output/custom/tag/baz.html index 3cbb841c..aec86f76 100644 --- a/pelican/tests/output/custom/tag/baz.html +++ b/pelican/tests/output/custom/tag/baz.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/tag/foo.html b/pelican/tests/output/custom/tag/foo.html index 9719ff75..10ac2c61 100644 --- a/pelican/tests/output/custom/tag/foo.html +++ b/pelican/tests/output/custom/tag/foo.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/tag/foobar.html b/pelican/tests/output/custom/tag/foobar.html index ef47e789..32eeae38 100644 --- a/pelican/tests/output/custom/tag/foobar.html +++ b/pelican/tests/output/custom/tag/foobar.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/tag/oh.html b/pelican/tests/output/custom/tag/oh.html index c7f9701d..a41e43f7 100644 --- a/pelican/tests/output/custom/tag/oh.html +++ b/pelican/tests/output/custom/tag/oh.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/tag/yeah.html b/pelican/tests/output/custom/tag/yeah.html index 1674e915..88cf5b69 100644 --- a/pelican/tests/output/custom/tag/yeah.html +++ b/pelican/tests/output/custom/tag/yeah.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/tags.html b/pelican/tests/output/custom/tags.html index 59a36ace..92f6615c 100644 --- a/pelican/tests/output/custom/tags.html +++ b/pelican/tests/output/custom/tags.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/theme/css/fonts.css b/pelican/tests/output/custom/theme/css/fonts.css new file mode 100644 index 00000000..56015076 --- /dev/null +++ b/pelican/tests/output/custom/theme/css/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('../fonts/Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('../fonts/Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/pelican/tests/output/custom/theme/css/main.css b/pelican/tests/output/custom/theme/css/main.css index 03a77e69..9673ca45 100644 --- a/pelican/tests/output/custom/theme/css/main.css +++ b/pelican/tests/output/custom/theme/css/main.css @@ -12,7 +12,7 @@ @import url("reset.css"); @import url("pygment.css"); @import url("typogrify.css"); -@import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz&subset=latin); +@import url("fonts.css"); /***** Global *****/ /* Body */ @@ -43,7 +43,7 @@ h1, h2, h3, h4, h5, h6 { } h3, h4, h5, h6 { margin-top: .8em; } - + hr { border: 2px solid #EEEEEE; } /* Anchors */ @@ -64,7 +64,7 @@ a:hover, a:active { h1 a:hover { background-color: inherit } - + /* Paragraphs */ div.line-block, p { margin-top: 1em; @@ -124,7 +124,7 @@ div.note { /* Tables */ table {margin: .5em auto 1.5em auto; width: 98%;} - + /* Thead */ thead th {padding: .5em .4em; text-align: left;} thead td {} @@ -132,14 +132,14 @@ table {margin: .5em auto 1.5em auto; width: 98%;} /* Tbody */ tbody td {padding: .5em .4em;} tbody th {} - + tbody .alt td {} tbody .alt th {} - + /* Tfoot */ tfoot th {} tfoot td {} - + /* HTML5 tags */ header, section, footer, aside, nav, article, figure { @@ -173,9 +173,9 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} color: #C74350; text-shadow: none; } - + #banner h1 strong {font-size: 0.36em; font-weight: normal;} - + /* Main Nav */ #banner nav { background: #000305; @@ -186,15 +186,15 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} padding: 0; text-align: center; width: 800px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } - + #banner nav ul {list-style: none; margin: 0 auto; width: 800px;} #banner nav li {float: left; display: inline; margin: 0;} - + #banner nav a:link, #banner nav a:visited { color: #fff; display: inline-block; @@ -208,12 +208,12 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} color: #fff; text-shadow: none !important; } - + #banner nav li:first-child a { border-top-left-radius: 5px; -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; - + border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; @@ -228,7 +228,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} overflow: hidden; padding: 20px; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -257,7 +257,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} overflow: hidden; padding: 20px 20px; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -292,21 +292,21 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} float: left; width: 615px; } - + #extras .blogroll li {float: left; margin: 0 20px 0 0; width: 185px;} - + /* Social */ #extras .social { float: right; width: 175px; } - + #extras div[class='social'] a { background-repeat: no-repeat; background-position: 3px 6px; padding-left: 25px; } - + /* Icons */ .social a[href*='about.me'] {background-image: url('../images/icons/aboutme.png');} .social a[href*='bitbucket.org'] {background-image: url('../images/icons/bitbucket.png');} @@ -346,7 +346,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} padding: 20px; text-align: left; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -390,7 +390,7 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} /* Blog Index */ #posts-list {list-style: none; margin: 0;} #posts-list .hentry {padding-left: 10px; position: relative;} - + #posts-list footer { left: 10px; position: relative; @@ -398,7 +398,7 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} top: 0.5em; width: 190px; } - + /* About the Author */ #about-author { background: #f9f9f9; @@ -406,21 +406,21 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} font-style: normal; margin: 2em 0; padding: 10px 20px 15px 20px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } - + #about-author strong { color: #C64350; clear: both; display: block; font-size: 1.429em; } - + #about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;} - + /* Comments */ #comments-list {list-style: none; margin: 0 1em;} #comments-list blockquote { @@ -429,24 +429,24 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} font-style: normal; margin: 0; padding: 15px 20px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } #comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;} - + #comments-list li:nth-child(2n) blockquote {background: #F5f5f5;} - + /* Add a Comment */ #add-comment label {clear: left; float: left; text-align: left; width: 150px;} #add-comment input[type='text'], #add-comment input[type='email'], #add-comment input[type='url'] {float: left; width: 200px;} - + #add-comment textarea {float: left; height: 150px; width: 495px;} - + #add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;} - + #add-comment input[type='submit'] {float: right; margin: 0 .5em;} #add-comment * {margin-bottom: .5em;} diff --git a/pelican/tests/output/custom/theme/css/typogrify.css b/pelican/tests/output/custom/theme/css/typogrify.css index c9b34dc8..3bae4976 100644 --- a/pelican/tests/output/custom/theme/css/typogrify.css +++ b/pelican/tests/output/custom/theme/css/typogrify.css @@ -1,3 +1,3 @@ .caps {font-size:.92em;} -.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} +.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} .dquo {margin-left:-.38em;} diff --git a/pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.eot b/pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.eot new file mode 100644 index 0000000000000000000000000000000000000000..b3b90dbc3ef34775a8689ab6a4494810c14c5a59 GIT binary patch literal 20932 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 mb?#}R*%4j(VLYH*AKF5oS rn0PZ0T66rs0j%h=b^w~umnB; literal 0 HcmV?d00001 diff --git a/pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.svg b/pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.svg new file mode 100644 index 00000000..a69669b5 --- /dev/null +++ b/pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.svg @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.ttf b/pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6f4feb02d14c849ba1fb7dc112243386b2ad8f2f GIT binary patch literal 39168 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 literal 0 HcmV?d00001 diff --git a/pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.woff2 b/pelican/tests/output/custom/theme/fonts/Yanone_Kaffeesatz_400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7b18f7ea49098fff3aac28a1feb0cecc429bb2ec GIT binary patch literal 18320 zcmV)KK)SzoPew8T0RR9107sAj5dZ)H0GaFn07okT0RR9100000000000000000000 z0000Qb{n549D+OsU;ufwyW4gH`|mHUcCAhbROf1%m(wg)Iz$ zBO9BBHSCy4;dTI2MCvzL6m?;f3q4^J3 zn?jvX8Rux$3dW)$94I=8FC$C<0{zJt^8&Yqj6l~elaNO@3y$q?#~9ZE+u6q*p|MYL zf5Ov$cS+$@+Ol@U=cvx=0DaJi{b#Dq%>RFP@4%qMoF1M5(#};1>mX%R&?y)?ce#cG zSr#tM^WTp>`?b$|h$V*TmQ*7{bWP&f8;Ne+HJT=AgaQfvzdt#({>=aaMWO(KKroS@ zkS*C8=IqU}yB~|{H_dHVc`vqGUfcZ|1cw343AOGTl8RZj_jmhCrPifv_QdTNK{9zl zq3Cy?M?46Hu0mS+A7CKh|LH7e68^uHG=}A~`3OL=ldjvXuQlMIfEJiXQt0&=pt(ga z`WBIlv5k$5TC-qH#fZ^TWzY&%V`JwlHtM%oujog#{cB5sYljsWKnB#25u~8@ z&UT$LMVY6rn!g4F6J-{iAx`^%Fwrs^BDA$R_4m9$NNmtEp(PsJS(4;yvUN z(DQybYGpe}V66h|&qwpGsuXe$<;ihL!Qdqe5Fo@#EJBtQ za(=gc$Fg_!*BzYb*E6X)l0X9O)*cW5zWm=&OpL^X2#6qJa)^>O#K;BWt|z3o-Vk5m zkVsJwlLSbTEJ%(#NP!ASjao>(7D$^mNQXWU1b{0LV6uz$$cFHdP+}viA3tP`4aPki@r?ivh4s98t zxJ7X@FcXP(9moBGC`LD-1tVMm3lSWBGC9&$dy-&0>k=@4N@0RU3TOs?8qrm_6`7X> z=yp8mYUv;0eGrX22~1-Qb``}YQc-b@jp)5nmar#QOwyVWa-^WvTnK}(ETwx96N40A zNfJwQSdNP=-tRfFCO@O^M>c&7BPjq_@+XDxcq1UL#_47dFG+%GCKfhg)a2X~flG`- zf`^Z>gMxsNXzdm-XCy8e9v(eFoKZlO5Wp-m7AQ84fGroz9RiqVK+NkyL-5uUsh8du zeE5*?<%cOiIITztlu~5U$X7_ktOB%32R$)p0dw!PBY@Uwg7&sSaHP zX75*MfraE22P`cO$SvEi$OuqB0 zA>G-;^rvGevK5pW3@bR5Al`4iP_dB&MgJ<^tnYBgsAwNntx∾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 literal 0 HcmV?d00001 diff --git a/pelican/tests/output/custom/theme/fonts/font.css b/pelican/tests/output/custom/theme/fonts/font.css new file mode 100644 index 00000000..a9eb87e6 --- /dev/null +++ b/pelican/tests/output/custom/theme/fonts/font.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/pelican/tests/output/custom/this-is-a-super-article.html b/pelican/tests/output/custom/this-is-a-super-article.html index be9a5b00..d89f42fd 100644 --- a/pelican/tests/output/custom/this-is-a-super-article.html +++ b/pelican/tests/output/custom/this-is-a-super-article.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom/unbelievable.html b/pelican/tests/output/custom/unbelievable.html index 16e0dc39..57da2f44 100644 --- a/pelican/tests/output/custom/unbelievable.html +++ b/pelican/tests/output/custom/unbelievable.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/archives.html b/pelican/tests/output/custom_locale/archives.html index ed375051..46450fa2 100644 --- a/pelican/tests/output/custom_locale/archives.html +++ b/pelican/tests/output/custom_locale/archives.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/author/alexis-metaireau.html b/pelican/tests/output/custom_locale/author/alexis-metaireau.html index 01ca2814..2fbaced4 100644 --- a/pelican/tests/output/custom_locale/author/alexis-metaireau.html +++ b/pelican/tests/output/custom_locale/author/alexis-metaireau.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/author/alexis-metaireau2.html b/pelican/tests/output/custom_locale/author/alexis-metaireau2.html index 2af2051f..23621487 100644 --- a/pelican/tests/output/custom_locale/author/alexis-metaireau2.html +++ b/pelican/tests/output/custom_locale/author/alexis-metaireau2.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/author/alexis-metaireau3.html b/pelican/tests/output/custom_locale/author/alexis-metaireau3.html index 93a3f6cc..e495b4c8 100644 --- a/pelican/tests/output/custom_locale/author/alexis-metaireau3.html +++ b/pelican/tests/output/custom_locale/author/alexis-metaireau3.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/authors.html b/pelican/tests/output/custom_locale/authors.html index 5cd227d9..0baa4e2a 100644 --- a/pelican/tests/output/custom_locale/authors.html +++ b/pelican/tests/output/custom_locale/authors.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/categories.html b/pelican/tests/output/custom_locale/categories.html index 17f44be7..a4728315 100644 --- a/pelican/tests/output/custom_locale/categories.html +++ b/pelican/tests/output/custom_locale/categories.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/category/bar.html b/pelican/tests/output/custom_locale/category/bar.html index 88560ad5..a0ba9741 100644 --- a/pelican/tests/output/custom_locale/category/bar.html +++ b/pelican/tests/output/custom_locale/category/bar.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/category/cat1.html b/pelican/tests/output/custom_locale/category/cat1.html index 404832c8..aec43346 100644 --- a/pelican/tests/output/custom_locale/category/cat1.html +++ b/pelican/tests/output/custom_locale/category/cat1.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/category/misc.html b/pelican/tests/output/custom_locale/category/misc.html index 8ef1af55..d37f588e 100644 --- a/pelican/tests/output/custom_locale/category/misc.html +++ b/pelican/tests/output/custom_locale/category/misc.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/category/yeah.html b/pelican/tests/output/custom_locale/category/yeah.html index fe41a881..76dd1936 100644 --- a/pelican/tests/output/custom_locale/category/yeah.html +++ b/pelican/tests/output/custom_locale/category/yeah.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/drafts/a-draft-article.html b/pelican/tests/output/custom_locale/drafts/a-draft-article.html index 1065b096..97d54561 100644 --- a/pelican/tests/output/custom_locale/drafts/a-draft-article.html +++ b/pelican/tests/output/custom_locale/drafts/a-draft-article.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/index.html b/pelican/tests/output/custom_locale/index.html index 5cdab476..a0172665 100644 --- a/pelican/tests/output/custom_locale/index.html +++ b/pelican/tests/output/custom_locale/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/index2.html b/pelican/tests/output/custom_locale/index2.html index 99af0346..bb5e036f 100644 --- a/pelican/tests/output/custom_locale/index2.html +++ b/pelican/tests/output/custom_locale/index2.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/index3.html b/pelican/tests/output/custom_locale/index3.html index 217e97a4..62dea214 100644 --- a/pelican/tests/output/custom_locale/index3.html +++ b/pelican/tests/output/custom_locale/index3.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/jinja2_template.html b/pelican/tests/output/custom_locale/jinja2_template.html index a098ed49..2d1032e1 100644 --- a/pelican/tests/output/custom_locale/jinja2_template.html +++ b/pelican/tests/output/custom_locale/jinja2_template.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/oh-yeah-fr.html b/pelican/tests/output/custom_locale/oh-yeah-fr.html index a8cc93c3..f7063c32 100644 --- a/pelican/tests/output/custom_locale/oh-yeah-fr.html +++ b/pelican/tests/output/custom_locale/oh-yeah-fr.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/override/index.html b/pelican/tests/output/custom_locale/override/index.html index 8ab5f7eb..74bb4abe 100644 --- a/pelican/tests/output/custom_locale/override/index.html +++ b/pelican/tests/output/custom_locale/override/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/pages/this-is-a-test-hidden-page.html b/pelican/tests/output/custom_locale/pages/this-is-a-test-hidden-page.html index 41beb5a3..9af27061 100644 --- a/pelican/tests/output/custom_locale/pages/this-is-a-test-hidden-page.html +++ b/pelican/tests/output/custom_locale/pages/this-is-a-test-hidden-page.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/pages/this-is-a-test-page.html b/pelican/tests/output/custom_locale/pages/this-is-a-test-page.html index b548b52c..96f51396 100644 --- a/pelican/tests/output/custom_locale/pages/this-is-a-test-page.html +++ b/pelican/tests/output/custom_locale/pages/this-is-a-test-page.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/posts/2010/décembre/02/this-is-a-super-article/index.html b/pelican/tests/output/custom_locale/posts/2010/décembre/02/this-is-a-super-article/index.html index 5f7f87a7..b7cdd47c 100644 --- a/pelican/tests/output/custom_locale/posts/2010/décembre/02/this-is-a-super-article/index.html +++ b/pelican/tests/output/custom_locale/posts/2010/décembre/02/this-is-a-super-article/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/posts/2010/octobre/15/unbelievable/index.html b/pelican/tests/output/custom_locale/posts/2010/octobre/15/unbelievable/index.html index 887af3be..13f79258 100644 --- a/pelican/tests/output/custom_locale/posts/2010/octobre/15/unbelievable/index.html +++ b/pelican/tests/output/custom_locale/posts/2010/octobre/15/unbelievable/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/posts/2010/octobre/20/oh-yeah/index.html b/pelican/tests/output/custom_locale/posts/2010/octobre/20/oh-yeah/index.html index c687f8bf..deb2b9f6 100644 --- a/pelican/tests/output/custom_locale/posts/2010/octobre/20/oh-yeah/index.html +++ b/pelican/tests/output/custom_locale/posts/2010/octobre/20/oh-yeah/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/posts/2011/avril/20/a-markdown-powered-article/index.html b/pelican/tests/output/custom_locale/posts/2011/avril/20/a-markdown-powered-article/index.html index 4d61759a..92449abd 100644 --- a/pelican/tests/output/custom_locale/posts/2011/avril/20/a-markdown-powered-article/index.html +++ b/pelican/tests/output/custom_locale/posts/2011/avril/20/a-markdown-powered-article/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/posts/2011/février/17/article-1/index.html b/pelican/tests/output/custom_locale/posts/2011/février/17/article-1/index.html index c35090b9..16532ac0 100644 --- a/pelican/tests/output/custom_locale/posts/2011/février/17/article-1/index.html +++ b/pelican/tests/output/custom_locale/posts/2011/février/17/article-1/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/posts/2011/février/17/article-2/index.html b/pelican/tests/output/custom_locale/posts/2011/février/17/article-2/index.html index 6fe34cc9..46445d8a 100644 --- a/pelican/tests/output/custom_locale/posts/2011/février/17/article-2/index.html +++ b/pelican/tests/output/custom_locale/posts/2011/février/17/article-2/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/posts/2011/février/17/article-3/index.html b/pelican/tests/output/custom_locale/posts/2011/février/17/article-3/index.html index e2195f64..e87bcbd1 100644 --- a/pelican/tests/output/custom_locale/posts/2011/février/17/article-3/index.html +++ b/pelican/tests/output/custom_locale/posts/2011/février/17/article-3/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/posts/2012/février/29/second-article/index.html b/pelican/tests/output/custom_locale/posts/2012/février/29/second-article/index.html index 608a44ef..c02722ad 100644 --- a/pelican/tests/output/custom_locale/posts/2012/février/29/second-article/index.html +++ b/pelican/tests/output/custom_locale/posts/2012/février/29/second-article/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/posts/2012/novembre/30/filename_metadata-example/index.html b/pelican/tests/output/custom_locale/posts/2012/novembre/30/filename_metadata-example/index.html index 1d80b9f6..c97160d4 100644 --- a/pelican/tests/output/custom_locale/posts/2012/novembre/30/filename_metadata-example/index.html +++ b/pelican/tests/output/custom_locale/posts/2012/novembre/30/filename_metadata-example/index.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/second-article-fr.html b/pelican/tests/output/custom_locale/second-article-fr.html index c25f6dbb..d2a523c2 100644 --- a/pelican/tests/output/custom_locale/second-article-fr.html +++ b/pelican/tests/output/custom_locale/second-article-fr.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/tag/bar.html b/pelican/tests/output/custom_locale/tag/bar.html index 87ef2c91..e0dd328d 100644 --- a/pelican/tests/output/custom_locale/tag/bar.html +++ b/pelican/tests/output/custom_locale/tag/bar.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/tag/baz.html b/pelican/tests/output/custom_locale/tag/baz.html index 50bf7583..53b8156d 100644 --- a/pelican/tests/output/custom_locale/tag/baz.html +++ b/pelican/tests/output/custom_locale/tag/baz.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/tag/foo.html b/pelican/tests/output/custom_locale/tag/foo.html index 7f27c594..7d4f2b86 100644 --- a/pelican/tests/output/custom_locale/tag/foo.html +++ b/pelican/tests/output/custom_locale/tag/foo.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/tag/foobar.html b/pelican/tests/output/custom_locale/tag/foobar.html index 3158cfda..8ca76c78 100644 --- a/pelican/tests/output/custom_locale/tag/foobar.html +++ b/pelican/tests/output/custom_locale/tag/foobar.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/tag/oh.html b/pelican/tests/output/custom_locale/tag/oh.html index c7f9701d..a41e43f7 100644 --- a/pelican/tests/output/custom_locale/tag/oh.html +++ b/pelican/tests/output/custom_locale/tag/oh.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/tag/yeah.html b/pelican/tests/output/custom_locale/tag/yeah.html index bd12fa0c..43a29971 100644 --- a/pelican/tests/output/custom_locale/tag/yeah.html +++ b/pelican/tests/output/custom_locale/tag/yeah.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/tags.html b/pelican/tests/output/custom_locale/tags.html index 59a36ace..92f6615c 100644 --- a/pelican/tests/output/custom_locale/tags.html +++ b/pelican/tests/output/custom_locale/tags.html @@ -6,10 +6,6 @@ - - diff --git a/pelican/tests/output/custom_locale/theme/css/fonts.css b/pelican/tests/output/custom_locale/theme/css/fonts.css new file mode 100644 index 00000000..56015076 --- /dev/null +++ b/pelican/tests/output/custom_locale/theme/css/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('../fonts/Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('../fonts/Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/pelican/tests/output/custom_locale/theme/css/main.css b/pelican/tests/output/custom_locale/theme/css/main.css index 03a77e69..9673ca45 100644 --- a/pelican/tests/output/custom_locale/theme/css/main.css +++ b/pelican/tests/output/custom_locale/theme/css/main.css @@ -12,7 +12,7 @@ @import url("reset.css"); @import url("pygment.css"); @import url("typogrify.css"); -@import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz&subset=latin); +@import url("fonts.css"); /***** Global *****/ /* Body */ @@ -43,7 +43,7 @@ h1, h2, h3, h4, h5, h6 { } h3, h4, h5, h6 { margin-top: .8em; } - + hr { border: 2px solid #EEEEEE; } /* Anchors */ @@ -64,7 +64,7 @@ a:hover, a:active { h1 a:hover { background-color: inherit } - + /* Paragraphs */ div.line-block, p { margin-top: 1em; @@ -124,7 +124,7 @@ div.note { /* Tables */ table {margin: .5em auto 1.5em auto; width: 98%;} - + /* Thead */ thead th {padding: .5em .4em; text-align: left;} thead td {} @@ -132,14 +132,14 @@ table {margin: .5em auto 1.5em auto; width: 98%;} /* Tbody */ tbody td {padding: .5em .4em;} tbody th {} - + tbody .alt td {} tbody .alt th {} - + /* Tfoot */ tfoot th {} tfoot td {} - + /* HTML5 tags */ header, section, footer, aside, nav, article, figure { @@ -173,9 +173,9 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} color: #C74350; text-shadow: none; } - + #banner h1 strong {font-size: 0.36em; font-weight: normal;} - + /* Main Nav */ #banner nav { background: #000305; @@ -186,15 +186,15 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} padding: 0; text-align: center; width: 800px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } - + #banner nav ul {list-style: none; margin: 0 auto; width: 800px;} #banner nav li {float: left; display: inline; margin: 0;} - + #banner nav a:link, #banner nav a:visited { color: #fff; display: inline-block; @@ -208,12 +208,12 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} color: #fff; text-shadow: none !important; } - + #banner nav li:first-child a { border-top-left-radius: 5px; -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; - + border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; @@ -228,7 +228,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} overflow: hidden; padding: 20px; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -257,7 +257,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} overflow: hidden; padding: 20px 20px; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -292,21 +292,21 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} float: left; width: 615px; } - + #extras .blogroll li {float: left; margin: 0 20px 0 0; width: 185px;} - + /* Social */ #extras .social { float: right; width: 175px; } - + #extras div[class='social'] a { background-repeat: no-repeat; background-position: 3px 6px; padding-left: 25px; } - + /* Icons */ .social a[href*='about.me'] {background-image: url('../images/icons/aboutme.png');} .social a[href*='bitbucket.org'] {background-image: url('../images/icons/bitbucket.png');} @@ -346,7 +346,7 @@ img.left, figure.left {float: left; margin: 0 2em 2em 0;} padding: 20px; text-align: left; width: 760px; - + border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -390,7 +390,7 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} /* Blog Index */ #posts-list {list-style: none; margin: 0;} #posts-list .hentry {padding-left: 10px; position: relative;} - + #posts-list footer { left: 10px; position: relative; @@ -398,7 +398,7 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} top: 0.5em; width: 190px; } - + /* About the Author */ #about-author { background: #f9f9f9; @@ -406,21 +406,21 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} font-style: normal; margin: 2em 0; padding: 10px 20px 15px 20px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } - + #about-author strong { color: #C64350; clear: both; display: block; font-size: 1.429em; } - + #about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;} - + /* Comments */ #comments-list {list-style: none; margin: 0 1em;} #comments-list blockquote { @@ -429,24 +429,24 @@ li:last-child .hentry, #content > .hentry {border: 0; margin: 0;} font-style: normal; margin: 0; padding: 15px 20px; - + border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; } #comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;} - + #comments-list li:nth-child(2n) blockquote {background: #F5f5f5;} - + /* Add a Comment */ #add-comment label {clear: left; float: left; text-align: left; width: 150px;} #add-comment input[type='text'], #add-comment input[type='email'], #add-comment input[type='url'] {float: left; width: 200px;} - + #add-comment textarea {float: left; height: 150px; width: 495px;} - + #add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;} - + #add-comment input[type='submit'] {float: right; margin: 0 .5em;} #add-comment * {margin-bottom: .5em;} diff --git a/pelican/tests/output/custom_locale/theme/css/typogrify.css b/pelican/tests/output/custom_locale/theme/css/typogrify.css index c9b34dc8..3bae4976 100644 --- a/pelican/tests/output/custom_locale/theme/css/typogrify.css +++ b/pelican/tests/output/custom_locale/theme/css/typogrify.css @@ -1,3 +1,3 @@ .caps {font-size:.92em;} -.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} +.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} .dquo {margin-left:-.38em;} diff --git a/pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.eot b/pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.eot new file mode 100644 index 0000000000000000000000000000000000000000..b3b90dbc3ef34775a8689ab6a4494810c14c5a59 GIT binary patch literal 20932 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 mb?#}R*%4j(VLYH*AKF5oS rn0PZ0T66rs0j%h=b^w~umnB; literal 0 HcmV?d00001 diff --git a/pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.svg b/pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.svg new file mode 100644 index 00000000..a69669b5 --- /dev/null +++ b/pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.svg @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.ttf b/pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6f4feb02d14c849ba1fb7dc112243386b2ad8f2f GIT binary patch literal 39168 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 literal 0 HcmV?d00001 diff --git a/pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.woff2 b/pelican/tests/output/custom_locale/theme/fonts/Yanone_Kaffeesatz_400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7b18f7ea49098fff3aac28a1feb0cecc429bb2ec GIT binary patch literal 18320 zcmV)KK)SzoPew8T0RR9107sAj5dZ)H0GaFn07okT0RR9100000000000000000000 z0000Qb{n549D+OsU;ufwyW4gH`|mHUcCAhbROf1%m(wg)Iz$ zBO9BBHSCy4;dTI2MCvzL6m?;f3q4^J3 zn?jvX8Rux$3dW)$94I=8FC$C<0{zJt^8&Yqj6l~elaNO@3y$q?#~9ZE+u6q*p|MYL zf5Ov$cS+$@+Ol@U=cvx=0DaJi{b#Dq%>RFP@4%qMoF1M5(#};1>mX%R&?y)?ce#cG zSr#tM^WTp>`?b$|h$V*TmQ*7{bWP&f8;Ne+HJT=AgaQfvzdt#({>=aaMWO(KKroS@ zkS*C8=IqU}yB~|{H_dHVc`vqGUfcZ|1cw343AOGTl8RZj_jmhCrPifv_QdTNK{9zl zq3Cy?M?46Hu0mS+A7CKh|LH7e68^uHG=}A~`3OL=ldjvXuQlMIfEJiXQt0&=pt(ga z`WBIlv5k$5TC-qH#fZ^TWzY&%V`JwlHtM%oujog#{cB5sYljsWKnB#25u~8@ z&UT$LMVY6rn!g4F6J-{iAx`^%Fwrs^BDA$R_4m9$NNmtEp(PsJS(4;yvUN z(DQybYGpe}V66h|&qwpGsuXe$<;ihL!Qdqe5Fo@#EJBtQ za(=gc$Fg_!*BzYb*E6X)l0X9O)*cW5zWm=&OpL^X2#6qJa)^>O#K;BWt|z3o-Vk5m zkVsJwlLSbTEJ%(#NP!ASjao>(7D$^mNQXWU1b{0LV6uz$$cFHdP+}viA3tP`4aPki@r?ivh4s98t zxJ7X@FcXP(9moBGC`LD-1tVMm3lSWBGC9&$dy-&0>k=@4N@0RU3TOs?8qrm_6`7X> z=yp8mYUv;0eGrX22~1-Qb``}YQc-b@jp)5nmar#QOwyVWa-^WvTnK}(ETwx96N40A zNfJwQSdNP=-tRfFCO@O^M>c&7BPjq_@+XDxcq1UL#_47dFG+%GCKfhg)a2X~flG`- zf`^Z>gMxsNXzdm-XCy8e9v(eFoKZlO5Wp-m7AQ84fGroz9RiqVK+NkyL-5uUsh8du zeE5*?<%cOiIITztlu~5U$X7_ktOB%32R$)p0dw!PBY@Uwg7&sSaHP zX75*MfraE22P`cO$SvEi$OuqB0 zA>G-;^rvGevK5pW3@bR5Al`4iP_dB&MgJ<^tnYBgsAwNntx∾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 literal 0 HcmV?d00001 diff --git a/pelican/tests/output/custom_locale/theme/fonts/font.css b/pelican/tests/output/custom_locale/theme/fonts/font.css new file mode 100644 index 00000000..a9eb87e6 --- /dev/null +++ b/pelican/tests/output/custom_locale/theme/fonts/font.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('Yanone_Kaffeesatz_400.woff2') format('woff2'); +} From b1bc9a6f5fa24dd7c9350a9805123f1386301559 Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Tue, 8 Aug 2017 01:16:13 +0200 Subject: [PATCH 047/867] Typofix: - paragraph missing stop - Remove unnecessary colon --- docs/content.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content.rst b/docs/content.rst index 507593bf..ae2cd6f2 100644 --- a/docs/content.rst +++ b/docs/content.rst @@ -11,7 +11,7 @@ The idea behind "pages" is that they are usually not temporal in nature and are used for content that does not change very often (e.g., "About" or "Contact" pages). -You can find sample content in the repository at: ``pelican/samples/content/`` +You can find sample content in the repository at ``pelican/samples/content/``. .. _internal_metadata: From d6dca3403d1a0cb45bf7f352080b6c233ac69825 Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Tue, 8 Aug 2017 23:45:00 +0200 Subject: [PATCH 048/867] pelican/ is not necessary (documentation content.rst) --- docs/content.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content.rst b/docs/content.rst index ae2cd6f2..69212540 100644 --- a/docs/content.rst +++ b/docs/content.rst @@ -11,7 +11,7 @@ The idea behind "pages" is that they are usually not temporal in nature and are used for content that does not change very often (e.g., "About" or "Contact" pages). -You can find sample content in the repository at ``pelican/samples/content/``. +You can find sample content in the repository at ``samples/content/``. .. _internal_metadata: From 2013fc0ab2b328f7be3df2265de2c9ad70152463 Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Sat, 12 Aug 2017 21:40:27 +0200 Subject: [PATCH 049/867] Fix typo from documentation --- docs/content.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/content.rst b/docs/content.rst index 507593bf..cab38aa8 100644 --- a/docs/content.rst +++ b/docs/content.rst @@ -93,9 +93,9 @@ interprets the HTML in a very straightforward manner, reading metadata from -With HTML, there is one simple exception to the standard metadata: ``tags`` can -be specified either via the ``tags`` metadata, as is standard in Pelican, or -via the ``keywords`` metadata, as is standard in HTML. The two can be used +With HTML, there is one simple exception to the standard metadata: tags can be +specified either via the ``tags`` metadata, as is standard in Pelican, or via +the ``keywords`` metadata, as is standard in HTML. The two can be used interchangeably. Note that, aside from the title, none of this article metadata is mandatory: From f8da7077d86e22590c850d5580aa95c0c829b326 Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Thu, 21 Sep 2017 05:18:27 -0700 Subject: [PATCH 050/867] Remove outdated Python versions in CONTRIBUTING Refs #2139 --- CONTRIBUTING.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index a7b5a2a0..5159955a 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -123,7 +123,7 @@ Contribution quality standards `_ tools, the latter of which in particular will give you some useful hints about ways in which the code/formatting can be improved. -* Make sure your code is compatible with Python 2.7, 3.3, and 3.4 — see our +* Ensure your code is compatible with the latest Python 2.7 and 3.x releases — see our `compatibility cheatsheet`_ for more details. * Add docs and tests for your changes. Undocumented and untested features will not be accepted. From ce0787f0d383ce99e439ef3c338cbb5ea964f292 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 2 Oct 2017 18:33:21 +0300 Subject: [PATCH 051/867] Drop unsupported Python 3.3 --- .travis.yml | 1 - docs/install.rst | 2 +- pelican/settings.py | 4 ++-- pelican/tests/test_testsuite.py | 3 --- setup.py | 2 +- tox.ini | 3 +-- 6 files changed, 5 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index a7a8732d..889010b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,6 @@ env: - TOX_ENV=docs - TOX_ENV=flake8 - TOX_ENV=py27 - - TOX_ENV=py33 - TOX_ENV=py34 - TOX_ENV=py35 matrix: diff --git a/docs/install.rst b/docs/install.rst index f05f3941..02470f62 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -1,7 +1,7 @@ Installing Pelican ################## -Pelican currently runs best on Python 2.7.x and 3.3+; earlier versions of +Pelican currently runs best on Python 2.7.x and 3.4+; earlier versions of Python are not supported. You can install Pelican via several different methods. The simplest is via diff --git a/pelican/settings.py b/pelican/settings.py index d1249a24..417de79a 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -14,13 +14,13 @@ import six from pelican.log import LimitFilter try: - # SourceFileLoader is the recommended way in 3.3+ + # SourceFileLoader is the recommended way in Python 3.3+ from importlib.machinery import SourceFileLoader def load_source(name, path): return SourceFileLoader(name, path).load_module() except ImportError: - # but it does not exist in 3.2-, so fall back to imp + # but it does not exist in Python 2.7, so fall back to imp import imp load_source = imp.load_source diff --git a/pelican/tests/test_testsuite.py b/pelican/tests/test_testsuite.py index 5dc92bb1..66c992bd 100644 --- a/pelican/tests/test_testsuite.py +++ b/pelican/tests/test_testsuite.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- from __future__ import print_function, unicode_literals -import sys import warnings from pelican.tests.support import unittest @@ -9,8 +8,6 @@ from pelican.tests.support import unittest class TestSuiteTest(unittest.TestCase): - @unittest.skipIf(sys.version_info[:2] == (3, 3), - "does not throw an exception on python 3.3") def test_error_on_warning(self): with self.assertRaises(UserWarning): warnings.warn('test warning') diff --git a/setup.py b/setup.py index be038971..0f839bdc 100755 --- a/setup.py +++ b/setup.py @@ -61,10 +61,10 @@ setup( 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: Implementation :: CPython', 'Topic :: Internet :: WWW/HTTP', 'Topic :: Software Development :: Libraries :: Python Modules', ], diff --git a/tox.ini b/tox.ini index 95cd5273..b0dd4fd2 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,9 @@ [tox] -envlist = py{27,33,34,35,36},docs,flake8 +envlist = py{27,34,35,36},docs,flake8 [testenv] basepython = py27: python2.7 - py33: python3.3 py34: python3.4 py35: python3.5 py36: python3.6 From ebf31e85c4efc86e2bb5e5ab3d1524d99727e534 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 2 Oct 2017 18:35:11 +0300 Subject: [PATCH 052/867] Update Python version for Tox to create py35 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a7a8732d..9f942bf0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: python python: - - "2.7" + - "3.5" env: - TOX_ENV=docs - TOX_ENV=flake8 From 012d034cba0664ad36b4130893b7bf699be7a8fd Mon Sep 17 00:00:00 2001 From: Stuart Axon Date: Mon, 2 Oct 2017 22:05:42 +0100 Subject: [PATCH 053/867] Check for 0 dates in pelican-import Check for 0 dates. For my own blog this means it doesn't break during import, but I don't know pelican well enough yet to say if this is correct or not. Error that I was getting before applying this fix ``` Traceback (most recent call last): File "/mnt/data/home/stu/.virtualenvs/blog/bin/pelican-import", line 11, in sys.exit(main()) File "/mnt/data/home/stu/.virtualenvs/blog/local/lib/python2.7/site-packages/pelican/tools/pelican_import.py", line 896, in main attachments=attachments or None) File "/mnt/data/home/stu/.virtualenvs/blog/local/lib/python2.7/site-packages/pelican/tools/pelican_import.py", line 684, in fields2pelican kind, in_markup) in fields: File "/mnt/data/home/stu/.virtualenvs/blog/local/lib/python2.7/site-packages/pelican/tools/pelican_import.py", line 163, in wp2fields date_object = time.strptime(raw_date, '%Y-%m-%d %H:%M:%S') File "/usr/lib/python2.7/_strptime.py", line 478, in _strptime_time return _strptime(data_string, format)[0] File "/usr/lib/python2.7/_strptime.py", line 332, in _strptime (data_string, format)) ValueError: time data u'0000-00-00 00:00:00' does not match format u'%Y-%m-%d %H:%M:%S' ``` --- pelican/tools/pelican_import.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pelican/tools/pelican_import.py b/pelican/tools/pelican_import.py index ef4a20e0..25fc45e5 100755 --- a/pelican/tools/pelican_import.py +++ b/pelican/tools/pelican_import.py @@ -160,8 +160,11 @@ def wp2fields(xml, wp_custpost=False): content = item.find('encoded').string raw_date = item.find('post_date').string - date_object = time.strptime(raw_date, '%Y-%m-%d %H:%M:%S') - date = time.strftime('%Y-%m-%d %H:%M', date_object) + if raw_date == u'0000-00-00 00:00:00': + date = None + else: + date_object = time.strptime(raw_date, '%Y-%m-%d %H:%M:%S') + date = time.strftime('%Y-%m-%d %H:%M', date_object) author = item.find('creator').string categories = [cat.string for cat From 50af2ed45d3db08e4ac85cdcdeae5e30a7b50a24 Mon Sep 17 00:00:00 2001 From: Pedro H Date: Sun, 16 Oct 2016 15:47:22 +0800 Subject: [PATCH 054/867] Add THEME_TEMPLATE_OVERRIDES. Refs 2021 Allow for overriding individual templates from the theme by configuring the Jinja2 `Environment` loader to search for templates in the `THEME_TEMPLATES_OVERRIDES` path before the theme's `templates/` directory. --- docs/settings.rst | 24 ++++++-- pelican/generators.py | 21 ++++--- pelican/settings.py | 18 +++++- pelican/tests/test_generators.py | 59 ++++++++++++++++++- pelican/tests/test_settings.py | 17 ++++++ .../tests/theme_overrides/level1/article.html | 4 ++ .../tests/theme_overrides/level2/article.html | 4 ++ .../tests/theme_overrides/level2/authors.html | 4 ++ 8 files changed, 134 insertions(+), 17 deletions(-) create mode 100644 pelican/tests/theme_overrides/level1/article.html create mode 100644 pelican/tests/theme_overrides/level2/article.html create mode 100644 pelican/tests/theme_overrides/level2/authors.html diff --git a/docs/settings.rst b/docs/settings.rst index e5ce19f5..e59e42d4 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -706,16 +706,13 @@ Template pages tags and category index pages). If the tag and category collections are not needed, set ``DIRECT_TEMPLATES = ['index', 'archives']`` + ``DIRECT_TEMPLATES`` are searched for over paths maintained in + ``THEME_TEMPLATES_OVERRIDES``. + .. data:: PAGINATED_DIRECT_TEMPLATES = ['index'] Provides the direct templates that should be paginated. -.. data:: EXTRA_TEMPLATES_PATHS = [] - - A list of paths you want Jinja2 to search for templates. Can be used to - separate templates from the theme. Example: projects, resume, profile ... - These templates need to use ``DIRECT_TEMPLATES`` setting. - Metadata ======== @@ -1011,6 +1008,21 @@ However, here are the settings that are related to themes. with the same names are included in the paths defined in this settings, they will be progressively overwritten. +.. data:: THEME_TEMPLATES_OVERRIDES = [] + + A list of paths you want Jinja2 to search for templates before searching the + theme's ``templates/`` directory. Allows for overriding individual theme + template files without having to fork an existing theme. Jinja2 searches in + the following order: files in ``THEME_TEMPLATES_OVERRIDES`` first, then the + theme's ``templates/``. + + You can also extend templates from the theme using the ``{% extends %}`` + directive utilizing the ``!theme`` prefix as shown in the following example: + + .. parsed-literal:: + + {% extends '!theme/article.html' %} + .. data:: CSS_FILE = 'main.css' Specify the CSS file you want to load. diff --git a/pelican/generators.py b/pelican/generators.py index eb97c115..1dbca007 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -51,20 +51,25 @@ class Generator(object): # templates cache self._templates = {} - self._templates_path = [] - self._templates_path.append(os.path.expanduser( - os.path.join(self.theme, 'templates'))) - self._templates_path += self.settings['EXTRA_TEMPLATES_PATHS'] + self._templates_path = list(self.settings['THEME_TEMPLATES_OVERRIDES']) - theme_path = os.path.dirname(os.path.abspath(__file__)) + theme_templates_path = os.path.expanduser( + os.path.join(self.theme, 'templates')) + self._templates_path.append(theme_templates_path) + theme_loader = FileSystemLoader(theme_templates_path) + + simple_theme_path = os.path.dirname(os.path.abspath(__file__)) + simple_loader = FileSystemLoader( + os.path.join(simple_theme_path, "themes", "simple", "templates")) - simple_loader = FileSystemLoader(os.path.join(theme_path, - "themes", "simple", "templates")) self.env = Environment( loader=ChoiceLoader([ FileSystemLoader(self._templates_path), simple_loader, # implicit inheritance - PrefixLoader({'!simple': simple_loader}) # explicit one + PrefixLoader({ + '!simple': simple_loader, + '!theme': theme_loader + }) # explicit ones ]), **self.settings['JINJA_ENVIRONMENT'] ) diff --git a/pelican/settings.py b/pelican/settings.py index 417de79a..d025cf7a 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -99,7 +99,7 @@ DEFAULT_CONFIG = { 'RELATIVE_URLS': False, 'DEFAULT_LANG': 'en', 'DIRECT_TEMPLATES': ['index', 'tags', 'categories', 'authors', 'archives'], - 'EXTRA_TEMPLATES_PATHS': [], + 'THEME_TEMPLATES_OVERRIDES': [], 'PAGINATED_DIRECT_TEMPLATES': ['index'], 'PELICAN_CLASS': 'pelican.Pelican', 'DEFAULT_DATE_FORMAT': '%a %d %B %Y', @@ -376,12 +376,26 @@ def configure_settings(settings): settings[new_key] = [settings[old_key]] # also make a list del settings[old_key] + # Deprecated warning of EXTRA_TEMPLATES_PATHS + if 'EXTRA_TEMPLATES_PATHS' in settings: + logger.warning('EXTRA_TEMPLATES_PATHS is deprecated use ' + 'THEME_TEMPLATES_OVERRIDES instead.') + if ('THEME_TEMPLATES_OVERRIDES' in settings and + settings['THEME_TEMPLATES_OVERRIDES']): + raise Exception( + 'Setting both EXTRA_TEMPLATES_PATHS and ' + 'THEME_TEMPLATES_OVERRIDES is not permitted. Please move to ' + 'only setting THEME_TEMPLATES_OVERRIDES.') + settings['THEME_TEMPLATES_OVERRIDES'] = \ + settings['EXTRA_TEMPLATES_PATHS'] + del settings['EXTRA_TEMPLATES_PATHS'] + # Save people from accidentally setting a string rather than a list path_keys = ( 'ARTICLE_EXCLUDES', 'DEFAULT_METADATA', 'DIRECT_TEMPLATES', - 'EXTRA_TEMPLATES_PATHS', + 'THEME_TEMPLATES_OVERRIDES', 'FILES_TO_COPY', 'IGNORE_FILES', 'PAGINATED_DIRECT_TEMPLATES', diff --git a/pelican/tests/test_generators.py b/pelican/tests/test_generators.py index 5f2151c3..100b1c5a 100644 --- a/pelican/tests/test_generators.py +++ b/pelican/tests/test_generators.py @@ -9,7 +9,8 @@ from shutil import copy, rmtree from tempfile import mkdtemp from pelican.generators import (ArticlesGenerator, Generator, PagesGenerator, - StaticGenerator, TemplatePagesGenerator) + PelicanTemplateNotFound, StaticGenerator, + TemplatePagesGenerator) from pelican.tests.support import get_settings, unittest from pelican.writers import Writer @@ -117,6 +118,62 @@ class TestGenerator(unittest.TestCase): self.assertEqual(comment_end_string, generator.env.comment_end_string) + def test_theme_overrides(self): + """ + Test that the THEME_TEMPLATES_OVERRIDES configuration setting is + utilized correctly in the Generator. + """ + override_dirs = (os.path.join(CUR_DIR, 'theme_overrides', 'level1'), + os.path.join(CUR_DIR, 'theme_overrides', 'level2')) + self.settings['THEME_TEMPLATES_OVERRIDES'] = override_dirs + generator = Generator( + context=self.settings.copy(), + settings=self.settings, + path=CUR_DIR, + theme=self.settings['THEME'], + output_path=None) + + filename = generator.get_template('article').filename + self.assertEqual(override_dirs[0], os.path.dirname(filename)) + self.assertEqual('article.html', os.path.basename(filename)) + + filename = generator.get_template('authors').filename + self.assertEqual(override_dirs[1], os.path.dirname(filename)) + self.assertEqual('authors.html', os.path.basename(filename)) + + filename = generator.get_template('taglist').filename + self.assertEqual(os.path.join(self.settings['THEME'], 'templates'), + os.path.dirname(filename)) + self.assertNotIn(os.path.dirname(filename), override_dirs) + self.assertEqual('taglist.html', os.path.basename(filename)) + + def test_simple_prefix(self): + """ + Test `!simple` theme prefix. + """ + filename = self.generator.get_template('!simple/authors').filename + expected_path = os.path.join( + os.path.dirname(CUR_DIR), 'themes', 'simple', 'templates') + self.assertEqual(expected_path, os.path.dirname(filename)) + self.assertEqual('authors.html', os.path.basename(filename)) + + def test_theme_prefix(self): + """ + Test `!theme` theme prefix. + """ + filename = self.generator.get_template('!theme/authors').filename + expected_path = os.path.join( + os.path.dirname(CUR_DIR), 'themes', 'notmyidea', 'templates') + self.assertEqual(expected_path, os.path.dirname(filename)) + self.assertEqual('authors.html', os.path.basename(filename)) + + def test_bad_prefix(self): + """ + Test unknown/bad theme prefix throws exception. + """ + self.assertRaises(PelicanTemplateNotFound, self.generator.get_template, + '!UNKNOWN/authors') + class TestArticlesGenerator(unittest.TestCase): diff --git a/pelican/tests/test_settings.py b/pelican/tests/test_settings.py index 7b1e36df..4ec16c0f 100644 --- a/pelican/tests/test_settings.py +++ b/pelican/tests/test_settings.py @@ -166,3 +166,20 @@ class TestSettingsConfiguration(unittest.TestCase): settings['THEME'] = 'foo' self.assertRaises(Exception, configure_settings, settings) + + def test_deprecated_extra_templates_paths(self): + settings = self.settings + settings['EXTRA_TEMPLATES_PATHS'] = ['/foo/bar', '/ha'] + + configure_settings(settings) + + self.assertEqual(settings['THEME_TEMPLATES_OVERRIDES'], + ['/foo/bar', '/ha']) + self.assertNotIn('EXTRA_TEMPLATES_PATHS', settings) + + def test_theme_and_extra_templates_exception(self): + settings = self.settings + settings['EXTRA_TEMPLATES_PATHS'] = ['/ha'] + settings['THEME_TEMPLATES_OVERRIDES'] = ['/foo/bar'] + + self.assertRaises(Exception, configure_settings, settings) diff --git a/pelican/tests/theme_overrides/level1/article.html b/pelican/tests/theme_overrides/level1/article.html new file mode 100644 index 00000000..12f6b7bf --- /dev/null +++ b/pelican/tests/theme_overrides/level1/article.html @@ -0,0 +1,4 @@ + diff --git a/pelican/tests/theme_overrides/level2/article.html b/pelican/tests/theme_overrides/level2/article.html new file mode 100644 index 00000000..12f6b7bf --- /dev/null +++ b/pelican/tests/theme_overrides/level2/article.html @@ -0,0 +1,4 @@ + diff --git a/pelican/tests/theme_overrides/level2/authors.html b/pelican/tests/theme_overrides/level2/authors.html new file mode 100644 index 00000000..12f6b7bf --- /dev/null +++ b/pelican/tests/theme_overrides/level2/authors.html @@ -0,0 +1,4 @@ + From 17b37358e9046ad840b37ff9fa20ed1a673ca727 Mon Sep 17 00:00:00 2001 From: Sergei K Date: Tue, 17 Oct 2017 07:38:18 +0500 Subject: [PATCH 055/867] Add a new signal: page_generator_write_page --- docs/plugins.rst | 1 + pelican/generators.py | 1 + pelican/signals.py | 1 + 3 files changed, 3 insertions(+) diff --git a/docs/plugins.rst b/docs/plugins.rst index 008e7551..10780b66 100644 --- a/docs/plugins.rst +++ b/docs/plugins.rst @@ -108,6 +108,7 @@ page_generator_preread page_generator invoked befor use if code needs to do something before every page is parsed. page_generator_init page_generator invoked in the PagesGenerator.__init__ page_generator_finalized page_generator invoked at the end of PagesGenerator.generate_context +page_generator_write_page page_generator, content invoked before writing each page, the page is passed as content page_writer_finalized page_generator, writer invoked after all pages have been written, but before the page generator is closed. static_generator_context static_generator, metadata diff --git a/pelican/generators.py b/pelican/generators.py index eb97c115..19c1d5a8 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -642,6 +642,7 @@ class PagesGenerator(CachingGenerator): def generate_output(self, writer): for page in chain(self.translations, self.pages, self.hidden_translations, self.hidden_pages): + signals.page_generator_write_page.send(self, content=page) writer.write_file( page.save_as, self.get_template(page.template), self.context, page=page, diff --git a/pelican/signals.py b/pelican/signals.py index 0b10fdfa..18a745b4 100644 --- a/pelican/signals.py +++ b/pelican/signals.py @@ -27,6 +27,7 @@ article_writer_finalized = signal('article_writer_finalized') page_generator_init = signal('page_generator_init') page_generator_finalized = signal('page_generator_finalized') +page_generator_write_page = signal('page_generator_write_page') page_writer_finalized = signal('page_writer_finalized') static_generator_init = signal('static_generator_init') From e83c3d97961d747657a8c2a589356e2b6b99cad3 Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Sun, 22 Oct 2017 15:51:56 +0200 Subject: [PATCH 056/867] Update URL from documentation. The new URL saves us a redirection and uses HTTPS --- docs/contribute.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/contribute.rst b/docs/contribute.rst index 187c3007..afba7523 100644 --- a/docs/contribute.rst +++ b/docs/contribute.rst @@ -15,8 +15,8 @@ Setting up the development environment ====================================== While there are many ways to set up one's development environment, following -is a method that uses `virtualenv `_. If you don't -have ``virtualenv`` installed, you can install it via:: +is a method that uses `virtualenv `_. +If you don't have ``virtualenv`` installed, you can install it via:: $ pip install virtualenv From fa709884214619bfbde05e4970578957f54a3cc0 Mon Sep 17 00:00:00 2001 From: Jorge Maldonado Ventura Date: Sun, 22 Oct 2017 18:07:36 +0200 Subject: [PATCH 057/867] Correct typo from documentation Missing comma before etc. --- docs/contribute.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/contribute.rst b/docs/contribute.rst index 187c3007..7fce0242 100644 --- a/docs/contribute.rst +++ b/docs/contribute.rst @@ -116,8 +116,8 @@ and Python 3 at the same time: - Encode/decode strings if e.g. the source is a Python function that is known to handle this badly, e.g. strftime() in Python 2. -- Use new syntax: print function, "except ... *as* e" (not comma) etc. -- Refactor method calls like ``dict.iteritems()``, ``xrange()`` etc. in a way +- Use new syntax: print function, "except ... *as* e" (not comma), etc. +- Refactor method calls like ``dict.iteritems()``, ``xrange()``, etc. in a way that runs without code change in both Python versions. - Do not use magic method ``__unicode()__`` in new classes. Use only ``__str()__`` and decorate the class with ``@python_2_unicode_compatible``. From 88da1b89cbebe66278aca7933f2c5165511b8207 Mon Sep 17 00:00:00 2001 From: Dan Bate Date: Sun, 15 Jan 2017 22:57:01 +0000 Subject: [PATCH 058/867] made template extensions configurable --- docs/settings.rst | 4 ++++ pelican/generators.py | 17 ++++++++++++----- pelican/settings.py | 1 + 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/settings.rst b/docs/settings.rst index e5ce19f5..d32a9869 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -699,6 +699,10 @@ Template pages 'src/resume.html': 'dest/resume.html', 'src/contact.html': 'dest/contact.html'} +.. data:: TEMPLATE_EXTENSION = ['.html'] + + The extensions to use when looking up template files from template names. + .. data:: DIRECT_TEMPLATES = ['index', 'categories', 'authors', 'archives'] List of templates that are used directly to render content. Typically direct diff --git a/pelican/generators.py b/pelican/generators.py index eb97c115..b9e40243 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -86,12 +86,19 @@ class Generator(object): templates ready to use with Jinja2. """ if name not in self._templates: - try: - self._templates[name] = self.env.get_template(name + '.html') - except TemplateNotFound: + for ext in self.settings['TEMPLATE_EXTENSIONS']: + try: + self._templates[name] = self.env.get_template(name + ext) + break + except TemplateNotFound: + continue + + if name not in self._templates: raise PelicanTemplateNotFound( - '[templates] unable to load {}.html from {}'.format( - name, self._templates_path)) + '[templates] unable to load {}[{}] from {}'.format( + name, ', '.join(self.settings['TEMPLATE_EXTENSIONS']), + self._templates_path)) + return self._templates[name] def _include_path(self, path, extensions=None): diff --git a/pelican/settings.py b/pelican/settings.py index 417de79a..0d09340b 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -134,6 +134,7 @@ DEFAULT_CONFIG = { 'PLUGINS': [], 'PYGMENTS_RST_OPTIONS': {}, 'TEMPLATE_PAGES': {}, + 'TEMPLATE_EXTENSIONS': ['.html'], 'IGNORE_FILES': ['.#*'], 'SLUG_SUBSTITUTIONS': (), 'INTRASITE_LINK_REGEX': '[{|](?P.*?)[|}]', From 56a483475b0a42bd13cf114248c9141c9051ed84 Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Thu, 26 Oct 2017 13:53:32 -0700 Subject: [PATCH 059/867] PyCodeStyle fixes to keep Flake8 happy Travis appears to be using new versions of underlying code style analyzers, so these changes were necessary in order to keep tests green. --- pelican/tests/support.py | 4 ++-- pelican/tools/pelican_quickstart.py | 10 +++++----- pelican/tools/pelican_themes.py | 2 +- setup.py | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pelican/tests/support.py b/pelican/tests/support.py index 3c2a203f..d425395d 100644 --- a/pelican/tests/support.py +++ b/pelican/tests/support.py @@ -55,11 +55,11 @@ def isplit(s, sep=None): """ sep, hardsep = r'\s+' if sep is None else re.escape(sep), sep is not None - exp, pos, l = re.compile(sep), 0, len(s) + exp, pos, length = re.compile(sep), 0, len(s) while True: m = exp.search(s, pos) if not m: - if pos < l or hardsep: + if pos < length or hardsep: # ^ mimic "split()": ''.split() returns [] yield s[pos:] break diff --git a/pelican/tools/pelican_quickstart.py b/pelican/tools/pelican_quickstart.py index eb63ed1f..a03f52df 100755 --- a/pelican/tools/pelican_quickstart.py +++ b/pelican/tools/pelican_quickstart.py @@ -14,7 +14,7 @@ import pytz try: import tzlocal _DEFAULT_TIMEZONE = tzlocal.get_localzone().zone -except: +except ImportError: _DEFAULT_TIMEZONE = 'Europe/Paris' import six @@ -114,7 +114,7 @@ def get_template(name, as_encoding='utf-8'): @decoding_strings -def ask(question, answer=str_compat, default=None, l=None): +def ask(question, answer=str_compat, default=None, length=None): if answer == str_compat: r = '' while True: @@ -132,8 +132,8 @@ def ask(question, answer=str_compat, default=None, l=None): else: print('You must enter something') else: - if l and len(r) != l: - print('You must enter a {0} letters long string'.format(l)) + if length and len(r) != length: + print('Entry must be {0} characters long'.format(length)) else: break @@ -180,7 +180,7 @@ def ask(question, answer=str_compat, default=None, l=None): try: r = int(r) break - except: + except ValueError: print('You must enter an integer') return r else: diff --git a/pelican/tools/pelican_themes.py b/pelican/tools/pelican_themes.py index fd60c424..b99a7ba3 100755 --- a/pelican/tools/pelican_themes.py +++ b/pelican/tools/pelican_themes.py @@ -17,7 +17,7 @@ def err(msg, die=None): try: import pelican -except: +except ImportError: err('Cannot import pelican.\nYou must ' 'install Pelican in order to run this script.', -1) diff --git a/setup.py b/setup.py index 0f839bdc..c8ab9e30 100755 --- a/setup.py +++ b/setup.py @@ -1,8 +1,8 @@ #!/usr/bin/env python +import sys from io import open from os import walk from os.path import join, relpath -import sys from setuptools import setup From 1f30306e2329e5a1f0c5dd39844d9bb0a0c04573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 19 Sep 2017 18:22:56 +0200 Subject: [PATCH 060/867] Make the internal link replacer function public. So it can be used from outside. --- pelican/contents.py | 126 ++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/pelican/contents.py b/pelican/contents.py index 15770fc8..a534dbaa 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -228,6 +228,68 @@ class Content(object): key = key if self.in_default_lang else 'lang_%s' % key return self._expand_settings(key) + def _link_replacer(self, siteurl, m): + what = m.group('what') + value = urlparse(m.group('value')) + path = value.path + origin = m.group('path') + + # XXX Put this in a different location. + if what in {'filename', 'attach'}: + if path.startswith('/'): + path = path[1:] + else: + # relative to the source path of this content + path = self.get_relative_source_path( + os.path.join(self.relative_dir, path) + ) + + if path not in self._context['filenames']: + unquoted_path = path.replace('%20', ' ') + + if unquoted_path in self._context['filenames']: + path = unquoted_path + + linked_content = self._context['filenames'].get(path) + if linked_content: + if what == 'attach': + if isinstance(linked_content, Static): + linked_content.attach_to(self) + else: + logger.warning( + "%s used {attach} link syntax on a " + "non-static file. Use {filename} instead.", + self.get_relative_source_path()) + origin = '/'.join((siteurl, linked_content.url)) + origin = origin.replace('\\', '/') # for Windows paths. + else: + logger.warning( + "Unable to find '%s', skipping url replacement.", + value.geturl(), extra={ + 'limit_msg': ("Other resources were not found " + "and their urls not replaced")}) + elif what == 'category': + origin = '/'.join((siteurl, Category(path, self.settings).url)) + elif what == 'tag': + origin = '/'.join((siteurl, Tag(path, self.settings).url)) + elif what == 'index': + origin = '/'.join((siteurl, self.settings['INDEX_SAVE_AS'])) + elif what == 'author': + origin = '/'.join((siteurl, Author(path, self.settings).url)) + else: + logger.warning( + "Replacement Indicator '%s' not recognized, " + "skipping replacement", + what) + + # keep all other parts, such as query, fragment, etc. + parts = list(value) + parts[2] = origin + origin = urlunparse(parts) + + return ''.join((m.group('markup'), m.group('quote'), origin, + m.group('quote'))) + def _update_content(self, content, siteurl): """Update the content attribute. @@ -251,69 +313,7 @@ class Content(object): \2""".format(instrasite_link_regex) hrefs = re.compile(regex, re.X) - def replacer(m): - what = m.group('what') - value = urlparse(m.group('value')) - path = value.path - origin = m.group('path') - - # XXX Put this in a different location. - if what in {'filename', 'attach'}: - if path.startswith('/'): - path = path[1:] - else: - # relative to the source path of this content - path = self.get_relative_source_path( - os.path.join(self.relative_dir, path) - ) - - if path not in self._context['filenames']: - unquoted_path = path.replace('%20', ' ') - - if unquoted_path in self._context['filenames']: - path = unquoted_path - - linked_content = self._context['filenames'].get(path) - if linked_content: - if what == 'attach': - if isinstance(linked_content, Static): - linked_content.attach_to(self) - else: - logger.warning( - "%s used {attach} link syntax on a " - "non-static file. Use {filename} instead.", - self.get_relative_source_path()) - origin = '/'.join((siteurl, linked_content.url)) - origin = origin.replace('\\', '/') # for Windows paths. - else: - logger.warning( - "Unable to find '%s', skipping url replacement.", - value.geturl(), extra={ - 'limit_msg': ("Other resources were not found " - "and their urls not replaced")}) - elif what == 'category': - origin = '/'.join((siteurl, Category(path, self.settings).url)) - elif what == 'tag': - origin = '/'.join((siteurl, Tag(path, self.settings).url)) - elif what == 'index': - origin = '/'.join((siteurl, self.settings['INDEX_SAVE_AS'])) - elif what == 'author': - origin = '/'.join((siteurl, Author(path, self.settings).url)) - else: - logger.warning( - "Replacement Indicator '%s' not recognized, " - "skipping replacement", - what) - - # keep all other parts, such as query, fragment, etc. - parts = list(value) - parts[2] = origin - origin = urlunparse(parts) - - return ''.join((m.group('markup'), m.group('quote'), origin, - m.group('quote'))) - - return hrefs.sub(replacer, content) + return hrefs.sub(lambda m: self._link_replacer(siteurl, m), content) def get_siteurl(self): return self._context.get('localsiteurl', '') From 0b13aa9b4610a8d26ece75cfcebebaa5fb3fa3de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 20 Jul 2017 23:21:17 +0200 Subject: [PATCH 061/867] Make URL part joining aware of absolute URLs. Previously, with RELATIVE_URLS disabled, when both SITEURL and STATIC_URL were absolute, the final generate data URLs looked wrong like this (two absolute URLs joined by `/`): http://your.site/http://static.your.site/image.png With this patch, the data URLs are correctly: http://static.your.site/image.png This also applies to all *_URL configuration options (for example, ability to have pages and articles on different domains) and behaves like one expects even with URLs starting with just `//`, thanks to making use of urllib.parse.urljoin(). However, when RELATIVE_URLS are enabled, urllib.parse.urljoin() doesn't handle the relative base correctly. In that case, simple os.path.join() is used. That, however, breaks the above case, but as RELATIVE_URLS are meant for local development (thus no data scattered across multiple domains), I don't see any problem. Just to clarify, this is a fully backwards-compatible change, it only enables new use cases that were impossible before. --- pelican/contents.py | 31 +++++++++++++++++----- pelican/tests/test_contents.py | 48 ++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 6 deletions(-) diff --git a/pelican/contents.py b/pelican/contents.py index a534dbaa..e84c8296 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -11,7 +11,7 @@ import sys import pytz import six -from six.moves.urllib.parse import urlparse, urlunparse +from six.moves.urllib.parse import urljoin, urlparse, urlunparse from pelican import signals from pelican.settings import DEFAULT_CONFIG @@ -234,6 +234,25 @@ class Content(object): path = value.path origin = m.group('path') + # urllib.parse.urljoin() produces `a.html` for urljoin("..", "a.html") + # so if RELATIVE_URLS are enabled, we fall back to os.path.join() to + # properly get `../a.html`. However, os.path.join() produces + # `baz/http://foo/bar.html` for join("baz", "http://foo/bar.html") + # instead of correct "http://foo/bar.html", so one has to pick a side + # as there is no silver bullet. + if self.settings['RELATIVE_URLS']: + joiner = os.path.join + else: + joiner = urljoin + + # However, it's not *that* simple: urljoin("blog", "index.html") + # produces just `index.html` instead of `blog/index.html` (unlike + # os.path.join()), so in order to get a correct answer one needs to + # append a trailing slash to siteurl in that case. This also makes + # the new behavior fully compatible with Pelican 3.7.1. + if not siteurl.endswith('/'): + siteurl += '/' + # XXX Put this in a different location. if what in {'filename', 'attach'}: if path.startswith('/'): @@ -260,7 +279,7 @@ class Content(object): "%s used {attach} link syntax on a " "non-static file. Use {filename} instead.", self.get_relative_source_path()) - origin = '/'.join((siteurl, linked_content.url)) + origin = joiner(siteurl, linked_content.url) origin = origin.replace('\\', '/') # for Windows paths. else: logger.warning( @@ -269,13 +288,13 @@ class Content(object): 'limit_msg': ("Other resources were not found " "and their urls not replaced")}) elif what == 'category': - origin = '/'.join((siteurl, Category(path, self.settings).url)) + origin = joiner(siteurl, Category(path, self.settings).url) elif what == 'tag': - origin = '/'.join((siteurl, Tag(path, self.settings).url)) + origin = joiner(siteurl, Tag(path, self.settings).url) elif what == 'index': - origin = '/'.join((siteurl, self.settings['INDEX_SAVE_AS'])) + origin = joiner(siteurl, self.settings['INDEX_SAVE_AS']) elif what == 'author': - origin = '/'.join((siteurl, Author(path, self.settings).url)) + origin = joiner(siteurl, Author(path, self.settings).url) else: logger.warning( "Replacement Indicator '%s' not recognized, " diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index d028c7a1..04c82f61 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -397,6 +397,54 @@ class TestPage(LoggedTestCase): '' ) + def test_intrasite_link_absolute(self): + """Test that absolute URLs are merged properly.""" + + args = self.page_kwargs.copy() + args['settings'] = get_settings( + STATIC_URL='http://static.cool.site/{path}', + ARTICLE_URL='http://blog.cool.site/{slug}.html') + args['source_path'] = 'content' + args['context']['filenames'] = { + 'images/poster.jpg': Static('', + settings=args['settings'], + source_path='images/poster.jpg'), + 'article.rst': Article('', + settings=args['settings'], + metadata={'slug': 'article', + 'title': 'Article'}) + } + + # Article link will go to blog + args['content'] = ( + 'Article' + ) + content = Page(**args).get_content('http://cool.site') + self.assertEqual( + content, + 'Article' + ) + + # Page link will go to the main site + args['content'] = ( + 'Index' + ) + content = Page(**args).get_content('http://cool.site') + self.assertEqual( + content, + 'Index' + ) + + # Image link will go to static + args['content'] = ( + '' + ) + content = Page(**args).get_content('http://cool.site') + self.assertEqual( + content, + '' + ) + def test_intrasite_link_markdown_spaces(self): # Markdown introduces %20 instead of spaces, this tests that # we support markdown doing this. From fc4b3e44d8a92635cabcff57bdf078cb2385ad80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 29 Oct 2017 20:31:09 +0100 Subject: [PATCH 062/867] Make use of SITESUBTITLE setting also in Atom feeds. For some reason, feedgenerator.py uses the `description` argument only for RSS and the `subtitle` argument only for Atom. So setting both to the same value. In order to avoid unnecessary changes, if SITESUBTITLE is not present, the subtitle is set to None instead of '', so the generated Atom feed doesn't contain an empty tag (in contrast, the RSS feed contains an empty tag now, though). --- pelican/writers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pelican/writers.py b/pelican/writers.py index fef0d5ca..ff3207fa 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -40,7 +40,8 @@ class Writer(object): title=Markup(feed_title).striptags(), link=(self.site_url + '/'), feed_url=self.feed_url, - description=context.get('SITESUBTITLE', '')) + description=context.get('SITESUBTITLE', ''), + subtitle=context.get('SITESUBTITLE', None)) return feed def _add_item_to_the_feed(self, feed, item): From d04b777159a7a28238a5bb989bbae1bce1a9c6b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 29 Oct 2017 21:28:11 +0100 Subject: [PATCH 063/867] Test for SITESUBTITLE in feeds. It's now present in both RSS and Atom feeds. --- pelican/tests/output/custom/a-markdown-powered-article.html | 2 +- pelican/tests/output/custom/archives.html | 2 +- pelican/tests/output/custom/article-1.html | 2 +- pelican/tests/output/custom/article-2.html | 2 +- pelican/tests/output/custom/article-3.html | 2 +- pelican/tests/output/custom/author/alexis-metaireau.html | 2 +- pelican/tests/output/custom/author/alexis-metaireau2.html | 2 +- pelican/tests/output/custom/author/alexis-metaireau3.html | 2 +- pelican/tests/output/custom/authors.html | 2 +- pelican/tests/output/custom/categories.html | 2 +- pelican/tests/output/custom/category/bar.html | 2 +- pelican/tests/output/custom/category/cat1.html | 2 +- pelican/tests/output/custom/category/misc.html | 2 +- pelican/tests/output/custom/category/yeah.html | 2 +- pelican/tests/output/custom/drafts/a-draft-article.html | 2 +- pelican/tests/output/custom/feeds/alexis-metaireau.atom.xml | 2 +- pelican/tests/output/custom/feeds/alexis-metaireau.rss.xml | 2 +- pelican/tests/output/custom/feeds/all-en.atom.xml | 2 +- pelican/tests/output/custom/feeds/all-fr.atom.xml | 2 +- pelican/tests/output/custom/feeds/all.atom.xml | 2 +- pelican/tests/output/custom/feeds/all.rss.xml | 2 +- pelican/tests/output/custom/feeds/bar.atom.xml | 2 +- pelican/tests/output/custom/feeds/bar.rss.xml | 2 +- pelican/tests/output/custom/feeds/cat1.atom.xml | 2 +- pelican/tests/output/custom/feeds/cat1.rss.xml | 2 +- pelican/tests/output/custom/feeds/misc.atom.xml | 2 +- pelican/tests/output/custom/feeds/misc.rss.xml | 2 +- pelican/tests/output/custom/feeds/yeah.atom.xml | 2 +- pelican/tests/output/custom/feeds/yeah.rss.xml | 2 +- pelican/tests/output/custom/filename_metadata-example.html | 2 +- pelican/tests/output/custom/index.html | 2 +- pelican/tests/output/custom/index2.html | 2 +- pelican/tests/output/custom/index3.html | 2 +- pelican/tests/output/custom/jinja2_template.html | 2 +- pelican/tests/output/custom/oh-yeah-fr.html | 2 +- pelican/tests/output/custom/oh-yeah.html | 2 +- pelican/tests/output/custom/override/index.html | 2 +- .../tests/output/custom/pages/this-is-a-test-hidden-page.html | 2 +- pelican/tests/output/custom/pages/this-is-a-test-page.html | 2 +- pelican/tests/output/custom/second-article-fr.html | 2 +- pelican/tests/output/custom/second-article.html | 2 +- pelican/tests/output/custom/tag/bar.html | 2 +- pelican/tests/output/custom/tag/baz.html | 2 +- pelican/tests/output/custom/tag/foo.html | 2 +- pelican/tests/output/custom/tag/foobar.html | 2 +- pelican/tests/output/custom/tag/oh.html | 2 +- pelican/tests/output/custom/tag/yeah.html | 2 +- pelican/tests/output/custom/tags.html | 2 +- pelican/tests/output/custom/this-is-a-super-article.html | 2 +- pelican/tests/output/custom/unbelievable.html | 2 +- samples/pelican.conf.py | 1 + 51 files changed, 51 insertions(+), 50 deletions(-) diff --git a/pelican/tests/output/custom/a-markdown-powered-article.html b/pelican/tests/output/custom/a-markdown-powered-article.html index 86c6a98d..5c416f2f 100644 --- a/pelican/tests/output/custom/a-markdown-powered-article.html +++ b/pelican/tests/output/custom/a-markdown-powered-article.html @@ -13,7 +13,7 @@ Fork me on GitHub