diff --git a/README.md b/README.md index d017230..1c289d7 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,9 @@ to generate multi-lingual curricula documentation tables from structured representations as a flatfile database. Data scheme and actual values are kept in YAML files in order to version them with git. -# Usage +## Usage ```sh -$> python coursebuilder usage: [-h] [-m META [META ...]] [-l LANG] [-f FIELDS [FIELDS ...]] [-s SCHEMA] [-q QUERY] [-p] [--title TITLE] [-b BOOK] [--level LEVEL] [--table-gen TABLE_GEN] [--template TEMPLATE] [-o OUT] [--legacy] [--leftcol LEFTCOL] @@ -37,11 +36,11 @@ options: --leftcol LEFTCOL maximum size of left column ``` -# Author +## Author © Copyright 2020-2024 Hartmut Seichter -# Licence +## Licence Coursebuilder is licensed under the terms of the MIT License. For details consult https://opensource.org/license/mit/ or the attached license file diff --git a/coursebuilder/__main__.py b/coursebuilder/__main__.py index b55e6e5..74f7808 100644 --- a/coursebuilder/__main__.py +++ b/coursebuilder/__main__.py @@ -66,7 +66,12 @@ class CourseBuilder: add_pagebreak=args.pagebreak, title_template=args.title, first_colwidth=args.leftcol) - + elif query: + print(schema.to_list_of_tuple( + meta=yaml.load(fm,Loader=yaml.Loader), + fields=actual_fields, + lang=args.lang)) + pass else: MarkdownGenerator.generate_table( table_items=schema.to_list_of_tuple( @@ -84,6 +89,7 @@ class CourseBuilder: # arguments parser = ArgumentParser(description='versatile curricula generator') + # parameters 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) @@ -132,6 +138,7 @@ class CourseBuilder: if 'text' in section: print(section['text'][args.lang]) + # gernerate section wise parts if 'modules' in section: # override fields @@ -148,5 +155,6 @@ class CourseBuilder: else: parser.print_help() +# run as main if __name__ == '__main__': CourseBuilder.run() diff --git a/coursebuilder/query.py b/coursebuilder/query.py index 835fe36..0a5bb41 100644 --- a/coursebuilder/query.py +++ b/coursebuilder/query.py @@ -2,6 +2,10 @@ import pandas as pd class Query: + """ + Runs pandas.Dataframe.query() with special additions we need + for generating tables for Curricula + """ def __init__(self,query) -> None: self.__query = query diff --git a/coursebuilder/schema.py b/coursebuilder/schema.py index 1b0291d..45eb7e1 100644 --- a/coursebuilder/schema.py +++ b/coursebuilder/schema.py @@ -7,12 +7,6 @@ class Schema: def keys(self): return self.__schema.keys() - - # 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]: @@ -25,94 +19,7 @@ class Schema: return self.__schema[field] else: return False - - # 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: - # if not 'value' in meta[field]: - # raise AssertionError(field,'incomplete') - - # return [self.process_label(field,lang),meta[field]['value']] - - # def process_enum(self,meta,field,lang='de'): - # """ - # enum have a specification 'specs' option - # that can be forced by the scheme - # """ - # vv = meta[field]['value'] - # enum_val = self.__schema[field]['values'][vv][lang] - - # 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] - - # def process_num(self,meta,field,lang='de'): - # v = meta[field]['value'] - # t = string.Template(self.get_template(field,lang)) - # return [self.process_label(field,lang),t.substitute({'value' : v})] - - - # def process_multinum(self,meta,field,lang='de'): - # """multinums have various values""" - # v = meta[field]['value'] - # t = string.Template(self.get_template(field,lang)) - # if hasattr(v, "__len__"): - # vv = [t.substitute({'value' : ev}) for ev in v] - # return [self.process_label(field,lang),', '.join(vv)] - # else: - # return self.process_num(meta=meta,field=field,lang=lang) - - - # def process_multikey(self,meta,field,lang='de'): - # """ - # multikey need to assign a numeric value to a key - # """ - # vs = meta[field]['value'] - # t = string.Template(self.get_template(field,lang)) - - # k = self.process_label(field,lang) - - # 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): - - # table_items = [] - - # # iterate over requested fields - # for field in fields: - # try: - # # correlate with schema and append - # match self.__schema[field]['type']: - # case 'str': table_items.append(self.process_str(meta,field,lang)) - # case 'enum': table_items.append(self.process_enum(meta,field,lang)) - # case 'int' | 'num' : table_items.append(self.process_num(meta,field,lang)) - # case 'multinum' : table_items.append(self.process_multinum(meta,field,lang)) - # case 'multikey': table_items.append(self.process_multikey(meta,field,lang)) - # case _: raise ValueError - # except Exception as exp: - # print(field,' not resolvable in ',self.__schema,exp) - - # # maybe return tableitems as np.Dataframe? - # return table_items - + def get_value(self,meta,field,lang): """ treats receiving the value like a variant, diff --git a/test/Makefile b/test/Makefile index 646a326..b864984 100644 --- a/test/Makefile +++ b/test/Makefile @@ -12,17 +12,17 @@ coursebuilder := ../coursebuilder all: ${targets} -${target_en}: +${target_en}: mod.cg.yaml @echo "creating English version ..." mkdir -p ${build_dir} - python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l en -f fields.yaml | pandoc ${target_flags} -o ${target_en} + python ${coursebuilder} -s schema.yaml -m $^ -l en -f fields.yaml | pandoc ${target_flags} -o ${target_en} -${target_de}: +${target_de}: mod.cg.yaml @echo "creating German version ..." mkdir -p ${build_dir} - python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml | pandoc ${target_flags} -o ${target_de} + python ${coursebuilder} -s schema.yaml -m $^ -l de -f fields.yaml | pandoc ${target_flags} -o ${target_de} -${target_de_book}: +${target_de_book}: *.yaml python ${coursebuilder} -s schema.yaml -b book.yaml -p --title "### {}" -l de --leftcol 25 --legacy | pandoc ${target_flags} -V toc:true -V lang:de -o ${target_de_book} clean: