added multikey type
This commit is contained in:
parent
f35aa9e2ef
commit
35fbc4ff8c
5 changed files with 124 additions and 61 deletions
|
@ -17,30 +17,12 @@ import textwrap
|
|||
import string
|
||||
|
||||
|
||||
|
||||
class CourseBuilder:
|
||||
|
||||
class MarkdownGenerator:
|
||||
def __init__(self) -> None:
|
||||
self.__schema = None
|
||||
pass
|
||||
|
||||
|
||||
def set_schema(self,schema = None):
|
||||
self.__schema = schema
|
||||
|
||||
def get_template(self,field,lang='de'):
|
||||
if hasattr(self.__schema[field],'template'):
|
||||
return self.__schema[field]['template'][lang]
|
||||
else:
|
||||
return "$value"
|
||||
|
||||
|
||||
def is_translatable(self,field):
|
||||
if hasattr(self.__schema[field],'translatable'):
|
||||
return self.__schema[field]['translatable']
|
||||
else:
|
||||
return True
|
||||
|
||||
def generate_markdown(self,ti,pagebreak = False) -> str:
|
||||
def generate_markdown(self,ti,pagebreak = False,title = None) -> str:
|
||||
|
||||
line_length = 128
|
||||
column_ratio= 0.28
|
||||
|
@ -48,8 +30,8 @@ class CourseBuilder:
|
|||
h_len = int(line_length * column_ratio)
|
||||
d_len = line_length-h_len
|
||||
|
||||
# if title:
|
||||
# print('#',desc[lang]['name'],'\n')
|
||||
if title:
|
||||
print('#',title,'\n')
|
||||
|
||||
print(''.join(['+',"".ljust(h_len,'-'),'+',"".ljust(d_len,'-'),'+']))
|
||||
|
||||
|
@ -79,13 +61,37 @@ class CourseBuilder:
|
|||
if pagebreak:
|
||||
print('\n\\newpage')
|
||||
|
||||
class CourseBuilder:
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.__schema = None
|
||||
|
||||
|
||||
def set_schema(self,schema = None):
|
||||
self.__schema = schema
|
||||
|
||||
def get_template(self,field,lang='de'):
|
||||
if 'template' in self.__schema[field]:
|
||||
return self.__schema[field]['template'][lang]
|
||||
else:
|
||||
return "$value"
|
||||
|
||||
def is_translatable(self,field):
|
||||
if 'translatable' in self.__schema[field]:
|
||||
return self.__schema[field]['translatable']
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
def process_label(self,field,lang='de'):
|
||||
# processes the label of a field item
|
||||
return self.__schema[field]['label'][lang]
|
||||
|
||||
def process_str(self,meta,field,lang='de'):
|
||||
#
|
||||
if self.is_translatable(field):
|
||||
return [self.process_label(field,lang),meta[field][lang]]
|
||||
else:
|
||||
return [self.process_label(field,lang),meta[field]['value']]
|
||||
|
||||
def process_enum(self,meta,field,lang='de'):
|
||||
v = meta[field]['value']
|
||||
|
@ -96,7 +102,23 @@ class CourseBuilder:
|
|||
t = string.Template(self.get_template(field,lang))
|
||||
return [self.process_label(field,lang),t.substitute({'value' : v})]
|
||||
|
||||
def process(self,meta,fields = [],lang = 'de'):
|
||||
def process_multikey(self,meta,field,lang='de'):
|
||||
vs = meta[field]['value']
|
||||
t = string.Template(self.get_template(field,lang))
|
||||
|
||||
k = self.process_label(field,lang)
|
||||
v = ""
|
||||
|
||||
parts = []
|
||||
|
||||
for e in vs:
|
||||
kk = self.__schema[field]['keys'][e][lang]
|
||||
parts.append(t.substitute({'key': kk, 'value' : vs[e]}))
|
||||
|
||||
return [k,', '.join(parts)]
|
||||
|
||||
|
||||
def process(self,meta,fields = [],lang = 'de',pagebreak = False):
|
||||
|
||||
table_items = []
|
||||
|
||||
|
@ -105,31 +127,29 @@ class CourseBuilder:
|
|||
case 'str': table_items.append(self.process_str(meta,field,lang))
|
||||
case 'enum': table_items.append(self.process_enum(meta,field,lang))
|
||||
case 'int': table_items.append(self.process_int(meta,field,lang))
|
||||
case 'multikey': table_items.append(self.process_multikey(meta,field,lang))
|
||||
|
||||
self.generate_markdown(table_items)
|
||||
mdg = MarkdownGenerator()
|
||||
mdg.generate_markdown(table_items,pagebreak)
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
# get command line parameters
|
||||
parser = ArgumentParser()
|
||||
|
||||
# arguments
|
||||
parser = ArgumentParser(description='versatile curricula generator')
|
||||
|
||||
parser.add_argument('-m','--meta',action="extend", nargs="+", type=str,help="course description(s) as YAML file(s)")
|
||||
parser.add_argument('-l','--lang',help="Language to parse from meta file (use de or en)",default='de')
|
||||
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")
|
||||
|
||||
# get arguments
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
# only run debug
|
||||
if args.schema:
|
||||
if args.schema and args.meta:
|
||||
|
||||
cb = CourseBuilder()
|
||||
|
||||
|
@ -138,7 +158,7 @@ def main():
|
|||
|
||||
for m in args.meta:
|
||||
with open(m) as fm:
|
||||
cb.process(yaml.load(fm,Loader=yaml.Loader),fields=args.fields,lang=args.lang)
|
||||
cb.process(yaml.load(fm,Loader=yaml.Loader),fields=args.fields,lang=args.lang,pagebreak=args.pagebreak)
|
||||
else:
|
||||
parser.print_help()
|
||||
|
||||
|
|
5
test/simple/.temp.md
Normal file
5
test/simple/.temp.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
+-----------------------------------+---------------------------------------------------------------------------------------------+
|
||||
|Modulname |Computer Graphics |
|
||||
+===================================+=============================================================================================+
|
||||
|Kürzel |CG |
|
||||
+-----------------------------------+---------------------------------------------------------------------------------------------+
|
8
test/simple/Makefile
Normal file
8
test/simple/Makefile
Normal file
|
@ -0,0 +1,8 @@
|
|||
table.pdf:
|
||||
@echo "creating english version ..."
|
||||
python ../../coursebuilder -s schema.yaml -m mod.cg.yaml -l en -f name id | pandoc -o table.pdf
|
||||
|
||||
all: table.pdf
|
||||
|
||||
clean:
|
||||
rm table.pdf
|
|
@ -1,7 +1,5 @@
|
|||
name: {
|
||||
de: "Computergrafik",
|
||||
en: "Computer Graphics"
|
||||
}
|
||||
name:
|
||||
value: Computer Graphics
|
||||
|
||||
id:
|
||||
value: CG
|
||||
|
@ -12,8 +10,14 @@ credits:
|
|||
form-of-exam:
|
||||
value: written
|
||||
|
||||
form:
|
||||
value: lecture
|
||||
form-of-instruction:
|
||||
value: { 'lecture': 2, 'exersise': 1 }
|
||||
|
||||
term:
|
||||
value: 1
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
kind:
|
||||
value: compulsory
|
||||
|
@ -88,3 +92,33 @@ media-of-instruction:
|
|||
* Goldstein, E. Bruce. Sensation and Perception. 3rd ed. Belmont, Calif.: Wadsworth Pub. Co., 1989
|
||||
* Hughes, John F. Computer Graphics: Principles and Practice. Third edition. Upper Saddle River, New Jersey: Addison-Wesley, 2014
|
||||
* Shirley, Peter, and R. Keith Morley. Realistic Ray Tracing. 2. ed. Natick, Mass: A K Peters, 2003
|
||||
|
||||
prerequisites:
|
||||
de: ""
|
||||
en: ""
|
||||
|
||||
author-of-indenture:
|
||||
de: ""
|
||||
en: ""
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "2SWS Vorlesung 1SWS Übung"
|
||||
en: "2SWS lecture 1SWS exersise"
|
||||
|
||||
form-of-exam:
|
||||
value: written
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
|
||||
kind:
|
||||
value: compulsory
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
||||
|
|
|
@ -57,13 +57,13 @@ content:
|
|||
#
|
||||
# Lehrform
|
||||
#
|
||||
form:
|
||||
form-of-instruction:
|
||||
label: {
|
||||
de: "Lehrform",
|
||||
de: "Lehrform(en)",
|
||||
en: "form of instruction"
|
||||
}
|
||||
type: enum
|
||||
values: {
|
||||
type: multikey
|
||||
keys: {
|
||||
'lecture' : {
|
||||
de: "Vorlesung",
|
||||
en: "lecture"
|
||||
|
@ -89,6 +89,9 @@ form:
|
|||
en: "project"
|
||||
}
|
||||
}
|
||||
template:
|
||||
de: "${key} (${value}SWS)"
|
||||
en: "${key} (${value}SWS)"
|
||||
|
||||
#
|
||||
# Voraussetzungen für die Teilnahme
|
||||
|
@ -185,21 +188,10 @@ term:
|
|||
de: "Semester",
|
||||
en: "Term"
|
||||
}
|
||||
type: 'enum'
|
||||
values: {
|
||||
'winter' : {
|
||||
de: "Wintersemester",
|
||||
en: "Winter Term"
|
||||
},
|
||||
'summer' : {
|
||||
de: "Sommersemester",
|
||||
en: "Summer Term"
|
||||
},
|
||||
'both' : {
|
||||
de: "Winter- und Sommersemester",
|
||||
en: "winter and summer term"
|
||||
}
|
||||
}
|
||||
type: int
|
||||
template:
|
||||
de: "$value$. Semester"
|
||||
en: "$value$ semester"
|
||||
|
||||
#
|
||||
# Häufigkeit des Angebots
|
||||
|
@ -221,7 +213,11 @@ frequency:
|
|||
}
|
||||
}
|
||||
|
||||
duration: enum
|
||||
duration:
|
||||
type: int
|
||||
template:
|
||||
de: "$value Semester"
|
||||
en: "$value term(s)"
|
||||
|
||||
kind:
|
||||
type: enum
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue