Compare commits

..

2 commits

Author SHA1 Message Date
859e01faf4
Optimize sitemap views?
All checks were successful
Deploy to Server / deploy (push) Successful in 25s
2026-04-12 05:46:05 +02:00
83befdc247
Fix typo 2026-04-12 05:31:26 +02:00
2 changed files with 50 additions and 39 deletions

View file

@ -256,7 +256,6 @@ def sitemap_static_view(request: HttpRequest) -> HttpResponse:
Returns: Returns:
HttpResponse: The rendered sitemap XML. HttpResponse: The rendered sitemap XML.
""" """
# `request` is unused but required by Django's view signature.
base_url: str = _build_base_url().rstrip("/") base_url: str = _build_base_url().rstrip("/")
sitemap_urls: list[dict[str, str]] = [ sitemap_urls: list[dict[str, str]] = [
{"loc": f"{base_url}{reverse('core:dashboard')}"}, {"loc": f"{base_url}{reverse('core:dashboard')}"},
@ -327,14 +326,16 @@ def sitemap_twitch_channels_view(request: HttpRequest) -> HttpResponse:
Returns: Returns:
HttpResponse: The rendered sitemap XML. HttpResponse: The rendered sitemap XML.
""" """
# `request` is unused but required by Django's view signature. base_url: str = _build_base_url().rstrip("/")
base_url: str = _build_base_url() channel_detail_prefix: str = reverse("twitch:channel_list")
sitemap_urls: list[dict[str, str]] = [] sitemap_urls: list[dict[str, str]] = []
channels: QuerySet[Channel] = Channel.objects.all() channels: QuerySet[Channel] = Channel.objects.only(
"twitch_id",
"updated_at",
).order_by()
for channel in channels: for channel in channels:
resource_url: str = reverse("twitch:channel_detail", args=[channel.twitch_id]) full_url: str = f"{base_url}{channel_detail_prefix}{channel.twitch_id}/"
full_url: str = f"{base_url}{resource_url}"
entry: dict[str, str] = {"loc": full_url} entry: dict[str, str] = {"loc": full_url}
if channel.updated_at: if channel.updated_at:
entry["lastmod"] = channel.updated_at.isoformat() entry["lastmod"] = channel.updated_at.isoformat()
@ -354,29 +355,34 @@ def sitemap_twitch_drops_view(request: HttpRequest) -> HttpResponse:
Returns: Returns:
HttpResponse: The rendered sitemap XML. HttpResponse: The rendered sitemap XML.
""" """
# `request` is unused but required by Django's view signature. base_url: str = _build_base_url().rstrip("/")
base_url: str = _build_base_url() campaign_detail_prefix: str = reverse("twitch:campaign_list")
reward_campaign_detail_prefix: str = reverse("twitch:reward_campaign_list")
sitemap_urls: list[dict[str, str]] = [] sitemap_urls: list[dict[str, str]] = []
campaigns: QuerySet[DropCampaign] = DropCampaign.objects.filter( campaigns: QuerySet[DropCampaign] = (
DropCampaign.objects
.filter(
is_fully_imported=True, is_fully_imported=True,
) )
.only("twitch_id", "updated_at")
.order_by()
)
for campaign in campaigns: for campaign in campaigns:
resource_url: str = reverse("twitch:campaign_detail", args=[campaign.twitch_id]) full_url: str = f"{base_url}{campaign_detail_prefix}{campaign.twitch_id}/"
full_url: str = f"{base_url}{resource_url}"
campaign_url_entry: dict[str, str] = {"loc": full_url} campaign_url_entry: dict[str, str] = {"loc": full_url}
if campaign.updated_at: if campaign.updated_at:
campaign_url_entry["lastmod"] = campaign.updated_at.isoformat() campaign_url_entry["lastmod"] = campaign.updated_at.isoformat()
sitemap_urls.append(campaign_url_entry) sitemap_urls.append(campaign_url_entry)
reward_campaigns: QuerySet[RewardCampaign] = RewardCampaign.objects.all() reward_campaigns: QuerySet[RewardCampaign] = RewardCampaign.objects.only(
"twitch_id",
"updated_at",
).order_by()
for reward_campaign in reward_campaigns: for reward_campaign in reward_campaigns:
resource_url = reverse( full_url = (
"twitch:reward_campaign_detail", f"{base_url}{reward_campaign_detail_prefix}{reward_campaign.twitch_id}/"
args=[reward_campaign.twitch_id],
) )
full_url: str = f"{base_url}{resource_url}"
reward_campaign_url_entry: dict[str, str] = {"loc": full_url} reward_campaign_url_entry: dict[str, str] = {"loc": full_url}
if reward_campaign.updated_at: if reward_campaign.updated_at:
reward_campaign_url_entry["lastmod"] = ( reward_campaign_url_entry["lastmod"] = (
@ -399,14 +405,15 @@ def sitemap_twitch_others_view(request: HttpRequest) -> HttpResponse:
Returns: Returns:
HttpResponse: The rendered sitemap XML. HttpResponse: The rendered sitemap XML.
""" """
# `request` is unused but required by Django's view signature. base_url: str = _build_base_url().rstrip("/")
base_url: str = _build_base_url() game_detail_prefix: str = reverse("twitch:games_grid")
organization_detail_prefix: str = reverse("twitch:org_list")
badge_set_detail_prefix: str = reverse("twitch:badge_list")
sitemap_urls: list[dict[str, str]] = [] sitemap_urls: list[dict[str, str]] = []
games: QuerySet[Game] = Game.objects.all() games: QuerySet[Game] = Game.objects.only("twitch_id", "updated_at").order_by()
for game in games: for game in games:
resource_url: str = reverse("twitch:game_detail", args=[game.twitch_id]) full_url: str = f"{base_url}{game_detail_prefix}{game.twitch_id}/"
full_url: str = f"{base_url}{resource_url}"
entry: dict[str, str] = {"loc": full_url} entry: dict[str, str] = {"loc": full_url}
if game.updated_at: if game.updated_at:
@ -414,10 +421,12 @@ def sitemap_twitch_others_view(request: HttpRequest) -> HttpResponse:
sitemap_urls.append(entry) sitemap_urls.append(entry)
orgs: QuerySet[Organization] = Organization.objects.all() orgs: QuerySet[Organization] = Organization.objects.only(
"twitch_id",
"updated_at",
).order_by()
for org in orgs: for org in orgs:
resource_url: str = reverse("twitch:organization_detail", args=[org.twitch_id]) full_url: str = f"{base_url}{organization_detail_prefix}{org.twitch_id}/"
full_url: str = f"{base_url}{resource_url}"
entry: dict[str, str] = {"loc": full_url} entry: dict[str, str] = {"loc": full_url}
if org.updated_at: if org.updated_at:
@ -425,10 +434,9 @@ def sitemap_twitch_others_view(request: HttpRequest) -> HttpResponse:
sitemap_urls.append(entry) sitemap_urls.append(entry)
badge_sets: QuerySet[ChatBadgeSet] = ChatBadgeSet.objects.all() badge_sets: QuerySet[ChatBadgeSet] = ChatBadgeSet.objects.only("set_id").order_by()
for badge_set in badge_sets: for badge_set in badge_sets:
resource_url = reverse("twitch:badge_set_detail", args=[badge_set.set_id]) full_url = f"{base_url}{badge_set_detail_prefix}{badge_set.set_id}/"
full_url = f"{base_url}{resource_url}"
sitemap_urls.append({"loc": full_url}) sitemap_urls.append({"loc": full_url})
# Emotes currently don't have individual detail pages, but keep a listing here. # Emotes currently don't have individual detail pages, but keep a listing here.
@ -448,16 +456,20 @@ def sitemap_kick_view(request: HttpRequest) -> HttpResponse:
Returns: Returns:
HttpResponse: The rendered sitemap XML. HttpResponse: The rendered sitemap XML.
""" """
# `request` is unused but required by Django's view signature. base_url: str = _build_base_url().rstrip("/")
base_url: str = _build_base_url() kick_campaign_detail_prefix: str = reverse("kick:campaign_list")
sitemap_urls: list[dict[str, str]] = [] sitemap_urls: list[dict[str, str]] = []
kick_campaigns: QuerySet[KickDropCampaign] = KickDropCampaign.objects.filter( kick_campaigns: QuerySet[KickDropCampaign] = (
KickDropCampaign.objects
.filter(
is_fully_imported=True, is_fully_imported=True,
) )
.only("kick_id", "updated_at")
.order_by()
)
for campaign in kick_campaigns: for campaign in kick_campaigns:
resource_url: str = reverse("kick:campaign_detail", args=[campaign.kick_id]) full_url: str = f"{base_url}{kick_campaign_detail_prefix}{campaign.kick_id}/"
full_url: str = f"{base_url}{resource_url}"
entry: dict[str, str] = {"loc": full_url} entry: dict[str, str] = {"loc": full_url}
if campaign.updated_at: if campaign.updated_at:
entry["lastmod"] = campaign.updated_at.isoformat() entry["lastmod"] = campaign.updated_at.isoformat()
@ -477,7 +489,6 @@ def sitemap_youtube_view(request: HttpRequest) -> HttpResponse:
Returns: Returns:
HttpResponse: The rendered sitemap XML. HttpResponse: The rendered sitemap XML.
""" """
# `request` is unused but required by Django's view signature.
base_url: str = _build_base_url() base_url: str = _build_base_url()
sitemap_urls: list[dict[str, str]] = [ sitemap_urls: list[dict[str, str]] = [
{"loc": f"{base_url}{reverse('youtube:index')}"}, {"loc": f"{base_url}{reverse('youtube:index')}"},

View file

@ -268,7 +268,7 @@ def _active_reward_campaigns(
return queryset.filter(starts_at__lte=now, ends_at__gte=now) return queryset.filter(starts_at__lte=now, ends_at__gte=now)
def genereate_details_link_html(item: DropCampaign) -> list[SafeText]: def generate_details_link_html(item: DropCampaign) -> list[SafeText]:
"""Helper method to append a details link to the description if available. """Helper method to append a details link to the description if available.
Args: Args:
@ -1017,7 +1017,7 @@ class DropCampaignFeed(TTVDropsBaseFeed):
parts.extend(generate_date_html(item=item)) parts.extend(generate_date_html(item=item))
parts.extend(generate_drops_summary_html(item=item)) parts.extend(generate_drops_summary_html(item=item))
parts.extend(generate_channels_html(item)) parts.extend(generate_channels_html(item))
parts.extend(genereate_details_link_html(item)) parts.extend(generate_details_link_html(item))
return SafeText("".join(str(p) for p in parts)) return SafeText("".join(str(p) for p in parts))
@ -1556,7 +1556,7 @@ class DropCampaignDiscordFeed(TTVDropsAtomBaseFeed, DropCampaignFeed):
parts.extend(generate_discord_date_html(item=item)) parts.extend(generate_discord_date_html(item=item))
parts.extend(generate_drops_summary_html(item=item)) parts.extend(generate_drops_summary_html(item=item))
parts.extend(generate_channels_html(item)) parts.extend(generate_channels_html(item))
parts.extend(genereate_details_link_html(item)) parts.extend(generate_details_link_html(item))
return SafeText("".join(str(p) for p in parts)) return SafeText("".join(str(p) for p in parts))