From 3ac6fda1f81f124a1c5644363bd9a9577d817170 Mon Sep 17 00:00:00 2001 From: David Graham Date: Wed, 8 Nov 2023 17:37:41 -0500 Subject: [PATCH] add SitePermissions as inline table to a users haztrak profile, remove admin_rcrainfo_profile from HaztrakProfile --- server/apps/conftest.py | 2 - server/apps/core/admin.py | 55 ++++++++++++++++++++-- server/apps/sites/admin.py | 41 ---------------- server/apps/sites/tests/conftest.py | 2 +- server/apps/sites/tests/test_site_views.py | 4 +- 5 files changed, 54 insertions(+), 50 deletions(-) diff --git a/server/apps/conftest.py b/server/apps/conftest.py index bd6a2fe8f..812dde30f 100644 --- a/server/apps/conftest.py +++ b/server/apps/conftest.py @@ -93,11 +93,9 @@ def haztrak_profile_factory(db, user_factory): def create_profile( user: Optional[User] = None, - admin_rcrainfo_profile: Optional[RcraProfile] = None, ) -> HaztrakProfile: return HaztrakProfile.objects.create( user=user or user_factory(), - admin_rcrainfo_profile=admin_rcrainfo_profile, ) yield create_profile diff --git a/server/apps/core/admin.py b/server/apps/core/admin.py index 33e2bc6c1..65562edd3 100644 --- a/server/apps/core/admin.py +++ b/server/apps/core/admin.py @@ -3,7 +3,8 @@ from django.urls import reverse from django.utils.html import format_html, urlencode -from .models import HaztrakProfile, HaztrakUser +from ..sites.models import RcraSitePermissions, SitePermissions +from .models import HaztrakProfile, HaztrakUser, RcraProfile class HiddenListView(admin.ModelAdmin): @@ -17,9 +18,6 @@ def has_module_permission(self, request): return False -admin.site.register(HaztrakProfile) - - @admin.register(HaztrakUser) class HaztrakUserAdmin(UserAdmin): list_display = ["username", "related_profile", "email", "is_staff", "is_superuser"] @@ -32,6 +30,55 @@ def related_profile(self, user: HaztrakUser) -> str: return format_html("{}", url, user.haztrak_profile) +class RcraSitePermissionInline(admin.TabularInline): + model = RcraSitePermissions + extra = 0 + + ordering = ["site"] + + def has_change_permission(self, request, obj=None): + return False + + def has_delete_permission(self, request, obj=None): + return False + + +class SitePermissionsInline(admin.TabularInline): + model = SitePermissions + extra = 0 + ordering = ["site"] + + +@admin.register(HaztrakProfile) +class HaztrakProfileAdmin(admin.ModelAdmin): + list_display = ["__str__", "number_of_sites"] + search_fields = ["user__username"] + inlines = [SitePermissionsInline] + + @staticmethod + def number_of_sites(profile: HaztrakProfile) -> str: + # return ", ".join([str(site) for site in profile.sit]) + return str(profile.site_permissions.all().count()) + + +@admin.register(RcraProfile) +class RcraProfileAdmin(admin.ModelAdmin): + list_display = ["__str__", "related_user", "rcra_username", "api_user"] + search_fields = ["user__username", "rcra_username"] + inlines = [RcraSitePermissionInline] + + def related_user(self, user): + url = reverse("admin:core_haztrakuser_changelist") + "?" + urlencode({"q": str(user.id)}) + return format_html("{}", url, user) + + def api_user(self, profile: RcraProfile) -> bool: + return profile.has_api_credentials + + api_user.boolean = True + api_user.short_description = "Rcrainfo API User" + related_user.short_description = "User" + + try: from rest_framework.authtoken.models import TokenProxy as DRFToken except ImportError: diff --git a/server/apps/sites/admin.py b/server/apps/sites/admin.py index f5b65711e..4f966ae14 100644 --- a/server/apps/sites/admin.py +++ b/server/apps/sites/admin.py @@ -9,7 +9,6 @@ Contact, HaztrakSite, RcraSite, - RcraSitePermissions, SitePermissions, ) @@ -21,15 +20,6 @@ class HandlerAdmin(admin.ModelAdmin): search_fields = ["epa_id"] -# admin.site.register(SitePermissions) -@admin.register(SitePermissions) -class SitePermissionAdmin(admin.ModelAdmin): - list_display = ["__str__", "site", "emanifest"] - list_filter = ["site", "profile"] - search_fields = ["site"] - search_help_text = "Search by user or site" - - @admin.register(HaztrakSite) class SiteAdmin(admin.ModelAdmin): list_display = ["__str__", "related_handler", "last_rcrainfo_manifest_sync"] @@ -45,37 +35,6 @@ def related_handler(self, site: HaztrakSite) -> str: return format_html("{}", url, site.rcra_site.epa_id) -class RcraSitePermissionInline(admin.TabularInline): - model = RcraSitePermissions - extra = 0 - - ordering = ["site"] - - def has_change_permission(self, request, obj=None): - return False - - def has_delete_permission(self, request, obj=None): - return False - - -@admin.register(RcraProfile) -class RcraProfileAdmin(admin.ModelAdmin): - list_display = ["__str__", "related_user", "rcra_username", "api_user"] - search_fields = ["user__username", "rcra_username"] - inlines = [RcraSitePermissionInline] - - def related_user(self, user): - url = reverse("admin:core_haztrakuser_changelist") + "?" + urlencode({"q": str(user.id)}) - return format_html("{}", url, user) - - def api_user(self, profile: RcraProfile) -> bool: - return profile.has_api_credentials - - api_user.boolean = True - api_user.short_description = "Rcrainfo API User" - related_user.short_description = "User" - - # Register models That should only be edited within the context of another form here. admin.site.register(Contact, HiddenListView) admin.site.register(Address, HiddenListView) diff --git a/server/apps/sites/tests/conftest.py b/server/apps/sites/tests/conftest.py index fe89ff80e..d22bd81ac 100644 --- a/server/apps/sites/tests/conftest.py +++ b/server/apps/sites/tests/conftest.py @@ -12,7 +12,7 @@ @pytest.fixture -def site_access_factory(db, haztrak_site_factory, haztrak_profile_factory): +def haztrak_site_permission_factory(db, haztrak_site_factory, haztrak_profile_factory): """Abstract factory for Haztrak RcraSitePermissions model""" def create_permission( diff --git a/server/apps/sites/tests/test_site_views.py b/server/apps/sites/tests/test_site_views.py index 02ed8b74f..f34285a14 100644 --- a/server/apps/sites/tests/test_site_views.py +++ b/server/apps/sites/tests/test_site_views.py @@ -64,7 +64,7 @@ class TestSiteDetailsApi: def local_site_factory( self, haztrak_profile_factory, - site_access_factory, + haztrak_site_permission_factory, rcra_site_factory, user_factory, haztrak_site_factory, @@ -83,7 +83,7 @@ def create_site_and_related( if site is None: site = haztrak_site_factory(rcra_site=rcra_site) if rcra_site_permission is None: - site_access_factory(site=site, profile=profile) + haztrak_site_permission_factory(site=site, profile=profile) return site return create_site_and_related