final refactor for book mode

This commit is contained in:
Hartmut Seichter 2024-05-16 17:28:23 +02:00
parent df1cff80d8
commit 52c3ab5c37
2 changed files with 52 additions and 62 deletions

View file

@ -22,6 +22,45 @@ from converter import Converter
class CourseBuilder:
@staticmethod
def generate(args):
if args.schema and args.meta and len(args.fields) > 0:
# get actual fields
actual_fields = []
# use a file instead of list
if os.path.isfile(args.fields[0]):
with open(args.fields[0]) as ff:
actual_fields = yaml.load(ff,Loader=yaml.Loader)['fields']
else:
actual_fields = args.fields
# get schema
actual_schema = None
with open(args.schema) as f:
actual_schema = yaml.load(f,Loader=yaml.Loader)
# iterate through meta files
for m in args.meta:
with open(m) as fm:
generator = Converter()
generator.set_schema(actual_schema)
meta = yaml.load(fm,Loader=yaml.Loader)
table_items = generator.process(meta=meta,fields=actual_fields,lang=args.lang)
if args.legacy:
MarkdownGenerator.generate_table_legacy(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.maxcol)
else:
MarkdownGenerator.generate_table(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.maxcol)
# MarkdownGenerator.generate(table_items,pagebreak=args.pagebreak,title=args.title,header_level=args.level)
@staticmethod
def run():
@ -77,67 +116,17 @@ class CourseBuilder:
if 'text' in section:
print(section['text'][args.lang])
if 'modules' in section:
for m in section['modules']:
mod_path = os.path.join(os.path.dirname(book_path),m)
with open(mod_path) as fm:
try:
table_items = generator.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=args.lang,pagebreak=args.pagebreak,createTitle=args.title,header_level=args.level)
MarkdownGenerator.generate(table_items,pagebreak=args.pagebreak,title=args.title,header_level=args.level)
except Exception as exc:
print(f'{type(exc).__name__} in {mod_path}: {exc}',file=sys.stderr)
args.fields = actual_fields
# expand filenames to be relative to the book
args.meta = [os.path.join(os.path.dirname(book_path),mod_path) for mod_path in section['modules']]
CourseBuilder.generate(args=args)
# verbose command line mode
elif args.schema and args.meta and len(args.fields) > 0:
# get actual fields
actual_fields = []
# use a file instead of list
if os.path.isfile(args.fields[0]):
with open(args.fields[0]) as ff:
actual_fields = yaml.load(ff,Loader=yaml.Loader)['fields']
else:
actual_fields = args.fields
# get schema
actual_schema = None
with open(args.schema) as f:
actual_schema = yaml.load(f,Loader=yaml.Loader)
# iterate through meta files
for m in args.meta:
with open(m) as fm:
generator = Converter()
generator.set_schema(actual_schema)
meta = yaml.load(fm,Loader=yaml.Loader)
table_items = generator.process(meta=meta,fields=actual_fields,lang=args.lang)
# TODO - something more processable for Pandas?
draft = [
{ 'name' : 'Modulname', 'lang' : 'de' },
{ 'credits' : '5 ECTS' },
]
draft_2 = {
}
if args.legacy:
MarkdownGenerator.generate_table_legacy(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.maxcol)
else:
MarkdownGenerator.generate_table(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.maxcol)
# MarkdownGenerator.generate(table_items,pagebreak=args.pagebreak,title=args.title,header_level=args.level)
elif args.schema:
CourseBuilder.generate(args=args)
else:
parser.print_help()

View file

@ -2,8 +2,9 @@
build_dir := build
target_en := ${build_dir}/table.en.pdf
target_de := ${build_dir}/table.de.pdf
target_de_book := ${build_dir}/curricullum.de.pdf
targets := ${target_de} ${target_en}
targets := ${target_de} ${target_en} ${target_de_book}
target_flags := --template pandoc-template/eisvogel.latex
@ -29,9 +30,9 @@ debug:
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml mod.test.yaml -p --title "## {}" -l de -f name credits goal content
# | pandoc ${target_flags} -V lang:de -o ${target_de}
debug-legacy:
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml mod.test.yaml -p --legacy --title "## {}" -l de -f name credits goal content
# | pandoc ${target_flags} -V lang:de -o ${target_de}
debug-book:
python ${coursebuilder} -s schema.yaml -b book.yaml -p --title "### {}" -l de --legacy | pandoc ${target_flags} -V lang:de -o ${target_de_book}
.PHONY: clean