From 6f51fbf76c5a75e4088ad37811beab72727ffe96 Mon Sep 17 00:00:00 2001 From: Hartmut Seichter Date: Thu, 25 Apr 2024 19:35:13 +0200 Subject: [PATCH 1/2] adding a proper exception handler to find actual problems in external files --- coursebuilder/__main__.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/coursebuilder/__main__.py b/coursebuilder/__main__.py index 2ce0fc5..f9cf2b1 100644 --- a/coursebuilder/__main__.py +++ b/coursebuilder/__main__.py @@ -13,7 +13,7 @@ actual values are kept in YAML files in order to version them with git. from argparse import ArgumentParser import yaml import string -import os +import os,sys from tablegenerator import TableGenerator from markdowngenerator import MarkdownGenerator @@ -145,7 +145,10 @@ class CourseBuilder: mod_path = os.path.join(os.path.dirname(bookpath),m) with open(mod_path) as fm: - self.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=lang,pagebreak=pagebreak,createTitle=create_title,header_level=header_level) + 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) From 28378e3819cc8b0a6560a095906818031850ee51 Mon Sep 17 00:00:00 2001 From: Hartmut Seichter Date: Wed, 1 May 2024 08:10:27 +0200 Subject: [PATCH 2/2] intermediate version --- TODO.md | 1 + coursebuilder/__main__.py | 19 ++++++++++++------- coursebuilder/markdowngenerator.py | 9 +++++---- coursebuilder/templategenerator.py | 11 +++++++++++ test/simple/Makefile | 11 ++++++++--- test/simple/book.yaml | 2 ++ 6 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 coursebuilder/templategenerator.py diff --git a/TODO.md b/TODO.md index 484edcc..610b7c8 100644 --- a/TODO.md +++ b/TODO.md @@ -5,3 +5,4 @@ * [x] fix overlong table cells (pandoc longtable only deals with overlong tables but not cells) * [ ] add a book mode for mixing input and headers (# Blah -m mod.cg.yaml) * [ ] table generator +* [ ] overlay of compulsory with other modes ... \ No newline at end of file diff --git a/coursebuilder/__main__.py b/coursebuilder/__main__.py index f9cf2b1..43f67db 100644 --- a/coursebuilder/__main__.py +++ b/coursebuilder/__main__.py @@ -17,14 +17,13 @@ import os,sys from tablegenerator import TableGenerator from markdowngenerator import MarkdownGenerator - +from templategenerator import TemplateGenerator class CourseBuilder: def __init__(self) -> None: self.__schema = None - def set_schema(self,schema = None): self.__schema = schema @@ -111,7 +110,7 @@ class CourseBuilder: return [k,', '.join(parts)] - def process(self,meta,fields = [],lang = 'de',pagebreak = False,createTitle=False,header_level=1): + def process(self,meta,fields = [],lang = 'de',pagebreak = False,createTitle=False,header_level=1,template=None): table_items = [] @@ -123,8 +122,13 @@ class CourseBuilder: case 'multinum' : table_items.append(self.process_multinum(meta,field,lang)) case 'multikey': table_items.append(self.process_multikey(meta,field,lang)) - mdg = MarkdownGenerator() - mdg.generate_markdown(table_items,pagebreak,createTitle,header_level=header_level) + 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 @@ -168,7 +172,7 @@ def main(): 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') - + parser.add_argument('--template',type=str,default=None,help='defines a template to be used with fields') # get arguments args = parser.parse_args() @@ -214,7 +218,8 @@ def main(): for m in args.meta: with open(m) as fm: - cb.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=args.lang,pagebreak=args.pagebreak,createTitle=args.title,header_level=args.level) + + cb.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) else: parser.print_help() diff --git a/coursebuilder/markdowngenerator.py b/coursebuilder/markdowngenerator.py index f7ff98a..ad78b49 100644 --- a/coursebuilder/markdowngenerator.py +++ b/coursebuilder/markdowngenerator.py @@ -4,11 +4,10 @@ import textwrap,itertools class MarkdownGenerator: - def __init__(self) -> None: - pass - def generate_markdown(self,ti,pagebreak = False,title = False,header_level = 1) -> str: + @staticmethod + def generate(ti,pagebreak = False,title = False,header_level = 1) -> str: line_length = 128 column_ratio= 0.28 @@ -16,6 +15,9 @@ class MarkdownGenerator: h_len = int(line_length * column_ratio) d_len = line_length-h_len + # + # generate title (currently the first one) + # if title: print('#' * header_level,ti[0][1],'\n') @@ -26,7 +28,6 @@ class MarkdownGenerator: # # this implements a Markdown Grid-Table # - for k,v in ti: if v == None: diff --git a/coursebuilder/templategenerator.py b/coursebuilder/templategenerator.py new file mode 100644 index 0000000..0e7a23a --- /dev/null +++ b/coursebuilder/templategenerator.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +import textwrap,itertools + + +class TemplateGenerator: + + @staticmethod + def generate(ti,pagebreak = False,title = False,header_level = 1) -> str: + print(ti) + pass \ No newline at end of file diff --git a/test/simple/Makefile b/test/simple/Makefile index 8ea5c11..02c04ef 100644 --- a/test/simple/Makefile +++ b/test/simple/Makefile @@ -1,17 +1,22 @@ + +coursebuilder := ../../coursebuilder + table.en.pdf: @echo "creating English version ..." - python ../../coursebuilder -s schema.yaml -m mod.cg.yaml -l en -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.en.pdf + python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l en -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.en.pdf table.de.pdf: @echo "creating German version ..." - python ../../coursebuilder -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.de.pdf + python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.de.pdf all: table.en.pdf table.de.pdf clean: rm -f table.en.pdf table.de.pdf +debug-list: + python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -l de -f name credits --template "" 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 diff --git a/test/simple/book.yaml b/test/simple/book.yaml index 6cd1b46..f8544df 100644 --- a/test/simple/book.yaml +++ b/test/simple/book.yaml @@ -29,3 +29,5 @@ book: - modules: - mod.cg.yaml + +