| from django.shortcuts import get_object_or_404 | |
| from integrations.models import PluginActivation, PluginDefinition | |
| from integrations.serializers import ( | |
| PluginActivationSerializer, | |
| PluginDefinitionSerializer, | |
| ) | |
| from rest_framework.decorators import api_view, permission_classes | |
| from rest_framework.permissions import IsAuthenticated | |
| from rest_framework.response import Response | |
| def plugin_list(request): | |
| """List available plugins.""" | |
| plugins = PluginDefinition.objects.filter(is_active=True) | |
| return Response(PluginDefinitionSerializer(plugins, many=True).data) | |
| def enable_plugin(request, plugin_slug): | |
| """Enable a plugin for the current user.""" | |
| plugin = get_object_or_404(PluginDefinition, slug=plugin_slug, is_active=True) | |
| activation, created = PluginActivation.objects.get_or_create( | |
| user=request.user, | |
| plugin=plugin, | |
| defaults={"config": request.data.get("config", {})}, | |
| ) | |
| if not created: | |
| activation.is_enabled = True | |
| activation.save() | |
| return Response(PluginActivationSerializer(activation).data) | |
| def disable_plugin(request, plugin_slug): | |
| plugin = get_object_or_404(PluginDefinition, slug=plugin_slug) | |
| PluginActivation.objects.filter(user=request.user, plugin=plugin).update( | |
| is_enabled=False | |
| ) | |
| return Response(status=204) | |
| def plugin_manifest(request, plugin_slug): | |
| """Return the plugin manifest (for UI injection).""" | |
| plugin = get_object_or_404(PluginDefinition, slug=plugin_slug, is_active=True) | |
| activation = PluginActivation.objects.filter( | |
| user=request.user, plugin=plugin, is_enabled=True | |
| ).first() | |
| if not activation: | |
| return Response({"error": "Plugin not enabled"}, status=403) | |
| return Response(plugin.manifest) | |
Xet Storage Details
- Size:
- 2.01 kB
- Xet hash:
- 1af977d1905d85f40ce634b1a8f04281cc2581c4f39fefca62b5f01115c75d0f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.