repair book mode with refactored rendering
This commit is contained in:
parent
35df5e2aa1
commit
5a4b2c8f3a
8 changed files with 94 additions and 40 deletions
|
@ -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()
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import string
|
||||
import os,string,sys
|
||||
import yaml
|
||||
|
||||
class MetaGenerator:
|
||||
|
||||
|
@ -91,12 +92,13 @@ 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:
|
||||
try:
|
||||
# correlate with schema and append
|
||||
match self.__schema[field]['type']:
|
||||
case 'str': table_items.append(self.process_str(meta,field,lang))
|
||||
|
@ -104,6 +106,8 @@ class MetaGenerator:
|
|||
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)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ fields:
|
|||
- content
|
||||
- form-of-instruction
|
||||
- prerequisites
|
||||
- media-of-instruction
|
||||
- teaching-material
|
||||
- author-of-indenture
|
||||
- used-in
|
||||
- workload
|
||||
|
|
|
@ -74,7 +74,7 @@ content:
|
|||
* Overview visualizations
|
||||
* Graphical User Interfaces
|
||||
|
||||
media-of-instruction:
|
||||
teaching-material:
|
||||
de: |
|
||||
* H5P Lernmodule
|
||||
* Lernforum
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue