1
0
Fork 0
forked from github/pelican

Merge pull request #2758 from MinchinWeb/settings-pathlib-2

This commit is contained in:
Justin Mayer 2023-10-28 21:56:34 +02:00 committed by GitHub
commit e14f20bb99
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 75 additions and 44 deletions

View file

@ -221,7 +221,7 @@ class Content:
if not klass: if not klass:
klass = self.__class__.__name__ klass = self.__class__.__name__
fq_key = ('{}_{}'.format(klass, key)).upper() fq_key = ('{}_{}'.format(klass, key)).upper()
return self.settings[fq_key].format(**self.url_format) return str(self.settings[fq_key]).format(**self.url_format)
def get_url_setting(self, key): def get_url_setting(self, key):
if hasattr(self, 'override_' + key): if hasattr(self, 'override_' + key):

View file

@ -18,7 +18,6 @@ from pelican.readers import Readers
from pelican.utils import (DateFormatter, copy, mkdir_p, order_content, from pelican.utils import (DateFormatter, copy, mkdir_p, order_content,
posixize_path, process_translations) posixize_path, process_translations)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -328,8 +327,9 @@ class ArticlesGenerator(CachingGenerator):
all_articles = list(self.articles) all_articles = list(self.articles)
for article in self.articles: for article in self.articles:
all_articles.extend(article.translations) all_articles.extend(article.translations)
order_content(all_articles, order_content(
order_by=self.settings['ARTICLE_ORDER_BY']) all_articles, order_by=self.settings['ARTICLE_ORDER_BY']
)
if self.settings.get('FEED_ALL_ATOM'): if self.settings.get('FEED_ALL_ATOM'):
writer.write_feed( writer.write_feed(
@ -355,12 +355,12 @@ class ArticlesGenerator(CachingGenerator):
writer.write_feed( writer.write_feed(
arts, arts,
self.context, self.context,
self.settings['CATEGORY_FEED_ATOM'].format(slug=cat.slug), str(self.settings['CATEGORY_FEED_ATOM']).format(slug=cat.slug),
self.settings.get( self.settings.get(
'CATEGORY_FEED_ATOM_URL', 'CATEGORY_FEED_ATOM_URL',
self.settings['CATEGORY_FEED_ATOM']).format( str(self.settings['CATEGORY_FEED_ATOM']).format(
slug=cat.slug slug=cat.slug
), )),
feed_title=cat.name feed_title=cat.name
) )
@ -368,12 +368,12 @@ class ArticlesGenerator(CachingGenerator):
writer.write_feed( writer.write_feed(
arts, arts,
self.context, self.context,
self.settings['CATEGORY_FEED_RSS'].format(slug=cat.slug), str(self.settings['CATEGORY_FEED_RSS']).format(slug=cat.slug),
self.settings.get( self.settings.get(
'CATEGORY_FEED_RSS_URL', 'CATEGORY_FEED_RSS_URL',
self.settings['CATEGORY_FEED_RSS']).format( str(self.settings['CATEGORY_FEED_RSS']).format(
slug=cat.slug slug=cat.slug
), )),
feed_title=cat.name, feed_title=cat.name,
feed_type='rss' feed_type='rss'
) )
@ -383,11 +383,12 @@ class ArticlesGenerator(CachingGenerator):
writer.write_feed( writer.write_feed(
arts, arts,
self.context, self.context,
self.settings['AUTHOR_FEED_ATOM'].format(slug=auth.slug), str(self.settings['AUTHOR_FEED_ATOM']).format(slug=auth.slug),
self.settings.get( self.settings.get(
'AUTHOR_FEED_ATOM_URL', 'AUTHOR_FEED_ATOM_URL',
self.settings['AUTHOR_FEED_ATOM'] str(self.settings['AUTHOR_FEED_ATOM']).format(
).format(slug=auth.slug), slug=auth.slug
)),
feed_title=auth.name feed_title=auth.name
) )
@ -395,11 +396,12 @@ class ArticlesGenerator(CachingGenerator):
writer.write_feed( writer.write_feed(
arts, arts,
self.context, self.context,
self.settings['AUTHOR_FEED_RSS'].format(slug=auth.slug), str(self.settings['AUTHOR_FEED_RSS']).format(slug=auth.slug),
self.settings.get( self.settings.get(
'AUTHOR_FEED_RSS_URL', 'AUTHOR_FEED_RSS_URL',
self.settings['AUTHOR_FEED_RSS'] str(self.settings['AUTHOR_FEED_RSS']).format(
).format(slug=auth.slug), slug=auth.slug
)),
feed_title=auth.name, feed_title=auth.name,
feed_type='rss' feed_type='rss'
) )
@ -411,11 +413,12 @@ class ArticlesGenerator(CachingGenerator):
writer.write_feed( writer.write_feed(
arts, arts,
self.context, self.context,
self.settings['TAG_FEED_ATOM'].format(slug=tag.slug), str(self.settings['TAG_FEED_ATOM']).format(slug=tag.slug),
self.settings.get( self.settings.get(
'TAG_FEED_ATOM_URL', 'TAG_FEED_ATOM_URL',
self.settings['TAG_FEED_ATOM'] str(self.settings['TAG_FEED_ATOM']).format(
).format(slug=tag.slug), slug=tag.slug
)),
feed_title=tag.name feed_title=tag.name
) )
@ -423,11 +426,12 @@ class ArticlesGenerator(CachingGenerator):
writer.write_feed( writer.write_feed(
arts, arts,
self.context, self.context,
self.settings['TAG_FEED_RSS'].format(slug=tag.slug), str(self.settings['TAG_FEED_RSS']).format(slug=tag.slug),
self.settings.get( self.settings.get(
'TAG_FEED_RSS_URL', 'TAG_FEED_RSS_URL',
self.settings['TAG_FEED_RSS'] str(self.settings['TAG_FEED_RSS']).format(
).format(slug=tag.slug), slug=tag.slug
)),
feed_title=tag.name, feed_title=tag.name,
feed_type='rss' feed_type='rss'
) )
@ -445,25 +449,30 @@ class ArticlesGenerator(CachingGenerator):
writer.write_feed( writer.write_feed(
items, items,
self.context, self.context,
self.settings['TRANSLATION_FEED_ATOM'] str(
.format(lang=lang), self.settings['TRANSLATION_FEED_ATOM']
).format(lang=lang),
self.settings.get( self.settings.get(
'TRANSLATION_FEED_ATOM_URL', 'TRANSLATION_FEED_ATOM_URL',
self.settings['TRANSLATION_FEED_ATOM'] str(
self.settings['TRANSLATION_FEED_ATOM']
).format(lang=lang), ).format(lang=lang),
) )
)
if self.settings.get('TRANSLATION_FEED_RSS'): if self.settings.get('TRANSLATION_FEED_RSS'):
writer.write_feed( writer.write_feed(
items, items,
self.context, self.context,
self.settings['TRANSLATION_FEED_RSS'] str(
.format(lang=lang), self.settings['TRANSLATION_FEED_RSS']
).format(lang=lang),
self.settings.get( self.settings.get(
'TRANSLATION_FEED_RSS_URL', 'TRANSLATION_FEED_RSS_URL',
self.settings['TRANSLATION_FEED_RSS'] str(self.settings['TRANSLATION_FEED_RSS'])).format(
).format(lang=lang), lang=lang
),
feed_type='rss' feed_type='rss'
) )
def generate_articles(self, write): def generate_articles(self, write):
"""Generate the articles.""" """Generate the articles."""

View file

@ -7,6 +7,7 @@ import os
import re import re
import sys import sys
from os.path import isabs from os.path import isabs
from pathlib import Path
from pelican.log import LimitFilter from pelican.log import LimitFilter
@ -408,7 +409,10 @@ def handle_deprecated_settings(settings):
for key in ['TRANSLATION_FEED_ATOM', for key in ['TRANSLATION_FEED_ATOM',
'TRANSLATION_FEED_RSS' 'TRANSLATION_FEED_RSS'
]: ]:
if settings.get(key) and '%s' in settings[key]: if (
settings.get(key) and not isinstance(settings[key], Path)
and '%s' in settings[key]
):
logger.warning('%%s usage in %s is deprecated, use {lang} ' logger.warning('%%s usage in %s is deprecated, use {lang} '
'instead.', key) 'instead.', key)
try: try:
@ -425,7 +429,10 @@ def handle_deprecated_settings(settings):
'TAG_FEED_ATOM', 'TAG_FEED_ATOM',
'TAG_FEED_RSS', 'TAG_FEED_RSS',
]: ]:
if settings.get(key) and '%s' in settings[key]: if (
settings.get(key) and not isinstance(settings[key], Path)
and '%s' in settings[key]
):
logger.warning('%%s usage in %s is deprecated, use {slug} ' logger.warning('%%s usage in %s is deprecated, use {slug} '
'instead.', key) 'instead.', key)
try: try:

