mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
Merge branch 'morerss' into 'master'
Draft: Add package comments/changes rss endpoint See merge request archlinux/aurweb!795
This commit is contained in:
commit
61b2978993
1 changed files with 52 additions and 2 deletions
|
@ -2,8 +2,9 @@ from fastapi import APIRouter, Request
|
||||||
from fastapi.responses import Response
|
from fastapi.responses import Response
|
||||||
from feedgen.feed import FeedGenerator
|
from feedgen.feed import FeedGenerator
|
||||||
|
|
||||||
from aurweb import db, filters
|
from aurweb import db, filters, models
|
||||||
from aurweb.models import Package, PackageBase
|
from aurweb.models import Package, PackageBase, PackageComment
|
||||||
|
from aurweb.packages.util import get_pkg_or_base
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
@ -42,6 +43,55 @@ def make_rss_feed(request: Request, packages: list):
|
||||||
return feed.rss_str()
|
return feed.rss_str()
|
||||||
|
|
||||||
|
|
||||||
|
def make_rss_feed_comments(request: Request, pkgbase: PackageBase, comments: list):
|
||||||
|
"""Create an RSS Feed string for some packages.
|
||||||
|
|
||||||
|
:param request: A FastAPI request
|
||||||
|
:param comments: A list of comments to add the to RSS feed
|
||||||
|
:return: RSS Feed string
|
||||||
|
"""
|
||||||
|
|
||||||
|
feed = FeedGenerator()
|
||||||
|
feed.title(f"AUR Newest Comments for {pkgbase.Name}")
|
||||||
|
feed.description(f"The 10 latest comments on {pkgbase.Name}")
|
||||||
|
base = f"{request.url.scheme}://{request.url.netloc}"
|
||||||
|
feed.link(href=base, rel="alternate")
|
||||||
|
feed.link(href=f"{base}/rss/comments/{pkgbase.Name}", rel="self")
|
||||||
|
feed.image(
|
||||||
|
title=f"AUR Newest Comments for {pkgbase.Name}",
|
||||||
|
url=f"{base}/static/css/archnavbar/aurlogo.png",
|
||||||
|
link=base,
|
||||||
|
description=f"The 10 latest comments on {pkgbase.Name}",
|
||||||
|
)
|
||||||
|
|
||||||
|
for comment in comments:
|
||||||
|
entry = feed.add_entry(order="append")
|
||||||
|
entry.title(comment.Comments[:60])
|
||||||
|
entry.link(
|
||||||
|
href=f"{base}/packages/{pkgbase.Name}#comment-{comment.ID}", rel="alternate"
|
||||||
|
)
|
||||||
|
entry.description(comment.Comments)
|
||||||
|
dt = filters.timestamp_to_datetime(comment.CommentTS)
|
||||||
|
dt = filters.as_timezone(dt, request.user.Timezone)
|
||||||
|
entry.pubDate(dt.strftime("%Y-%m-%d %H:%M:%S%z"))
|
||||||
|
entry.pubDate()
|
||||||
|
entry.guid(f"{pkgbase.Name}-{comment.ID}")
|
||||||
|
|
||||||
|
return feed.rss_str()
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/rss/comments/{package_name}")
|
||||||
|
async def comments(request: Request, package_name: str):
|
||||||
|
pkg = get_pkg_or_base(package_name, models.Package)
|
||||||
|
pkgbase = pkg.PackageBase
|
||||||
|
comments = pkgbase.comments.order_by(PackageComment.CommentTS.desc()).limit(10)
|
||||||
|
|
||||||
|
feed = make_rss_feed_comments(request, pkgbase, comments.all())
|
||||||
|
response = Response(feed, media_type="application/rss+xml")
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
@router.get("/rss/")
|
@router.get("/rss/")
|
||||||
async def rss(request: Request):
|
async def rss(request: Request):
|
||||||
packages = (
|
packages = (
|
||||||
|
|
Loading…
Add table
Reference in a new issue