Files
pi-weekly-newspaper/src/routes/articles.py
2026-04-06 15:21:18 -04:00

49 lines
1.3 KiB
Python

import json
from datetime import date, timedelta
from flask import Blueprint, render_template, request
from src.models import Article
articles_bp = Blueprint("articles", __name__)
@articles_bp.route("/articles")
def index():
week_filter = request.args.get("week")
category_filter = request.args.get("category")
query = Article.query
if week_filter:
try:
year, week_num = week_filter.split("-W")
week_start = date.fromisocalendar(int(year), int(week_num), 1)
week_end = week_start + timedelta(days=6)
query = query.filter(
Article.pub_date >= str(week_start),
Article.pub_date < str(week_end + timedelta(days=1)),
)
except (ValueError, TypeError):
pass
articles = query.order_by(Article.pub_date.desc()).all()
if category_filter:
articles = [
a for a in articles
if category_filter in json.loads(a.categories)
]
all_categories = set()
for a in Article.query.all():
for cat in json.loads(a.categories):
all_categories.add(cat)
return render_template(
"articles.html",
articles=articles,
categories=sorted(all_categories),
week_filter=week_filter or "",
category_filter=category_filter or "",
)