From 6e6f2d099352e641d9e1c9620b41b30e9708c635 Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Thu, 20 Mar 2025 10:32:03 +0100 Subject: [PATCH] Add django-scopes --- pyproject.toml | 1 + src/servala/core/middleware.py | 6 ++++-- src/servala/core/models/organization.py | 3 +++ uv.lock | 14 ++++++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a87e5a8..dc46064 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ dependencies = [ "cryptography>=44.0.2", "django==5.2b1", "django-allauth>=65.5.0", + "django-scopes>=2.0.0", "django-template-partials>=24.4", "pillow>=11.1.0", "psycopg2-binary>=2.9.10", diff --git a/src/servala/core/middleware.py b/src/servala/core/middleware.py index 07ebe4a..3046ff0 100644 --- a/src/servala/core/middleware.py +++ b/src/servala/core/middleware.py @@ -1,5 +1,6 @@ from django.shortcuts import get_object_or_404 from django.urls import resolve +from django_scopes import scope from servala.core.models import Organization @@ -16,7 +17,8 @@ class OrganizationMiddleware: if organization_slug: pk = organization_slug.rsplit("-", maxsplit=1)[-1] request.organization = get_object_or_404(Organization, pk=pk) - else: - request.organization = None + with scope(organization=request.organization): + return self.get_response(request) + request.organization = None return self.get_response(request) diff --git a/src/servala/core/models/organization.py b/src/servala/core/models/organization.py index 8a1c552..4c0cdac 100644 --- a/src/servala/core/models/organization.py +++ b/src/servala/core/models/organization.py @@ -4,6 +4,7 @@ from django.urls import reverse from django.utils.functional import cached_property from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ +from django_scopes import ScopedManager from .mixins import ServalaModelMixin @@ -136,6 +137,8 @@ class OrganizationMembership(ServalaModelMixin, models.Model): verbose_name=_("Role"), ) + objects = ScopedManager(organization="organization") + class Meta: verbose_name = _("Organization membership") verbose_name_plural = _("Organization memberships") diff --git a/uv.lock b/uv.lock index 3998632..7231712 100644 --- a/uv.lock +++ b/uv.lock @@ -248,6 +248,18 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/66/f8/b58f84c29bcbca3798939279a98e2423e6e53a38c29e3fed7700ff3d6984/django_allauth-65.5.0.tar.gz", hash = "sha256:1a564fd2f5413054559078c2b7146796b517c1e7a38c6312e9de7c9bb708325d", size = 1624216 } +[[package]] +name = "django-scopes" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/d7/a26ccb685b64e8e0b21f107b01ea16636a899a380175fe29d7c01d3d8395/django-scopes-2.0.0.tar.gz", hash = "sha256:d190d9a2462bce812bc6fdd254e47ba031f6fba3279c8ac7397c671df0a4e54f", size = 15118 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/3d/94d82839c111a36145b5ec1fb407a85f9a460af5974a07f4c6d3cc414358/django_scopes-2.0.0-py3-none-any.whl", hash = "sha256:9cf521b4d543ffa2ff6369fb5a1dda03567e862ba89626c01405f3d93ca04724", size = 16660 }, +] + [[package]] name = "django-template-partials" version = "24.4" @@ -658,6 +670,7 @@ dependencies = [ { name = "cryptography" }, { name = "django" }, { name = "django-allauth" }, + { name = "django-scopes" }, { name = "django-template-partials" }, { name = "pillow" }, { name = "psycopg2-binary" }, @@ -683,6 +696,7 @@ requires-dist = [ { name = "cryptography", specifier = ">=44.0.2" }, { name = "django", specifier = "==5.2b1" }, { name = "django-allauth", specifier = ">=65.5.0" }, + { name = "django-scopes", specifier = ">=2.0.0" }, { name = "django-template-partials", specifier = ">=24.4" }, { name = "pillow", specifier = ">=11.1.0" }, { name = "psycopg2-binary", specifier = ">=2.9.10" },