def generate_context(self): all_pages = [] hidden_pages = [] draft_pages = [] for f in self.get_files(self.settings['PAGE_PATHS'], exclude=self.settings['PAGE_EXCLUDES']): page = self.get_cached_data(f, None) if page is None: try: page = self.readers.read_file( base_path=self.path, path=f, content_class=Page, context=self.context, preread_signal=signals.page_generator_preread, preread_sender=self, context_signal=signals.page_generator_context, context_sender=self) except Exception as e: logger.error('Could not process %s\n%s', f, e, exc_info=self.settings.get('DEBUG', False)) self._add_failed_source_path(f) continue if not page.is_valid(): self._add_failed_source_path(f) continue self.cache_data(f, page) if page.status == "published": all_pages.append(page) elif page.status == "hidden": hidden_pages.append(page) elif page.status == "draft": draft_pages.append(page) self.add_source_path(page) self.pages, self.translations = process_translations(all_pages) self.pages = order_content(self.pages, self.settings['PAGE_ORDER_BY']) self.hidden_pages, self.hidden_translations = \ process_translations(hidden_pages) self.draft_pages, self.draft_translations = \ process_translations(draft_pages) self._update_context(('pages', 'hidden_pages', 'draft_pages')) self.save_cache() self.readers.save_cache() signals.page_generator_finalized.send(self)
def generate_context(self): all_pages = [] hidden_pages = [] draft_pages = [] for f in self.get_files( self.settings['PAGE_PATHS'], exclude=self.settings['PAGE_EXCLUDES']): page = self.get_cached_data(f, None) if page is None: try: page = self.readers.read_file( base_path=self.path, path=f, content_class=Page, context=self.context, preread_signal=signals.page_generator_preread, preread_sender=self, context_signal=signals.page_generator_context, context_sender=self) except Exception as e: logger.error( 'Could not process %s\n%s', f, e, exc_info=self.settings.get('DEBUG', False)) self._add_failed_source_path(f) continue if not page.is_valid(): self._add_failed_source_path(f) continue self.cache_data(f, page) if page.status == "published": all_pages.append(page) elif page.status == "hidden": hidden_pages.append(page) elif page.status == "draft": draft_pages.append(page) self.add_source_path(page) self.pages, self.translations = process_translations(all_pages) self.pages = order_content(self.pages, self.settings['PAGE_ORDER_BY']) self.hidden_pages, self.hidden_translations = \ process_translations(hidden_pages) self.draft_pages, self.draft_translations = \ process_translations(draft_pages) self._update_context(('pages', 'hidden_pages', 'draft_pages')) self.save_cache() self.readers.save_cache() signals.page_generator_finalized.send(self)
def _process(pages): origs, translations = process_translations( pages, translation_id=self.settings['PAGE_TRANSLATION_ID']) origs = order_content(origs, self.settings['PAGE_ORDER_BY']) return origs, translations
def generate_feeds(self, writer): """Generate the feeds from the current context, and output files.""" if self.settings.get('FEED_ATOM'): writer.write_feed( self.articles, self.context, self.settings['FEED_ATOM'], self.settings.get('FEED_ATOM_URL', self.settings['FEED_ATOM'])) if self.settings.get('FEED_RSS'): writer.write_feed(self.articles, self.context, self.settings['FEED_RSS'], self.settings.get('FEED_RSS_URL', self.settings['FEED_RSS']), feed_type='rss') if (self.settings.get('FEED_ALL_ATOM') or self.settings.get('FEED_ALL_RSS')): all_articles = list(self.articles) for article in self.articles: all_articles.extend(article.translations) order_content(all_articles, order_by=self.settings['ARTICLE_ORDER_BY']) if self.settings.get('FEED_ALL_ATOM'): writer.write_feed( all_articles, self.context, self.settings['FEED_ALL_ATOM'], self.settings.get('FEED_ALL_ATOM_URL', self.settings['FEED_ALL_ATOM'])) if self.settings.get('FEED_ALL_RSS'): writer.write_feed(all_articles, self.context, self.settings['FEED_ALL_RSS'], self.settings.get( 'FEED_ALL_RSS_URL', self.settings['FEED_ALL_RSS']), feed_type='rss') for cat, arts in self.categories: if self.settings.get('CATEGORY_FEED_ATOM'): writer.write_feed( arts, self.context, self.settings['CATEGORY_FEED_ATOM'].format(slug=cat.slug), self.settings.get( 'CATEGORY_FEED_ATOM_URL', self.settings['CATEGORY_FEED_ATOM']).format( slug=cat.slug), feed_title=cat.name) if self.settings.get('CATEGORY_FEED_RSS'): writer.write_feed( arts, self.context, self.settings['CATEGORY_FEED_RSS'].format(slug=cat.slug), self.settings.get( 'CATEGORY_FEED_RSS_URL', self.settings['CATEGORY_FEED_RSS']).format( slug=cat.slug), feed_title=cat.name, feed_type='rss') for auth, arts in self.authors: if self.settings.get('AUTHOR_FEED_ATOM'): writer.write_feed( arts, self.context, self.settings['AUTHOR_FEED_ATOM'].format(slug=auth.slug), self.settings.get( 'AUTHOR_FEED_ATOM_URL', self.settings['AUTHOR_FEED_ATOM']).format( slug=auth.slug), feed_title=auth.name) if self.settings.get('AUTHOR_FEED_RSS'): writer.write_feed( arts, self.context, self.settings['AUTHOR_FEED_RSS'].format(slug=auth.slug), self.settings.get('AUTHOR_FEED_RSS_URL', self.settings['AUTHOR_FEED_RSS']).format( slug=auth.slug), feed_title=auth.name, feed_type='rss') if (self.settings.get('TAG_FEED_ATOM') or self.settings.get('TAG_FEED_RSS')): for tag, arts in self.tags.items(): if self.settings.get('TAG_FEED_ATOM'): writer.write_feed( arts, self.context, self.settings['TAG_FEED_ATOM'].format(slug=tag.slug), self.settings.get( 'TAG_FEED_ATOM_URL', self.settings['TAG_FEED_ATOM']).format( slug=tag.slug), feed_title=tag.name) if self.settings.get('TAG_FEED_RSS'): writer.write_feed( arts, self.context, self.settings['TAG_FEED_RSS'].format(slug=tag.slug), self.settings.get( 'TAG_FEED_RSS_URL', self.settings['TAG_FEED_RSS']).format( slug=tag.slug), feed_title=tag.name, feed_type='rss') if (self.settings.get('TRANSLATION_FEED_ATOM') or self.settings.get('TRANSLATION_FEED_RSS')): translations_feeds = defaultdict(list) for article in chain(self.articles, self.translations): translations_feeds[article.lang].append(article) for lang, items in translations_feeds.items(): items = order_content( items, order_by=self.settings['ARTICLE_ORDER_BY']) if self.settings.get('TRANSLATION_FEED_ATOM'): writer.write_feed( items, self.context, self.settings['TRANSLATION_FEED_ATOM'].format( lang=lang), self.settings.get( 'TRANSLATION_FEED_ATOM_URL', self.settings['TRANSLATION_FEED_ATOM']).format( lang=lang), ) if self.settings.get('TRANSLATION_FEED_RSS'): writer.write_feed( items, self.context, self.settings['TRANSLATION_FEED_RSS'].format( lang=lang), self.settings.get( 'TRANSLATION_FEED_RSS_URL', self.settings['TRANSLATION_FEED_RSS']).format( lang=lang), feed_type='rss')
def generate_context(self): """Add the articles into the shared context""" all_articles = [] all_drafts = [] for f in self.get_files( self.settings['ARTICLE_PATHS'], exclude=self.settings['ARTICLE_EXCLUDES']): article = self.get_cached_data(f, None) if article is None: try: article = self.readers.read_file( base_path=self.path, path=f, content_class=Article, context=self.context, preread_signal=signals.article_generator_preread, preread_sender=self, context_signal=signals.article_generator_context, context_sender=self) except Exception as e: logger.error( 'Could not process %s\n%s', f, e, exc_info=self.settings.get('DEBUG', False)) self._add_failed_source_path(f) continue if not article.is_valid(): self._add_failed_source_path(f) continue self.cache_data(f, article) 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) self.articles = order_content( self.articles, order_by=self.settings['ARTICLE_ORDER_BY']) self.drafts, self.drafts_translations = \ process_translations(all_drafts) signals.article_generator_pretaxonomy.send(self) for article in self.articles: # only main articles are listed in categories and tags # not translations self.categories[article.category].append(article) if hasattr(article, 'tags'): for tag in article.tags: self.tags[tag].append(article) for author in getattr(article, 'authors', []): self.authors[author].append(article) self.dates = list(self.articles) self.dates.sort(key=attrgetter('date'), reverse=self.context['NEWEST_FIRST_ARCHIVES']) # and generate the output :) # order the categories per name self.categories = list(self.categories.items()) self.categories.sort( reverse=self.settings['REVERSE_CATEGORY_ORDER']) self.authors = list(self.authors.items()) self.authors.sort() self._update_context(('articles', 'dates', 'tags', 'categories', 'authors', 'related_posts', 'drafts')) self.save_cache() self.readers.save_cache() signals.article_generator_finalized.send(self)
def generate_feeds(self, writer): """Generate the feeds from the current context, and output files.""" if self.settings.get('FEED_ATOM'): writer.write_feed(self.articles, self.context, self.settings['FEED_ATOM'], self.settings.get('FEED_ATOM_URL', self.settings['FEED_ATOM'])) if self.settings.get('FEED_RSS'): writer.write_feed(self.articles, self.context, self.settings['FEED_RSS'], self.settings.get('FEED_RSS_URL', self.settings['FEED_RSS']), feed_type='rss') if (self.settings.get('FEED_ALL_ATOM') or self.settings.get('FEED_ALL_RSS')): all_articles = list(self.articles) for article in self.articles: all_articles.extend(article.translations) order_content(all_articles, order_by=self.settings['ARTICLE_ORDER_BY']) if self.settings.get('FEED_ALL_ATOM'): writer.write_feed(all_articles, self.context, self.settings['FEED_ALL_ATOM'], self.settings.get( 'FEED_ALL_ATOM_URL', self.settings['FEED_ALL_ATOM'])) if self.settings.get('FEED_ALL_RSS'): writer.write_feed(all_articles, self.context, self.settings['FEED_ALL_RSS'], self.settings.get( 'FEED_ALL_RSS_URL', self.settings['FEED_ALL_RSS']), feed_type='rss') for cat, arts in self.categories: if self.settings.get('CATEGORY_FEED_ATOM'): writer.write_feed(arts, self.context, self.settings['CATEGORY_FEED_ATOM'] % cat.slug, self.settings.get( 'CATEGORY_FEED_ATOM_URL', self.settings['CATEGORY_FEED_ATOM']) % cat.slug, feed_title=cat.name) if self.settings.get('CATEGORY_FEED_RSS'): writer.write_feed(arts, self.context, self.settings['CATEGORY_FEED_RSS'] % cat.slug, self.settings.get( 'CATEGORY_FEED_RSS_URL', self.settings['CATEGORY_FEED_RSS']) % cat.slug, feed_title=cat.name, feed_type='rss') for auth, arts in self.authors: if self.settings.get('AUTHOR_FEED_ATOM'): writer.write_feed(arts, self.context, self.settings['AUTHOR_FEED_ATOM'] % auth.slug, self.settings.get( 'AUTHOR_FEED_ATOM_URL', self.settings['AUTHOR_FEED_ATOM']) % auth.slug, feed_title=auth.name) if self.settings.get('AUTHOR_FEED_RSS'): writer.write_feed(arts, self.context, self.settings['AUTHOR_FEED_RSS'] % auth.slug, self.settings.get( 'AUTHOR_FEED_RSS_URL', self.settings['AUTHOR_FEED_RSS']) % auth.slug, feed_title=auth.name, feed_type='rss') if (self.settings.get('TAG_FEED_ATOM') or self.settings.get('TAG_FEED_RSS')): for tag, arts in self.tags.items(): if self.settings.get('TAG_FEED_ATOM'): writer.write_feed(arts, self.context, self.settings['TAG_FEED_ATOM'] % tag.slug, self.settings.get( 'TAG_FEED_ATOM_URL', self.settings['TAG_FEED_ATOM']) % tag.slug, feed_title=tag.name) if self.settings.get('TAG_FEED_RSS'): writer.write_feed(arts, self.context, self.settings['TAG_FEED_RSS'] % tag.slug, self.settings.get( 'TAG_FEED_RSS_URL', self.settings['TAG_FEED_RSS']) % tag.slug, feed_title=tag.name, feed_type='rss') if (self.settings.get('TRANSLATION_FEED_ATOM') or self.settings.get('TRANSLATION_FEED_RSS')): translations_feeds = defaultdict(list) for article in chain(self.articles, self.translations): translations_feeds[article.lang].append(article) for lang, items in translations_feeds.items(): items = order_content( items, order_by=self.settings['ARTICLE_ORDER_BY']) if self.settings.get('TRANSLATION_FEED_ATOM'): writer.write_feed( items, self.context, self.settings['TRANSLATION_FEED_ATOM'] % lang, self.settings.get( 'TRANSLATION_FEED_ATOM_URL', self.settings['TRANSLATION_FEED_ATOM']) % lang) if self.settings.get('TRANSLATION_FEED_RSS'): writer.write_feed( items, self.context, self.settings['TRANSLATION_FEED_RSS'] % lang, self.settings.get( 'TRANSLATION_FEED_RSS_URL', self.settings['TRANSLATION_FEED_RSS']) % lang, feed_type='rss')