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
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 17:47 +0000
1"""Admin for plugin app."""
3from django.contrib import admin
5from plugin import models
6from plugin.registry import registry as pl_registry
9def plugin_update(queryset, new_status: bool):
10 """General function for bulk changing plugins."""
11 apps_changed = False
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
20 # Reload plugins if they changed
21 if apps_changed:
22 pl_registry.reload_plugins()
25@admin.action(description='Activate plugin(s)')
26def plugin_activate(modeladmin, request, queryset):
27 """Activate a set of plugins."""
28 plugin_update(queryset, True)
31@admin.action(description='Deactivate plugin(s)')
32def plugin_deactivate(modeladmin, request, queryset):
33 """Deactivate a set of plugins."""
34 plugin_update(queryset, False)
37class PluginSettingInline(admin.TabularInline):
38 """Inline admin class for PluginSetting."""
40 model = models.PluginSetting
42 read_only_fields = ['key']
44 def has_add_permission(self, request, obj):
45 """The plugin settings should not be meddled with manually."""
46 return False
49class PluginUserSettingInline(admin.TabularInline):
50 """Inline admin class for PluginUserSetting."""
52 model = models.PluginUserSetting
54 read_only_fields = ['key']
56 def has_add_permission(self, request, obj):
57 """The plugin user settings should not be meddled with manually."""
58 return False
61class PluginConfigAdmin(admin.ModelAdmin):
62 """Custom admin with restricted id fields."""
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']
81admin.site.register(models.PluginConfig, PluginConfigAdmin)