49 lines
1.3 KiB
Python
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 "",
|
||
|
|
)
|