diff --git a/readthedocs/projects/tasks.py b/readthedocs/projects/tasks.py index 7dd35b72a06..eb0a2453912 100644 --- a/readthedocs/projects/tasks.py +++ b/readthedocs/projects/tasks.py @@ -62,8 +62,6 @@ log = logging.getLogger(__name__) -HTML_ONLY = getattr(settings, 'HTML_ONLY_PROJECTS', ()) - class SyncRepositoryMixin(object): @@ -266,13 +264,11 @@ class UpdateDocsTaskStep(SyncRepositoryMixin): """ def __init__(self, build_env=None, python_env=None, config=None, - force=False, search=True, localmedia=True, - build=None, project=None, version=None, task=None): + force=False, build=None, project=None, + version=None, task=None): self.build_env = build_env self.python_env = python_env self.build_force = force - self.build_search = search - self.build_localmedia = localmedia self.build = {} if build is not None: self.build = build @@ -289,7 +285,7 @@ def __init__(self, build_env=None, python_env=None, config=None, # pylint: disable=arguments-differ def run(self, pk, version_pk=None, build_pk=None, record=True, - docker=None, search=True, force=False, localmedia=True, **__): + docker=None, force=False, **__): """ Run a documentation sync n' build. @@ -312,9 +308,7 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, :param record bool: record a build object in the database :param docker bool: use docker to build the project (if ``None``, ``settings.DOCKER_ENABLE`` is used) - :param search bool: update search :param force bool: force Sphinx build - :param localmedia bool: update localmedia :returns: whether build was successful or not @@ -327,8 +321,6 @@ def run(self, pk, version_pk=None, build_pk=None, record=True, self.project = self.get_project(pk) self.version = self.get_version(self.project, version_pk) self.build = self.get_build(build_pk) - self.build_search = search - self.build_localmedia = localmedia self.build_force = force self.config = None @@ -769,37 +761,38 @@ def build_docs_html(self): def build_docs_search(self): """Build search data.""" - # TODO rely on config parameter here when Project.documentation_type is - # removed in #4638. Mkdocs has no search currently - if self.project.documentation_type == 'mkdocs': - return False - return self.build_search + # Search is always run in sphinx using the rtd-sphinx-extension. + # Mkdocs has no search currently. + if self.is_type_sphinx(): + return True + return False def build_docs_localmedia(self): """Get local media files with separate build.""" if 'htmlzip' not in self.config.formats: return False - - if self.build_localmedia: - if self.is_type_sphinx(): - return self.build_docs_class('sphinx_singlehtmllocalmedia') + # We don't generate a zip for mkdocs currently. + if self.is_type_sphinx(): + return self.build_docs_class('sphinx_singlehtmllocalmedia') return False def build_docs_pdf(self): """Build PDF docs.""" - if ('pdf' not in self.config.formats or - self.project.slug in HTML_ONLY or - not self.is_type_sphinx()): + if 'pdf' not in self.config.formats: return False - return self.build_docs_class('sphinx_pdf') + # Mkdocs has no pdf generation currently. + if self.is_type_sphinx(): + return self.build_docs_class('sphinx_pdf') + return False def build_docs_epub(self): """Build ePub docs.""" - if ('epub' not in self.config.formats or - self.project.slug in HTML_ONLY or - not self.is_type_sphinx()): + if 'epub' not in self.config.formats: return False - return self.build_docs_class('sphinx_epub') + # Mkdocs has no epub generation currently. + if self.is_type_sphinx(): + return self.build_docs_class('sphinx_epub') + return False def build_docs_class(self, builder_class): """ diff --git a/readthedocs/rtd_tests/mocks/environment.py b/readthedocs/rtd_tests/mocks/environment.py index 524db5419ec..4b963b769ba 100644 --- a/readthedocs/rtd_tests/mocks/environment.py +++ b/readthedocs/rtd_tests/mocks/environment.py @@ -34,6 +34,10 @@ def __init__(self): 'readthedocs.doc_builder.backends.sphinx.HtmlBuilder.build'), 'html_move': mock.patch( 'readthedocs.doc_builder.backends.sphinx.HtmlBuilder.move'), + 'localmedia_build': mock.patch( + 'readthedocs.doc_builder.backends.sphinx.LocalMediaBuilder.build'), + 'localmedia_move': mock.patch( + 'readthedocs.doc_builder.backends.sphinx.LocalMediaBuilder.move'), 'pdf_build': mock.patch( 'readthedocs.doc_builder.backends.sphinx.PdfBuilder.build'), 'pdf_move': mock.patch( @@ -42,6 +46,12 @@ def __init__(self): 'readthedocs.doc_builder.backends.sphinx.EpubBuilder.build'), 'epub_move': mock.patch( 'readthedocs.doc_builder.backends.sphinx.EpubBuilder.move'), + 'move_mkdocs': mock.patch( + 'readthedocs.doc_builder.backends.mkdocs.BaseMkdocs.move'), + 'append_conf_mkdocs': mock.patch( + 'readthedocs.doc_builder.backends.mkdocs.BaseMkdocs.append_conf'), + 'html_build_mkdocs': mock.patch( + 'readthedocs.doc_builder.backends.mkdocs.MkdocsHTML.build'), 'glob': mock.patch('readthedocs.doc_builder.backends.sphinx.glob'), 'docker': mock.patch('readthedocs.doc_builder.environments.APIClient'), diff --git a/readthedocs/rtd_tests/tests/test_builds.py b/readthedocs/rtd_tests/tests/test_builds.py index 6e91ffba12e..953adfb12dc 100644 --- a/readthedocs/rtd_tests/tests/test_builds.py +++ b/readthedocs/rtd_tests/tests/test_builds.py @@ -48,8 +48,10 @@ def test_build(self, load_config): build_env = LocalBuildEnvironment(project=project, version=version, build={}) python_env = Virtualenv(version=version, build_env=build_env) config = load_yaml_config(version) - task = UpdateDocsTaskStep(build_env=build_env, project=project, python_env=python_env, - version=version, search=False, localmedia=False, config=config) + task = UpdateDocsTaskStep( + build_env=build_env, project=project, python_env=python_env, + version=version, config=config + ) task.build_docs() # Get command and check first part of command list is a call to sphinx @@ -74,8 +76,10 @@ def test_build_respects_pdf_flag(self, load_config): build_env = LocalBuildEnvironment(project=project, version=version, build={}) python_env = Virtualenv(version=version, build_env=build_env) config = load_yaml_config(version) - task = UpdateDocsTaskStep(build_env=build_env, project=project, python_env=python_env, - version=version, search=False, localmedia=False, config=config) + task = UpdateDocsTaskStep( + build_env=build_env, project=project, python_env=python_env, + version=version, config=config + ) task.build_docs() @@ -85,6 +89,40 @@ def test_build_respects_pdf_flag(self, load_config): # PDF however was disabled and therefore not built. self.assertFalse(self.mocks.epub_build.called) + @mock.patch('readthedocs.doc_builder.config.load_config') + def test_dont_localmedia_build_pdf_epub_search_in_mkdocs(self, load_config): + load_config.side_effect = create_load() + project = get( + Project, + slug='project-1', + documentation_type='mkdocs', + enable_pdf_build=True, + enable_epub_build=True, + versions=[fixture()] + ) + version = project.versions.all().first() + + build_env = LocalBuildEnvironment( + project=project, + version=version, + build={} + ) + python_env = Virtualenv(version=version, build_env=build_env) + config = load_yaml_config(version) + task = UpdateDocsTaskStep( + build_env=build_env, project=project, python_env=python_env, + version=version, config=config + ) + + task.build_docs() + + # Only html for mkdocs was built + self.mocks.html_build_mkdocs.assert_called_once() + self.mocks.html_build.assert_not_called() + self.mocks.localmedia_build.assert_not_called() + self.mocks.pdf_build.assert_not_called() + self.mocks.epub_build.assert_not_called() + @mock.patch('readthedocs.doc_builder.config.load_config') def test_build_respects_epub_flag(self, load_config): '''Test build with epub enabled''' @@ -101,8 +139,10 @@ def test_build_respects_epub_flag(self, load_config): build_env = LocalBuildEnvironment(project=project, version=version, build={}) python_env = Virtualenv(version=version, build_env=build_env) config = load_yaml_config(version) - task = UpdateDocsTaskStep(build_env=build_env, project=project, python_env=python_env, - version=version, search=False, localmedia=False, config=config) + task = UpdateDocsTaskStep( + build_env=build_env, project=project, python_env=python_env, + version=version, config=config + ) task.build_docs() # The HTML and the Epub format were built. @@ -128,8 +168,10 @@ def test_build_respects_yaml(self, load_config): python_env = Virtualenv(version=version, build_env=build_env) config = load_yaml_config(version) - task = UpdateDocsTaskStep(build_env=build_env, project=project, python_env=python_env, - version=version, search=False, localmedia=False, config=config) + task = UpdateDocsTaskStep( + build_env=build_env, project=project, python_env=python_env, + version=version, config=config + ) task.build_docs() # The HTML and the Epub format were built. @@ -159,8 +201,10 @@ def test_build_pdf_latex_failures(self, load_config): build_env = LocalBuildEnvironment(project=project, version=version, build={}) python_env = Virtualenv(version=version, build_env=build_env) config = load_yaml_config(version) - task = UpdateDocsTaskStep(build_env=build_env, project=project, python_env=python_env, - version=version, search=False, localmedia=False, config=config) + task = UpdateDocsTaskStep( + build_env=build_env, project=project, python_env=python_env, + version=version, config=config + ) # Mock out the separate calls to Popen using an iterable side_effect returns = [ @@ -203,8 +247,10 @@ def test_build_pdf_latex_not_failure(self, load_config): build_env = LocalBuildEnvironment(project=project, version=version, build={}) python_env = Virtualenv(version=version, build_env=build_env) config = load_yaml_config(version) - task = UpdateDocsTaskStep(build_env=build_env, project=project, python_env=python_env, - version=version, search=False, localmedia=False, config=config) + task = UpdateDocsTaskStep( + build_env=build_env, project=project, python_env=python_env, + version=version, config=config + ) # Mock out the separate calls to Popen using an iterable side_effect returns = [