예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
 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
예제 #4
0
    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')
예제 #5
0
    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)
예제 #6
0
    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')
예제 #7
0
    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)
예제 #8
0
 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