recopytex/recopytex/scripts/recopytex.py

98 lines
2.6 KiB
Python
Raw Normal View History

2019-08-04 14:25:44 +00:00
#!/usr/bin/env python
# encoding: utf-8
import click
from pathlib import Path
import yaml
import sys
import papermill as pm
2019-08-04 19:11:46 +00:00
from datetime import datetime
2019-08-04 14:25:44 +00:00
2019-08-04 17:27:35 +00:00
CONFIGPATH = "recoconfig.yml"
with open(CONFIGPATH, "r") as config:
2019-08-04 14:25:44 +00:00
config = yaml.load(config, Loader=yaml.FullLoader)
@click.group()
def cli():
pass
@cli.command()
def print_config():
2019-08-04 17:27:35 +00:00
click.echo(f"Config file is {CONFIGPATH}")
click.echo("It contains")
click.echo(config)
2019-08-04 14:25:44 +00:00
def reporting(csv_file):
#csv_file = Path(csv_file)
2019-08-04 14:54:12 +00:00
tribe_dir = csv_file.parent
csv_filename = csv_file.name.split(".")[0]
2019-08-04 14:54:12 +00:00
assessment = str(csv_filename).split("_")[-1].capitalize()
2019-08-04 19:11:46 +00:00
date = str(csv_filename).split("_")[0]
try:
date = datetime.strptime(date, "%y%m%d")
except ValueError:
date = datetime.today().strptime(date, "%y%m%d")
2019-08-04 19:11:46 +00:00
2019-08-04 14:54:12 +00:00
tribe = str(tribe_dir).split("/")[-1]
2019-08-04 14:25:44 +00:00
template = Path(config["templates"]) / "tpl_evaluation.ipynb"
2019-08-04 14:54:12 +00:00
dest = Path(config["output"]) / tribe / csv_filename
dest.mkdir(parents=True, exist_ok=True)
2019-08-04 14:25:44 +00:00
2019-08-04 19:11:46 +00:00
click.echo(f"Building {assessment} ({date:%d/%m/%y}) report")
2019-08-04 14:25:44 +00:00
pm.execute_notebook(
str(template),
2019-08-04 14:54:12 +00:00
str(dest / f"{assessment}.ipynb"),
parameters=dict(
2019-08-04 19:11:46 +00:00
tribe=tribe, assessment=assessment, date=f"{date:%d/%m/%y}", csv_file=str(csv_file.absolute())
),
2019-08-04 14:25:44 +00:00
)
@cli.command()
@click.argument("csv_file", required=False)
def report(csv_file=""):
if csv_file:
csv = Path(csv_file)
if not csv.exists():
click.echo(f"{csv_file} does not exists")
sys.exit(1)
if csv.suffix != ".csv":
click.echo(f"{csv_file} has to be a csv file")
sys.exit(1)
csvs = [csv]
else:
csvs = list(Path(config["source"]).glob('**/*.csv'))
for csv in csvs:
click.echo(f"Processing {csv}")
try:
reporting(csv)
except pm.exceptions.PapermillExecutionError as e:
click.echo(f"Error with {csv}: {e}")
2019-08-04 21:32:22 +00:00
# with open(csv_file.parent / "description.yml") as f:
# tribe_desc = yaml.load(f, Loader=yaml.FullLoader)
# template = Path(config["templates"]) / "tpl_student.ipynb"
# dest = Path(config["output"]) / tribe / csv_filename / "students"
# dest.mkdir(parents=True, exist_ok=True)
# for st in tribe_desc["students"]:
# click.echo(f"Building {st} report on {assessment}")
# pm.execute_notebook(
# str(template),
# str(dest / f"{st}.ipynb"),
# parameters=dict(tribe=tribe, student=st, source=str(tribe_dir.absolute())),
# )
2019-08-04 14:54:12 +00:00