Skip to content

Commit b15adf3

Browse files
committed
Add symlinking overrides and version manager queryset changes
1 parent 6b30a12 commit b15adf3

File tree

3 files changed

+31
-14
lines changed

3 files changed

+31
-14
lines changed

readthedocs/core/symlink.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
from django.conf import settings
6262

6363
from readthedocs.builds.models import Version
64+
from readthedocs.core.utils.extend import SettingsOverrideObject
6465
from readthedocs.projects import constants
6566
from readthedocs.projects.models import Domain
6667
from readthedocs.projects.utils import run
@@ -293,7 +294,7 @@ def get_default_version(self):
293294
return None
294295

295296

296-
class PublicSymlink(Symlink):
297+
class PublicSymlinkBase(Symlink):
297298
CNAME_ROOT = os.path.join(settings.SITE_ROOT, 'public_cname_root')
298299
WEB_ROOT = os.path.join(settings.SITE_ROOT, 'public_web_root')
299300
PROJECT_CNAME_ROOT = os.path.join(settings.SITE_ROOT, 'public_cname_project')
@@ -309,7 +310,7 @@ def get_translations(self):
309310
return self.project.translations.protected()
310311

311312

312-
class PrivateSymlink(Symlink):
313+
class PrivateSymlinkBase(Symlink):
313314
CNAME_ROOT = os.path.join(settings.SITE_ROOT, 'private_cname_root')
314315
WEB_ROOT = os.path.join(settings.SITE_ROOT, 'private_web_root')
315316
PROJECT_CNAME_ROOT = os.path.join(settings.SITE_ROOT, 'private_cname_project')
@@ -323,3 +324,13 @@ def get_subprojects(self):
323324

324325
def get_translations(self):
325326
return self.project.translations.private()
327+
328+
329+
class PublicSymlink(SettingsOverrideObject):
330+
331+
_default_class = PublicSymlinkBase
332+
333+
334+
class PrivateSymlink(SettingsOverrideObject):
335+
336+
_default_class = PrivateSymlinkBase

readthedocs/core/utils/extend.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44

55
from django.conf import settings
66
from django.utils.module_loading import import_by_path
7-
from django.utils.functional import LazyObject
87

98

10-
class SettingsOverrideObject(LazyObject):
9+
class SettingsOverrideObject(object):
1110

1211
"""Base class for creating class that can be overridden
1312
@@ -33,22 +32,22 @@ class without monkey patching it. This abstract class allows for lazy
3332
_default_class = None
3433
_override_setting = None
3534

36-
def _setup(self):
35+
def __new__(cls, *args, **kwargs):
3736
"""Set up wrapped object
3837
3938
This is called when attributes are accessed on :py:class:`LazyObject`
4039
and the underlying wrapped object does not yet exist.
4140
"""
42-
cls = self._default_class
41+
cls_new = cls._default_class
4342
cls_path = (getattr(settings, 'CLASS_OVERRIDES', {})
44-
.get(self._get_class_id()))
45-
if cls_path is None and self._override_setting is not None:
46-
cls_path = getattr(settings, self._override_setting, None)
43+
.get(cls._get_class_id()))
44+
if cls_path is None and cls._override_setting is not None:
45+
cls_path = getattr(settings, cls._override_setting, None)
4746
if cls_path is not None:
48-
cls = import_by_path(cls_path)
49-
self._wrapped = cls()
47+
cls_new = import_by_path(cls_path)
48+
return cls_new(*args, **kwargs)
5049

51-
def _get_class_id(self):
50+
@classmethod
51+
def _get_class_id(cls):
5252
# type() here, because LazyObject overrides some attribute access
53-
return '.'.join([inspect.getmodule(type(self)).__name__,
54-
type(self).__name__])
53+
return '.'.join([inspect.getmodule(cls).__name__, cls.__name__])

readthedocs/privacy/backend.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ def create_latest(self, **kwargs):
146146
defaults.update(kwargs)
147147
return self.create(**defaults)
148148

149+
def for_project(self, project):
150+
"""Return all versions for a project, including translations"""
151+
return self.filter(
152+
models.Q(project=project) |
153+
models.Q(project__main_language_project=project)
154+
)
155+
149156

150157
class BuildManager(models.Manager):
151158

0 commit comments

Comments
 (0)