@@ -92,11 +92,16 @@ class ProjectViewSet(UserSelectViewSet):
92
92
model = Project
93
93
pagination_class = api_utils .ProjectPagination
94
94
95
+ def get_project_for_user_or_404 (self , lookup_value ):
96
+ lookup_query = {self .lookup_field : lookup_value }
97
+ qs = self .get_queryset ()
98
+ return get_object_or_404 (qs , ** lookup_query )
99
+
95
100
@decorators .detail_route ()
96
101
def valid_versions (self , request , ** kwargs ):
97
102
"""Maintain state of versions that are wanted."""
98
- project = get_object_or_404 (
99
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
103
+ project = self . get_project_for_user_or_404 (
104
+ kwargs [self . lookup_field ])
100
105
if (not project .num_major or not project .num_minor or
101
106
not project .num_point ):
102
107
return Response (
@@ -124,8 +129,8 @@ def translations(self, *_, **__):
124
129
125
130
@detail_route ()
126
131
def subprojects (self , request , ** kwargs ):
127
- project = get_object_or_404 (
128
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
132
+ project = self . get_project_for_user_or_404 (
133
+ kwargs [self . lookup_field ])
129
134
rels = project .subprojects .all ()
130
135
children = [rel .child for rel in rels ]
131
136
return Response ({
@@ -134,26 +139,26 @@ def subprojects(self, request, **kwargs):
134
139
135
140
@detail_route ()
136
141
def active_versions (self , request , ** kwargs ):
137
- project = get_object_or_404 (
138
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
142
+ project = self . get_project_for_user_or_404 (
143
+ kwargs [self . lookup_field ])
139
144
versions = project .versions .filter (active = True )
140
145
return Response ({
141
146
'versions' : VersionSerializer (versions , many = True ).data ,
142
147
})
143
148
144
149
@decorators .detail_route (permission_classes = [permissions .IsAdminUser ])
145
150
def token (self , request , ** kwargs ):
146
- project = get_object_or_404 (
147
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
151
+ project = self . get_project_for_user_or_404 (
152
+ kwargs [self . lookup_field ])
148
153
token = GitHubService .get_token_for_project (project , force_local = True )
149
154
return Response ({
150
155
'token' : token ,
151
156
})
152
157
153
158
@decorators .detail_route ()
154
159
def canonical_url (self , request , ** kwargs ):
155
- project = get_object_or_404 (
156
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
160
+ project = self . get_project_for_user_or_404 (
161
+ kwargs [self . lookup_field ])
157
162
return Response ({
158
163
'url' : project .get_docs_url (),
159
164
})
@@ -168,8 +173,8 @@ def sync_versions(self, request, **kwargs): # noqa: D205
168
173
169
174
:returns: the identifiers for the versions that have been deleted.
170
175
"""
171
- project = get_object_or_404 (
172
- Project . objects . api ( request . user ), pk = kwargs ['pk' ])
176
+ project = self . get_project_for_user_or_404 (
177
+ kwargs [self . lookup_field ])
173
178
174
179
# If the currently highest non-prerelease version is active, then make
175
180
# the new latest version active as well.
0 commit comments