Skip to content

Commit 67a32d3

Browse files
committed
Convert managers to querysets, resolves readthedocs#2617
1 parent cbec8dd commit 67a32d3

File tree

6 files changed

+41
-41
lines changed

6 files changed

+41
-41
lines changed

readthedocs/builds/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
from readthedocs.core.utils import broadcast
1717
from readthedocs.privacy.backend import VersionQuerySet, VersionManager
18-
from readthedocs.privacy.loader import RelatedBuildManager, BuildManager
18+
from readthedocs.privacy.loader import RelatedBuildQuerySet, BuildQuerySet
1919
from readthedocs.projects.models import Project
2020
from readthedocs.projects.constants import (PRIVACY_CHOICES, GITHUB_URL,
2121
GITHUB_REGEXS, BITBUCKET_URL,
@@ -346,7 +346,7 @@ class Build(models.Model):
346346

347347
# Manager
348348

349-
objects = BuildManager()
349+
objects = BuildQuerySet.as_manager()
350350

351351
class Meta:
352352
ordering = ['-date']
@@ -414,7 +414,7 @@ class Meta:
414414
ordering = ['start_time']
415415
get_latest_by = 'start_time'
416416

417-
objects = RelatedBuildManager()
417+
objects = RelatedBuildQuerySet.as_manager()
418418

419419
def __unicode__(self):
420420
return (ugettext(u'Build command {pk} for build {build}')

readthedocs/oauth/managers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
"""Managers for OAuth models"""
22

3-
from readthedocs.privacy.loader import RelatedUserManager
3+
from readthedocs.privacy.loader import RelatedUserQuerySet
44

55

6-
class RemoteRepositoryManager(RelatedUserManager):
6+
class RemoteRepositoryQuerySet(RelatedUserQuerySet):
77
pass
88

99

10-
class RemoteOrganizationManager(RelatedUserManager):
10+
class RemoteOrganizationQuerySet(RelatedUserQuerySet):
1111
pass

readthedocs/oauth/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from readthedocs.projects.constants import REPO_CHOICES
1515
from readthedocs.projects.models import Project
1616

17-
from .managers import RemoteRepositoryManager, RemoteOrganizationManager
17+
from .managers import RemoteRepositoryQuerySet, RemoteOrganizationQuerySet
1818

1919

2020
DEFAULT_PRIVACY_LEVEL = getattr(settings, 'DEFAULT_PRIVACY_LEVEL', 'public')
@@ -47,7 +47,7 @@ class RemoteOrganization(models.Model):
4747

4848
json = models.TextField(_('Serialized API response'))
4949

50-
objects = RemoteOrganizationManager()
50+
objects = RemoteOrganizationQuerySet.as_manager()
5151

5252
def __unicode__(self):
5353
return 'Remote organization: {name}'.format(name=self.slug)
@@ -111,7 +111,7 @@ class RemoteRepository(models.Model):
111111

112112
json = models.TextField(_('Serialized API response'))
113113

114-
objects = RemoteRepositoryManager()
114+
objects = RemoteRepositoryQuerySet.as_manager()
115115

116116
class Meta:
117117
ordering = ['organization__name', 'name']

readthedocs/privacy/backend.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@
1414
from readthedocs.projects import constants
1515

1616

17-
class ProjectManager(models.Manager):
17+
class ProjectQuerySet(models.QuerySet):
1818

1919
"""Projects take into account their own privacy_level setting."""
2020

2121
use_for_related_fields = True
2222

2323
def _add_user_repos(self, queryset, user):
2424
if user.has_perm('projects.view_project'):
25-
return self.get_queryset().all().distinct()
25+
return self.all().distinct()
2626
if user.is_authenticated():
2727
user_queryset = get_objects_for_user(user, 'projects.view_project')
2828
queryset = user_queryset | queryset
@@ -175,7 +175,7 @@ class VersionQuerySet(SettingsOverrideObject):
175175
_default_class = VersionQuerySetBase
176176

177177

178-
class BuildManager(models.Manager):
178+
class BuildQuerySet(models.QuerySet):
179179

180180
"""
181181
Build objects that are privacy aware.
@@ -187,11 +187,11 @@ class BuildManager(models.Manager):
187187

188188
def _add_user_repos(self, queryset, user=None):
189189
if user.has_perm('builds.view_version'):
190-
return self.get_queryset().all().distinct()
190+
return self.all().distinct()
191191
if user.is_authenticated():
192192
user_queryset = get_objects_for_user(user, 'builds.view_version')
193193
pks = [p.pk for p in user_queryset]
194-
queryset = self.get_queryset().filter(version__pk__in=pks) | queryset
194+
queryset = self.filter(version__pk__in=pks) | queryset
195195
return queryset.distinct()
196196

197197
def public(self, user=None, project=None):
@@ -206,7 +206,7 @@ def api(self, user=None):
206206
return self.public(user)
207207

208208

209-
class RelatedProjectManager(models.Manager):
209+
class RelatedProjectQuerySet(models.QuerySet):
210210

211211
"""
212212
A manager for things that relate to Project and need to get their perms from the project.
@@ -220,13 +220,13 @@ class RelatedProjectManager(models.Manager):
220220
def _add_user_repos(self, queryset, user=None):
221221
# Hack around get_objects_for_user not supporting global perms
222222
if user.has_perm('projects.view_project'):
223-
return self.get_queryset().all().distinct()
223+
return self.all().distinct()
224224
if user.is_authenticated():
225225
# Add in possible user-specific views
226226
project_qs = get_objects_for_user(user, 'projects.view_project')
227227
pks = [p.pk for p in project_qs]
228228
kwargs = {'%s__pk__in' % self.project_field: pks}
229-
queryset = self.get_queryset().filter(**kwargs) | queryset
229+
queryset = self.filter(**kwargs) | queryset
230230
return queryset.distinct()
231231

232232
def public(self, user=None, project=None):
@@ -264,29 +264,29 @@ def api(self, user=None):
264264
return self.public(user)
265265

266266

267-
class ParentRelatedProjectManager(RelatedProjectManager):
267+
class ParentRelatedProjectQuerySet(RelatedProjectQuerySet):
268268
project_field = 'parent'
269269
use_for_related_fields = True
270270

271271

272-
class ChildRelatedProjectManager(RelatedProjectManager):
272+
class ChildRelatedProjectQuerySet(RelatedProjectQuerySet):
273273
project_field = 'child'
274274
use_for_related_fields = True
275275

276276

277-
class RelatedBuildManager(models.Manager):
277+
class RelatedBuildQuerySet(models.QuerySet):
278278

279279
"""For models with association to a project through :py:class:`Build`"""
280280

281281
use_for_related_fields = True
282282

283283
def _add_user_repos(self, queryset, user=None):
284284
if user.has_perm('builds.view_version'):
285-
return self.get_queryset().all().distinct()
285+
return self.all().distinct()
286286
if user.is_authenticated():
287287
user_queryset = get_objects_for_user(user, 'builds.view_version')
288288
pks = [p.pk for p in user_queryset]
289-
queryset = self.get_queryset().filter(
289+
queryset = self.filter(
290290
build__version__pk__in=pks) | queryset
291291
return queryset.distinct()
292292

@@ -302,7 +302,7 @@ def api(self, user=None):
302302
return self.public(user)
303303

304304

305-
class RelatedUserManager(models.Manager):
305+
class RelatedUserQuerySet(models.QuerySet):
306306

307307
"""For models with relations through :py:class:`User`"""
308308

readthedocs/privacy/loader.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
from readthedocs.privacy.backends import syncers
1414

1515

16-
class ProjectManager(SettingsOverrideObject):
17-
_default_class = backend.ProjectManager
16+
class ProjectQuerySet(SettingsOverrideObject):
17+
_default_class = backend.ProjectQuerySet
1818
_override_setting = 'PROJECT_MANAGER'
1919

2020

@@ -24,28 +24,28 @@ class VersionManager(SettingsOverrideObject):
2424
_override_setting = 'VERSION_MANAGER'
2525

2626

27-
class BuildManager(SettingsOverrideObject):
28-
_default_class = backend.BuildManager
27+
class BuildQuerySet(SettingsOverrideObject):
28+
_default_class = backend.BuildQuerySet
2929
_override_setting = 'BUILD_MANAGER'
3030

3131

32-
class RelatedProjectManager(SettingsOverrideObject):
33-
_default_class = backend.RelatedProjectManager
32+
class RelatedProjectQuerySet(SettingsOverrideObject):
33+
_default_class = backend.RelatedProjectQuerySet
3434
_override_setting = 'RELATED_PROJECT_MANAGER'
3535

3636

37-
class RelatedBuildManager(SettingsOverrideObject):
38-
_default_class = backend.RelatedBuildManager
37+
class RelatedBuildQuerySet(SettingsOverrideObject):
38+
_default_class = backend.RelatedBuildQuerySet
3939
_override_setting = 'RELATED_BUILD_MANAGER'
4040

4141

42-
class RelatedUserManager(SettingsOverrideObject):
43-
_default_class = backend.RelatedUserManager
42+
class RelatedUserQuerySet(SettingsOverrideObject):
43+
_default_class = backend.RelatedUserQuerySet
4444
_override_setting = 'RELATED_USER_MANAGER'
4545

4646

47-
class ChildRelatedProjectManager(SettingsOverrideObject):
48-
_default_class = backend.ChildRelatedProjectManager
47+
class ChildRelatedProjectQuerySet(SettingsOverrideObject):
48+
_default_class = backend.ChildRelatedProjectQuerySet
4949
_override_setting = 'CHILD_RELATED_PROJECT_MANAGER'
5050

5151

readthedocs/projects/models.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
from readthedocs.core.utils import broadcast, slugify
1919
from readthedocs.restapi.client import api as apiv2
2020
from readthedocs.builds.constants import LATEST, LATEST_VERBOSE_NAME, STABLE
21-
from readthedocs.privacy.loader import (RelatedProjectManager, ProjectManager,
22-
ChildRelatedProjectManager)
21+
from readthedocs.privacy.loader import (RelatedProjectQuerySet, ProjectQuerySet,
22+
ChildRelatedProjectQuerySet)
2323
from readthedocs.projects import constants
2424
from readthedocs.projects.exceptions import ProjectImportError
2525
from readthedocs.projects.templatetags.projects_tags import sort_version_aware
@@ -56,7 +56,7 @@ class ProjectRelationship(models.Model):
5656
related_name='superprojects')
5757
alias = models.CharField(_('Alias'), max_length=255, null=True, blank=True)
5858

59-
objects = ChildRelatedProjectManager()
59+
objects = ChildRelatedProjectQuerySet.as_manager()
6060

6161
def __unicode__(self):
6262
return "%s -> %s" % (self.parent, self.child)
@@ -275,7 +275,7 @@ class Project(models.Model):
275275
)
276276

277277
tags = TaggableManager(blank=True)
278-
objects = ProjectManager()
278+
objects = ProjectQuerySet.as_manager()
279279
all_objects = models.Manager()
280280

281281
class Meta:
@@ -854,7 +854,7 @@ def __unicode__(self):
854854
class Notification(models.Model):
855855
project = models.ForeignKey(Project,
856856
related_name='%(class)s_notifications')
857-
objects = RelatedProjectManager()
857+
objects = RelatedProjectQuerySet.as_manager()
858858

859859
class Meta:
860860
abstract = True
@@ -899,7 +899,7 @@ class Domain(models.Model):
899899
)
900900
count = models.IntegerField(default=0, help_text=_('Number of times this domain has been hit.'))
901901

902-
objects = RelatedProjectManager()
902+
objects = RelatedProjectQuerySet.as_manager()
903903

904904
class Meta:
905905
ordering = ('-canonical', '-machine', 'domain')

0 commit comments

Comments
 (0)