repurpose title to make it configurable from outside

This commit is contained in:
Hartmut Seichter 2024-05-09 23:38:20 +02:00
parent 4fca7c7bae
commit 85abfeb743
4 changed files with 21 additions and 62 deletions

View file

@ -20,7 +20,7 @@ import pandas as pd
from tablegenerator import TableGenerator
from markdowngenerator import MarkdownGenerator
from templategenerator import TemplateGenerator
from metagenerator import MetaGenerator
from parser import Parser
class CourseBuilder:
@ -35,7 +35,7 @@ class CourseBuilder:
parser.add_argument('-f','--fields',help="Fields to be used, the table will be build accordingly",action="extend", nargs="+", type=str)
parser.add_argument('-s','--schema',help="using provided schema")
parser.add_argument('-p','--pagebreak',action="store_true",help="add a pagebreak after each module")
parser.add_argument('-t','--title',action="store_true",help="take first value in list as title")
parser.add_argument('--title',type=str,default=None,help="template for title")
parser.add_argument('-b','--book',type=str,help="process a whole curriculum book with sections")
parser.add_argument('--level',type=int,default=1,help="level of header tags")
parser.add_argument('--table-gen',type=str,default=None,help='runs table generator')
@ -59,7 +59,7 @@ class CourseBuilder:
# book mode with predefined setting from a book file
if args.book and args.schema:
generator = MetaGenerator()
generator = Parser()
with open(args.schema) as sf:
generator.set_schema(yaml.load(sf,Loader=yaml.Loader))
@ -115,18 +115,28 @@ class CourseBuilder:
for m in args.meta:
with open(m) as fm:
generator = MetaGenerator()
generator = Parser()
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?
# return [ { name: Computergraphik }, keys = { name: Modulname } ]
# get the dataframe
df = pd.DataFrame(table_items)
# use first column for
df.columns = df.iloc[0]
df = df[1:]
if args.title != None:
print(args.title.format(df.columns[1]),'\n')
print(df.to_markdown(tablefmt='grid', index=False, maxcolwidths=[args.maxcol,None]))
print('\n')
print('\n') # always add a newline after the table
if args.pagebreak:
print('\\pagebreak')

View file

@ -1,6 +1,6 @@
import os,string,sys
class MetaGenerator:
class Parser:
def __init__(self) -> None:
self.__schema = None
@ -109,46 +109,4 @@ class MetaGenerator:
print(field,' not resolvable in ',self.__schema,exp)
# maybe return tableitems as np.Dataframe?
return table_items
# if template != None:
# # use template generator
# TemplateGenerator.generate(table_items,pagebreak,createTitle,header_level=header_level)
# pass
# else:
# # conventional MD mode
# MarkdownGenerator.generate(table_items,pagebreak,createTitle,header_level=header_level)
# def process_book_section(self,section,lang='de'):
# pass
# book mode
# def process_book(self,book,bookpath,create_title,pagebreak,lang='de',header_level=2):
# 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)
# 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)
return table_items

View file

@ -22,17 +22,8 @@ all: ${target_de} ${target_en}
clean:
rm ${target_de} ${target_en}
# debug-template:
# python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -l de -f name credits goal content --template "$$name | $$credits"
# 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 mod.interactsys.yaml mod.test.yaml -l de -f name credits goal content | pandoc ${target_flags} -V lang:de -o ${target_de}
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}
.PHONY: clean

View file

@ -83,11 +83,11 @@ content:
# Es sind nur Werte aus der Prüfungsordung zugelassen
#
form-of-instruction:
type: multikey
label: {
de: "Lehrform(en)",
en: "form of instruction"
}
type: multikey
keys: {
'lecture' : {
de: "Vorlesung",
@ -188,8 +188,8 @@ credits:
de: "Kreditpunkte und Gewichtung der Note in der Gesamtnote"
}
template:
de: "${value}CP Gewichtung: ${value}CP von 120CP "
en: "${value}CP weight: ${value} / 120 "
de: "${value}CP, Gewichtung: ${value}CP von 120CP "
en: "${value}CP, weight: ${value} / 120 "
#