Skip to content

Commit

Permalink
Use another structure
Browse files Browse the repository at this point in the history
  • Loading branch information
stsewd committed Dec 16, 2020
1 parent ec529e9 commit 33ed079
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 27 deletions.
43 changes: 27 additions & 16 deletions readthedocs/search/api.py
Expand Up @@ -15,7 +15,7 @@
from readthedocs.search import tasks
from readthedocs.search.faceted_search import PageSearch

from .serializers import PageSearchSerializer, VersionData
from .serializers import PageSearchSerializer, ProjectData, VersionData

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -183,15 +183,21 @@ def _get_all_projects_data(self):
.. code::
{
"requests": VersionData(
"latest",
"sphinx",
"https://requests.readthedocs.io/en/latest/",
"requests": ProjectData(
alias='alias',
version=VersionData(
"latest",
"sphinx",
"https://requests.readthedocs.io/en/latest/",
),
),
"requests-oauth": VersionData(
"latest",
"sphinx_htmldir",
"https://requests-oauth.readthedocs.io/en/latest/",
"requests-oauth": ProjectData(
alias=None,
version=VersionData(
"latest",
"sphinx_htmldir",
"https://requests-oauth.readthedocs.io/en/latest/",
),
),
}
Expand All @@ -203,11 +209,13 @@ def _get_all_projects_data(self):
main_project = self._get_project()

projects_data = {
main_project.slug: VersionData(
slug=main_version.slug,
doctype=main_version.documentation_type,
docs_url=main_project.get_docs_url(version_slug=main_version.slug),
project_alias=None,
main_project.slug: ProjectData(
alias=None,
version=VersionData(
slug=main_version.slug,
doctype=main_version.documentation_type,
docs_url=main_project.get_docs_url(version_slug=main_version.slug),
),
)
}

Expand All @@ -234,11 +242,14 @@ def _get_all_projects_data(self):
if version and self._has_permission(self.request.user, version):
url = subproject.get_docs_url(version_slug=version.slug)
project_alias = subproject.superprojects.values_list('alias', flat=True).first()
projects_data[subproject.slug] = VersionData(
version_data = VersionData(
slug=version.slug,
doctype=version.documentation_type,
docs_url=url,
project_alias=project_alias,
)
projects_data[subproject.slug] = ProjectData(
alias=project_alias,
version=version_data,
)

return projects_data
Expand Down
16 changes: 10 additions & 6 deletions readthedocs/search/serializers.py
Expand Up @@ -21,7 +21,8 @@


# Structure used for storing cached data of a version mostly.
VersionData = namedtuple('VersionData', ['slug', 'docs_url', 'doctype', 'project_alias'])
ProjectData = namedtuple('ProjectData', ['version', 'alias'])
VersionData = namedtuple('VersionData', ['slug', 'docs_url', 'doctype'])


class ProjectHighlightSerializer(serializers.Serializer):
Expand Down Expand Up @@ -85,19 +86,22 @@ def _get_project_data(self, obj):
project_alias = project.superprojects.values_list('alias', flat=True).first()

projects_data = self.context.setdefault('projects_data', {})
projects_data[obj.project] = VersionData(
version_data = VersionData(
slug=obj.version,
docs_url=docs_url,
project_alias=project_alias,
doctype=None,
)
projects_data[obj.project] = ProjectData(
alias=project_alias,
version=version_data,
)
return projects_data[obj.project]
return None

def get_project_alias(self, obj):
project_data = self._get_project_data(obj)
if project_data:
return project_data.project_alias
return project_data.alias
return None

def get_domain(self, obj):
Expand All @@ -117,12 +121,12 @@ def get_path(self, obj):
def _get_full_path(self, obj):
project_data = self._get_project_data(obj)
if project_data:
docs_url = project_data.docs_url
docs_url = project_data.version.docs_url
path = obj.full_path

# Generate an appropriate link for the doctypes that use htmldir,
# and always end it with / so it goes directly to proxito.
if project_data.doctype in {SPHINX_HTMLDIR, MKDOCS}:
if project_data.version.doctype in {SPHINX_HTMLDIR, MKDOCS}:
path = re.sub('(^|/)index.html$', '/', path)

return docs_url.rstrip('/') + '/' + path.lstrip('/')
Expand Down
14 changes: 9 additions & 5 deletions readthedocs/search/views.py
Expand Up @@ -15,6 +15,7 @@

from .serializers import (
PageSearchSerializer,
ProjectData,
ProjectSearchSerializer,
VersionData,
)
Expand Down Expand Up @@ -62,12 +63,15 @@ def _get_project_data(self, project, version_slug):
.get(slug=version_slug)
)
docs_url = project.get_docs_url(version_slug=version_slug)
version_data = VersionData(
slug=version_slug,
docs_url=docs_url,
doctype=version_doctype,
)
project_data = {
project.slug: VersionData(
slug=version_slug,
docs_url=docs_url,
doctype=version_doctype,
project_alias=None,
project.slug: ProjectData(
alias=None,
version=version_data,
)
}
return project_data
Expand Down

0 comments on commit 33ed079

Please sign in to comment.