@@ -37,6 +37,10 @@ class SessionStatePatchSerializer(serializers.Serializer):
37
37
state = serializers .JSONField ()
38
38
39
39
40
+ class SessionNamePatchSerializer (serializers .Serializer ):
41
+ name = serializers .CharField (max_length = 300 )
42
+
43
+
40
44
class SessionViewSet (
41
45
CreateModelMixin , RetrieveModelMixin , DestroyModelMixin , ListModelMixin , GenericViewSet
42
46
):
@@ -64,6 +68,28 @@ def state(self, request, parent_lookup_workspace__name: str, pk=None):
64
68
65
69
return Response (status = status .HTTP_204_NO_CONTENT )
66
70
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
+
67
93
68
94
class NetworkSessionViewSet (NetworkWorkspaceChildMixin , SessionViewSet ):
69
95
queryset = NetworkSession .objects .all ().select_related ('network__workspace' )
0 commit comments