From 2b2f0e01e571bb8a63261b0155fa384c8ace6baf Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Sun, 18 Feb 2018 11:29:58 -0500 Subject: [PATCH 01/11] Force index file creation on mkdocs --- readthedocs/doc_builder/backends/mkdocs.py | 2 +- readthedocs/doc_builder/base.py | 39 +++++++++++++--------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/readthedocs/doc_builder/backends/mkdocs.py b/readthedocs/doc_builder/backends/mkdocs.py index 6119673b8fa..ab542943d05 100644 --- a/readthedocs/doc_builder/backends/mkdocs.py +++ b/readthedocs/doc_builder/backends/mkdocs.py @@ -114,7 +114,7 @@ def append_conf(self, **__): # Handle custom docs dirs user_docs_dir = user_config.get('docs_dir') docs_dir = self.docs_dir(docs_dir=user_docs_dir) - self.create_index(extension='md') + self.create_index(extension='md', force_index=True) user_config['docs_dir'] = docs_dir # Set mkdocs config values diff --git a/readthedocs/doc_builder/base.py b/readthedocs/doc_builder/base.py index 83aac0da617..2952de63577 100644 --- a/readthedocs/doc_builder/base.py +++ b/readthedocs/doc_builder/base.py @@ -94,37 +94,44 @@ def docs_dir(self, docs_dir=None, **__): docs_dir = checkout_path return docs_dir - def create_index(self, extension='md', **__): - """Create an index file if it needs it.""" + def create_index(self, extension='md', force_index=False, **__): + """Create an index file if it needs it. + + If force_index is True and there isn't an index file, + one is created whether or not there is a README file. + """ docs_dir = self.docs_dir() index_filename = os.path.join( - docs_dir, 'index.{ext}'.format(ext=extension)) - if not os.path.exists(index_filename): - readme_filename = os.path.join( - docs_dir, 'README.{ext}'.format(ext=extension)) - if os.path.exists(readme_filename): - return 'README' - - index_file = open(index_filename, 'w+') - index_text = """ + docs_dir, 'index.{ext}'.format(ext=extension) + ) + readme_filename = os.path.join( + docs_dir, 'README.{ext}'.format(ext=extension) + ) + if os.path.exists(index_filename): + return 'index' + if not force_index and os.path.exists(readme_filename): + return 'README' + + index_file = open(index_filename, 'w+') + index_text = """ Welcome to Read the Docs ------------------------ This is an autogenerated index file. -Please create an ``index.{ext}`` or ``README.{ext}`` file with your own content -under the root (or ``/docs``) directory in your repository. +Please create an ``index.{ext}`` or ``README.{ext}`` (Sphinx only) file with +your own content under the root (or ``/docs``) directory in your repository. If you want to use another markup, choose a different builder in your settings. Check out our `Getting Started Guide `_ to become more familiar with Read the Docs. - """ + """ - index_file.write(index_text.format(dir=docs_dir, ext=extension)) - index_file.close() + index_file.write(index_text.format(dir=docs_dir, ext=extension)) + index_file.close() return 'index' def run(self, *args, **kwargs): From 323051651698b2ac73f2d0c85e10ee184abdbdc6 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Sun, 18 Feb 2018 12:19:15 -0500 Subject: [PATCH 02/11] Linter --- readthedocs/doc_builder/base.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/readthedocs/doc_builder/base.py b/readthedocs/doc_builder/base.py index 2952de63577..5ea3443f4b6 100644 --- a/readthedocs/doc_builder/base.py +++ b/readthedocs/doc_builder/base.py @@ -95,7 +95,9 @@ def docs_dir(self, docs_dir=None, **__): return docs_dir def create_index(self, extension='md', force_index=False, **__): - """Create an index file if it needs it. + + """ + Create an index file if it needs it. If force_index is True and there isn't an index file, one is created whether or not there is a README file. @@ -129,7 +131,6 @@ def create_index(self, extension='md', force_index=False, **__): `_ to become more familiar with Read the Docs. """ - index_file.write(index_text.format(dir=docs_dir, ext=extension)) index_file.close() return 'index' From 2dc63b8c3030fa424dfc854aabd94b22646792e6 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Sun, 18 Feb 2018 12:44:33 -0500 Subject: [PATCH 03/11] Linter --- readthedocs/doc_builder/base.py | 1 - 1 file changed, 1 deletion(-) diff --git a/readthedocs/doc_builder/base.py b/readthedocs/doc_builder/base.py index 5ea3443f4b6..8f7a918ff2a 100644 --- a/readthedocs/doc_builder/base.py +++ b/readthedocs/doc_builder/base.py @@ -95,7 +95,6 @@ def docs_dir(self, docs_dir=None, **__): return docs_dir def create_index(self, extension='md', force_index=False, **__): - """ Create an index file if it needs it. From b89ee9e78c369bf23872b07f75966ddca24fc7d3 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Tue, 20 Feb 2018 17:17:33 -0500 Subject: [PATCH 04/11] Add import --- readthedocs/doc_builder/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readthedocs/doc_builder/base.py b/readthedocs/doc_builder/base.py index 8f7a918ff2a..34d36ec951a 100644 --- a/readthedocs/doc_builder/base.py +++ b/readthedocs/doc_builder/base.py @@ -7,7 +7,7 @@ import logging import os import shutil -from builtins import object +from builtins import object, open from functools import wraps log = logging.getLogger(__name__) From 58fde0b93913c6d2c4dc8d359511cce59232dd52 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Tue, 20 Feb 2018 17:18:05 -0500 Subject: [PATCH 05/11] Add tests --- readthedocs/rtd_tests/tests/test_builds.py | 161 ++++++++++++++++++++- 1 file changed, 160 insertions(+), 1 deletion(-) diff --git a/readthedocs/rtd_tests/tests/test_builds.py b/readthedocs/rtd_tests/tests/test_builds.py index 57939fad374..dd7f23bc891 100644 --- a/readthedocs/rtd_tests/tests/test_builds.py +++ b/readthedocs/rtd_tests/tests/test_builds.py @@ -17,7 +17,7 @@ from readthedocs.projects.models import Project, EnvironmentVariable from readthedocs.projects.tasks import UpdateDocsTaskStep from readthedocs.rtd_tests.tests.test_config_integration import create_load - +from readthedocs.rtd_tests.mocks.paths import fake_paths from ..mocks.environment import EnvironmentMockGroup @@ -59,6 +59,165 @@ def test_build(self, load_config): self.assertRegexpMatches(cmd[0][0], r'python') self.assertRegexpMatches(cmd[0][1], r'sphinx-build') + def test_build_generate_index_file_force(self): + project = get( + Project, + slug='project-1', + documentation_type='mkdocs', + conf_py_file='', + enable_pdf_build=False, + enable_epub_build=False, + versions=[fixture()] + ) + version = project.versions.all()[0] + build_env = LocalBuildEnvironment( + project=project, + version=version, + build={} + ) + python_env = Virtualenv(version=version, build_env=build_env) + base_builder = MkdocsHTML(build_env, python_env) + + def look_index_path(path): + if path.endswith('README.md'): + return True + elif path.endswith('index.md'): + return False + return False + + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + result = base_builder.create_index(extension='md', force_index=True) + mock_open.assert_called_once_with( + os.path.join(base_builder.docs_dir(), 'index.md'), 'w+' + ) + self.assertEqual(result, 'index') + + def test_build_get_index_file_force(self): + project = get( + Project, + slug='project-1', + documentation_type='mkdocs', + conf_py_file='', + enable_pdf_build=False, + enable_epub_build=False, + versions=[fixture()] + ) + version = project.versions.all()[0] + build_env = LocalBuildEnvironment( + project=project, + version=version, + build={} + ) + python_env = Virtualenv(version=version, build_env=build_env) + base_builder = MkdocsHTML(build_env, python_env) + + def look_index_path(path): + if path.endswith('README.md'): + return True + elif path.endswith('index.md'): + return True + return False + + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + result = base_builder.create_index(extension='md', force_index=True) + self.assertEqual(len(mock_open.mock_calls), 0) + self.assertEqual(result, 'index') + + def test_build_generate_index_file(self): + project = get( + Project, + slug='project-1', + documentation_type='sphinx', + conf_py_file='', + enable_pdf_build=False, + enable_epub_build=False, + versions=[fixture()] + ) + version = project.versions.all()[0] + build_env = LocalBuildEnvironment( + project=project, + version=version, + build={} + ) + python_env = Virtualenv(version=version, build_env=build_env) + base_builder = MkdocsHTML(build_env, python_env) + + def look_index_path(path): + if path.endswith('README.md'): + return False + elif path.endswith('index.md'): + return False + return False + + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + result = base_builder.create_index(extension='md') + mock_open.assert_called_once_with( + os.path.join(base_builder.docs_dir(), 'index.md'), 'w+' + ) + self.assertEqual(result, 'index') + + def test_get_readme_file(self): + project = get( + Project, + slug='project-1', + documentation_type='sphinx', + conf_py_file='', + enable_pdf_build=False, + enable_epub_build=False, + versions=[fixture()] + ) + version = project.versions.all()[0] + build_env = LocalBuildEnvironment( + project=project, + version=version, + build={} + ) + python_env = Virtualenv(version=version, build_env=build_env) + base_builder = MkdocsHTML(build_env, python_env) + + def look_index_path(path): + if path.endswith('README.md'): + return True + elif path.endswith('index.md'): + return False + return False + + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + result = base_builder.create_index(extension='md') + self.assertEqual(len(mock_open.mock_calls), 0) + self.assertEqual(result, 'README') + + def test_get_index_file(self): + project = get( + Project, + slug='project-1', + documentation_type='sphinx', + conf_py_file='', + enable_pdf_build=False, + enable_epub_build=False, + versions=[fixture()] + ) + version = project.versions.all()[0] + build_env = LocalBuildEnvironment( + project=project, + version=version, + build={} + ) + python_env = Virtualenv(version=version, build_env=build_env) + base_builder = MkdocsHTML(build_env, python_env) + + def look_index_path(path): + if path.endswith('README.md'): + return False + elif path.endswith('index.md'): + return True + return False + + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + result = base_builder.create_index(extension='md') + self.assertEqual(len(mock_open.mock_calls), 0) + self.assertEqual(result, 'index') + @mock.patch('readthedocs.doc_builder.config.load_config') def test_build_respects_pdf_flag(self, load_config): '''Build output format control''' From 11aa75d72326bfc559731d774026dbd3db806bc6 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Tue, 20 Feb 2018 17:28:03 -0500 Subject: [PATCH 06/11] Change builder to SphinxHTML --- readthedocs/rtd_tests/tests/test_builds.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/readthedocs/rtd_tests/tests/test_builds.py b/readthedocs/rtd_tests/tests/test_builds.py index dd7f23bc891..811682b1ccf 100644 --- a/readthedocs/rtd_tests/tests/test_builds.py +++ b/readthedocs/rtd_tests/tests/test_builds.py @@ -12,6 +12,8 @@ from readthedocs.builds.models import Build, Version from readthedocs.doc_builder.config import load_yaml_config +from readthedocs.doc_builder.backends.mkdocs import MkdocsHTML +from readthedocs.doc_builder.backends.sphinx import HtmlBuilder as SphinxHTML from readthedocs.doc_builder.environments import LocalBuildEnvironment from readthedocs.doc_builder.python_environments import Virtualenv from readthedocs.projects.models import Project, EnvironmentVariable @@ -140,7 +142,7 @@ def test_build_generate_index_file(self): build={} ) python_env = Virtualenv(version=version, build_env=build_env) - base_builder = MkdocsHTML(build_env, python_env) + base_builder = SphinxHTML(build_env, python_env) def look_index_path(path): if path.endswith('README.md'): @@ -173,7 +175,7 @@ def test_get_readme_file(self): build={} ) python_env = Virtualenv(version=version, build_env=build_env) - base_builder = MkdocsHTML(build_env, python_env) + base_builder = SphinxHTML(build_env, python_env) def look_index_path(path): if path.endswith('README.md'): @@ -204,7 +206,7 @@ def test_get_index_file(self): build={} ) python_env = Virtualenv(version=version, build_env=build_env) - base_builder = MkdocsHTML(build_env, python_env) + base_builder = SphinxHTML(build_env, python_env) def look_index_path(path): if path.endswith('README.md'): From faf2d39a1037fca27750efa1376619a78c952162 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Thu, 1 Mar 2018 13:48:44 -0500 Subject: [PATCH 07/11] Add function bo mock paths --- readthedocs/rtd_tests/mocks/paths.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/readthedocs/rtd_tests/mocks/paths.py b/readthedocs/rtd_tests/mocks/paths.py index 34fa7e5953f..8fa96af0a18 100644 --- a/readthedocs/rtd_tests/mocks/paths.py +++ b/readthedocs/rtd_tests/mocks/paths.py @@ -58,3 +58,21 @@ def check(path): return None return fake_paths(check) + + +def fake_paths_by_endswith(path_dict, default_return=None): + """ + Usage: + + >>> paths = {'my.txt': True, 'no.txt': False} + >>> with fake_paths_by_endswith(paths): + ... assert os.path.exists('/usr/dev/my.txt') == True + ... assert os.path.exists('/home/no.txt') == False + """ + def check(path): + for path_to_look, resp in path_dict.items(): + if path.endswith(path_to_look): + return resp + return default_return + + return fake_paths(check) From 422c7ab4a967ef437c514fda8b71dec96099530f Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Thu, 1 Mar 2018 13:49:07 -0500 Subject: [PATCH 08/11] Fake paths with endswith --- readthedocs/rtd_tests/tests/test_builds.py | 64 +++++++++------------- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/readthedocs/rtd_tests/tests/test_builds.py b/readthedocs/rtd_tests/tests/test_builds.py index 811682b1ccf..682f33ec38f 100644 --- a/readthedocs/rtd_tests/tests/test_builds.py +++ b/readthedocs/rtd_tests/tests/test_builds.py @@ -17,9 +17,9 @@ from readthedocs.doc_builder.environments import LocalBuildEnvironment from readthedocs.doc_builder.python_environments import Virtualenv from readthedocs.projects.models import Project, EnvironmentVariable -from readthedocs.projects.tasks import UpdateDocsTaskStep from readthedocs.rtd_tests.tests.test_config_integration import create_load -from readthedocs.rtd_tests.mocks.paths import fake_paths +from readthedocs.rtd_tests.mocks.paths import fake_paths_by_endswith + from ..mocks.environment import EnvironmentMockGroup @@ -80,14 +80,12 @@ def test_build_generate_index_file_force(self): python_env = Virtualenv(version=version, build_env=build_env) base_builder = MkdocsHTML(build_env, python_env) - def look_index_path(path): - if path.endswith('README.md'): - return True - elif path.endswith('index.md'): - return False - return False + paths = { + 'README.md': True, + 'index.md': False, + } - with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths_by_endswith(paths): result = base_builder.create_index(extension='md', force_index=True) mock_open.assert_called_once_with( os.path.join(base_builder.docs_dir(), 'index.md'), 'w+' @@ -113,14 +111,12 @@ def test_build_get_index_file_force(self): python_env = Virtualenv(version=version, build_env=build_env) base_builder = MkdocsHTML(build_env, python_env) - def look_index_path(path): - if path.endswith('README.md'): - return True - elif path.endswith('index.md'): - return True - return False + paths = { + 'README.md': True, + 'index.md': True, + } - with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths_by_endswith(paths): result = base_builder.create_index(extension='md', force_index=True) self.assertEqual(len(mock_open.mock_calls), 0) self.assertEqual(result, 'index') @@ -144,14 +140,12 @@ def test_build_generate_index_file(self): python_env = Virtualenv(version=version, build_env=build_env) base_builder = SphinxHTML(build_env, python_env) - def look_index_path(path): - if path.endswith('README.md'): - return False - elif path.endswith('index.md'): - return False - return False + paths = { + 'README.md': False, + 'index,md': False, + } - with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths_by_endswith(paths): result = base_builder.create_index(extension='md') mock_open.assert_called_once_with( os.path.join(base_builder.docs_dir(), 'index.md'), 'w+' @@ -177,14 +171,12 @@ def test_get_readme_file(self): python_env = Virtualenv(version=version, build_env=build_env) base_builder = SphinxHTML(build_env, python_env) - def look_index_path(path): - if path.endswith('README.md'): - return True - elif path.endswith('index.md'): - return False - return False + paths = { + 'README.md': True, + 'index.md': False, + } - with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths_by_endswith(paths): result = base_builder.create_index(extension='md') self.assertEqual(len(mock_open.mock_calls), 0) self.assertEqual(result, 'README') @@ -208,14 +200,12 @@ def test_get_index_file(self): python_env = Virtualenv(version=version, build_env=build_env) base_builder = SphinxHTML(build_env, python_env) - def look_index_path(path): - if path.endswith('README.md'): - return False - elif path.endswith('index.md'): - return True - return False + paths = { + 'README.md': False, + 'index.md': True, + } - with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths(look_index_path): + with mock.patch('readthedocs.doc_builder.base.open', mock.mock_open()) as mock_open, fake_paths_by_endswith(paths): result = base_builder.create_index(extension='md') self.assertEqual(len(mock_open.mock_calls), 0) self.assertEqual(result, 'index') From dbf8ad3180038586b41dd576dff70c500e04d86c Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Wed, 21 Nov 2018 12:05:38 -0500 Subject: [PATCH 09/11] Fix tests --- readthedocs/rtd_tests/tests/test_builds.py | 30 +++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/readthedocs/rtd_tests/tests/test_builds.py b/readthedocs/rtd_tests/tests/test_builds.py index 682f33ec38f..449ac97e920 100644 --- a/readthedocs/rtd_tests/tests/test_builds.py +++ b/readthedocs/rtd_tests/tests/test_builds.py @@ -5,20 +5,22 @@ unicode_literals, ) -import mock import os + +import mock from django.test import TestCase from django_dynamic_fixture import fixture, get from readthedocs.builds.models import Build, Version -from readthedocs.doc_builder.config import load_yaml_config from readthedocs.doc_builder.backends.mkdocs import MkdocsHTML from readthedocs.doc_builder.backends.sphinx import HtmlBuilder as SphinxHTML +from readthedocs.doc_builder.config import load_yaml_config from readthedocs.doc_builder.environments import LocalBuildEnvironment from readthedocs.doc_builder.python_environments import Virtualenv -from readthedocs.projects.models import Project, EnvironmentVariable -from readthedocs.rtd_tests.tests.test_config_integration import create_load +from readthedocs.projects.models import EnvironmentVariable, Project +from readthedocs.projects.tasks import UpdateDocsTaskStep from readthedocs.rtd_tests.mocks.paths import fake_paths_by_endswith +from readthedocs.rtd_tests.tests.test_config_integration import create_load from ..mocks.environment import EnvironmentMockGroup @@ -61,7 +63,9 @@ def test_build(self, load_config): self.assertRegexpMatches(cmd[0][0], r'python') self.assertRegexpMatches(cmd[0][1], r'sphinx-build') - def test_build_generate_index_file_force(self): + @mock.patch('readthedocs.doc_builder.config.load_config') + def test_build_generate_index_file_force(self, load_config): + load_config.side_effect = create_load() project = get( Project, slug='project-1', @@ -92,7 +96,9 @@ def test_build_generate_index_file_force(self): ) self.assertEqual(result, 'index') - def test_build_get_index_file_force(self): + @mock.patch('readthedocs.doc_builder.config.load_config') + def test_build_get_index_file_force(self, load_config): + load_config.side_effect = create_load() project = get( Project, slug='project-1', @@ -121,7 +127,9 @@ def test_build_get_index_file_force(self): self.assertEqual(len(mock_open.mock_calls), 0) self.assertEqual(result, 'index') - def test_build_generate_index_file(self): + @mock.patch('readthedocs.doc_builder.config.load_config') + def test_build_generate_index_file(self, load_config): + load_config.side_effect = create_load() project = get( Project, slug='project-1', @@ -152,7 +160,9 @@ def test_build_generate_index_file(self): ) self.assertEqual(result, 'index') - def test_get_readme_file(self): + @mock.patch('readthedocs.doc_builder.config.load_config') + def test_get_readme_file(self, load_config): + load_config.side_effect = create_load() project = get( Project, slug='project-1', @@ -181,7 +191,9 @@ def test_get_readme_file(self): self.assertEqual(len(mock_open.mock_calls), 0) self.assertEqual(result, 'README') - def test_get_index_file(self): + @mock.patch('readthedocs.doc_builder.config.load_config') + def test_get_index_file(self, load_config): + load_config.side_effect = create_load() project = get( Project, slug='project-1', From 1009eff88bff4eaead0fba93999c2874e6663f23 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Wed, 21 Nov 2018 12:15:04 -0500 Subject: [PATCH 10/11] Clean up --- readthedocs/doc_builder/base.py | 42 ++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/readthedocs/doc_builder/base.py b/readthedocs/doc_builder/base.py index 34d36ec951a..93fb617f16d 100644 --- a/readthedocs/doc_builder/base.py +++ b/readthedocs/doc_builder/base.py @@ -2,13 +2,19 @@ """Base classes for Builders.""" from __future__ import ( - absolute_import, division, print_function, unicode_literals) + absolute_import, + division, + print_function, + unicode_literals, +) import logging import os import shutil -from builtins import object, open from functools import wraps +import textwrap + +from builtins import open log = logging.getLogger(__name__) @@ -114,24 +120,26 @@ def create_index(self, extension='md', force_index=False, **__): if not force_index and os.path.exists(readme_filename): return 'README' - index_file = open(index_filename, 'w+') - index_text = """ - -Welcome to Read the Docs ------------------------- + index_text = textwrap.dedent( + """ + Welcome to Read the Docs + ------------------------ -This is an autogenerated index file. + This is an autogenerated index file. -Please create an ``index.{ext}`` or ``README.{ext}`` (Sphinx only) file with -your own content under the root (or ``/docs``) directory in your repository. + Please create an ``index.{ext}`` or ``README.{ext}`` (Sphinx only) file with + your own content under the root (or ``/docs``) directory in your repository. -If you want to use another markup, choose a different builder in your settings. -Check out our `Getting Started Guide -`_ to become more -familiar with Read the Docs. - """ - index_file.write(index_text.format(dir=docs_dir, ext=extension)) - index_file.close() + If you want to use another markup, choose a different builder in your settings. + Check out our `Getting Started Guide + `_ to become more + familiar with Read the Docs. + """ + ) + with open(index_filename, 'w+') as index_file: + index_file.write( + index_text.format(dir=docs_dir, ext=extension) + ) return 'index' def run(self, *args, **kwargs): From 3cb2bf1764e815acb9a947ec751d4cb4c48c7ce0 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Wed, 21 Nov 2018 12:15:41 -0500 Subject: [PATCH 11/11] Isort --- readthedocs/doc_builder/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readthedocs/doc_builder/base.py b/readthedocs/doc_builder/base.py index 93fb617f16d..fc774f97e6b 100644 --- a/readthedocs/doc_builder/base.py +++ b/readthedocs/doc_builder/base.py @@ -11,8 +11,8 @@ import logging import os import shutil -from functools import wraps import textwrap +from functools import wraps from builtins import open