From 52c3ab5c37548a23e9098c839ce92198c1b84698 Mon Sep 17 00:00:00 2001 From: Hartmut Seichter Date: Thu, 16 May 2024 17:28:23 +0200 Subject: [PATCH] final refactor for book mode --- coursebuilder/__main__.py | 105 +++++++++++++++++--------------------- test/Makefile | 9 ++-- 2 files changed, 52 insertions(+), 62 deletions(-) diff --git a/coursebuilder/__main__.py b/coursebuilder/__main__.py index a26a6dc..eb3f5bf 100644 --- a/coursebuilder/__main__.py +++ b/coursebuilder/__main__.py @@ -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() diff --git a/test/Makefile b/test/Makefile index b605d0b..73a600a 100644 --- a/test/Makefile +++ b/test/Makefile @@ -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 \ No newline at end of file