Coverage for api/admin/site.py: 12%
32 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 06:14 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 06:14 +0000
1from django.contrib import admin
3from api.constants.media_types import MEDIA_TYPE_CHOICES
6class OpenverseAdmin(admin.AdminSite):
7 site_header = "Openverse administration"
9 def get_app_list(self, *args, **kwargs):
10 """
11 Present media specific models outside the main API group.
13 This modifies the app and model list to make it shorter and easier to
14 comprehend, thereby making it faster to locate the model of interest.
15 """
17 app_list = super().get_app_list(*args, **kwargs)
18 api_app = next((app for app in app_list if app["app_label"] == "api"), None)
19 if api_app is None:
20 return app_list
22 for media_type, media_type_name in MEDIA_TYPE_CHOICES:
23 models = []
24 for model in api_app["models"][:]:
25 if media_type in model["object_name"].lower():
26 models.append(model)
27 api_app["models"].remove(model)
29 def key(entry):
30 name = entry["name"]
31 if name in ["Audios", "Images"]:
32 return "0"
33 elif "report" in name:
34 return "1"
35 else:
36 return name
38 models.sort(key=key)
40 media_app = {
41 "name": media_type_name,
42 "app_label": media_type,
43 "app_url": f"/admin/api/{media_type}",
44 "has_module_perms": True,
45 "models": models,
46 }
47 app_list.insert(0, media_app)
49 # Move user preferences to its own section
50 for model in api_app["models"][:]:
51 if model["object_name"] == "UserPreferences":
52 model["name"] = "My Preferences"
53 api_app["models"].remove(model)
54 app_list.insert(
55 -1,
56 {
57 "name": "User Preferences",
58 "app_label": "preferences",
59 "app_url": "/admin/api/userpreferences/",
60 "has_module_perms": True,
61 "models": [model],
62 },
63 )
65 return app_list
68openverse_admin = OpenverseAdmin()