Coverage for src/backend/InvenTree/InvenTree/admin.py: 75%

36 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 17:47 +0000

1"""Admin classes.""" 

2 

3from django.contrib import admin 

4from django.http.request import HttpRequest 

5from django.utils import timezone 

6 

7from allauth.usersessions.admin import UserSessionAdmin 

8from allauth.usersessions.models import UserSession 

9from django_q.admin import ScheduleAdmin 

10from django_q.models import Schedule 

11from djmoney.contrib.exchange.admin import RateAdmin 

12from djmoney.contrib.exchange.models import Rate 

13 

14 

15class CustomRateAdmin(RateAdmin): 

16 """Admin interface for the Rate class.""" 

17 

18 def has_add_permission(self, request: HttpRequest) -> bool: 

19 """Disable the 'add' permission for Rate objects.""" 

20 return False 

21 

22 

23admin.site.unregister(Rate) 

24admin.site.register(Rate, CustomRateAdmin) 

25 

26 

27def run_schedule_now(modeladmin, request, queryset): 

28 """Immediately queue the selected scheduled tasks for execution.""" 

29 queryset.update(next_run=timezone.now()) 

30 count = queryset.count() 

31 modeladmin.message_user(request, f'{count} task(s) queued for immediate execution.') 

32 

33 

34run_schedule_now.short_description = 'Run selected tasks now' 

35 

36 

37class ReadOnlyScheduleAdmin(ScheduleAdmin): 

38 """Read-only admin interface for django-q Schedule objects.""" 

39 

40 actions = [run_schedule_now] 

41 

42 def has_add_permission(self, request: HttpRequest) -> bool: 

43 """Prevent adding new Schedule objects.""" 

44 return False 

45 

46 def has_change_permission(self, request: HttpRequest, obj=None) -> bool: 

47 """Prevent changing existing Schedule objects.""" 

48 return False 

49 

50 def has_delete_permission(self, request: HttpRequest, obj=None) -> bool: 

51 """Prevent deleting Schedule objects.""" 

52 return False 

53 

54 

55admin.site.unregister(Schedule) 

56admin.site.register(Schedule, ReadOnlyScheduleAdmin) 

57 

58 

59class InvenTreeUserSessionAdmin(UserSessionAdmin): 

60 """Admin interface for UserSession - view and delete only, no add or edit.""" 

61 

62 def has_add_permission(self, request: HttpRequest) -> bool: 

63 """Prevent creating sessions via admin.""" 

64 return False 

65 

66 def has_change_permission(self, request: HttpRequest, obj=None) -> bool: 

67 """Prevent editing sessions via admin.""" 

68 return False 

69 

70 

71admin.site.unregister(UserSession) 

72admin.site.register(UserSession, InvenTreeUserSessionAdmin)