rougail-tutorials_builder/build.py

134 lines
6.4 KiB
Python
Raw Normal View History

2024-07-21 11:27:47 +02:00
#!/usr/bin/env python3
from pathlib import Path
from ruamel.yaml import YAML
from ansi2html import Ansi2HTMLConverter
from rougail import RougailConfig, Rougail
from rougail.output_exporter import RougailOutputExporter
from rougail.user_data_file import RougailUserDataFile
from rougail.output_doc import RougailOutputDoc
NUM="50"
if __name__ == "__main__":
rougailconfig = RougailConfig.copy()
rougailconfig['main_dictionaries'] = ['firefox']
rougailconfig['default_dictionary_format_version'] = '1.1'
if Path('foxyproxy').is_dir():
has_foxyproxy = False
rougailconfig['main_namespace'] = 'Firefox'
rougailconfig['extra_dictionaries'] = {'FoxyProxy': ['foxyproxy']}
else:
has_foxyproxy = True
rougailconfig['main_namespace'] = None
# rougailconfig['tiramisu_cache'] = "cache.py"
# rougail = Rougail(rougailconfig)
# config = rougail.get_config()
# print(config.value.get())
rougailconfig['step.output'] = 'doc'
rougailconfig['doc.output_format'] = 'github'
rougailconfig['doc.title_level'] = 3
inventory = RougailOutputDoc(rougailconfig=rougailconfig)
rougailconfig['step.output'] = 'exporter'
header = inventory.formater.header()
doc = ''
yaml = YAML()
namespace = 'firefox'
file_found = False
subdoc = ''
if rougailconfig['main_namespace']:
all_dirs = [[rougailconfig['main_dictionaries']], rougailconfig['extra_dictionaries'].values()]
else:
all_dirs = [[rougailconfig['main_dictionaries']]]
for r in all_dirs:
for dirs in r:
for d in dirs:
files = list(Path(d).iterdir())
files.sort()
for f in files:
namespace = f.parent.name
file_found = True
if f.name.endswith('.yml') or f.name.endswith('.yaml'):
subdoc += inventory.formater.title(str(f), 2)
with f.open(encoding="utf8") as file_fh:
objects = yaml.load(file_fh)
subdoc += inventory.formater.yaml(objects)
# doc += f'![{namespace.capitalize()} Proxy setting]({namespace}.png)\n'
doc += f'<img src="{namespace}.png" width=50% height=50% alt="{namespace.capitalize()} Proxy setting"/>\n\n'
with Path('summary.md').open('r') as sfh:
summary = sfh.read()
doc_file = Path('README.md')
doc = header + inventory.formater.title('Summary', 1) + '\n' + summary + '\n\n' + inventory.formater.title('Structural files', 1) + doc + '\n' + subdoc
with doc_file.open('r') as docfh:
doc += inventory.formater.title('Description', 2) + docfh.read()
if file_found:
doc += inventory.formater.title('Generated documentation', 2)
if has_foxyproxy:
cmd = f"foo@bar:~$ rougail -v 1.1 -m firefox -o doc -do github"
else:
cmd = f"foo@bar:~$ rougail -v 1.1 -m firefox -n Firefox -e FoxyProxy -d 1 foxyproxy -o doc -do github"
doc += f'```console\n{cmd}\n```\n'
doc += inventory.gen_doc()
#
config = Path('config')
if config.is_dir():
doc += inventory.formater.title('User data', 1)
configs = list(config.iterdir())
configs.sort()
for idx, dirname in enumerate(configs):
for filename in dirname.iterdir():
if filename.name.endswith('.yml') or filename.name.endswith('.yaml'):
doc += inventory.formater.title(f'Example {idx + 1}', 2)
with filename.open(encoding="utf8") as file_fh:
objects = yaml.load(file_fh)
doc += inventory.formater.title(str(filename), 3)
doc += inventory.formater.yaml(objects)
readme = dirname / 'README.md'
if readme.is_file():
doc += inventory.formater.title('Description', 3)
with readme.open() as fh:
doc += fh.read() + '\n\n'
rougail = Rougail(rougailconfig)
tiramisu_config = rougail.get_config()
rougailconfig['step.user_data'] = ['file']
rougailconfig['file.filename'] = str(filename.absolute())
data = RougailUserDataFile(tiramisu_config, rougailconfig=rougailconfig)
data.read()
export = RougailOutputExporter(tiramisu_config, rougailconfig=rougailconfig)
export.errors = data.errors
export.warnings = data.warnings
export.exporter()
with export.formater.console.capture() as capture:
export.print()
conv = Ansi2HTMLConverter(inline=True)
doc += inventory.formater.title('Output', 3)
if has_foxyproxy:
cmd = f"foo@bar:~$ rougail -v 1.1 -m firefox -u file -ff {filename}"
else:
cmd = f"foo@bar:~$ rougail -v 1.1 -m firefox -n Firefox -e FoxyProxy -d 1 foxyproxy -u file -ff {filename}"
doc += f"```console\n{cmd}\n```\n"
doc += '<pre>' + conv.convert(capture.get(), full=False) + "</pre>\n"
if (dirname / 'read_write').is_file():
rougailconfig['exporter.read_write'] = True
export = RougailOutputExporter(tiramisu_config, rougailconfig=rougailconfig)
export.exporter()
with export.formater.console.capture() as capture:
export.print()
conv = Ansi2HTMLConverter(inline=True)
doc += inventory.formater.title('Output in read write mode', 3)
if has_foxyproxy:
cmd = f"foo@bar:~$ rougail -v 1.1 -m firefox -u file -ff {filename} --exporter.read_write"
else:
cmd = f"foo@bar:~$ rougail -v 1.1 -m firefox -n Firefox -e FoxyProxy -d 1 foxyproxy -u file -ff {filename} --exporter.read_write"
doc += f"```console\n{cmd}\n```\n"
doc += '<pre>' + conv.convert(capture.get(), full=False) + "</pre>\n"
#
with doc_file.open('w') as docfh:
docfh.write(doc)
with doc_file.open('w') as docfh:
docfh.write(doc)