Skip to content

Commit cb319cc

Browse files
committed
Add PATCH /name endpoint to update session name
1 parent 200c7e8 commit cb319cc

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

multinet/api/views/session.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ class SessionStatePatchSerializer(serializers.Serializer):
3737
state = serializers.JSONField()
3838

3939

40+
class SessionNamePatchSerializer(serializers.Serializer):
41+
name = serializers.CharField(max_length=300)
42+
43+
4044
class SessionViewSet(
4145
CreateModelMixin, RetrieveModelMixin, DestroyModelMixin, ListModelMixin, GenericViewSet
4246
):
@@ -64,6 +68,28 @@ def state(self, request, parent_lookup_workspace__name: str, pk=None):
6468

6569
return Response(status=status.HTTP_204_NO_CONTENT)
6670

71+
@swagger_auto_schema(request_body=SessionNamePatchSerializer)
72+
@action(detail=True, methods=['patch'], url_path='name')
73+
@require_workspace_permission(WorkspaceRoleChoice.WRITER)
74+
def set_name(self, request, parent_lookup_workspace__name: str, pk=None):
75+
session = self.get_object()
76+
77+
workspace: Workspace = get_object_or_404(Workspace, name=parent_lookup_workspace__name)
78+
session_ws = (
79+
session.table.workspace if hasattr(session, 'table') else session.network.workspace
80+
)
81+
if workspace.id != session_ws.id:
82+
raise Http404
83+
84+
serializer = SessionNamePatchSerializer(data=request.data)
85+
serializer.is_valid(raise_exception=True)
86+
name = serializer.validated_data['name']
87+
88+
session.name = name
89+
session.save()
90+
91+
return Response(status=status.HTTP_204_NO_CONTENT)
92+
6793

6894
class NetworkSessionViewSet(NetworkWorkspaceChildMixin, SessionViewSet):
6995
queryset = NetworkSession.objects.all().select_related('network__workspace')

0 commit comments

Comments
 (0)