Coverage for src/backend/InvenTree/plugin/admin.py: 58%

37 statements  

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

1"""Admin for plugin app.""" 

2 

3from django.contrib import admin 

4 

5from plugin import models 

6from plugin.registry import registry as pl_registry 

7 

8 

9def plugin_update(queryset, new_status: bool): 

10 """General function for bulk changing plugins.""" 

11 apps_changed = False 

12 

13 # Run through all plugins in the queryset as the save method needs to be overridden 

14 for plugin in queryset: 

15 if plugin.active is not new_status: 

16 plugin.active = new_status 

17 plugin.save(no_reload=True) 

18 apps_changed = True 

19 

20 # Reload plugins if they changed 

21 if apps_changed: 

22 pl_registry.reload_plugins() 

23 

24 

25@admin.action(description='Activate plugin(s)') 

26def plugin_activate(modeladmin, request, queryset): 

27 """Activate a set of plugins.""" 

28 plugin_update(queryset, True) 

29 

30 

31@admin.action(description='Deactivate plugin(s)') 

32def plugin_deactivate(modeladmin, request, queryset): 

33 """Deactivate a set of plugins.""" 

34 plugin_update(queryset, False) 

35 

36 

37class PluginSettingInline(admin.TabularInline): 

38 """Inline admin class for PluginSetting.""" 

39 

40 model = models.PluginSetting 

41 

42 read_only_fields = ['key'] 

43 

44 def has_add_permission(self, request, obj): 

45 """The plugin settings should not be meddled with manually.""" 

46 return False 

47 

48 

49class PluginUserSettingInline(admin.TabularInline): 

50 """Inline admin class for PluginUserSetting.""" 

51 

52 model = models.PluginUserSetting 

53 

54 read_only_fields = ['key'] 

55 

56 def has_add_permission(self, request, obj): 

57 """The plugin user settings should not be meddled with manually.""" 

58 return False 

59 

60 

61class PluginConfigAdmin(admin.ModelAdmin): 

62 """Custom admin with restricted id fields.""" 

63 

64 readonly_fields = ['key', 'name', 'package_name'] 

65 list_display = [ 

66 'name', 

67 'key', 

68 'active', 

69 'is_builtin', 

70 'is_sample', 

71 'is_installed', 

72 'is_package', 

73 ] 

74 list_filter = ['active'] 

75 actions = [plugin_activate, plugin_deactivate] 

76 inlines = [PluginSettingInline, PluginUserSettingInline] 

77 exclude = ['metadata'] 

78 search_fields = ['name', 'key'] 

79 

80 

81admin.site.register(models.PluginConfig, PluginConfigAdmin)