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 tablegenerator import TableGenerator
from markdowngenerator import MarkdownGenerator from markdowngenerator import MarkdownGenerator
from templategenerator import TemplateGenerator from templategenerator import TemplateGenerator
from metagenerator import MetaGenerator from parser import Parser
class CourseBuilder: 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('-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('-s','--schema',help="using provided schema")
parser.add_argument('-p','--pagebreak',action="store_true",help="add a pagebreak after each module") 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('-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('--level',type=int,default=1,help="level of header tags")
parser.add_argument('--table-gen',type=str,default=None,help='runs table generator') 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 # book mode with predefined setting from a book file
if args.book and args.schema: if args.book and args.schema:
generator = MetaGenerator() generator = Parser()
with open(args.schema) as sf: with open(args.schema) as sf:
generator.set_schema(yaml.load(sf,Loader=yaml.Loader)) generator.set_schema(yaml.load(sf,Loader=yaml.Loader))
@ -115,18 +115,28 @@ class CourseBuilder:
for m in args.meta: for m in args.meta:
with open(m) as fm: with open(m) as fm:
generator = MetaGenerator() generator = Parser()
generator.set_schema(actual_schema) generator.set_schema(actual_schema)
meta = yaml.load(fm,Loader=yaml.Loader) meta = yaml.load(fm,Loader=yaml.Loader)
table_items = generator.process(meta=meta,fields=actual_fields,lang=args.lang) 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) df = pd.DataFrame(table_items)
# use first column for
df.columns = df.iloc[0] df.columns = df.iloc[0]
df = df[1:] 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(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: if args.pagebreak:
print('\\pagebreak') print('\\pagebreak')

View file

@ -1,6 +1,6 @@
import os,string,sys import os,string,sys
class MetaGenerator: class Parser:
def __init__(self) -> None: def __init__(self) -> None:
self.__schema = None self.__schema = None
@ -109,46 +109,4 @@ class MetaGenerator:
print(field,' not resolvable in ',self.__schema,exp) print(field,' not resolvable in ',self.__schema,exp)
# maybe return tableitems as np.Dataframe? # maybe return tableitems as np.Dataframe?
return table_items 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)

View file

@ -22,17 +22,8 @@ all: ${target_de} ${target_en}
clean: clean:
rm ${target_de} ${target_en} 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: 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 .PHONY: clean

View file

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