minor cleanup
This commit is contained in:
parent
e489ef1517
commit
7078c8255b
5 changed files with 22 additions and 104 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue