forked from github/pelican
Merge pull request #848 from Rogdham/no_overwrite
Check URL overwrite. Fixes #446.
This commit is contained in:
commit
dcc17bbfa4
2 changed files with 26 additions and 8 deletions
|
|
@ -425,15 +425,22 @@ def process_translations(content_list):
|
|||
if not default_lang_items:
|
||||
default_lang_items = items
|
||||
|
||||
# display warnings if several items have the same lang
|
||||
for lang, lang_items in groupby(items, attrgetter('lang')):
|
||||
lang_items = list(lang_items)
|
||||
len_ = len(lang_items)
|
||||
if len_ > 1:
|
||||
logger.warning('There are %s variants of "%s" with lang %s' \
|
||||
% (len_, slug, lang))
|
||||
for x in lang_items:
|
||||
logger.warning(' %s' % x.source_path)
|
||||
|
||||
# find items with default language
|
||||
default_lang_items = list(filter(attrgetter('in_default_lang'),
|
||||
default_lang_items))
|
||||
len_ = len(default_lang_items)
|
||||
if len_ > 1:
|
||||
logger.warning('there are %s variants of "%s"' % (len_, slug))
|
||||
for x in default_lang_items:
|
||||
logger.warning(' {}'.format(x.source_path))
|
||||
elif len_ == 0:
|
||||
|
||||
# if there is no article with default language, take an other one
|
||||
if not default_lang_items:
|
||||
default_lang_items = items[:1]
|
||||
|
||||
if not slug:
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ class Writer(object):
|
|||
self.output_path = output_path
|
||||
self.reminder = dict()
|
||||
self.settings = settings or {}
|
||||
self._written_files = set()
|
||||
|
||||
def _create_new_feed(self, feed_type, context):
|
||||
feed_class = Rss201rev2Feed if feed_type == 'rss' else Atom1Feed
|
||||
|
|
@ -46,6 +47,16 @@ class Writer(object):
|
|||
pubdate=set_date_tzinfo(item.date,
|
||||
self.settings.get('TIMEZONE', None)))
|
||||
|
||||
def _open_w(self, filename, encoding):
|
||||
"""Open a file to write some content to it.
|
||||
|
||||
Exit if we have already written to that file.
|
||||
"""
|
||||
if filename in self._written_files:
|
||||
raise IOError('File %s is to be overwritten' % filename)
|
||||
self._written_files.add(filename)
|
||||
return open(filename, 'w', encoding=encoding)
|
||||
|
||||
def write_feed(self, elements, context, path=None, feed_type='atom'):
|
||||
"""Generate a feed with the list of articles provided
|
||||
|
||||
|
|
@ -82,7 +93,7 @@ class Writer(object):
|
|||
pass
|
||||
|
||||
encoding = 'utf-8' if six.PY3 else None
|
||||
with open(complete_path, 'w', encoding=encoding) as fp:
|
||||
with self._open_w(complete_path, encoding) as fp:
|
||||
feed.write(fp, 'utf-8')
|
||||
logger.info('writing %s' % complete_path)
|
||||
return feed
|
||||
|
|
@ -121,7 +132,7 @@ class Writer(object):
|
|||
os.makedirs(os.path.dirname(path))
|
||||
except Exception:
|
||||
pass
|
||||
with open(path, 'w', encoding='utf-8') as f:
|
||||
with self._open_w(path, 'utf-8') as f:
|
||||
f.write(output)
|
||||
logger.info('writing {}'.format(path))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue