103 lines
2.4 KiB
Python
103 lines
2.4 KiB
Python
#!/usr/bin/env python
|
|
# encoding: utf-8
|
|
|
|
import click
|
|
from pathlib import Path
|
|
import yaml
|
|
import sys
|
|
import papermill as pm
|
|
from datetime import datetime
|
|
|
|
from .prepare_csv import prepare_csv
|
|
from .config import config
|
|
|
|
|
|
@click.group()
|
|
def cli():
|
|
pass
|
|
|
|
|
|
@cli.command()
|
|
def print_config():
|
|
click.echo(f"Config file is {CONFIGPATH}")
|
|
click.echo("It contains")
|
|
click.echo(config)
|
|
|
|
|
|
def reporting(csv_file):
|
|
# csv_file = Path(csv_file)
|
|
tribe_dir = csv_file.parent
|
|
csv_filename = csv_file.name.split(".")[0]
|
|
|
|
assessment = str(csv_filename).split("_")[-1].capitalize()
|
|
date = str(csv_filename).split("_")[0]
|
|
try:
|
|
date = datetime.strptime(date, "%y%m%d")
|
|
except ValueError:
|
|
date = datetime.today().strptime(date, "%y%m%d")
|
|
|
|
tribe = str(tribe_dir).split("/")[-1]
|
|
|
|
template = Path(config["templates"]) / "tpl_evaluation.ipynb"
|
|
|
|
dest = Path(config["output"]) / tribe / csv_filename
|
|
dest.mkdir(parents=True, exist_ok=True)
|
|
|
|
click.echo(f"Building {assessment} ({date:%d/%m/%y}) report")
|
|
pm.execute_notebook(
|
|
str(template),
|
|
str(dest / f"{assessment}.ipynb"),
|
|
parameters=dict(
|
|
tribe=tribe,
|
|
assessment=assessment,
|
|
date=f"{date:%d/%m/%y}",
|
|
csv_file=str(csv_file.absolute()),
|
|
),
|
|
)
|
|
|
|
|
|
@cli.command()
|
|
@click.argument("target", required=False)
|
|
def report(target=""):
|
|
""" Make a report for the eval
|
|
|
|
:param target: csv file or a directory where csvs are
|
|
"""
|
|
try:
|
|
if target.endswith(".csv"):
|
|
csv = Path(target)
|
|
if not csv.exists():
|
|
click.echo(f"{target} does not exists")
|
|
sys.exit(1)
|
|
if csv.suffix != ".csv":
|
|
click.echo(f"{target} has to be a csv file")
|
|
sys.exit(1)
|
|
csvs = [csv]
|
|
else:
|
|
csvs = list(Path(target).glob("**/*.csv"))
|
|
except AttributeError:
|
|
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}")
|
|
|
|
|
|
@cli.command()
|
|
def prepare():
|
|
""" Prepare csv file """
|
|
|
|
items = prepare_csv()
|
|
|
|
click.echo(items)
|
|
|
|
|
|
@cli.command()
|
|
@click.argument("tribe")
|
|
def random_pick(tribe):
|
|
""" Randomly pick a student """
|
|
pass
|