repair book mode with refactored rendering

This commit is contained in:
Hartmut Seichter 2024-05-03 07:42:51 +02:00
parent 35df5e2aa1
commit 5a4b2c8f3a
8 changed files with 94 additions and 40 deletions

View file

@ -61,14 +61,38 @@ class CourseBuilder:
generator.set_schema(yaml.load(sf,Loader=yaml.Loader))
with open(args.book) as bf:
generator.process_book(yaml.load(bf,Loader=yaml.Loader),os.path.abspath(args.book),lang=args.lang,pagebreak=args.pagebreak,create_title=args.title,header_level=args.level)
actual_fields = []
book = yaml.load(bf,Loader=yaml.Loader)
book_path = os.path.abspath(args.book)
for bi in book['book']:
if 'fields' in bi:
actual_fields = bi['fields']
if 'sections' in bi:
for section in bi['sections']:
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:
generator = MetaGenerator()
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)
# verbose command line mode
elif args.schema and args.meta and len(args.fields) > 0:
generator = MetaGenerator()
# get actual fields
actual_fields = []
if os.path.isfile(args.fields[0]):
@ -78,15 +102,26 @@ class CourseBuilder:
actual_fields = args.fields
# get schema
actual_schema = None
with open(args.schema) as f:
generator.set_schema(yaml.load(f,Loader=yaml.Loader))
actual_schema = yaml.load(f,Loader=yaml.Loader)
# iterate through meta files
for m in args.meta:
with open(m) as fm:
generator = MetaGenerator()
generator.set_schema(actual_schema)
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,template=args.template)
print(table_items)
if args.template:
TemplateGenerator.generate(table_items)
else:
MarkdownGenerator.generate(table_items,pagebreak=args.pagebreak,title=args.title,header_level=args.level)
# print(table_items)
else:
parser.print_help()

View file

@ -1,4 +1,5 @@
import string
import os,string,sys
import yaml
class MetaGenerator:
@ -91,19 +92,22 @@ class MetaGenerator:
return [k,', '.join(parts)]
def process(self,meta,fields = [],lang = 'de',pagebreak = False,createTitle=False,header_level=1,template=None) -> []:
def process(self,meta,fields = [],lang = 'de',pagebreak = False,createTitle=False,header_level=1,template=None):
table_items = []
# iterate over requested fields
for field in fields:
# correlate with schema and append
match self.__schema[field]['type']:
case 'str': table_items.append(self.process_str(meta,field,lang))
case 'enum': table_items.append(self.process_enum(meta,field,lang))
case 'int' | 'num' : table_items.append(self.process_num(meta,field,lang))
case 'multinum' : table_items.append(self.process_multinum(meta,field,lang))
case 'multikey': table_items.append(self.process_multikey(meta,field,lang))
try:
# correlate with schema and append
match self.__schema[field]['type']:
case 'str': table_items.append(self.process_str(meta,field,lang))
case 'enum': table_items.append(self.process_enum(meta,field,lang))
case 'int' | 'num' : table_items.append(self.process_num(meta,field,lang))
case 'multinum' : table_items.append(self.process_multinum(meta,field,lang))
case 'multikey': table_items.append(self.process_multikey(meta,field,lang))
except Exception as exp:
print(field,exp,exp.args)
# maybe return tableitems as np.Dataframe?
return table_items
@ -118,29 +122,33 @@ class MetaGenerator:
# # conventional MD mode
# MarkdownGenerator.generate(table_items,pagebreak,createTitle,header_level=header_level)
def process_book_section(self,section,lang='de'):
pass
# def process_book_section(self,section,lang='de'):
# pass
def process_book(self,book,bookpath,create_title,pagebreak,lang='de',header_level=2):
# book mode
# def process_book(self,book,bookpath,create_title,pagebreak,lang='de',header_level=2):
actual_fields = []
# actual_fields = []
for bi in book['book']:
if 'fields' in bi:
actual_fields = bi['fields']
if 'sections' in bi:
for section in bi['sections']:
if 'text' in section:
print(section['text'][lang])
if 'modules' in section:
for m in section['modules']:
mod_path = os.path.join(os.path.dirname(bookpath),m)
# for bi in book['book']:
# if 'fields' in bi:
# actual_fields = bi['fields']
# if 'sections' in bi:
# for section in bi['sections']:
# if 'text' in section:
# print(section['text'][lang])
# if 'modules' in section:
# for m in section['modules']:
# mod_path = os.path.join(os.path.dirname(bookpath),m)
with open(mod_path) as fm:
try:
self.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=lang,pagebreak=pagebreak,createTitle=create_title,header_level=header_level)
except:
print(f'Error in {mod_path}',file=sys.stderr)
# with open(mod_path) as fm:
# try:
# table_items = self.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=lang,pagebreak=pagebreak,createTitle=create_title,header_level=header_level)
# print(table_items)
# except Exception as exc:
# print(f'{type(exc).__name__} in {mod_path}: {exc}',file=sys.stderr)

View file

@ -19,6 +19,10 @@ debug-template:
debug-markdown:
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -l de -f name credits
debug-book:
python ${coursebuilder} -s schema.yaml -b book.yaml -l de
debug:
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml

View file

@ -11,7 +11,7 @@ book:
- content
- form-of-instruction
- prerequisites
- media-of-instruction
- teaching-material
- author-of-indenture
- used-in
- workload
@ -28,6 +28,10 @@ book:
en: "## compulsory courses {.unnumbered}"
- modules:
- mod.cg.yaml
- text:
de: "## Wahlbereich {.unnumbered}"
en: "## elective courses {.unnumbered}"
- modules:
- mod.interactsys.yaml

View file

@ -5,7 +5,7 @@ fields:
- content
- form-of-instruction
- prerequisites
- media-of-instruction
- teaching-material
- author-of-indenture
- used-in
- workload

View file

@ -74,7 +74,7 @@ content:
* Overview visualizations
* Graphical User Interfaces
media-of-instruction:
teaching-material:
de: |
* H5P Lernmodule
* Lernforum

View file

@ -61,7 +61,7 @@ content:
* evaluation methods of interactive systems
* statistical methods for UX design
media-of-instruction:
teaching-material:
de: |
H5P Lernmodule, Lernforum und Übungen am PC
@ -101,6 +101,9 @@ workload:
form-of-exam:
value: alternative
spec:
de:
en:
frequency:
value: once_per_year

View file

@ -142,7 +142,7 @@ prerequisites:
#
# Wie können die Studierenden sich auf die Teilnahme an diesem Modul vorbereiten?
#
media-of-instruction:
teaching-material:
type: str
label: {
de: "Literatur und multimediale Lehr- und Lernprogramme",