MVP of reworked tuple generation
This commit is contained in:
parent
833f0bdf4c
commit
1381c37500
4 changed files with 53 additions and 30 deletions
|
@ -58,12 +58,24 @@ class CourseBuilder:
|
||||||
|
|
||||||
meta = yaml.load(fm,Loader=yaml.Loader)
|
meta = yaml.load(fm,Loader=yaml.Loader)
|
||||||
|
|
||||||
table_items = schema.process(meta=meta,fields=actual_fields,lang=args.lang) if query == None else schema.to_dataframe(meta=meta,fields=actual_fields,lang=args.lang)
|
table_items = schema.process(meta=meta,fields=actual_fields,lang=args.lang) if query == None else schema.to_list_of_dict(meta=meta,fields=actual_fields,lang=args.lang)
|
||||||
|
|
||||||
if args.legacy:
|
if args.legacy:
|
||||||
MarkdownGenerator.generate_table_legacy(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.leftcol)
|
MarkdownGenerator.generate_table_legacy(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.leftcol)
|
||||||
elif query:
|
elif query:
|
||||||
|
|
||||||
query.run(table_items)
|
query.run(table_items)
|
||||||
|
|
||||||
|
# for i in table_items:
|
||||||
|
# print(i)
|
||||||
|
|
||||||
|
q = schema.to_list_of_tuple(meta=meta,fields=actual_fields,lang=args.lang)
|
||||||
|
|
||||||
|
for i in q:
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
# MarkdownGenerator.generate_table(table_items=q,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.leftcol)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
MarkdownGenerator.generate_table(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.leftcol)
|
MarkdownGenerator.generate_table(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.leftcol)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
class Query:
|
class Query:
|
||||||
|
|
||||||
def __init__(self,query) -> None:
|
def __init__(self,query) -> None:
|
||||||
|
@ -6,8 +8,9 @@ class Query:
|
||||||
|
|
||||||
def run(self,table_items):
|
def run(self,table_items):
|
||||||
# print(table_items)
|
# print(table_items)
|
||||||
for item in table_items:
|
# for item in table_items:
|
||||||
print(item)
|
# pass
|
||||||
|
# print(item)
|
||||||
# print(eval(self.__query,locals()))
|
# print(eval(self.__query,locals()))
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ class Schema:
|
||||||
return [k,', '.join(parts)]
|
return [k,', '.join(parts)]
|
||||||
|
|
||||||
|
|
||||||
def process(self,meta,fields = [],lang = 'de'):
|
def process(self,meta,fields,lang):
|
||||||
|
|
||||||
table_items = []
|
table_items = []
|
||||||
|
|
||||||
|
@ -113,28 +113,15 @@ class Schema:
|
||||||
# maybe return tableitems as np.Dataframe?
|
# maybe return tableitems as np.Dataframe?
|
||||||
return table_items
|
return table_items
|
||||||
|
|
||||||
def get_str(self,meta,field,lang='de'):
|
|
||||||
if self.is_translatable(field):
|
|
||||||
return meta[field][lang]
|
|
||||||
else:
|
|
||||||
if not 'value' in meta[field]:
|
|
||||||
raise AssertionError(field,'incomplete')
|
|
||||||
return meta[field]['value']
|
|
||||||
|
|
||||||
def get_enum(self,meta,field,lang):
|
|
||||||
enum_val = meta[field]['value']
|
|
||||||
return self.__schema[field]['values'][ enum_val ][lang]
|
|
||||||
|
|
||||||
def get_value(self,meta,field,lang):
|
def get_value(self,meta,field,lang):
|
||||||
"""treats receiving the value like a variant,
|
"""treats receiving the value like a variant,
|
||||||
return values are language specific"""
|
return values are language specific"""
|
||||||
match self.__schema[field]['type']:
|
match self.__schema[field]['type']:
|
||||||
case 'str': return self.get_str(meta,field,lang)
|
case 'str': return meta[field][lang] if self.is_translatable(field) else meta[field]['value']
|
||||||
case 'enum': return self.get_enum(meta,field,lang)
|
case 'enum' | 'int' | 'num' | 'multikey' : return meta[field]['value']
|
||||||
case 'int' | 'num' : return meta[field]['value']
|
case 'multinum': return meta[field]['value'] if hasattr(meta[field]['value'],'__iter__') else (meta[field]['value'],) # force list!
|
||||||
case 'multinum' : return meta[field]['value']
|
|
||||||
|
|
||||||
def to_dataframe(self,meta,fields,lang):
|
def to_list_of_dict(self,meta,fields,lang):
|
||||||
# list comprehension for rows
|
# list comprehension for rows
|
||||||
return [{'field' : field, # field name
|
return [{'field' : field, # field name
|
||||||
'lang' : lang, # language shortcode
|
'lang' : lang, # language shortcode
|
||||||
|
@ -143,6 +130,27 @@ class Schema:
|
||||||
'value' : self.get_value(meta,field,lang), # actual value
|
'value' : self.get_value(meta,field,lang), # actual value
|
||||||
'template' : self.__schema[field]['template'][lang] if 'template' in self.__schema[field] else None,
|
'template' : self.__schema[field]['template'][lang] if 'template' in self.__schema[field] else None,
|
||||||
# getting crazy with nested dict comprehension
|
# getting crazy with nested dict comprehension
|
||||||
'enum_values' : { k:v[lang] for (k,v) in self.__schema[field]['values'].items()} if 'enum' in self.__schema[field]['type'] else None
|
'enum_values' : { k:v[lang] for (k,v) in self.__schema[field]['values'].items()} if 'enum' in self.__schema[field]['type'] else None,
|
||||||
|
'key_values' : { k:v[lang] for (k,v) in self.__schema[field]['keys'].items()} if 'multikey' in self.__schema[field]['type'] else None,
|
||||||
|
'spec' : meta[field]['spec'][lang] if 'spec' in meta[field] else None
|
||||||
}
|
}
|
||||||
for field in fields]
|
for field in fields]
|
||||||
|
|
||||||
|
def to_list_of_tuple(self,meta,fields,lang):
|
||||||
|
# generate a list of tuples with key and value (text)
|
||||||
|
list = []
|
||||||
|
for r in self.to_list_of_dict(meta,fields,lang):
|
||||||
|
match r['type']:
|
||||||
|
case 'str' :
|
||||||
|
list.append( (r['label'],r['value']) )
|
||||||
|
case 'int' | 'num' :
|
||||||
|
list.append( ( r['label'], r['template'].format(value=r['value'],spec=r['spec']) if r['template'] else r['value']) )
|
||||||
|
case 'enum' :
|
||||||
|
list.append( ( r['label'], r['template'].format(value=r['enum_values'][r['value']],spec=r['spec'])
|
||||||
|
if r['template'] else r['enum_values'][r['value']] ) )
|
||||||
|
case 'multikey' :
|
||||||
|
list.append( ( r['label'], ', '.join( [r['template'].format(key=r['key_values'][k],value=v) for k,v in r['value'].items()] ) ) )
|
||||||
|
case 'multinum' :
|
||||||
|
list.append( (r['label'], ', '.join( r['template'].format(value=v) for v in r['value'])) )
|
||||||
|
|
||||||
|
return list
|
|
@ -114,8 +114,8 @@ form-of-instruction:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
template:
|
template:
|
||||||
de: "${key} (${value}SWS)"
|
de: "{key} ({value}SWS)"
|
||||||
en: "${key} (${value}SWS)"
|
en: "{key} ({value}SWS)"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Voraussetzungen für die Teilnahme
|
# Voraussetzungen für die Teilnahme
|
||||||
|
@ -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 "
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -217,8 +217,8 @@ form-of-exam:
|
||||||
}
|
}
|
||||||
spec: true
|
spec: true
|
||||||
template:
|
template:
|
||||||
de: "${value} (${spec})"
|
de: "{value} ({spec})"
|
||||||
en: "${value} (${spec})"
|
en: "{value} ({spec})"
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -263,8 +263,8 @@ duration:
|
||||||
de: Dauer
|
de: Dauer
|
||||||
en: duration
|
en: duration
|
||||||
template:
|
template:
|
||||||
de: "$value Semester"
|
de: "{value} Semester"
|
||||||
en: "$value term(s)"
|
en: "{value} term(s)"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Art der Veranstaltung
|
# Art der Veranstaltung
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue