Adding get_builder_class to have clearer interface on how to retrieve a particular builder. Also removing Project.doc_builder method because it's no longer used.

front-end-standardization
Gregor Müllegger 2015-06-11 16:29:26 +02:00
parent 914eed143a
commit dd058e8dac
4 changed files with 21 additions and 18 deletions

View File

@ -5,7 +5,7 @@ from django.conf import settings
mkdocs = import_module(getattr(settings, 'MKDOCS_BACKEND', 'doc_builder.backends.mkdocs'))
sphinx = import_module(getattr(settings, 'SPHINX_BACKEND', 'doc_builder.backends.sphinx'))
loading = {
BUILDER_BY_NAME = {
# Possible HTML Builders
'sphinx': sphinx.HtmlBuilder,
'sphinx_htmldir': sphinx.HtmlDirBuilder,
@ -19,3 +19,7 @@ loading = {
'mkdocs': mkdocs.MkdocsHTML,
'mkdocs_json': mkdocs.MkdocsJSON,
}
def get_builder_class(name):
return BUILDER_BY_NAME[name]

View File

@ -27,7 +27,6 @@ from tastyapi.slum import api
from vcs_support.base import VCSProject
from vcs_support.backends import backend_cls
from vcs_support.utils import Lock, NonBlockingLock
from doc_builder.loader import loading
log = logging.getLogger(__name__)
@ -433,9 +432,6 @@ class Project(models.Model):
# Doc PATH:
# MEDIA_ROOT/slug/checkouts/version/<repo>
def doc_builder(self):
return loading.get(self.documentation_type)
@property
def doc_path(self):
return os.path.join(settings.DOCROOT, self.slug.replace('_', '-'))

View File

@ -18,7 +18,7 @@ from slumber.exceptions import HttpClientError
from builds.models import Build, Version
from core.utils import send_email, run_on_app_servers
from doc_builder.loader import loading as builder_loading
from doc_builder.loader import get_builder_class
from doc_builder.base import restoring_chdir
from doc_builder.environments import DockerEnvironment
from projects.exceptions import ProjectImportError
@ -359,7 +359,8 @@ def setup_environment(version):
requirements_file_path = project.requirements_file
checkout_path = project.checkout_path(version.slug)
if not requirements_file_path:
docs_dir = builder_loading.get(project.documentation_type)(version).docs_dir()
builder_class = get_builder_class(project.documentation_type)
docs_dir = builder_class(version).docs_dir()
for path in [docs_dir, '']:
for req_file in ['pip_requirements.txt', 'requirements.txt']:
test_path = os.path.join(checkout_path, path, req_file)
@ -410,7 +411,7 @@ def build_docs(version, force, pdf, man, epub, dash, search, localmedia):
with project.repo_nonblockinglock(version=version,
max_lock_age=getattr(settings, 'REPO_LOCK_SECONDS', 30)):
html_builder = builder_loading.get(project.documentation_type)(version)
html_builder = get_builder_class(project.documentation_type)(version)
if force:
html_builder.force()
html_builder.append_conf()
@ -433,7 +434,7 @@ def build_docs(version, force, pdf, man, epub, dash, search, localmedia):
if 'mkdocs' in project.documentation_type:
if search:
try:
search_builder = builder_loading.get('mkdocs_json')(version)
search_builder = get_builder_class('mkdocs_json')(version)
results['search'] = search_builder.build()
if results['search'][0] == 0:
search_builder.move()
@ -446,8 +447,7 @@ def build_docs(version, force, pdf, man, epub, dash, search, localmedia):
# server.
if search:
try:
search_builder = builder_loading.get(
'sphinx_search')(version)
search_builder = get_builder_class('sphinx_search')(version)
results['search'] = search_builder.build()
if results['search'][0] == 0:
# Copy json for safe keeping
@ -458,8 +458,7 @@ def build_docs(version, force, pdf, man, epub, dash, search, localmedia):
# Local media builder for singlepage HTML download archive
if localmedia:
try:
localmedia_builder = builder_loading.get(
'sphinx_singlehtmllocalmedia')(version)
localmedia_builder = get_builder_class('sphinx_singlehtmllocalmedia')(version)
results['localmedia'] = localmedia_builder.build()
if results['localmedia'][0] == 0:
localmedia_builder.move()
@ -470,7 +469,7 @@ def build_docs(version, force, pdf, man, epub, dash, search, localmedia):
# Optional build steps
if version.project.slug not in HTML_ONLY and not project.skip:
if project.sphinx_enable_pdf_build:
pdf_builder = builder_loading.get('sphinx_pdf')(version)
pdf_builder = get_builder_class('sphinx_pdf')(version)
results['pdf'] = pdf_builder.build()
# Always move pdf results even when there's an error.
# if pdf_results[0] == 0:
@ -478,7 +477,7 @@ def build_docs(version, force, pdf, man, epub, dash, search, localmedia):
else:
results['pdf'] = fake_results
if project.sphinx_enable_epub_build:
epub_builder = builder_loading.get('sphinx_epub')(version)
epub_builder = get_builder_class('sphinx_epub')(version)
results['epub'] = epub_builder.build()
if results['epub'][0] == 0:
epub_builder.move()

View File

@ -6,6 +6,7 @@ import mock
from projects.tasks import build_docs
from rtd_tests.factories.projects_factories import ProjectFactory
from doc_builder.loader import get_builder_class
class MockProcess(object):
@ -81,7 +82,8 @@ class BuildTests(TestCase):
False,
)
builder = project.doc_builder()(version)
builder_class = get_builder_class(project.documentation_type)
builder = builder_class(version)
self.assertIn(builder.sphinx_builder,
str(mock_Popen.call_args_list[1])
)
@ -93,7 +95,8 @@ class BuildTests(TestCase):
# Normal build
project = ProjectFactory(allow_comments=True)
version = project.versions.all()[0]
builder = project.doc_builder()(version)
builder_class = get_builder_class(project.documentation_type)
builder = builder_class(version)
self.assertEqual(builder.sphinx_builder, 'readthedocs-comments')
def test_builder_no_comments(self):
@ -101,5 +104,6 @@ class BuildTests(TestCase):
# Normal build
project = ProjectFactory(allow_comments=False)
version = project.versions.all()[0]
builder = project.doc_builder()(version)
builder_class = get_builder_class(project.documentation_type)
builder = builder_class(version)
self.assertEqual(builder.sphinx_builder, 'readthedocs')