Skip to content

Commit 6d05ea5

Browse files
committed
Precommit
1 parent 7f1e7ea commit 6d05ea5

File tree

4 files changed

+69
-55
lines changed

4 files changed

+69
-55
lines changed

readthedocs/core/resolver.py

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1+
# -*- coding: utf-8 -*-
12
"""URL resolver for documentation."""
23

3-
from __future__ import absolute_import
4-
54
import re
65
from urllib.parse import urlunparse
76

8-
from builtins import object
97
from django.conf import settings
108

119
from readthedocs.core.utils.extend import SettingsOverrideObject
@@ -53,9 +51,11 @@ class ResolverBase(object):
5351
/docs/<project_slug>/projects/<subproject_slug>/<filename>
5452
"""
5553

56-
def base_resolve_path(self, project_slug, filename, version_slug=None,
57-
language=None, private=False, single_version=None,
58-
subproject_slug=None, subdomain=None, cname=None):
54+
def base_resolve_path(
55+
self, project_slug, filename, version_slug=None, language=None,
56+
private=False, single_version=None, subproject_slug=None,
57+
subdomain=None, cname=None
58+
):
5959
"""Resolve a with nothing smart, just filling in the blanks."""
6060
# Only support `/docs/project' URLs outside our normal environment. Normally
6161
# the path should always have a subdomain or CNAME domain
@@ -74,14 +74,18 @@ def base_resolve_path(self, project_slug, filename, version_slug=None,
7474
url += u'{language}/{version_slug}/{filename}'
7575

7676
return url.format(
77-
project_slug=project_slug, filename=filename,
78-
version_slug=version_slug, language=language,
79-
single_version=single_version, subproject_slug=subproject_slug,
77+
project_slug=project_slug,
78+
filename=filename,
79+
version_slug=version_slug,
80+
language=language,
81+
single_version=single_version,
82+
subproject_slug=subproject_slug,
8083
)
8184

82-
def resolve_path(self, project, filename='', version_slug=None,
83-
language=None, single_version=None, subdomain=None,
84-
cname=None, private=None):
85+
def resolve_path(
86+
self, project, filename='', version_slug=None, language=None,
87+
single_version=None, subdomain=None, cname=None, private=None
88+
):
8589
"""Resolve a URL with a subset of fields defined."""
8690
cname = cname or project.domains.filter(canonical=True).first()
8791
version_slug = version_slug or project.get_default_version()
@@ -140,8 +144,10 @@ def resolve_domain(self, project, private=None):
140144

141145
return getattr(settings, 'PRODUCTION_DOMAIN')
142146

143-
def resolve(self, project, require_https=False, filename='',
144-
query_params='', private=None, **kwargs):
147+
def resolve(
148+
self, project, require_https=False, filename='', query_params='',
149+
private=None, **kwargs
150+
):
145151
if private is None:
146152
version_slug = kwargs.get('version_slug')
147153
if version_slug is None:
@@ -212,7 +218,7 @@ def _get_project_subdomain(self, project):
212218
if self._use_subdomain():
213219
project = self._get_canonical_project(project)
214220
subdomain_slug = project.slug.replace('_', '-')
215-
return "%s.%s" % (subdomain_slug, public_domain)
221+
return '%s.%s' % (subdomain_slug, public_domain)
216222

217223
def _get_project_custom_domain(self, project):
218224
return project.domains.filter(canonical=True).first()
@@ -223,7 +229,9 @@ def _get_private(self, project, version_slug):
223229
version = project.versions.get(slug=version_slug)
224230
private = version.privacy_level == PRIVATE
225231
except Version.DoesNotExist:
226-
private = getattr(settings, 'DEFAULT_PRIVACY_LEVEL', PUBLIC) == PRIVATE
232+
private = getattr(
233+
settings, 'DEFAULT_PRIVACY_LEVEL', PUBLIC
234+
) == PRIVATE
227235
return private
228236

229237
def _fix_filename(self, project, filename):
@@ -241,17 +249,17 @@ def _fix_filename(self, project, filename):
241249
if filename:
242250
if filename.endswith('/') or filename.endswith('.html'):
243251
path = filename
244-
elif project.documentation_type == "sphinx_singlehtml":
245-
path = "index.html#document-" + filename
246-
elif project.documentation_type in ["sphinx_htmldir", "mkdocs"]:
247-
path = filename + "/"
252+
elif project.documentation_type == 'sphinx_singlehtml':
253+
path = 'index.html#document-' + filename
254+
elif project.documentation_type in ['sphinx_htmldir', 'mkdocs']:
255+
path = filename + '/'
248256
elif '#' in filename:
249257
# do nothing if the filename contains URL fragments
250258
path = filename
251259
else:
252-
path = filename + ".html"
260+
path = filename + '.html'
253261
else:
254-
path = ""
262+
path = ''
255263
return path
256264

257265
def _use_custom_domain(self, custom_domain):

readthedocs/core/views/serve.py

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# -*- coding: utf-8 -*-
2+
23
"""
34
Doc serving from Python.
45
@@ -25,13 +26,6 @@
2526
SERVE_DOCS (['private']) - The list of ['private', 'public'] docs to serve.
2627
"""
2728

28-
from __future__ import (
29-
absolute_import,
30-
division,
31-
print_function,
32-
unicode_literals,
33-
)
34-
3529
import logging
3630
import mimetypes
3731
import os
@@ -63,8 +57,11 @@ def map_subproject_slug(view_func):
6357
6458
.. warning:: Does not take into account any kind of privacy settings.
6559
"""
60+
6661
@wraps(view_func)
67-
def inner_view(request, subproject=None, subproject_slug=None, *args, **kwargs): # noqa
62+
def inner_view(
63+
request, subproject=None, subproject_slug=None, *args, **kwargs
64+
): # noqa
6865
if subproject is None and subproject_slug:
6966
# Try to fetch by subproject alias first, otherwise we might end up
7067
# redirected to an unrelated project.
@@ -90,8 +87,11 @@ def map_project_slug(view_func):
9087
9188
.. warning:: Does not take into account any kind of privacy settings.
9289
"""
90+
9391
@wraps(view_func)
94-
def inner_view(request, project=None, project_slug=None, *args, **kwargs): # noqa
92+
def inner_view(
93+
request, project=None, project_slug=None, *args, **kwargs
94+
): # noqa
9595
if project is None:
9696
if not project_slug:
9797
project_slug = request.slug
@@ -109,22 +109,26 @@ def inner_view(request, project=None, project_slug=None, *args, **kwargs): # no
109109
def redirect_project_slug(request, project, subproject): # pylint: disable=unused-argument
110110
"""Handle / -> /en/latest/ directs on subdomains."""
111111
urlparse_result = urlparse(request.get_full_path())
112-
return HttpResponseRedirect(resolve(
113-
subproject or project,
114-
query_params=urlparse_result.query,
115-
))
112+
return HttpResponseRedirect(
113+
resolve(
114+
subproject or project,
115+
query_params=urlparse_result.query,
116+
)
117+
)
116118

117119

118120
@map_project_slug
119121
@map_subproject_slug
120122
def redirect_page_with_filename(request, project, subproject, filename): # pylint: disable=unused-argument # noqa
121123
"""Redirect /page/file.html to /en/latest/file.html."""
122124
urlparse_result = urlparse(request.get_full_path())
123-
return HttpResponseRedirect(resolve(
124-
subproject or project,
125-
filename=filename,
126-
query_params=urlparse_result.query,
127-
))
125+
return HttpResponseRedirect(
126+
resolve(
127+
subproject or project,
128+
filename=filename,
129+
query_params=urlparse_result.query,
130+
)
131+
)
128132

129133

130134
def _serve_401(request, project):
@@ -142,7 +146,8 @@ def _serve_file(request, filename, basepath):
142146

143147
# Serve from Nginx
144148
content_type, encoding = mimetypes.guess_type(
145-
os.path.join(basepath, filename))
149+
os.path.join(basepath, filename)
150+
)
146151
content_type = content_type or 'application/octet-stream'
147152
response = HttpResponse(content_type=content_type)
148153
if encoding:
@@ -169,8 +174,10 @@ def _serve_file(request, filename, basepath):
169174
@map_subproject_slug
170175
def serve_docs(
171176
request, project, subproject, lang_slug=None, version_slug=None,
172-
filename=''):
173-
"""Exists to map existing proj, lang, version, filename views to the file format."""
177+
filename=''
178+
):
179+
"""Exists to map existing proj, lang, version, filename views to the file
180+
format."""
174181
if not version_slug:
175182
version_slug = project.get_default_version()
176183
try:
@@ -235,4 +242,5 @@ def _serve_symlink_docs(request, project, privacy_level, filename=''):
235242
files_tried.append(os.path.join(basepath, filename))
236243

237244
raise Http404(
238-
'File not found. Tried these files: %s' % ','.join(files_tried))
245+
'File not found. Tried these files: %s' % ','.join(files_tried)
246+
)

readthedocs/redirects/managers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1+
# -*- coding: utf-8 -*-
12
"""Manager and queryset for the redirects app."""
23

3-
from __future__ import absolute_import
44
from django.db.models import Manager
55
from django.db.models.query import QuerySet
66

77

88
class RedirectQuerySet(QuerySet):
9+
910
def get_redirect_path(self, path, language=None, version_slug=None):
1011
for redirect in self.select_related('project'):
1112
new_path = redirect.get_redirect_path(
12-
path=path, language=language, version_slug=version_slug)
13+
path=path, language=language, version_slug=version_slug
14+
)
1315
if new_path:
1416
return new_path
1517
return None

readthedocs/redirects/utils.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# -*- coding: utf-8 -*-
12
"""
23
Redirection view support.
34
@@ -7,8 +8,6 @@
78
These are not used directly as views; they are instead included into 404
89
handlers, so that redirects only take effect if no other view matches.
910
"""
10-
from __future__ import absolute_import
11-
1211
import logging
1312
import re
1413
from urllib.parse import urlparse, urlunparse
@@ -38,9 +37,7 @@ def project_and_path_from_request(request, path):
3837
elif path.startswith('/docs/'):
3938
# In this case we use the docs without subdomains. So let's strip the
4039
# docs prefix.
41-
match = re.match(
42-
r'^/docs/(?P<project_slug>[^/]+)(?P<path>/.*)$',
43-
path)
40+
match = re.match(r'^/docs/(?P<project_slug>[^/]+)(?P<path>/.*)$', path)
4441
if match:
4542
project_slug = match.groupdict()['project_slug']
4643
path = match.groupdict()['path']
@@ -59,7 +56,8 @@ def project_and_path_from_request(request, path):
5956
def language_and_version_from_path(path):
6057
match = re.match(
6158
r'^/(?P<language>%s)/(?P<version_slug>[^/]+)(?P<path>/.*)$' % LANGUAGES_REGEX,
62-
path)
59+
path
60+
)
6361
if match:
6462
language = match.groupdict()['language']
6563
version_slug = match.groupdict()['version_slug']
@@ -77,9 +75,7 @@ def get_redirect_response(request, full_path):
7775
version_slug = None
7876
schema, netloc, path, params, query, fragments = urlparse(full_path)
7977
if not project.single_version:
80-
language, version_slug, path = language_and_version_from_path(
81-
path
82-
)
78+
language, version_slug, path = language_and_version_from_path(path)
8379

8480
path = project.redirects.get_redirect_path(
8581
path=path, language=language, version_slug=version_slug

0 commit comments

Comments
 (0)