mirror of
https://github.com/inventree/InvenTree.git
synced 2025-08-07 20:32:12 +00:00
* Allow loading of "builtin" plugins, even if "plugins" are not explicitly loaded
* Updates for 'admin' buttons:
- Make them work like proper links
- Hidden if 'hide_admin_link' customization option is set
- Check for user staff status
* Cleanup rendering of "plugins" display
* Consolidate InvenTree barcode plugins into single plugin class
* Hide "install plugin" button if plugins are not enabled
* Add info message is external plugins are not enabled
* Fixes for loading plugins
- Always load 'builtin' plugins
- Refactor calls to "is_active" at various points in codebase
* Various tweaks
- Improve builtin plugin descriptions
- Spelling fixes
* Adjust plugin detail for builtin plugins
* Simplify barcode plugin class
* Simplify template rendering
* Bug fix for inventree barcode plugin
* Revert "Simplify template rendering"
This reverts commit 3a6755a659
.
* Re-re-improve template rendering
- Required as the template has been refactored for both "active" and "inactive" plugins
* Fixing unit tests for barcode plugin
* Ensure that barcode scan actions do not take a "long time":
- Add a default timeout of 0.1s to any POST or GET request in the testing framework
- Can be overridden by calling method if desired
* Display plugin "builtin" status in admin panel
* Fix unit tests for plugin API
* Further unit testing fixes
* Version number tweaks
* Further tweaks for unit testing
* Allow longer timeout for report printing via API
* Increase default timeout for API tests
- Sometimes CPU spike can cause the test to fail :|
* label printing can take a bit longer
* Remove timeout requirement from API tester
- Too variable to be reliable for CI
77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
"""Admin for plugin app."""
|
|
|
|
from django.contrib import admin
|
|
|
|
import plugin.models as models
|
|
import plugin.registry as pl_registry
|
|
|
|
|
|
def plugin_update(queryset, new_status: bool):
|
|
"""General function for bulk changing plugins."""
|
|
apps_changed = False
|
|
|
|
# Run through all plugins in the queryset as the save method needs to be overridden
|
|
for plugin in queryset:
|
|
if plugin.active is not new_status:
|
|
plugin.active = new_status
|
|
plugin.save(no_reload=True)
|
|
apps_changed = True
|
|
|
|
# Reload plugins if they changed
|
|
if apps_changed:
|
|
pl_registry.reload_plugins()
|
|
|
|
|
|
@admin.action(description='Activate plugin(s)')
|
|
def plugin_activate(modeladmin, request, queryset):
|
|
"""Activate a set of plugins."""
|
|
plugin_update(queryset, True)
|
|
|
|
|
|
@admin.action(description='Deactivate plugin(s)')
|
|
def plugin_deactivate(modeladmin, request, queryset):
|
|
"""Deactivate a set of plugins."""
|
|
plugin_update(queryset, False)
|
|
|
|
|
|
class PluginSettingInline(admin.TabularInline):
|
|
"""Inline admin class for PluginSetting."""
|
|
|
|
model = models.PluginSetting
|
|
|
|
read_only_fields = [
|
|
'key',
|
|
]
|
|
|
|
def has_add_permission(self, request, obj):
|
|
"""The plugin settings should not be meddled with manually."""
|
|
return False
|
|
|
|
|
|
class PluginConfigAdmin(admin.ModelAdmin):
|
|
"""Custom admin with restricted id fields."""
|
|
|
|
readonly_fields = ["key", "name", ]
|
|
list_display = ['name', 'key', '__str__', 'active', 'is_builtin', 'is_sample']
|
|
list_filter = ['active']
|
|
actions = [plugin_activate, plugin_deactivate, ]
|
|
inlines = [PluginSettingInline, ]
|
|
|
|
|
|
class NotificationUserSettingAdmin(admin.ModelAdmin):
|
|
"""Admin class for NotificationUserSetting."""
|
|
|
|
model = models.NotificationUserSetting
|
|
|
|
read_only_fields = [
|
|
'key',
|
|
]
|
|
|
|
def has_add_permission(self, request):
|
|
"""Notifications should not be changed."""
|
|
return False
|
|
|
|
|
|
admin.site.register(models.PluginConfig, PluginConfigAdmin)
|
|
admin.site.register(models.NotificationUserSetting, NotificationUserSettingAdmin)
|