| 954 | responses={200: PluginRepoSerializer, 404: inline_serializer(name="RepoNotFound", fields={"error": serializers.CharField()})}, |
| 955 | ) |
| 956 | def put(self, request, pk): |
| 957 | try: |
| 958 | repo = PluginRepo.objects.get(pk=pk) |
| 959 | except PluginRepo.DoesNotExist: |
| 960 | return Response( |
| 961 | {"error": "Repo not found"}, status=status.HTTP_404_NOT_FOUND |
| 962 | ) |
| 963 | # Only public_key and enabled are mutable after creation. |
| 964 | # url, is_official, name, etc. must not be changed via the API. |
| 965 | ALLOWED_FIELDS = {"public_key", "enabled"} |
| 966 | update_data = {k: v for k, v in request.data.items() if k in ALLOWED_FIELDS} |
| 967 | serializer = PluginRepoSerializer(repo, data=update_data, partial=True) |
| 968 | serializer.is_valid(raise_exception=True) |
| 969 | serializer.save() |
| 970 | return Response(PluginRepoSerializer(repo).data) |
| 971 | |
| 972 | @extend_schema( |
| 973 | description="Remove a plugin repository.", |