Skip to content

Commit ce640c4

Browse files
authored
API: separate querysets from API V2 and V3 (#11586)
This allows us to override just the v2 querysets on .com, since we want to share the same logic as .org for v3. ref readthedocs/ext-theme#154
1 parent 1ab641a commit ce640c4

File tree

6 files changed

+39
-3
lines changed

6 files changed

+39
-3
lines changed

readthedocs/api/v2/views/model_views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def get_queryset(self):
163163
api_key = getattr(self.request, "build_api_key", None)
164164
if api_key:
165165
return self.get_queryset_for_api_key(api_key)
166-
return self.model.objects.api(self.request.user)
166+
return self.model.objects.api_v2(self.request.user)
167167

168168

169169
class ProjectViewSet(DisableListEndpoint, UpdateModelMixin, UserSelectViewSet):
@@ -417,7 +417,7 @@ class RemoteOrganizationViewSet(viewsets.ReadOnlyModelViewSet):
417417

418418
def get_queryset(self):
419419
return (
420-
self.model.objects.api(self.request.user)
420+
self.model.objects.api_v2(self.request.user)
421421
.filter(
422422
remote_organization_relations__account__provider__in=[
423423
service.adapter.provider_id for service in registry
@@ -439,7 +439,7 @@ def get_queryset(self):
439439
return self.model.objects.none()
440440

441441
# TODO: Optimize this query after deployment
442-
query = self.model.objects.api(self.request.user).annotate(
442+
query = self.model.objects.api_v2(self.request.user).annotate(
443443
admin=Case(
444444
When(
445445
remote_repository_relations__user=self.request.user,

readthedocs/api/v3/tests/mixins.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ def setUp(self):
147147
has_pdf=True,
148148
has_epub=True,
149149
has_htmlzip=True,
150+
privacy_level=PUBLIC,
150151
)
151152

152153
self.organization = fixture.get(

readthedocs/builds/querysets.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,11 @@ def public(
119119
def api(self, user=None):
120120
return self.public(user, only_active=False)
121121

122+
def api_v2(self, *args, **kwargs):
123+
# API v2 is the same as API v3 for .org, but it's
124+
# different for .com, this method is overridden there.
125+
return self.api(*args, **kwargs)
126+
122127
def for_reindex(self):
123128
"""
124129
Get all versions that can be reindexed.
@@ -205,6 +210,11 @@ def public(self, user=None, project=None):
205210
def api(self, user=None):
206211
return self.public(user)
207212

213+
def api_v2(self, *args, **kwargs):
214+
# API v2 is the same as API v3 for .org, but it's
215+
# different for .com, this method is overridden there.
216+
return self.api(*args, **kwargs)
217+
208218
def concurrent(self, project):
209219
"""
210220
Check if the max build concurrency for this project was reached.
@@ -305,3 +315,8 @@ def public(self, user=None):
305315

306316
def api(self, user=None):
307317
return self.public(user)
318+
319+
def api_v2(self, *args, **kwargs):
320+
# API v2 is the same as API v3 for .org, but it's
321+
# different for .com, this method is overridden there.
322+
return self.api(*args, **kwargs)

readthedocs/oauth/querysets.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ def api(self, user=None):
1616
return self.none()
1717
return self.filter(users=user)
1818

19+
def api_v2(self, *args, **kwargs):
20+
# API v2 is the same as API v3 for .org, but it's
21+
# different for .com, this method is overridden there.
22+
return self.api(*args, **kwargs)
23+
1924

2025
class RemoteRepositoryQuerySet(RelatedUserQuerySet):
2126
def for_project_linking(self, user):

readthedocs/projects/querysets.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,11 @@ def dashboard(self, user):
156156
def api(self, user=None):
157157
return self.public(user)
158158

159+
def api_v2(self, *args, **kwargs):
160+
# API v2 is the same as API v3 for .org, but it's
161+
# different for .com, this method is overridden there.
162+
return self.api(*args, **kwargs)
163+
159164
def single_owner(self, user):
160165
"""
161166
Returns projects where `user` is the only owner.
@@ -213,6 +218,11 @@ def public(self, user=None, project=None):
213218
def api(self, user=None):
214219
return self.public(user)
215220

221+
def api_v2(self, *args, **kwargs):
222+
# API v2 is the same as API v3 for .org, but it's
223+
# different for .com, this method is overridden there.
224+
return self.api(*args, **kwargs)
225+
216226

217227
class ParentRelatedProjectQuerySet(RelatedProjectQuerySet):
218228
project_field = "parent"

readthedocs/redirects/querysets.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ def api(self, user=None):
4040
queryset = self._add_from_user_projects(queryset, user)
4141
return queryset
4242

43+
def api_v2(self, *args, **kwargs):
44+
# API v2 is the same as API v3 for .org, but it's
45+
# different for .com, this method is overridden there.
46+
return self.api(*args, **kwargs)
47+
4348
def get_matching_redirect_with_path(
4449
self, filename, path=None, language=None, version_slug=None, forced_only=False
4550
):

0 commit comments

Comments
 (0)