tahamajs's picture
download
raw
2.01 kB
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
@api_view(["GET"])
@permission_classes([IsAuthenticated])
def plugin_list(request):
"""List available plugins."""
plugins = PluginDefinition.objects.filter(is_active=True)
return Response(PluginDefinitionSerializer(plugins, many=True).data)
@api_view(["POST"])
@permission_classes([IsAuthenticated])
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)
@api_view(["DELETE"])
@permission_classes([IsAuthenticated])
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)
@api_view(["GET"])
@permission_classes([IsAuthenticated])
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.