Feat: question prompts
This commit is contained in:
parent
5e0f2d92ef
commit
1886deb430
@ -9,13 +9,39 @@ from functools import wraps
|
||||
from .getconfig import config
|
||||
|
||||
|
||||
class CancelError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def prompt_until_validate_or_cancel(func):
|
||||
@wraps(func)
|
||||
def wrapper(*args, **kwrd):
|
||||
ans = func(*args, **kwrd)
|
||||
question = [
|
||||
{
|
||||
"type": "list",
|
||||
"name": "confirm",
|
||||
"message": "C'est bon?",
|
||||
"choices": ["Oui", "Non", "Annuler cet élément"],
|
||||
}
|
||||
]
|
||||
confirm = prompt(question)["confirm"]
|
||||
while confirm == "Non":
|
||||
ans = func(*args, **ans, **kwrd)
|
||||
if confirm == "Annuler cet élément":
|
||||
raise CancelError
|
||||
return ans
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
def prompt_until_validate(func):
|
||||
@wraps(func)
|
||||
def wrapper(*args, **kwrd):
|
||||
ans = func(*args, **kwrd)
|
||||
question = [{"type": "confirm", "name": "confirm", "message": "C'est bon?"}]
|
||||
while not prompt(question)["confirm"]:
|
||||
ans = func(ans)
|
||||
ans = func(*args, **ans, **kwrd)
|
||||
return ans
|
||||
|
||||
return wrapper
|
||||
@ -25,6 +51,12 @@ def prompt_until_validate(func):
|
||||
def prompt_exam(**kwrd):
|
||||
""" Prompt questions to edit an exam """
|
||||
questions = [
|
||||
{
|
||||
"message": "Nom de l'évaluation",
|
||||
"type": "input",
|
||||
"name": "name",
|
||||
"default": kwrd.get("name", "DS"),
|
||||
},
|
||||
{
|
||||
"message": "Nom de la classe",
|
||||
"type": "list",
|
||||
@ -32,12 +64,6 @@ def prompt_exam(**kwrd):
|
||||
"choices": [t["name"] for t in config["tribes"]],
|
||||
"default": kwrd.get("tribe", ""),
|
||||
},
|
||||
{
|
||||
"message": "Type d'évaluation",
|
||||
"type": "input",
|
||||
"name": "type",
|
||||
"default": kwrd.get("type", "DS"),
|
||||
},
|
||||
{
|
||||
"message": "Date (%y%m%d)",
|
||||
"type": "input",
|
||||
@ -45,6 +71,13 @@ def prompt_exam(**kwrd):
|
||||
"validate": lambda x: (len(x) == 6) and x.isdigit(),
|
||||
"default": kwrd.get("_date", datetime.today().strftime("%y%m%d")),
|
||||
},
|
||||
{
|
||||
"message": "Trimestre",
|
||||
"type": "input",
|
||||
"name": "term",
|
||||
"validate": lambda x: x.isdigit(),
|
||||
"default": kwrd.get("term", "1"),
|
||||
},
|
||||
{
|
||||
"message": "Nombre d'exercice",
|
||||
"type": "input",
|
||||
@ -53,6 +86,7 @@ def prompt_exam(**kwrd):
|
||||
"default": kwrd.get("ExQty", "1"),
|
||||
},
|
||||
]
|
||||
print("Nouvelle évaluation")
|
||||
exam = prompt(questions)
|
||||
exam["tribe"] = [t for t in config["tribes"] if exam["_tribe"] == t["name"]][0]
|
||||
exam["date"] = datetime.strptime(exam["_date"], "%y%m%d")
|
||||
@ -62,6 +96,13 @@ def prompt_exam(**kwrd):
|
||||
|
||||
@prompt_until_validate
|
||||
def prompt_exercise(number=1, **kwrd):
|
||||
try:
|
||||
kwrd["name"]
|
||||
except KeyError:
|
||||
print("Nouvel exercice")
|
||||
else:
|
||||
print(f"Modification de la questions {kwrd['name']}")
|
||||
|
||||
questions = [
|
||||
{
|
||||
"message": "Nom de l'exercice",
|
||||
@ -73,6 +114,18 @@ def prompt_exercise(number=1, **kwrd):
|
||||
exercise = prompt(questions)
|
||||
exercise["questions"] = []
|
||||
|
||||
try:
|
||||
kwrd["questions"]
|
||||
except KeyError:
|
||||
last_question_id = "1a"
|
||||
else:
|
||||
for ques in kwrd["questions"]:
|
||||
try:
|
||||
exercise["questions"].append(prompt_question())
|
||||
except CancelError:
|
||||
print("Cette question a été supprimée")
|
||||
last_question_id = exercise["questions"][-1]["id"]
|
||||
|
||||
append = [
|
||||
{
|
||||
"message": "Ajouter un élément de notation",
|
||||
@ -81,10 +134,62 @@ def prompt_exercise(number=1, **kwrd):
|
||||
}
|
||||
]
|
||||
while prompt(append)["append"]:
|
||||
exercise["questions"].append(prompt_question())
|
||||
try:
|
||||
exercise["questions"].append(prompt_question(last_question_id))
|
||||
except CancelError:
|
||||
print("Cette question a été supprimée")
|
||||
else:
|
||||
last_question_id = exercise["questions"][-1]["id"]
|
||||
|
||||
return exercise
|
||||
|
||||
|
||||
def prompt_question():
|
||||
pass
|
||||
@prompt_until_validate_or_cancel
|
||||
def prompt_question(last_question_id="1a", **kwrd):
|
||||
try:
|
||||
kwrd["id"]
|
||||
except KeyError:
|
||||
print("Nouvelle question")
|
||||
else:
|
||||
print(f"Modification de la questions {kwrd['id']}")
|
||||
|
||||
questions = [
|
||||
{
|
||||
"message": "Identifiant de la question",
|
||||
"type": "input",
|
||||
"name": "id",
|
||||
"default": kwrd.get("id", "1a"),
|
||||
},
|
||||
{
|
||||
"message": "Competence",
|
||||
"type": "input",
|
||||
"name": "competence",
|
||||
"default": kwrd.get("competence", "Cal"),
|
||||
},
|
||||
{
|
||||
"message": "Domaine",
|
||||
"type": "input",
|
||||
"name": "theme",
|
||||
"default": kwrd.get("domain", ""),
|
||||
},
|
||||
{
|
||||
"message": "Commentaire",
|
||||
"type": "input",
|
||||
"name": "comment",
|
||||
"default": kwrd.get("comment", ""),
|
||||
},
|
||||
{
|
||||
"message": "Évaluation par niveau",
|
||||
"type": "confirm",
|
||||
"name": "is_leveled",
|
||||
"default": kwrd.get("is_leveled", True),
|
||||
},
|
||||
{
|
||||
"message": "Bareme",
|
||||
"type": "input",
|
||||
"name": "score_rate",
|
||||
"default": kwrd.get("score_rate", "1"),
|
||||
"validate": lambda x: x.isdigit(),
|
||||
},
|
||||
]
|
||||
return prompt(questions)
|
||||
|
@ -32,6 +32,23 @@ def setup():
|
||||
print(f"The file {tribe['students']} does not exists")
|
||||
|
||||
|
||||
def exam_dict2element(exam):
|
||||
""" Transform an exam in dictionnary for into list of element to evaluate"""
|
||||
elements = []
|
||||
for ex in exam["exercices"]:
|
||||
for q in ex["questions"]:
|
||||
elements.append(
|
||||
{
|
||||
"term": exam["term"],
|
||||
"assessment": exam["name"],
|
||||
"date": exam["date"].strftime("%d/%m/%Y"),
|
||||
"exercice": ex["name"],
|
||||
**q,
|
||||
}
|
||||
)
|
||||
return elements
|
||||
|
||||
|
||||
@cli.command()
|
||||
def new_exam():
|
||||
""" Create new exam csv file """
|
||||
@ -39,7 +56,7 @@ def new_exam():
|
||||
exam["exercices"] = []
|
||||
for ex in range(int(exam["ExQty"])):
|
||||
exam["exercices"].append(prompt_exercise(ex + 1))
|
||||
print(exam)
|
||||
print(exam_dict2element(exam))
|
||||
|
||||
|
||||
@cli.command()
|
||||
|
Loading…
Reference in New Issue
Block a user