takahe/core/middleware.py

47 lines
1.2 KiB
Python
Raw Normal View History

2022-12-05 09:55:30 -08:00
from time import time
from django.core.exceptions import MiddlewareNotUsed
from core import sentry
2022-11-17 23:09:04 -08:00
from core.models import Config
class ConfigLoadingMiddleware:
"""
Caches the system config every request
"""
refresh_interval: float = 5.0
2022-12-05 09:55:30 -08:00
2022-11-17 23:09:04 -08:00
def __init__(self, get_response):
self.get_response = get_response
2022-12-05 09:55:30 -08:00
self.config_ts: float = 0.0
2022-11-17 23:09:04 -08:00
def __call__(self, request):
# Allow test fixtures to force and lock the config
if not getattr(Config, "__forced__", False):
if (
not getattr(Config, "system", None)
or (time() - self.config_ts) >= self.refresh_interval
):
Config.system = Config.load_system()
self.config_ts = time()
2022-11-17 23:09:04 -08:00
response = self.get_response(request)
return response
class SentryTaggingMiddleware:
"""
Sets Sentry tags at the start of the request if Sentry is configured.
"""
def __init__(self, get_response):
if not sentry.SENTRY_ENABLED:
raise MiddlewareNotUsed()
self.get_response = get_response
def __call__(self, request):
sentry.set_takahe_app("web")
response = self.get_response(request)
return response