@@ -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+
4044class 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
6894class NetworkSessionViewSet (NetworkWorkspaceChildMixin , SessionViewSet ):
6995 queryset = NetworkSession .objects .all ().select_related ('network__workspace' )
0 commit comments