@@ -94,6 +94,11 @@ class ProjectViewSet(UserSelectViewSet):
94
94
filter_fields = ('slug' ,) # django-filter<2.0.0
95
95
filterset_fields = ('slug' ,)
96
96
97
+ def get_project_for_user_or_404 (self , lookup_value ):
98
+ lookup_query = {self .lookup_field : lookup_value }
99
+ qs = self .get_queryset ()
100
+ return get_object_or_404 (qs , ** lookup_query )
101
+
97
102
@decorators .action (detail = True )
98
103
def translations (self , * _ , ** __ ):
99
104
translations = self .get_object ().translations .all ()
@@ -103,8 +108,8 @@ def translations(self, *_, **__):
103
108
104
109
@decorators .action (detail = True )
105
110
def subprojects (self , request , ** kwargs ):
106
- project = get_object_or_404 (
107
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
111
+ project = self . get_project_for_user_or_404 (
112
+ kwargs [self . lookup_field ])
108
113
rels = project .subprojects .all ()
109
114
children = [rel .child for rel in rels ]
110
115
return Response ({
@@ -113,26 +118,26 @@ def subprojects(self, request, **kwargs):
113
118
114
119
@decorators .action (detail = True )
115
120
def active_versions (self , request , ** kwargs ):
116
- project = get_object_or_404 (
117
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
121
+ project = self . get_project_for_user_or_404 (
122
+ kwargs [self . lookup_field ])
118
123
versions = project .versions .filter (active = True )
119
124
return Response ({
120
125
'versions' : VersionSerializer (versions , many = True ).data ,
121
126
})
122
127
123
128
@decorators .action (detail = True , permission_classes = [permissions .IsAdminUser ])
124
129
def token (self , request , ** kwargs ):
125
- project = get_object_or_404 (
126
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
130
+ project = self . get_project_for_user_or_404 (
131
+ kwargs [self . lookup_field ])
127
132
token = GitHubService .get_token_for_project (project , force_local = True )
128
133
return Response ({
129
134
'token' : token ,
130
135
})
131
136
132
137
@decorators .action (detail = True )
133
138
def canonical_url (self , request , ** kwargs ):
134
- project = get_object_or_404 (
135
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
139
+ project = self . get_project_for_user_or_404 (
140
+ kwargs [self . lookup_field ])
136
141
return Response ({
137
142
'url' : project .get_docs_url (),
138
143
})
@@ -149,8 +154,8 @@ def sync_versions(self, request, **kwargs): # noqa: D205
149
154
150
155
:returns: the identifiers for the versions that have been deleted.
151
156
"""
152
- project = get_object_or_404 (
153
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
157
+ project = self . get_project_for_user_or_404 (
158
+ kwargs [self . lookup_field ])
154
159
155
160
# If the currently highest non-prerelease version is active, then make
156
161
# the new latest version active as well.
0 commit comments