feat: version 0.9.30 - cache invalidation fixes
🔧 Fixed cache invalidation for featured materials: - Enhanced invalidate_shout_related_cache with featured keys - Fixed set_featured/set_unfeatured functions with async cache invalidation - Materials now correctly appear/disappear from main page on feature/unfeature ✅ Code Quality: Python Standards Compliance - Ruff linting & formatting checks passed - MyPy type checking passed - All functions have proper type hints and docstrings - Tests passing successfully Version bump: 0.9.30
This commit is contained in:
17
CHANGELOG.md
17
CHANGELOG.md
@@ -1,5 +1,22 @@
|
||||
# Changelog
|
||||
|
||||
## [0.9.30] - 2025-10-02
|
||||
|
||||
### 🔧 Fixed
|
||||
- **Ревалидация кеша featured материалов**: Критическое исправление инвалидации кеша при изменении featured статуса
|
||||
- Добавлены ключи кеша для featured материалов в `invalidate_shout_related_cache`
|
||||
- Исправлена функция `set_featured`: добавлена инвалидация кеша лент
|
||||
- Исправлена функция `set_unfeatured`: добавлена инвалидация кеша лент
|
||||
- Теперь материалы корректно появляются/исчезают с главной страницы при фичеринге/расфичеринге
|
||||
- Улучшена производительность через асинхронную инвалидацию кеша
|
||||
|
||||
### ✅ Code Quality
|
||||
- **Python Standards Compliance**: Код соответствует стандартам 003-python-standards.mdc
|
||||
- Пройдены проверки Ruff (linting & formatting)
|
||||
- Пройдены проверки MyPy (type checking)
|
||||
- Все функции имеют типы и докстринги
|
||||
- Тесты проходят успешно
|
||||
|
||||
## [0.9.29] - 2025-10-01
|
||||
|
||||
### 🔧 Fixed
|
||||
|
||||
10
cache/cache.py
vendored
10
cache/cache.py
vendored
@@ -513,6 +513,10 @@ async def invalidate_shout_related_cache(shout: Shout, author_id: int) -> None:
|
||||
"unrated", # неоцененные
|
||||
"recent", # последние
|
||||
"coauthored", # совместные
|
||||
# 🔧 Добавляем ключи с featured материалами
|
||||
"featured", # featured публикации
|
||||
"featured:recent", # недавние featured
|
||||
"featured:top", # топ featured
|
||||
}
|
||||
|
||||
# Добавляем ключи авторов
|
||||
@@ -523,6 +527,12 @@ async def invalidate_shout_related_cache(shout: Shout, author_id: int) -> None:
|
||||
cache_keys.update(f"topic_{t.id}" for t in shout.topics)
|
||||
cache_keys.update(f"topic_shouts_{t.id}" for t in shout.topics)
|
||||
|
||||
# 🔧 Добавляем ключи featured материалов для каждой темы
|
||||
for topic in shout.topics:
|
||||
cache_keys.update(
|
||||
[f"topic_{topic.id}:featured", f"topic_{topic.id}:featured:recent", f"topic_{topic.id}:featured:top"]
|
||||
)
|
||||
|
||||
await invalidate_shouts_cache(list(cache_keys))
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "publy-panel",
|
||||
"version": "0.9.28",
|
||||
"version": "0.9.30",
|
||||
"type": "module",
|
||||
"description": "Publy, a modern platform for collaborative text creation, offers a user-friendly interface for authors, editors, and readers, supporting real-time collaboration and structured feedback.",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import asyncio
|
||||
import time
|
||||
import traceback
|
||||
from typing import Any
|
||||
@@ -274,6 +275,11 @@ async def set_featured(session: Session, shout_id: int) -> None:
|
||||
for topic in s.topics:
|
||||
revalidation_manager.mark_for_revalidation(topic.id, "topics")
|
||||
|
||||
# 🔧 Инвалидируем ключи кеша лент для обновления featured статусов
|
||||
from cache.cache import invalidate_shout_related_cache
|
||||
|
||||
await invalidate_shout_related_cache(s, s.created_by)
|
||||
|
||||
logger.info(f"Публикация {shout_id} получила статус featured, кеш помечен для ревалидации")
|
||||
|
||||
|
||||
@@ -303,6 +309,12 @@ def set_unfeatured(session: Session, shout_id: int) -> None:
|
||||
for topic in shout.topics:
|
||||
revalidation_manager.mark_for_revalidation(topic.id, "topics")
|
||||
|
||||
# 🔧 Инвалидируем ключи кеша лент для обновления featured статусов
|
||||
from cache.cache import invalidate_shout_related_cache
|
||||
|
||||
# Используем asyncio.create_task для асинхронного вызова
|
||||
asyncio.create_task(invalidate_shout_related_cache(shout, shout.created_by))
|
||||
|
||||
logger.info(f"Публикация {shout_id} потеряла статус featured, кеш помечен для ревалидации")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user