Skip to content

Commit 67e936d

Browse files
author
CM Lubinski
committed
Split footer_html view in two.
Smaller functions should be easier to test independently. This will also resolve a pyflakes warning.
1 parent e1d48d4 commit 67e936d

File tree

1 file changed

+46
-38
lines changed

1 file changed

+46
-38
lines changed

readthedocs/restapi/views/footer_views.py

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -50,38 +50,29 @@ def get_version_compare_data(project, base_version=None):
5050
return ret_val
5151

5252

53-
@decorators.api_view(['GET'])
54-
@decorators.permission_classes((permissions.AllowAny,))
55-
@decorators.renderer_classes((JSONRenderer, JSONPRenderer))
56-
def footer_html(request):
57-
"""Render and return footer markup."""
58-
project_slug = request.GET.get('project', None)
59-
version_slug = request.GET.get('version', None)
60-
page_slug = request.GET.get('page', None)
61-
theme = request.GET.get('theme', False)
53+
def footer_path(main_project, page_slug):
54+
if page_slug and page_slug != "index":
55+
if main_project.documentation_type in ("sphinx_htmldir", "mkdocs"):
56+
return page_slug + "/"
57+
elif main_project.documentation_type == "sphinx_singlehtml":
58+
return "index.html#document-" + page_slug
59+
else:
60+
return page_slug + ".html"
61+
else:
62+
return ""
63+
64+
65+
def version_context(project, request):
66+
"""Derive extra footer context by looking up the requested version."""
67+
page_slug = request.GET.get('page')
68+
version_slug = request.GET.get('version')
6269
docroot = request.GET.get('docroot', '')
63-
subproject = request.GET.get('subproject', False)
6470
source_suffix = request.GET.get('source_suffix', '.rst')
71+
main_project = project.main_language_project or project
6572

66-
new_theme = (theme == "sphinx_rtd_theme")
67-
using_theme = (theme == "default")
68-
project = get_object_or_404(Project, slug=project_slug)
6973
version = get_object_or_404(
7074
Version.objects.public(request.user, project=project, only_active=False),
7175
slug=version_slug)
72-
main_project = project.main_language_project or project
73-
74-
if page_slug and page_slug != "index":
75-
if (
76-
main_project.documentation_type == "sphinx_htmldir" or
77-
main_project.documentation_type == "mkdocs"):
78-
path = page_slug + "/"
79-
elif main_project.documentation_type == "sphinx_singlehtml":
80-
path = "index.html#document-" + page_slug
81-
else:
82-
path = page_slug + ".html"
83-
else:
84-
path = ""
8576

8677
if version.type == TAG and version.project.has_pdf(version.slug):
8778
print_url = (
@@ -92,35 +83,52 @@ def footer_html(request):
9283
else:
9384
print_url = None
9485

95-
version_compare_data = get_version_compare_data(project, version)
96-
97-
context = {
98-
'project': project,
86+
return {
9987
'version': version,
100-
'path': path,
88+
'path': footer_path(main_project, page_slug),
10189
'downloads': version.get_downloads(pretty=True),
102-
'current_version': version.verbose_name,
103-
'versions': project.ordered_active_versions(user=request.user),
10490
'main_project': main_project,
10591
'translations': main_project.translations.all(),
92+
'current_version': version.verbose_name,
93+
'print_url': print_url,
94+
'github_edit_url': version.get_github_url(docroot, page_slug, source_suffix, 'edit'),
95+
'github_view_url': version.get_github_url(docroot, page_slug, source_suffix, 'view'),
96+
'bitbucket_url': version.get_bitbucket_url(docroot, page_slug, source_suffix),
97+
}
98+
99+
100+
@decorators.api_view(['GET'])
101+
@decorators.permission_classes((permissions.AllowAny,))
102+
@decorators.renderer_classes((JSONRenderer, JSONPRenderer))
103+
def footer_html(request):
104+
"""Render and return footer markup."""
105+
project_slug = request.GET.get('project', None)
106+
theme = request.GET.get('theme', False)
107+
subproject = request.GET.get('subproject', False)
108+
109+
new_theme = (theme == "sphinx_rtd_theme")
110+
using_theme = (theme == "default")
111+
project = get_object_or_404(Project, slug=project_slug)
112+
113+
context = {
114+
'project': project,
115+
'versions': project.ordered_active_versions(user=request.user),
106116
'current_language': project.language,
107117
'using_theme': using_theme,
108118
'new_theme': new_theme,
109119
'settings': settings,
110120
'subproject': subproject,
111-
'print_url': print_url,
112-
'github_edit_url': version.get_github_url(docroot, page_slug, source_suffix, 'edit'),
113-
'github_view_url': version.get_github_url(docroot, page_slug, source_suffix, 'view'),
114-
'bitbucket_url': version.get_bitbucket_url(docroot, page_slug, source_suffix),
115121
'theme': theme,
116122
}
123+
context.update(version_context(project, request))
117124

118125
request_context = RequestContext(request, context)
119126
html = template_loader.get_template('restapi/footer.html').render(request_context)
127+
version = context['version']
120128
resp_data = {
121129
'html': html,
122130
'version_active': version.active,
123-
'version_compare': version_compare_data,
131+
'version_compare': get_version_compare_data(project, version),
124132
'version_supported': version.supported,
125133
}
126134

0 commit comments

Comments
 (0)