sphinx_pyppeteer_builder/sphinx_pyppeteer_builder/__init__.py

127 lines
2.8 KiB
Python

#!/usr/bin/env python3
from copy import deepcopy
from .pyppeteer_builder import PyppeteerPDFBuilder
from typing import Dict, Any
from sphinx.application import Sphinx
from sphinx.util.osutil import make_filename
import pkg_resources
__version__ = pkg_resources.get_distribution(__package__).version
__version_info__ = tuple(int(v) for v in __version__.split('.'))
DEFAULT_PDF_OPTIONS = {
'printBackground': True,
'format': 'A4',
'margin': {
'top': '20mm',
'bottom': '20mm',
'left': '10mm',
'right': '10mm'
}
}
DEFAULT_PYPPETEER_ARGS = [
'--allow-file-access-from-file',
'--disable-web-security',
'--no-sandbox',
]
def on_config_inited(app, config):
""" Change config on the fly """
pdf_options = deepcopy(DEFAULT_PDF_OPTIONS)
pdf_options.update(app.config.pyppeteer_pdf_options)
app.config.pyppeteer_pdf_options = pdf_options
def setup(app: Sphinx) -> Dict[str, Any]:
app.setup_extension('sphinx.builders.html')
app.add_builder(PyppeteerPDFBuilder)
app.connect('config-inited', on_config_inited)
app.add_config_value(
'pyppeteer_theme_options',
lambda self: self.html_theme_options,
'pyppeteer'
)
app.add_config_value(
'pyppeteer_pdf_options',
DEFAULT_PDF_OPTIONS,
'pyppeteer'
)
app.add_config_value(
'pyppeteer_args',
DEFAULT_PYPPETEER_ARGS,
'pyppeteer'
)
app.add_config_value(
'pyppeteer_basename',
lambda self: make_filename(self.project),
'pyppeteer'
)
app.add_config_value(
'pyppeteer_theme',
lambda self: self.html_theme,
'pyppeteer'
)
app.add_config_value(
'pyppeteer_title',
lambda self: self.html_title,
'pyppeteer'
)
app.add_config_value(
'pyppeteer_theme_path',
lambda self: self.html_theme_path,
'pyppeteer'
)
app.add_config_value(
'pyppeteer_short_title',
lambda self: self.html_short_title,
'pyppeteer'
)
app.add_config_value(
'pyppeteer_style',
None,
'pyppeteer',
[str]
)
app.add_config_value(
'pyppeteer_css_files',
[],
'pyppeteer'
)
app.add_config_value(
'pyppeteer_show_copyright',
True,
'pyppeteer'
)
app.add_config_value(
'pyppeteer_show_sphinx',
True,
'pyppeteer'
)
app.add_config_value(
'pyppeteer_main_selector',
'',
'pyppeteer'
)
app.add_config_value(
'pyppeteer_footer_selector',
'',
'pyppeteer'
)
app.add_config_value(
'pyppeteer_header_selector',
'',
'pyppeteer'
)
return {
'version': __version__,
'parallel_read_safe': True,
'parallel_write_safe': True,
}