from django.http import Http404 from django_scopes import scope from scopedsites.models import Domain class DomainScopeMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): d = Domain.get_from_request(request) # technically does hit the db layer, but should get caught in memcache # TODO: performance testing with scope(domain=d): response = self.get_response(request) return response class DomainAutoCreateMiddleware: def __init__(self, get_response): self.get_response = get_response self.cache = set() def ensure_exists(self, r): if (host := r.META.get("HTTP_HOST")) in self.cache: return try: Domain.get_from_request(r) self.cache.add(host) except Http404: Domain.objects.create(fqdn=r.META.get('HTTP_HOST')) def __call__(self, request): self.ensure_exists(request) return self.get_response(request)