minor cleanup

This commit is contained in:
Hartmut Seichter 2024-05-27 13:28:22 +02:00
parent e489ef1517
commit 7078c8255b
5 changed files with 22 additions and 104 deletions

View file

@ -5,10 +5,9 @@ to generate multi-lingual curricula documentation tables from
structured representations as a flatfile database. Data scheme and structured representations as a flatfile database. Data scheme and
actual values are kept in YAML files in order to version them with git. actual values are kept in YAML files in order to version them with git.
# Usage ## Usage
```sh ```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] 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] [--template TEMPLATE] [-o OUT] [--legacy] [--leftcol LEFTCOL]
@ -37,11 +36,11 @@ options:
--leftcol LEFTCOL maximum size of left column --leftcol LEFTCOL maximum size of left column
``` ```
# Author ## Author
© Copyright 2020-2024 Hartmut Seichter © 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 Coursebuilder is licensed under the terms of the MIT License. For details consult https://opensource.org/license/mit/ or the attached license file

View file

@ -66,7 +66,12 @@ class CourseBuilder:
add_pagebreak=args.pagebreak, add_pagebreak=args.pagebreak,
title_template=args.title, title_template=args.title,
first_colwidth=args.leftcol) 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: else:
MarkdownGenerator.generate_table( MarkdownGenerator.generate_table(
table_items=schema.to_list_of_tuple( table_items=schema.to_list_of_tuple(
@ -84,6 +89,7 @@ class CourseBuilder:
# arguments # arguments
parser = ArgumentParser(description='versatile curricula generator') 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('-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('-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('-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: if 'text' in section:
print(section['text'][args.lang]) print(section['text'][args.lang])
# gernerate section wise parts
if 'modules' in section: if 'modules' in section:
# override fields # override fields
@ -148,5 +155,6 @@ class CourseBuilder:
else: else:
parser.print_help() parser.print_help()
# run as main
if __name__ == '__main__': if __name__ == '__main__':
CourseBuilder.run() CourseBuilder.run()

View file

@ -2,6 +2,10 @@
import pandas as pd import pandas as pd
class Query: class Query:
"""
Runs pandas.Dataframe.query() with special additions we need
for generating tables for Curricula
"""
def __init__(self,query) -> None: def __init__(self,query) -> None:
self.__query = query self.__query = query

View file

@ -7,12 +7,6 @@ class Schema:
def keys(self): def keys(self):
return self.__schema.keys() 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): def is_translatable(self,field):
if 'translatable' in self.__schema[field]: if 'translatable' in self.__schema[field]:
@ -25,94 +19,7 @@ class Schema:
return self.__schema[field] return self.__schema[field]
else: else:
return False 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): def get_value(self,meta,field,lang):
""" """
treats receiving the value like a variant, treats receiving the value like a variant,

View file

@ -12,17 +12,17 @@ coursebuilder := ../coursebuilder
all: ${targets} all: ${targets}
${target_en}: ${target_en}: mod.cg.yaml
@echo "creating English version ..." @echo "creating English version ..."
mkdir -p ${build_dir} 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 ..." @echo "creating German version ..."
mkdir -p ${build_dir} 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} 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: clean: