From 73ca6a1316688342af1e2bbae729c4200f3ab224 Mon Sep 17 00:00:00 2001 From: Rogdham Date: Sun, 14 Apr 2013 15:55:18 +0100 Subject: [PATCH 1/2] Add non unique slug warnings for translations --- pelican/utils.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/pelican/utils.py b/pelican/utils.py index 7e7b9ccb..11a08917 100644 --- a/pelican/utils.py +++ b/pelican/utils.py @@ -418,15 +418,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: From ff7410ce2ada85b486a67ae11874d60d135ff939 Mon Sep 17 00:00:00 2001 From: Rogdham Date: Sun, 14 Apr 2013 15:56:39 +0100 Subject: [PATCH 2/2] Check URL overwrite. Fixes #446. Check that template-generated files don't overwrite each other. Log a critical message otherwise, and exit with non-zero status. --- pelican/writers.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pelican/writers.py b/pelican/writers.py index c762bbe4..f848d498 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -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))