diff --git a/coursebuilder/__main__.py b/coursebuilder/__main__.py index bc36a3d..1c55f5d 100644 --- a/coursebuilder/__main__.py +++ b/coursebuilder/__main__.py @@ -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') diff --git a/coursebuilder/metagenerator.py b/coursebuilder/parser.py similarity index 69% rename from coursebuilder/metagenerator.py rename to coursebuilder/parser.py index 4d3ef52..2b59e11 100644 --- a/coursebuilder/metagenerator.py +++ b/coursebuilder/parser.py @@ -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 \ No newline at end of file diff --git a/test/Makefile b/test/Makefile index 1a11f91..c83469e 100644 --- a/test/Makefile +++ b/test/Makefile @@ -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 \ No newline at end of file diff --git a/test/schema.yaml b/test/schema.yaml index 8d54fab..e38783c 100644 --- a/test/schema.yaml +++ b/test/schema.yaml @@ -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 " #