feat: invalidate sitemap cache on article publish/delete/create

Add invalidate_sitemap_cache() to sitemap.py and call it from
article_publish, article_delete, and article_new admin routes.

Subtask 6 of CMS admin improvement.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Deeman
2026-02-24 01:15:44 +01:00
parent 0c69d9e1a0
commit 81b361859d
2 changed files with 18 additions and 0 deletions

View File

@@ -1740,6 +1740,9 @@ async def article_new():
(url_path, article_slug, title, meta_description, og_image_url,
country, region, status, pub_dt),
)
from ..sitemap import invalidate_sitemap_cache
invalidate_sitemap_cache()
await flash(f"Article '{title}' created.", "success")
return redirect(url_for("admin.articles"))
@@ -1828,6 +1831,10 @@ async def article_delete(article_id: int):
md_path.unlink()
await execute("DELETE FROM articles WHERE id = ?", (article_id,))
from ..sitemap import invalidate_sitemap_cache
invalidate_sitemap_cache()
await flash("Article deleted.", "success")
return redirect(url_for("admin.articles"))
@@ -1848,6 +1855,10 @@ async def article_publish(article_id: int):
"UPDATE articles SET status = ?, updated_at = ? WHERE id = ?",
(new_status, now, article_id),
)
from ..sitemap import invalidate_sitemap_cache
invalidate_sitemap_cache()
await flash(f"Article status changed to {new_status}.", "success")
return redirect(url_for("admin.articles"))

View File

@@ -103,6 +103,13 @@ async def _generate_sitemap_xml(base_url: str) -> str:
return xml
def invalidate_sitemap_cache() -> None:
"""Force sitemap regeneration on next request."""
global _cache_xml, _cache_timestamp # noqa: PLW0603
_cache_xml = ""
_cache_timestamp = 0.0
async def sitemap_response(base_url: str) -> Response:
"""Return cached sitemap XML, regenerating if stale (1-hour TTL)."""
global _cache_xml, _cache_timestamp # noqa: PLW0603