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))
|
generator.set_schema(yaml.load(sf,Loader=yaml.Loader))
|
||||||
|
|
||||||
with open(args.book) as bf:
|
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
|
# verbose command line mode
|
||||||
elif args.schema and args.meta and len(args.fields) > 0:
|
elif args.schema and args.meta and len(args.fields) > 0:
|
||||||
|
|
||||||
generator = MetaGenerator()
|
# get actual fields
|
||||||
|
|
||||||
actual_fields = []
|
actual_fields = []
|
||||||
|
|
||||||
if os.path.isfile(args.fields[0]):
|
if os.path.isfile(args.fields[0]):
|
||||||
|
@ -78,15 +102,26 @@ class CourseBuilder:
|
||||||
actual_fields = args.fields
|
actual_fields = args.fields
|
||||||
|
|
||||||
|
|
||||||
|
# get schema
|
||||||
|
actual_schema = None
|
||||||
with open(args.schema) as f:
|
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:
|
for m in args.meta:
|
||||||
with open(m) as fm:
|
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)
|
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:
|
else:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import string
|
import os,string,sys
|
||||||
|
import yaml
|
||||||
|
|
||||||
class MetaGenerator:
|
class MetaGenerator:
|
||||||
|
|
||||||
|
@ -91,19 +92,22 @@ class MetaGenerator:
|
||||||
return [k,', '.join(parts)]
|
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 = []
|
table_items = []
|
||||||
|
|
||||||
# iterate over requested fields
|
# iterate over requested fields
|
||||||
for field in fields:
|
for field in fields:
|
||||||
# correlate with schema and append
|
try:
|
||||||
match self.__schema[field]['type']:
|
# correlate with schema and append
|
||||||
case 'str': table_items.append(self.process_str(meta,field,lang))
|
match self.__schema[field]['type']:
|
||||||
case 'enum': table_items.append(self.process_enum(meta,field,lang))
|
case 'str': table_items.append(self.process_str(meta,field,lang))
|
||||||
case 'int' | 'num' : table_items.append(self.process_num(meta,field,lang))
|
case 'enum': table_items.append(self.process_enum(meta,field,lang))
|
||||||
case 'multinum' : table_items.append(self.process_multinum(meta,field,lang))
|
case 'int' | 'num' : table_items.append(self.process_num(meta,field,lang))
|
||||||
case 'multikey': table_items.append(self.process_multikey(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?
|
# maybe return tableitems as np.Dataframe?
|
||||||
return table_items
|
return table_items
|
||||||
|
@ -118,29 +122,33 @@ class MetaGenerator:
|
||||||
# # conventional MD mode
|
# # conventional MD mode
|
||||||
# MarkdownGenerator.generate(table_items,pagebreak,createTitle,header_level=header_level)
|
# MarkdownGenerator.generate(table_items,pagebreak,createTitle,header_level=header_level)
|
||||||
|
|
||||||
def process_book_section(self,section,lang='de'):
|
# def process_book_section(self,section,lang='de'):
|
||||||
pass
|
# 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']:
|
# for bi in book['book']:
|
||||||
if 'fields' in bi:
|
# if 'fields' in bi:
|
||||||
actual_fields = bi['fields']
|
# actual_fields = bi['fields']
|
||||||
if 'sections' in bi:
|
# if 'sections' in bi:
|
||||||
for section in bi['sections']:
|
# for section in bi['sections']:
|
||||||
if 'text' in section:
|
# if 'text' in section:
|
||||||
print(section['text'][lang])
|
# print(section['text'][lang])
|
||||||
if 'modules' in section:
|
# if 'modules' in section:
|
||||||
for m in section['modules']:
|
# for m in section['modules']:
|
||||||
mod_path = os.path.join(os.path.dirname(bookpath),m)
|
# mod_path = os.path.join(os.path.dirname(bookpath),m)
|
||||||
|
|
||||||
with open(mod_path) as fm:
|
# with open(mod_path) as fm:
|
||||||
try:
|
# try:
|
||||||
self.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=lang,pagebreak=pagebreak,createTitle=create_title,header_level=header_level)
|
# table_items = 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)
|
# 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:
|
debug-markdown:
|
||||||
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -l de -f name credits
|
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:
|
debug:
|
||||||
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml
|
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ book:
|
||||||
- content
|
- content
|
||||||
- form-of-instruction
|
- form-of-instruction
|
||||||
- prerequisites
|
- prerequisites
|
||||||
- media-of-instruction
|
- teaching-material
|
||||||
- author-of-indenture
|
- author-of-indenture
|
||||||
- used-in
|
- used-in
|
||||||
- workload
|
- workload
|
||||||
|
@ -28,6 +28,10 @@ book:
|
||||||
en: "## compulsory courses {.unnumbered}"
|
en: "## compulsory courses {.unnumbered}"
|
||||||
- modules:
|
- modules:
|
||||||
- mod.cg.yaml
|
- mod.cg.yaml
|
||||||
|
- text:
|
||||||
|
de: "## Wahlbereich {.unnumbered}"
|
||||||
|
en: "## elective courses {.unnumbered}"
|
||||||
|
- modules:
|
||||||
|
- mod.interactsys.yaml
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ fields:
|
||||||
- content
|
- content
|
||||||
- form-of-instruction
|
- form-of-instruction
|
||||||
- prerequisites
|
- prerequisites
|
||||||
- media-of-instruction
|
- teaching-material
|
||||||
- author-of-indenture
|
- author-of-indenture
|
||||||
- used-in
|
- used-in
|
||||||
- workload
|
- workload
|
||||||
|
|
|
@ -74,7 +74,7 @@ content:
|
||||||
* Overview visualizations
|
* Overview visualizations
|
||||||
* Graphical User Interfaces
|
* Graphical User Interfaces
|
||||||
|
|
||||||
media-of-instruction:
|
teaching-material:
|
||||||
de: |
|
de: |
|
||||||
* H5P Lernmodule
|
* H5P Lernmodule
|
||||||
* Lernforum
|
* Lernforum
|
||||||
|
|
|
@ -61,7 +61,7 @@ content:
|
||||||
* evaluation methods of interactive systems
|
* evaluation methods of interactive systems
|
||||||
* statistical methods for UX design
|
* statistical methods for UX design
|
||||||
|
|
||||||
media-of-instruction:
|
teaching-material:
|
||||||
de: |
|
de: |
|
||||||
H5P Lernmodule, Lernforum und Übungen am PC
|
H5P Lernmodule, Lernforum und Übungen am PC
|
||||||
|
|
||||||
|
@ -101,6 +101,9 @@ workload:
|
||||||
|
|
||||||
form-of-exam:
|
form-of-exam:
|
||||||
value: alternative
|
value: alternative
|
||||||
|
spec:
|
||||||
|
de:
|
||||||
|
en:
|
||||||
|
|
||||||
frequency:
|
frequency:
|
||||||
value: once_per_year
|
value: once_per_year
|
||||||
|
|
|
@ -142,7 +142,7 @@ prerequisites:
|
||||||
#
|
#
|
||||||
# Wie können die Studierenden sich auf die Teilnahme an diesem Modul vorbereiten?
|
# Wie können die Studierenden sich auf die Teilnahme an diesem Modul vorbereiten?
|
||||||
#
|
#
|
||||||
media-of-instruction:
|
teaching-material:
|
||||||
type: str
|
type: str
|
||||||
label: {
|
label: {
|
||||||
de: "Literatur und multimediale Lehr- und Lernprogramme",
|
de: "Literatur und multimediale Lehr- und Lernprogramme",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue