Files
scylladb/docs/_ext/scylladb_include_flag.py
David Garcia fea707033f docs: improve include flag directive
The include flag directive now treats missing content as info logs instead of warnings. This prevents build failures when the enterprise-specific content isn't yet available.

If the enterprise content is undefined, the directive automatically loads the open-source content. This ensures the end user has access to some content.

address comments

Closes scylladb/scylladb#19804
2024-08-20 12:21:39 +03:00

37 lines
1.2 KiB
Python

import os
from sphinx.directives.other import Include
from sphinx.util import logging
from docutils.parsers.rst import directives
LOGGER = logging.getLogger(__name__)
class IncludeFlagDirective(Include):
option_spec = Include.option_spec.copy()
option_spec['base_path'] = directives.unchanged
def run(self):
env = self.state.document.settings.env
base_path = self.options.get('base_path', '_common')
file_path = self.arguments[0]
if env.app.tags.has('enterprise'):
enterprise_path = os.path.join(base_path + "_enterprise", file_path)
_, enterprise_abs_path = env.relfn2path(enterprise_path)
if os.path.exists(enterprise_abs_path):
self.arguments[0] = enterprise_path
else:
LOGGER.info(f"Enterprise content not found: Skipping inclusion of {file_path}")
return []
else:
self.arguments[0] = os.path.join(base_path, file_path)
return super().run()
def setup(app):
app.add_directive('scylladb_include_flag', IncludeFlagDirective, override=True)
return {
"version": "0.1",
"parallel_read_safe": True,
"parallel_write_safe": True,
}