@@ -41,64 +41,73 @@ def paginate_queryset(self, query: ArangoQuery, request: Request) -> List[Dict]:
41
41
return list (cur )
42
42
43
43
44
- def WorkspaceChildMixin (prefix = None ):
45
- class _WorkspaceChildMixin (NestedViewSetMixin ):
46
- def my_lookup_field (self ):
47
- field = 'workspace__name'
48
- if prefix is not None :
49
- field = f'{ prefix } __{ field } '
44
+ class WorkspaceChildMixin (NestedViewSetMixin ):
45
+ prefix = None
50
46
51
- return field
47
+ @property
48
+ def workspace_field (self ):
49
+ field = 'workspace__name'
50
+ print (type (self ))
51
+ if self .prefix is not None :
52
+ field = f'{ self .prefix } __{ field } '
52
53
53
- def get_parents_query_dict (self ):
54
- parents_query_dict = super ().get_parents_query_dict ()
54
+ return field
55
55
56
- print (parents_query_dict )
56
+ def get_parents_query_dict (self ):
57
+ parents_query_dict = super ().get_parents_query_dict ()
57
58
58
- # Replace the standard lookup field with one that (possibly) goes
59
- # through the session object's related network or table object.
60
- new_field = self .my_lookup_field ()
61
- if not new_field in parents_query_dict :
62
- old_field = 'workspace__name'
63
- parents_query_dict [new_field ] = parents_query_dict .pop (old_field )
59
+ print (parents_query_dict )
64
60
65
- return parents_query_dict
61
+ # Replace the standard lookup field with one that (possibly) goes
62
+ # through the session object's related network or table object.
63
+ new_field = self .workspace_field
64
+ if not new_field in parents_query_dict :
65
+ old_field = 'workspace__name'
66
+ parents_query_dict [new_field ] = parents_query_dict .pop (old_field )
66
67
67
- def get_queryset (self ):
68
- """
69
- Get the queryset for workspace child enpoints.
68
+ return parents_query_dict
70
69
71
- Check that the requeting user has appropriate permissions for the associated workspace.
72
- """
73
- child_objects = super (). get_queryset ()
70
+ def get_queryset ( self ):
71
+ """
72
+ Get the queryset for workspace child enpoints.
74
73
75
- # prevent warning for schema generation incompatibility
76
- if getattr ( self , 'swagger_fake_view' , False ):
77
- return child_objects . none ()
74
+ Check that the requeting user has appropriate permissions for the associated workspace.
75
+ """
76
+ child_objects = super (). get_queryset ()
78
77
79
- parent_query_dict = self .get_parents_query_dict ()
80
- workspace = get_object_or_404 (
81
- Workspace .objects .select_related ('owner' ), name = parent_query_dict [self .my_lookup_field ()]
82
- )
78
+ # prevent warning for schema generation incompatibility
79
+ if getattr (self , 'swagger_fake_view' , False ):
80
+ return child_objects .none ()
83
81
84
- # No user or user permission required for public workspaces
85
- if workspace .public :
86
- return child_objects
82
+ parent_query_dict = self .get_parents_query_dict ()
83
+ workspace = get_object_or_404 (
84
+ Workspace .objects .select_related ('owner' ), name = parent_query_dict [self .workspace_field ]
85
+ )
87
86
88
- # Private workspace
89
- request_user = self .request .user
90
- if not request_user .is_authenticated : # anonymous user
91
- raise Http404
87
+ # No user or user permission required for public workspaces
88
+ if workspace .public :
89
+ return child_objects
92
90
93
- workspace_role = WorkspaceRole .objects .filter (
94
- workspace = workspace , user = request_user
95
- ).first ()
91
+ # Private workspace
92
+ request_user = self .request .user
93
+ if not request_user .is_authenticated : # anonymous user
94
+ raise Http404
96
95
97
- # If the user is at least a reader or the owner, grant access
98
- if workspace_role is not None or workspace .owner == request_user :
99
- return child_objects
96
+ workspace_role = WorkspaceRole .objects .filter (
97
+ workspace = workspace , user = request_user
98
+ ).first ()
99
+
100
+ # If the user is at least a reader or the owner, grant access
101
+ if workspace_role is not None or workspace .owner == request_user :
102
+ return child_objects
103
+
104
+ # Read access denied
105
+ raise Http404
106
+
107
+
108
+ class NetworkWorkspaceChildMixin (WorkspaceChildMixin ):
109
+ prefix = 'network'
100
110
101
- # Read access denied
102
- raise Http404
103
111
104
- return _WorkspaceChildMixin
112
+ class TableWorkspaceChildMixin (WorkspaceChildMixin ):
113
+ prefix = 'table'
0 commit comments