Skip to content

Commit 5355f90

Browse files
authored
Merge pull request #6082 from readthedocs/humitos/full-path-url-docurl
Return full path URL (including `.html`) on `/api/v2/docurl/` endpoint
2 parents 675b1a0 + 7834877 commit 5355f90

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

readthedocs/api/v2/views/core_views.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,16 @@ def docurl(request):
2020
2121
Example::
2222
23-
GET https://readthedocs.org/api/v2/docurl/?project=requests&version=latest&doc=index
23+
GET https://readthedocs.org/api/v2/docurl/?
24+
project=requests&
25+
version=latest&
26+
doc=index&
27+
path=index.html
2428
"""
2529
project = request.GET.get('project')
2630
version = request.GET.get('version', LATEST)
2731
doc = request.GET.get('doc', 'index')
32+
path = request.GET.get('path', '')
2833
if project is None:
2934
return Response(
3035
{'error': 'Need project and doc'},
@@ -42,5 +47,6 @@ def docurl(request):
4247
project=project,
4348
version=version.slug,
4449
page=doc,
50+
path=path,
4551
),
4652
})

readthedocs/core/templatetags/core_tags.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,20 @@ def gravatar(email, size=48):
3737

3838

3939
@register.simple_tag(name='doc_url')
40-
def make_document_url(project, version=None, page=''):
40+
def make_document_url(project, version=None, page='', path=''):
41+
"""
42+
Create a URL for a Project, Version and page (and/or path).
43+
44+
:param page: is the name of the document as Sphinx call it (e.g.
45+
/config-file/v1) (note that the extension is not present)
46+
:param path: is the full path of the page (e.g. /section/configuration.html)
47+
48+
:returns: URL to the page (e.g. https://docs.domain.com/en/latest/section/configuration.html)
49+
"""
4150
if not project:
4251
return ''
43-
return resolve(project=project, version_slug=version, filename=page)
52+
filename = path or page
53+
return resolve(project=project, version_slug=version, filename=filename)
4454

4555

4656
@register.filter(is_safe=True)

readthedocs/rtd_tests/tests/test_core_tags.py

+4-7
Original file line numberDiff line numberDiff line change
@@ -67,32 +67,29 @@ def test_project_and_version_and_page(self):
6767
proj = Project.objects.get(slug='pip')
6868
url = core_tags.make_document_url(proj, 'abc', 'xyz')
6969
self.assertEqual(url, self.pip_abc_xyz_page_url)
70-
url = core_tags.make_document_url(proj, 'abc', 'index.html')
70+
url = core_tags.make_document_url(proj, 'abc', 'index', 'index.html')
7171
self.assertEqual(url, self.pip_abc_url_index)
7272

7373
def test_translation_project_and_version_and_page(self):
7474
proj = Project.objects.get(slug='pip-fr')
7575
url = core_tags.make_document_url(proj, 'abc', 'xyz')
7676
self.assertEqual(url, self.pip_abc_xyz_fr_page_url)
77-
url = core_tags.make_document_url(proj, 'abc', 'index.html')
77+
url = core_tags.make_document_url(proj, 'abc', 'index', 'index.html')
7878
self.assertEqual(url, self.pip_abc_fr_url_index)
7979

8080
def test_mkdocs(self):
8181
proj = Project.objects.get(slug='pip')
82-
proj.documentation_type = 'mkdocs'
8382
url = core_tags.make_document_url(proj, LATEST, 'document')
8483
self.assertEqual(url, self.pip_latest_document_url)
8584

8685
def test_mkdocs_no_directory_urls(self):
8786
proj = Project.objects.get(slug='pip')
88-
proj.documentation_type = 'mkdocs'
89-
url = core_tags.make_document_url(proj, LATEST, 'document.html')
87+
url = core_tags.make_document_url(proj, LATEST, 'document', 'document.html')
9088
self.assertEqual(url, self.pip_latest_document_page_url)
9189

9290
def test_mkdocs_index_no_directory_urls(self):
9391
proj = Project.objects.get(slug='pip')
94-
proj.documentation_type = 'mkdocs'
95-
url = core_tags.make_document_url(proj, LATEST, 'index.html')
92+
url = core_tags.make_document_url(proj, LATEST, 'index', 'index.html')
9693
self.assertEqual(url, self.pip_latest_url_index)
9794

9895
def test_restructured_text(self):

0 commit comments

Comments
 (0)