View file

@ -1,6 +1,7 @@
import functools import functools
import logging import logging
import os import os
import pathlib
from pelican.utils import slugify from pelican.utils import slugify
@ -110,6 +111,8 @@ class URLWrapper:
""" """
setting = "{}_{}".format(self.__class__.__name__.upper(), key) setting = "{}_{}".format(self.__class__.__name__.upper(), key)
value = self.settings[setting] value = self.settings[setting]
if isinstance(value, pathlib.Path):
value = str(value)
if not isinstance(value, str): if not isinstance(value, str):
logger.warning('%s is set to %s', setting, value) logger.warning('%s is set to %s', setting, value)
return value return value

View file

@ -3,6 +3,7 @@ import fnmatch
import locale import locale
import logging import logging
import os import os
import pathlib
import re import re
import shutil import shutil
import sys import sys
@ -942,17 +943,28 @@ def split_all(path):
>>> split_all(os.path.join('a', 'b', 'c')) >>> split_all(os.path.join('a', 'b', 'c'))
['a', 'b', 'c'] ['a', 'b', 'c']
""" """
components = [] if isinstance(path, str):
path = path.lstrip('/') components = []
while path: path = path.lstrip('/')
head, tail = os.path.split(path) while path:
if tail: head, tail = os.path.split(path)
components.insert(0, tail) if tail:
elif head == path: components.insert(0, tail)
components.insert(0, head) elif head == path:
break components.insert(0, head)
path = head break
return components path = head
return components
elif isinstance(path, pathlib.Path):
return path.parts
elif path is None:
return None
else:
raise TypeError(
'"path" was {}, must be string, None, or pathlib.Path'.format(
type(path)
)
)
def is_selected_for_writing(settings, path): def is_selected_for_writing(settings, path):

View file

@ -29,7 +29,7 @@ class Writer:
self.urljoiner = posix_join self.urljoiner = posix_join
else: else:
self.urljoiner = lambda base, url: urljoin( self.urljoiner = lambda base, url: urljoin(
base if base.endswith('/') else base + '/', url) base if base.endswith('/') else base + '/', str(url))
def _create_new_feed(self, feed_type, feed_title, context): def _create_new_feed(self, feed_type, feed_title, context):
feed_class = Rss201rev2Feed if feed_type == 'rss' else Atom1Feed feed_class = Rss201rev2Feed if feed_type == 'rss' else Atom1Feed