forked from github/pelican
Merge pull request #2758 from MinchinWeb/settings-pathlib-2
This commit is contained in:
commit
e14f20bb99
6 changed files with 75 additions and 44 deletions
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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."""
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue