|
13 | 13 | from rest_framework.exceptions import PermissionDenied
|
14 | 14 | from rest_framework.response import Response
|
15 | 15 | from rest_framework.routers import APIRootView
|
16 |
| -from rest_framework.views import APIView |
17 | 16 | from utilities.permissions import get_permission_for_model
|
18 | 17 | from utilities.utils import copy_safe_request
|
19 | 18 |
|
@@ -74,6 +73,24 @@ def load(self, request):
|
74 | 73 |
|
75 | 74 | return Response(ScriptInstanceSerializer(loaded_scripts, many=True, context={"request": request}).data)
|
76 | 75 |
|
| 76 | + @action(detail=False, methods=["post"]) |
| 77 | + def sync(self, request): |
| 78 | + permission = get_permission_for_model(self.queryset.model, "sync") |
| 79 | + |
| 80 | + if not request.user.has_perm(permission): |
| 81 | + raise PermissionDenied(f"Missing permission: {permission}") |
| 82 | + |
| 83 | + try: |
| 84 | + result = util.pull_scripts() |
| 85 | + except Exception as e: |
| 86 | + return Response({"error": f"Failed to pull git repository: {e}"}, status=http_status.HTTP_500_INTERNAL_SERVER_ERROR) |
| 87 | + |
| 88 | + messages = [f"Pulled git repository"] |
| 89 | + if result: |
| 90 | + messages.append(result) |
| 91 | + |
| 92 | + return Response({"messages": messages}, status=http_status.HTTP_200_OK) |
| 93 | + |
77 | 94 | @action(detail=True, methods=["post"])
|
78 | 95 | def run(self, request, pk):
|
79 | 96 | # TODO: Add schema definitions.
|
|
0 commit comments