Revert "Revert " Added sitemap""

This reverts commit 3e1a61ffe0.
This commit is contained in:
Mawoka
2022-12-22 18:51:24 +01:00
parent 0de8c8ba92
commit cc091cb82d
2 changed files with 76 additions and 1 deletions
+15 -1
View File
@@ -14,7 +14,20 @@ from classquiz.db import database
from datetime import timedelta
from classquiz.oauth import rememberme_middleware
from classquiz.routers import users, quiz, utils, stats, storage, search, testing_routes, editor, live, eximport, login
from classquiz.routers import (
users,
quiz,
utils,
stats,
storage,
search,
testing_routes,
editor,
live,
eximport,
login,
sitemap,
)
from classquiz.socket_server import sio
from classquiz.helpers import meilisearch_init, telemetry_ping, bg_tasks
from scheduler.asyncio import Scheduler
@@ -82,4 +95,5 @@ app.include_router(
)
app.include_router(editor.router, tags=["editor"], prefix="/api/v1/editor", include_in_schema=True)
app.include_router(eximport.router, tags=["export", "import"], prefix="/api/v1/eximport", include_in_schema=True)
app.include_router(sitemap.router, tags=["sitemap"], prefix="/api/v1/sitemap", include_in_schema=True)
app.mount("/", ASGIApp(sio))
+61
View File
@@ -0,0 +1,61 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
import datetime
import uuid
from fastapi import APIRouter, Response
from jinja2 import Template
from pydantic import BaseModel
from classquiz.config import redis, settings
from classquiz.db import database
settings = settings()
router = APIRouter()
sitemap_template = """<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for entry in pages -%}
<url>
<loc>{{ root_address}}/view/{{ entry.id.hex }}</loc>
{%- if entry.updated_at != None -%}
<lastmod>{{ entry.updated_at.strftime("%Y-%m-%d") }}</lastmod>
{% endif %}
</url>
{%- endfor %}
</urlset>"""
sql_statement_metadata = """
SELECT id, title, description, updated_at from quiz where public ='t'
"""
sql_statement_id_and_modified_only = """
SELECT id, updated_at from quiz where public ='t'
"""
template = Template(sitemap_template, enable_async=True)
class SitemapQuiz(BaseModel):
id: uuid.UUID
updated_at: datetime.datetime
class Config:
orm_mode = True
@router.get("/get")
async def get_sitemap():
redis_cache_resp = await redis.get("sitemap")
if redis_cache_resp is None:
res = await database.fetch_all(sql_statement_id_and_modified_only)
entries = []
for i in res:
entries.append(SitemapQuiz.from_orm(i))
rendered_sitemap = await template.render_async({"pages": entries, "root_address": settings.root_address})
await redis.set("sitemap", rendered_sitemap, ex=86400)
return Response(content=rendered_sitemap, media_type="application/xml")
else:
return Response(content=redis_cache_resp, media_type="application/xml")