Skip to content

Commit 5607164

Browse files
committed
Build Managers added
1 parent 00659a0 commit 5607164

File tree

3 files changed

+79
-10
lines changed

3 files changed

+79
-10
lines changed

readthedocs/builds/managers.py

+61-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
TAG,
2222
PULL_REQUEST,
2323
)
24-
from .querysets import VersionQuerySet
24+
from .querysets import VersionQuerySet, BuildQuerySet
2525

2626
log = logging.getLogger(__name__)
2727

@@ -124,3 +124,63 @@ class InternalVersionManager(SettingsOverrideObject):
124124
class ExternalVersionManager(SettingsOverrideObject):
125125
_default_class = ExternalVersionManagerBase
126126
_override_setting = 'EXTERNAL_VERSION_MANAGER'
127+
128+
129+
class BuildManagerBase(models.Manager):
130+
131+
"""
132+
Build manager for manager only queries.
133+
134+
For creating different Managers.
135+
"""
136+
137+
@classmethod
138+
def from_queryset(cls, queryset_class, class_name=None):
139+
# This is overridden because :py:meth:`models.Manager.from_queryset`
140+
# uses `inspect` to retrieve the class methods, and the proxy class has
141+
# no direct members.
142+
queryset_class = get_override_class(
143+
BuildQuerySet,
144+
BuildQuerySet._default_class, # pylint: disable=protected-access
145+
)
146+
return super().from_queryset(queryset_class, class_name)
147+
148+
149+
class InternalBuildManagerBase(BuildManagerBase):
150+
151+
"""
152+
Build manager that only includes internal version builds.
153+
154+
It will exclude PULL_REQUEST type Version builds from the queries
155+
and only include BRANCH, TAG, UNKONWN type Version builds.
156+
"""
157+
158+
def get_queryset(self):
159+
return super().get_queryset().exclude(version__type=PULL_REQUEST)
160+
161+
162+
class ExternalBuildManagerBase(BuildManagerBase):
163+
164+
"""
165+
Build manager that only includes external version builds.
166+
167+
It will only include PULL_REQUEST type Versions builds in the queries.
168+
"""
169+
170+
def get_queryset(self):
171+
return super().get_queryset().filter(version__type=PULL_REQUEST)
172+
173+
174+
class BuildManager(SettingsOverrideObject):
175+
_default_class = BuildManagerBase
176+
_override_setting = 'BUILD_MANAGER'
177+
178+
179+
class InternalBuildManager(SettingsOverrideObject):
180+
_default_class = InternalBuildManagerBase
181+
_override_setting = 'INTERNAL_BUILD_MANAGER'
182+
183+
184+
class ExternalBuildManager(SettingsOverrideObject):
185+
_default_class = ExternalBuildManagerBase
186+
_override_setting = 'EXTERNAL_BUILD_MANAGER'

readthedocs/builds/models.py

+18-8
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,25 @@
4646
TAG,
4747
VERSION_TYPES,
4848
)
49-
from .managers import (
49+
from readthedocs.builds.managers import (
5050
VersionManager,
5151
InternalVersionManager,
52-
ExternalVersionManager
52+
ExternalVersionManager,
53+
BuildManager,
54+
InternalBuildManager,
55+
ExternalBuildManager,
5356
)
54-
from .querysets import BuildQuerySet, RelatedBuildQuerySet, VersionQuerySet
55-
from .utils import (
57+
from readthedocs.builds.querysets import (
58+
BuildQuerySet,
59+
RelatedBuildQuerySet,
60+
VersionQuerySet,
61+
)
62+
from readthedocs.builds.utils import (
5663
get_bitbucket_username_repo,
5764
get_github_username_repo,
5865
get_gitlab_username_repo,
5966
)
60-
from .version_slug import VersionSlugField
67+
from readthedocs.builds.version_slug import VersionSlugField
6168

6269

6370
log = logging.getLogger(__name__)
@@ -627,9 +634,12 @@ class Build(models.Model):
627634
help_text='Build steps stored outside the database.',
628635
)
629636

630-
# Manager
631-
632-
objects = BuildQuerySet.as_manager()
637+
# Managers
638+
objects = BuildManager.from_queryset(BuildQuerySet)()
639+
# Only include BRANCH, TAG, UNKONWN type Version builds.
640+
internal = InternalBuildManager.from_queryset(BuildQuerySet)()
641+
# Only include PULL_REQUEST type Version builds.
642+
external = ExternalBuildManager.from_queryset(BuildQuerySet)()
633643

634644
CONFIG_KEY = '__config'
635645

readthedocs/builds/querysets.py

-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ def api(self, user=None, detail=True):
116116

117117
class BuildQuerySet(SettingsOverrideObject):
118118
_default_class = BuildQuerySetBase
119-
_override_setting = 'BUILD_MANAGER'
120119

121120

122121
class RelatedBuildQuerySetBase(models.QuerySet):

0 commit comments

Comments
 (0)