2020-10-04 14:11:55 +00:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# encoding: utf-8
|
|
|
|
|
|
|
|
|
2020-10-04 14:38:36 +00:00
|
|
|
from PyInquirer import prompt
|
2020-10-04 14:11:55 +00:00
|
|
|
from datetime import datetime
|
|
|
|
from functools import wraps
|
|
|
|
|
|
|
|
from .getconfig import config
|
|
|
|
|
|
|
|
|
2020-10-04 16:10:43 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
|
2020-10-04 14:11:55 +00:00
|
|
|
def prompt_until_validate(func):
|
|
|
|
@wraps(func)
|
|
|
|
def wrapper(*args, **kwrd):
|
|
|
|
ans = func(*args, **kwrd)
|
2020-10-04 14:38:36 +00:00
|
|
|
question = [{"type": "confirm", "name": "confirm", "message": "C'est bon?"}]
|
2020-10-04 14:11:55 +00:00
|
|
|
while not prompt(question)["confirm"]:
|
2020-10-04 16:10:43 +00:00
|
|
|
ans = func(*args, **ans, **kwrd)
|
2020-10-04 14:11:55 +00:00
|
|
|
return ans
|
|
|
|
|
|
|
|
return wrapper
|
|
|
|
|
|
|
|
|
|
|
|
@prompt_until_validate
|
2020-10-04 14:38:36 +00:00
|
|
|
def prompt_exam(**kwrd):
|
2020-10-04 14:11:55 +00:00
|
|
|
""" Prompt questions to edit an exam """
|
|
|
|
questions = [
|
2020-10-04 16:10:43 +00:00
|
|
|
{
|
|
|
|
"message": "Nom de l'évaluation",
|
|
|
|
"type": "input",
|
|
|
|
"name": "name",
|
|
|
|
"default": kwrd.get("name", "DS"),
|
|
|
|
},
|
2020-10-04 14:11:55 +00:00
|
|
|
{
|
2020-10-04 14:38:36 +00:00
|
|
|
"message": "Nom de la classe",
|
2020-10-04 14:11:55 +00:00
|
|
|
"type": "list",
|
|
|
|
"name": "_tribe",
|
|
|
|
"choices": [t["name"] for t in config["tribes"]],
|
2020-10-04 14:38:36 +00:00
|
|
|
"default": kwrd.get("tribe", ""),
|
2020-10-04 14:11:55 +00:00
|
|
|
},
|
|
|
|
{
|
2020-10-04 14:38:36 +00:00
|
|
|
"message": "Date (%y%m%d)",
|
2020-10-04 14:11:55 +00:00
|
|
|
"type": "input",
|
|
|
|
"name": "_date",
|
|
|
|
"validate": lambda x: (len(x) == 6) and x.isdigit(),
|
2020-10-04 14:38:36 +00:00
|
|
|
"default": kwrd.get("_date", datetime.today().strftime("%y%m%d")),
|
2020-10-04 14:11:55 +00:00
|
|
|
},
|
2020-10-04 16:10:43 +00:00
|
|
|
{
|
|
|
|
"message": "Trimestre",
|
|
|
|
"type": "input",
|
|
|
|
"name": "term",
|
|
|
|
"validate": lambda x: x.isdigit(),
|
|
|
|
"default": kwrd.get("term", "1"),
|
|
|
|
},
|
2020-10-04 14:11:55 +00:00
|
|
|
{
|
2020-10-04 14:38:36 +00:00
|
|
|
"message": "Nombre d'exercice",
|
2020-10-04 14:11:55 +00:00
|
|
|
"type": "input",
|
|
|
|
"name": "ExQty",
|
|
|
|
"validate": lambda x: x.isdigit(),
|
2020-10-04 14:38:36 +00:00
|
|
|
"default": kwrd.get("ExQty", "1"),
|
2020-10-04 14:11:55 +00:00
|
|
|
},
|
|
|
|
]
|
2020-10-04 16:10:43 +00:00
|
|
|
print("Nouvelle évaluation")
|
2020-10-04 14:11:55 +00:00
|
|
|
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")
|
|
|
|
|
|
|
|
return exam
|
|
|
|
|
|
|
|
|
2020-10-04 14:38:36 +00:00
|
|
|
@prompt_until_validate
|
|
|
|
def prompt_exercise(number=1, **kwrd):
|
2020-10-04 16:10:43 +00:00
|
|
|
try:
|
|
|
|
kwrd["name"]
|
|
|
|
except KeyError:
|
|
|
|
print("Nouvel exercice")
|
|
|
|
else:
|
|
|
|
print(f"Modification de la questions {kwrd['name']}")
|
|
|
|
|
2020-10-04 14:38:36 +00:00
|
|
|
questions = [
|
|
|
|
{
|
|
|
|
"message": "Nom de l'exercice",
|
|
|
|
"type": "input",
|
|
|
|
"name": "name",
|
|
|
|
"default": kwrd.get("name", f"Exercice {number}"),
|
|
|
|
}
|
|
|
|
]
|
|
|
|
exercise = prompt(questions)
|
|
|
|
exercise["questions"] = []
|
|
|
|
|
2020-10-04 16:10:43 +00:00
|
|
|
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"]
|
|
|
|
|
2020-10-04 14:38:36 +00:00
|
|
|
append = [
|
|
|
|
{
|
|
|
|
"message": "Ajouter un élément de notation",
|
|
|
|
"type": "confirm",
|
|
|
|
"name": "append",
|
|
|
|
}
|
|
|
|
]
|
|
|
|
while prompt(append)["append"]:
|
2020-10-04 16:10:43 +00:00
|
|
|
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"]
|
2020-10-04 14:38:36 +00:00
|
|
|
|
|
|
|
return exercise
|
2020-10-04 14:11:55 +00:00
|
|
|
|
|
|
|
|
2020-10-04 16:10:43 +00:00
|
|
|
@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)
|