Source code for reader.sitemaps

"""Sitemaps for the reader app."""

from __future__ import annotations

from typing import TYPE_CHECKING, Iterable

from django.contrib.sitemaps import Sitemap
from django.db.models import Prefetch

from .models import Chapter, Page, Series

if TYPE_CHECKING:  # pragma: no cover
    from datetime import datetime  # isort:skip


[docs]class SeriesSitemap(Sitemap): """Sitemap for series.""" #: The priority of the sitemap. priority = 0.7 #: The change frequency of the items. changefreq = 'weekly'
[docs] def items(self) -> Iterable[Series]: """ Get an iterable of the sitemap's items. :return: An iterable of ``Series`` objects. """ return Series.objects.only('cover', 'modified').order_by('modified')
[docs] def lastmod(self, item: Series) -> datetime: """ Get the last modified date of the item. :param item: A ``Series`` object. :return: The date the series was modified. """ return item.modified
[docs]class ChapterSitemap(Sitemap): """Sitemap for chapters.""" #: The priority of the sitemap. priority = 0.6 #: The change frequency of the items. changefreq = 'never' #: The maximum number of items allowed. limit = 1000
[docs] def items(self) -> Iterable[Chapter]: """ Get an iterable of the sitemap's items. :return: An iterable of ``Chapter`` objects. """ return Chapter.objects.prefetch_related( Prefetch('pages', queryset=Page.objects.order_by('number')) ).only('modified').order_by('modified')
[docs] def lastmod(self, item: Chapter) -> datetime: """ Get the last modified date of the item. :param item: A ``Series`` object. :return: The date the chapter was modified. """ return item.modified
__all__ = ['SeriesSitemap', 'ChapterSitemap']