From 833f0bdf4cc24df54f9a0c1e6c8b3ffed69e1aab Mon Sep 17 00:00:00 2001 From: Hartmut Seichter Date: Fri, 17 May 2024 21:04:50 +0200 Subject: [PATCH] enum method working --- coursebuilder/__main__.py | 2 +- coursebuilder/query.py | 6 ++--- coursebuilder/schema.py | 46 +++++++++++++-------------------------- test/Makefile | 2 +- test/schema.yaml | 3 ++- 5 files changed, 22 insertions(+), 37 deletions(-) diff --git a/coursebuilder/__main__.py b/coursebuilder/__main__.py index beedcb5..6a80bb3 100644 --- a/coursebuilder/__main__.py +++ b/coursebuilder/__main__.py @@ -58,7 +58,7 @@ class CourseBuilder: meta = yaml.load(fm,Loader=yaml.Loader) - table_items = schema.process(meta=meta,fields=actual_fields,lang=args.lang) if query == None else schema.process_raw(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_dataframe(meta=meta,fields=actual_fields,lang=args.lang) if args.legacy: MarkdownGenerator.generate_table_legacy(table_items=table_items,add_pagebreak=args.pagebreak,title_template=args.title,first_colwidth=args.leftcol) diff --git a/coursebuilder/query.py b/coursebuilder/query.py index fab883b..17591fa 100644 --- a/coursebuilder/query.py +++ b/coursebuilder/query.py @@ -6,8 +6,8 @@ class Query: def run(self,table_items): # print(table_items) - for row in table_items: - print(row) - # print(eval(self.__query,{row:row})) + for item in table_items: + print(item) + # print(eval(self.__query,locals())) pass diff --git a/coursebuilder/schema.py b/coursebuilder/schema.py index ee4f058..80de9b8 100644 --- a/coursebuilder/schema.py +++ b/coursebuilder/schema.py @@ -122,43 +122,27 @@ class Schema: return meta[field]['value'] def get_enum(self,meta,field,lang): - vv = meta[field]['value'] - return self.__schema[field]['values'][vv][lang] - - def get_num(self,meta,field,lang): - return meta[field]['value'] - - # if self.needs_spec(field): - - # t = string.Template(self.get_template(field=field,lang=lang)) - - # spec = meta[field]['spec'][lang] - - # return [self.process_label(field,lang),t.substitute({'value': enum_val,'spec': spec})] - # else: - # return [self.process_label(field,lang),enum_val] - - + enum_val = meta[field]['value'] + return self.__schema[field]['values'][ enum_val ][lang] def get_value(self,meta,field,lang): + """treats receiving the value like a variant, + return values are language specific""" match self.__schema[field]['type']: case 'str': return self.get_str(meta,field,lang) case 'enum': return self.get_enum(meta,field,lang) - case 'int' | 'num' : return self.get_num(meta,field,lang) + case 'int' | 'num' : return meta[field]['value'] case 'multinum' : return meta[field]['value'] - - def process_raw(self,meta,fields,lang): - - items = [{'field' : field, - 'lang' : lang, - 'type' : self.__schema[field]['type'], - 'label' : self.process_label(field,lang), - 'value' : self.get_value(meta,field,lang) - + def to_dataframe(self,meta,fields,lang): + # list comprehension for rows + return [{'field' : field, # field name + 'lang' : lang, # language shortcode + 'type' : self.__schema[field]['type'], # datatype + 'label' : self.process_label(field,lang), # label + 'value' : self.get_value(meta,field,lang), # actual value + 'template' : self.__schema[field]['template'][lang] if 'template' in self.__schema[field] else None, + # 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 } for field in fields] - - - # maybe return tableitems as np.Dataframe? - return items \ No newline at end of file diff --git a/test/Makefile b/test/Makefile index c806cc2..f662980 100644 --- a/test/Makefile +++ b/test/Makefile @@ -33,6 +33,6 @@ debug: # | pandoc ${target_flags} -V lang:de -o ${target_de} debug-query: - python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -q "kind == compulsory" + python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -q "item['field'] == 'kind' and item['value'] == 'elective'" .PHONY: clean \ No newline at end of file diff --git a/test/schema.yaml b/test/schema.yaml index fde6931..4ceebf5 100644 --- a/test/schema.yaml +++ b/test/schema.yaml @@ -181,7 +181,8 @@ workload: # credits/ECTS # credits: - type: num + type: num + unit: ECTS label: { en: "credits and weight of mark", de: "Kreditpunkte und Gewichtung der Note in der Gesamtnote"