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

1from django.contrib import admin 

2 

3from api.constants.media_types import MEDIA_TYPE_CHOICES 

4 

5 

6class OpenverseAdmin(admin.AdminSite): 

7 site_header = "Openverse administration" 

8 

9 def get_app_list(self, *args, **kwargs): 

10 """ 

11 Present media specific models outside the main API group. 

12 

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 """ 

16 

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 

21 

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) 

28 

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 

37 

38 models.sort(key=key) 

39 

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) 

48 

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 ) 

64 

65 return app_list 

66 

67 

68openverse_admin = OpenverseAdmin()