Fix markup cache invalidation

This commit is contained in:
Drew DeVault 2020-03-31 11:51:24 -04:00
parent c6060b6707
commit 5ca816a2ae
2 changed files with 7 additions and 11 deletions

View File

@ -6,7 +6,7 @@ from srht.database import db
from srht.oauth import current_user, loginrequired
from srht.validation import Validation
from todosrht.access import get_tracker, get_ticket
from todosrht.filters import invalidate_markup_cache, render_markup
from todosrht.filters import render_markup
from todosrht.search import find_usernames
from todosrht.tickets import add_comment, mark_seen, assign, unassign
from todosrht.tickets import get_participant_for_user
@ -224,9 +224,6 @@ def ticket_edit_POST(owner, name, ticket_id):
ticket.title = title
ticket.description = desc
db.session.commit()
invalidate_markup_cache(ticket)
return redirect(ticket_url(ticket))
@ticket.route("/<owner>/<name>/<int:ticket_id>/add_label", methods=["POST"])

View File

@ -1,8 +1,10 @@
import hashlib
import json
import re
from datetime import timedelta
from functools import wraps
from jinja2.utils import Markup, escape
from srht.flask import icon, csrf_token
from srht.flask import icon, csrf_token, date_handler
from srht.markdown import markdown, SRHT_MARKDOWN_VERSION
from srht.redis import redis
from todosrht import urls
@ -13,7 +15,9 @@ def cache_rendered_markup(func):
@wraps(func)
def wrap(obj):
class_name = obj.__class__.__name__
key = f"todo.sr.ht:cache_rendered_markup:{class_name}:{obj.id}:v{SRHT_MARKDOWN_VERSION}"
sha = hashlib.sha1()
sha.update(json.dumps(obj.to_dict(), default=date_handler).encode())
key = f"todo.sr.ht:cache_rendered_markup:{class_name}:{sha.hexdigest()}:v{SRHT_MARKDOWN_VERSION}"
value = redis.get(key)
if value:
return Markup(value.decode())
@ -68,11 +72,6 @@ def render_comment(comment):
def render_ticket_description(ticket):
return render_markup(ticket.tracker, ticket.description)
def invalidate_markup_cache(obj):
class_name = obj.__class__.__name__
key = f"todo.sr.ht:cache_rendered_markup:{class_name}:{obj.id}"
redis.delete(key)
def label_badge(label, cls="", remove_from_ticket=None, terms=None):
"""Return HTML markup rendering a label badge.