Skip to content

Commit 2ce3a5e

Browse files
authored
Querysets: simplify project querysets (readthedocs#8154)
- Introduce `Project.objects.for_user`. This is to replace the `for_team_member` method from .com. - Remove unused overrides.
1 parent 4083525 commit 2ce3a5e

File tree

3 files changed

+18
-62
lines changed

3 files changed

+18
-62
lines changed

readthedocs/projects/managers.py

+1-19
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,7 @@
11
from django.db import models
22

3-
from readthedocs.core.utils.extend import (
4-
get_override_class,
5-
SettingsOverrideObject
6-
)
7-
from readthedocs.projects.querysets import HTMLFileQuerySet
83

9-
10-
class HTMLFileManagerBase(models.Manager):
11-
12-
@classmethod
13-
def from_queryset(cls, queryset_class, class_name=None):
14-
queryset_class = get_override_class(
15-
HTMLFileQuerySet,
16-
HTMLFileQuerySet._default_class, # pylint: disable=protected-access
17-
)
18-
return super().from_queryset(queryset_class, class_name)
4+
class HTMLFileManager(models.Manager):
195

206
def get_queryset(self):
217
return super().get_queryset().filter(name__endswith='.html')
22-
23-
24-
class HTMLFileManager(SettingsOverrideObject):
25-
_default_class = HTMLFileManagerBase

readthedocs/projects/querysets.py

+6-15
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,10 @@ def public(self, user=None):
4242
queryset = self._add_user_repos(queryset, user)
4343
return queryset.distinct()
4444

45-
def private(self, user=None):
46-
queryset = self.filter(privacy_level=constants.PRIVATE)
47-
if user:
48-
queryset = self._add_user_repos(queryset, user)
49-
return queryset.distinct()
45+
def for_user(self, user):
46+
"""Return all projects that an user belongs to."""
47+
# In .org all users of a project are admins.
48+
return self.for_admin_user(user)
5049

5150
def is_active(self, project):
5251
"""
@@ -122,7 +121,7 @@ def prefetch_latest_build(self):
122121

123122
def dashboard(self, user):
124123
"""Get the projects for this user including the latest build."""
125-
return self.for_admin_user(user).prefetch_latest_build()
124+
return self.for_user(user).prefetch_latest_build()
126125

127126
def api(self, user=None, detail=True):
128127
if detail:
@@ -136,7 +135,6 @@ def api(self, user=None, detail=True):
136135

137136
class ProjectQuerySet(SettingsOverrideObject):
138137
_default_class = ProjectQuerySetBase
139-
_override_setting = 'PROJECT_MANAGER'
140138

141139

142140
class RelatedProjectQuerySetBase(models.QuerySet):
@@ -188,7 +186,6 @@ def api(self, user=None):
188186

189187
class RelatedProjectQuerySet(SettingsOverrideObject):
190188
_default_class = RelatedProjectQuerySetBase
191-
_override_setting = 'RELATED_PROJECT_MANAGER'
192189

193190

194191
class ParentRelatedProjectQuerySetBase(RelatedProjectQuerySetBase):
@@ -198,7 +195,6 @@ class ParentRelatedProjectQuerySetBase(RelatedProjectQuerySetBase):
198195

199196
class ParentRelatedProjectQuerySet(SettingsOverrideObject):
200197
_default_class = ParentRelatedProjectQuerySetBase
201-
_override_setting = 'RELATED_PROJECT_MANAGER'
202198

203199

204200
class ChildRelatedProjectQuerySetBase(RelatedProjectQuerySetBase):
@@ -208,7 +204,6 @@ class ChildRelatedProjectQuerySetBase(RelatedProjectQuerySetBase):
208204

209205
class ChildRelatedProjectQuerySet(SettingsOverrideObject):
210206
_default_class = ChildRelatedProjectQuerySetBase
211-
_override_setting = 'RELATED_PROJECT_MANAGER'
212207

213208

214209
class FeatureQuerySet(models.QuerySet):
@@ -222,7 +217,7 @@ def for_project(self, project):
222217
).distinct()
223218

224219

225-
class HTMLFileQuerySetBase(models.QuerySet):
220+
class HTMLFileQuerySet(models.QuerySet):
226221

227222
def internal(self):
228223
"""
@@ -240,7 +235,3 @@ def external(self):
240235
It will only include pull request/merge request Version html files in the queries.
241236
"""
242237
return self.filter(version__type=EXTERNAL)
243-
244-
245-
class HTMLFileQuerySet(SettingsOverrideObject):
246-
_default_class = HTMLFileQuerySetBase

readthedocs/rtd_tests/tests/test_project_querysets.py

+11-28
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from django.test import TestCase
66
from django_dynamic_fixture import get
77

8-
from readthedocs.builds.models import Version
98
from readthedocs.projects.constants import PRIVATE, PUBLIC
109
from readthedocs.projects.models import Feature, Project
1110
from readthedocs.projects.querysets import (
@@ -113,33 +112,6 @@ def test_dashboard(self):
113112
self.assertEqual(query.count(), len(self.another_user_projects))
114113
self.assertEqual(set(query), self.another_user_projects)
115114

116-
def test_private(self):
117-
query = Project.objects.private()
118-
projects = {
119-
self.project_private,
120-
self.another_project_private,
121-
self.shared_project_private,
122-
}
123-
self.assertEqual(query.count(), len(projects))
124-
self.assertEqual(set(query), projects)
125-
126-
def test_private_user(self):
127-
query = Project.objects.private(user=self.user)
128-
projects = (
129-
self.user_projects |
130-
{self.another_project_private}
131-
)
132-
self.assertEqual(query.count(), len(projects))
133-
self.assertEqual(set(query), projects)
134-
135-
query = Project.objects.private(user=self.another_user)
136-
projects = (
137-
self.another_user_projects |
138-
{self.project_private}
139-
)
140-
self.assertEqual(query.count(), len(projects))
141-
self.assertEqual(set(query), projects)
142-
143115
def test_public(self):
144116
query = Project.objects.public()
145117
projects = {
@@ -167,6 +139,17 @@ def test_public_user(self):
167139
self.assertEqual(query.count(), len(projects))
168140
self.assertEqual(set(query), projects)
169141

142+
def test_for_user(self):
143+
query = Project.objects.for_user(user=self.user)
144+
projects = self.user_projects
145+
self.assertEqual(query.count(), len(projects))
146+
self.assertEqual(set(query), projects)
147+
148+
query = Project.objects.for_user(user=self.another_user)
149+
projects = self.another_user_projects
150+
self.assertEqual(query.count(), len(projects))
151+
self.assertEqual(set(query), projects)
152+
170153

171154
class FeatureQuerySetTests(TestCase):
172155

0 commit comments

Comments
 (0)