Skip to content

Commit 996a5b2

Browse files
authored
Resolver: use new methods to resolve documentation pages (#10875)
* Resolver: use new methods to resolve documentation pages * Fix * Update from review
1 parent 2d565f7 commit 996a5b2

File tree

8 files changed

+37
-43
lines changed

8 files changed

+37
-43
lines changed

readthedocs/analytics/models.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from django.utils.translation import gettext_lazy as _
1010

1111
from readthedocs.builds.models import Version
12-
from readthedocs.core.resolver import resolve, resolve_path
12+
from readthedocs.core.resolver import resolver
1313
from readthedocs.projects.models import Feature, Project
1414

1515

@@ -132,13 +132,13 @@ def top_viewed_pages(
132132

133133
PageViewResult = namedtuple("PageViewResult", "path, url, count")
134134
result = []
135-
parsed_domain = urlparse(resolve(project))
135+
parsed_domain = urlparse(resolver.get_domain(project))
136136
default_version = project.get_default_version()
137137
for row in queryset:
138138
if not per_version:
139139
# If we aren't groupig by version,
140140
# then always link to the default version.
141-
url_path = resolve_path(
141+
url_path = resolver.resolve_path(
142142
project=project,
143143
version_slug=default_version,
144144
filename=row.path,

readthedocs/api/v2/serializers.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
from rest_framework import serializers
66

77
from readthedocs.api.v2.utils import normalize_build_command
8-
from readthedocs.builds.constants import EXTERNAL
98
from readthedocs.builds.models import Build, BuildCommandResult, Version
9+
from readthedocs.core.resolver import resolver
1010
from readthedocs.oauth.models import RemoteOrganization, RemoteRepository
1111
from readthedocs.projects.models import Domain, Project
1212

@@ -180,10 +180,9 @@ def get_canonical_url(self, obj):
180180
# relationships already cached from calling
181181
# get_docs_url early when serializing the project.
182182
project = self._get_project_serialized(obj).instance
183-
return project.get_docs_url(
184-
lang_slug=project.language,
185-
version_slug=obj.slug,
186-
external=obj.type == EXTERNAL,
183+
return resolver.resolve_version(
184+
project=project,
185+
version=obj,
187186
)
188187

189188
class Meta(VersionSerializer.Meta):

readthedocs/api/v3/serializers.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from taggit.serializers import TaggitSerializer, TagListSerializerField
1313

1414
from readthedocs.builds.models import Build, Version
15+
from readthedocs.core.resolver import resolver
1516
from readthedocs.core.utils import slugify
1617
from readthedocs.core.utils.extend import SettingsOverrideObject
1718
from readthedocs.oauth.models import RemoteOrganization, RemoteRepository
@@ -243,8 +244,9 @@ class VersionURLsSerializer(BaseLinksSerializer, serializers.Serializer):
243244
dashboard = VersionDashboardURLsSerializer(source="*")
244245

245246
def get_documentation(self, obj):
246-
return obj.project.get_docs_url(
247-
version_slug=obj.slug,
247+
return resolver.resolve_version(
248+
project=obj.project,
249+
version=obj,
248250
)
249251

250252

readthedocs/embed/views.py

+3-6
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
from readthedocs.api.mixins import CDNCacheTagsMixin, EmbedAPIMixin
1616
from readthedocs.api.v2.permissions import IsAuthorizedToViewVersion
1717
from readthedocs.api.v3.permissions import HasEmbedAPIAccess
18-
from readthedocs.builds.constants import EXTERNAL
19-
from readthedocs.core.resolver import resolve
18+
from readthedocs.core.resolver import resolver
2019
from readthedocs.embed.utils import clean_references, recurse_while_none
2120
from readthedocs.storage import build_media_storage
2221

@@ -135,12 +134,10 @@ def get(self, request):
135134
def do_embed(*, project, version, doc=None, path=None, section=None, url=None):
136135
"""Get the embed response from a document section."""
137136
if not url:
138-
external = version.type == EXTERNAL
139-
url = resolve(
137+
url = resolver.resolve_version(
140138
project=project,
141-
version_slug=version.slug,
139+
version=version,
142140
filename=path or doc,
143-
external=external,
144141
)
145142

146143
content = None

readthedocs/projects/models.py

+5-10
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
STABLE,
3333
)
3434
from readthedocs.core.history import ExtraHistoricalRecords
35-
from readthedocs.core.resolver import resolve, resolve_domain
35+
from readthedocs.core.resolver import resolve, resolve_domain, resolver
3636
from readthedocs.core.utils import extract_valid_attributes_for_model, slugify
3737
from readthedocs.core.utils.url import unsafe_join_url_path
3838
from readthedocs.domains.querysets import DomainQueryset
@@ -112,7 +112,7 @@ def save(self, *args, **kwargs):
112112

113113
# HACK
114114
def get_absolute_url(self):
115-
return resolve(self.child)
115+
return resolver.resolve_version(project=self.child)
116116

117117
@cached_property
118118
def subproject_prefix(self):
@@ -1510,12 +1510,10 @@ class ImportedFile(models.Model):
15101510
)
15111511

15121512
def get_absolute_url(self):
1513-
return resolve(
1513+
return resolver.resolve_version(
15141514
project=self.project,
1515-
version_slug=self.version.slug,
1515+
version=self.version.slug,
15161516
filename=self.path,
1517-
# this should always be False because we don't have ImportedFile's for external versions
1518-
external=False,
15191517
)
15201518

15211519
def __str__(self):
@@ -1659,10 +1657,7 @@ def get_payload(self, version, build, event):
16591657
protocol = 'http' if settings.DEBUG else 'https'
16601658
project_url = f'{protocol}://{settings.PRODUCTION_DOMAIN}{project.get_absolute_url()}'
16611659
build_url = f'{protocol}://{settings.PRODUCTION_DOMAIN}{build.get_absolute_url()}'
1662-
build_docsurl = project.get_docs_url(
1663-
version_slug=version.slug,
1664-
external=version.is_external,
1665-
)
1660+
build_docsurl = resolver.resolve_version(project, version=version)
16661661

16671662
# Remove timezone and microseconds from the date,
16681663
# so it's more readable.

readthedocs/projects/views/mixins.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
"""Mixin classes for project views."""
22
from urllib.parse import urlparse
33

4+
import structlog
45
from celery import chain
56
from django.shortcuts import get_object_or_404
67

7-
import structlog
8-
9-
from readthedocs.core.resolver import resolve, resolve_path
8+
from readthedocs.core.resolver import resolver
109
from readthedocs.core.utils import prepare_build
1110
from readthedocs.projects.models import Project
1211
from readthedocs.projects.signals import project_import
1312

14-
1513
log = structlog.get_logger(__name__)
1614

1715

@@ -79,11 +77,11 @@ def _get_subprojects_and_urls(self):
7977
if not subprojects.exists():
8078
return subprojects_and_urls
8179

82-
main_domain = resolve(project)
80+
main_domain = resolver.get_domain(project)
8381
parsed_main_domain = urlparse(main_domain)
8482

8583
for subproject in subprojects:
86-
subproject_path = resolve_path(subproject.child)
84+
subproject_path = resolver.resolve_path(subproject.child)
8785
parsed_subproject_domain = parsed_main_domain._replace(
8886
path=subproject_path,
8987
)

readthedocs/projects/views/public.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from readthedocs.builds.views import BuildTriggerMixin
3030
from readthedocs.core.mixins import CDNCacheControlMixin
3131
from readthedocs.core.permissions import AdminPermission
32+
from readthedocs.core.resolver import resolver
3233
from readthedocs.core.utils.extend import SettingsOverrideObject
3334
from readthedocs.projects.filters import ProjectVersionListFilterSet
3435
from readthedocs.projects.models import Project
@@ -125,16 +126,17 @@ def get_context_data(self, **kwargs):
125126
if self.request.is_secure():
126127
protocol = "https"
127128

128-
version_slug = project.get_default_version()
129+
default_version_slug = project.get_default_version()
130+
default_version = project.versions.get(slug=default_version_slug)
129131

130132
context["badge_url"] = ProjectBadgeView.get_badge_url(
131133
project.slug,
132-
version_slug,
134+
default_version_slug,
133135
protocol=protocol,
134136
)
135137
context["site_url"] = "{url}?badge={version}".format(
136-
url=project.get_docs_url(version_slug),
137-
version=version_slug,
138+
url=resolver.resolve_version(project, version=default_version),
139+
version=default_version_slug,
138140
)
139141

140142
context["is_project_admin"] = AdminPermission.is_admin(

readthedocs/proxito/views/serve.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -912,14 +912,15 @@ def changefreqs_generator():
912912

913913
if project.translations.exists():
914914
for translation in project.translations.all():
915-
translation_versions = (
916-
Version.internal.public(project=translation
917-
).values_list('slug', flat=True)
915+
translated_version = (
916+
Version.internal.public(project=translation)
917+
.filter(slug=version.slug)
918+
.first()
918919
)
919-
if version.slug in translation_versions:
920-
href = project.get_docs_url(
921-
version_slug=version.slug,
922-
lang_slug=translation.language,
920+
if translated_version:
921+
href = resolver.resolve_version(
922+
project=translation,
923+
version=translated_version,
923924
)
924925
element['languages'].append({
925926
'hreflang': hreflang_formatter(translation.language),

0 commit comments

Comments
 (0)