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
37 lines
1.2 KiB
Python
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,
|
|
}
|