Compare commits

..

No commits in common. "ff94470fb4e171387a4469ee40297f3225d6d18a" and "3250a600c92ce46a5d75e7d74f669d01e223f572" have entirely different histories.

4 changed files with 52 additions and 164 deletions

View File

@ -19,12 +19,6 @@ main {
margin: auto; margin: auto;
} }
section {
margin-top: 20px;
margin-bottom: 20px;
}
/* Exam analysis */ /* Exam analysis */
#select { #select {

View File

@ -5,7 +5,6 @@ import dash
import dash_html_components as html import dash_html_components as html
import dash_core_components as dcc import dash_core_components as dcc
import dash_table import dash_table
import plotly.graph_objects as go
from datetime import date, datetime from datetime import date, datetime
import uuid import uuid
import pandas as pd import pandas as pd
@ -57,95 +56,68 @@ layout = html.Div(
), ),
html.Main( html.Main(
children=[ children=[
html.Section( html.Form(
id="new-exam",
children=[ children=[
html.Form( html.Label(
id="new-exam",
children=[ children=[
html.Label( "Classe",
children=[ dcc.Dropdown(
"Classe", id="tribe",
dcc.Dropdown( options=[
id="tribe", {"label": t["name"], "value": t["name"]}
options=[ for t in config["tribes"]
{"label": t["name"], "value": t["name"]} ],
for t in config["tribes"] value=config["tribes"][0]["name"],
],
value=config["tribes"][0]["name"],
),
]
), ),
html.Label( ]
children=[ ),
"Nom de l'évaluation", html.Label(
dcc.Input( children=[
id="exam_name", "Nom de l'évaluation",
type="text", dcc.Input(
placeholder="Nom de l'évaluation", id="exam_name",
), type="text",
] placeholder="Nom de l'évaluation",
), ),
html.Label( ]
children=[ ),
"Date", html.Label(
dcc.DatePickerSingle( children=[
id="date", "Date",
date=date.today(), dcc.DatePickerSingle(
**get_current_year_limit(), id="date",
), date=date.today(),
] **get_current_year_limit(),
), ),
html.Label( ]
children=[ ),
"Trimestre", html.Label(
dcc.Dropdown( children=[
id="term", "Trimestre",
options=[ dcc.Dropdown(
{"label": i + 1, "value": i + 1} id="term",
for i in range(3) options=[
], {"label": i + 1, "value": i + 1}
value=1, for i in range(3)
), ],
] value=1,
), ),
], ]
), ),
], ],
id="form",
), ),
html.Section( html.Div(
children=[
html.Div(
id="exercises",
children=[],
),
html.Button(
"Ajouter un exercice",
id="add-exercise",
className="add-exercise",
),
html.Div(
id="summary",
),
],
id="exercises", id="exercises",
children=[],
), ),
html.Section( html.Button(
children=[ "Ajouter un exercice",
html.Div( id="add-exercise",
id="score_rate", className="add-exercise",
), ),
html.Div( html.Div(
id="exercises-viz", id="summary",
),
html.Div(
id="competences-viz",
),
html.Div(
id="themes-viz",
),
],
id="visualisation",
), ),
] ]
), ),
@ -307,41 +279,6 @@ def store_exam(tribe, exam_name, date, term, exercices, elements, elements_id):
return exam.to_dict() return exam.to_dict()
@app.callback(
dash.dependencies.Output("score_rate", "children"),
dash.dependencies.Input("exam_store", "data"),
prevent_initial_call=True,
)
def score_rate(data):
exam = Exam(**data)
return [html.P(f"Barème /{exam.score_rate}")]
@app.callback(
dash.dependencies.Output("competences-viz", "figure"),
dash.dependencies.Input("exam_store", "data"),
prevent_initial_call=True,
)
def competences_viz(data):
exam = Exam(**data)
return [html.P(str(exam.competences_rate))]
@app.callback(
dash.dependencies.Output("themes-viz", "children"),
dash.dependencies.Input("exam_store", "data"),
prevent_initial_call=True,
)
def themes_viz(data):
exam = Exam(**data)
themes_rate = exam.themes_rate
fig = go.Figure()
if themes_rate:
fig.add_trace(go.Pie(labels=list(themes_rate.keys()), values=list(themes_rate.values())))
return [dcc.Graph(figure=fig)]
return []
@app.callback( @app.callback(
dash.dependencies.Output("is-saved", "children"), dash.dependencies.Output("is-saved", "children"),
dash.dependencies.Input("save-csv", "n_clicks"), dash.dependencies.Input("save-csv", "n_clicks"),

View File

@ -157,46 +157,3 @@ class Exam:
self.tribe_path.mkdir(exist_ok=True) self.tribe_path.mkdir(exist_ok=True)
base_df.to_csv(self.path(".csv"), index=False) base_df.to_csv(self.path(".csv"), index=False)
@property
def score_rate(self):
total = 0
for ex, questions in self._exercises.items():
total += sum([q["score_rate"] for q in questions])
return total
@property
def competences_rate(self):
""" Dictionnary with competences as key and total rate as value"""
rates = {}
for ex, questions in self._exercises.items():
for q in questions:
try:
q["competence"]
except KeyError:
pass
else:
try:
rates[q["competence"]] += q["score_rate"]
except KeyError:
rates[q["competence"]] = q["score_rate"]
return rates
@property
def themes_rate(self):
""" Dictionnary with themes as key and total rate as value"""
rates = {}
for ex, questions in self._exercises.items():
for q in questions:
try:
q["theme"]
except KeyError:
pass
else:
if q["theme"]:
try:
rates[q["theme"]] += q["score_rate"]
except KeyError:
rates[q["theme"]] = q["score_rate"]
return rates

View File

@ -88,7 +88,7 @@ def new_exam():
@cli.command() @cli.command()
@click.option("--debug", default=0, help="Debug mode for dash") @click.option("--debug", default=0, help="Debug mode for dash")
def dashboard(debug): def exam_analysis(debug):
dash.run_server(debug=bool(debug)) dash.run_server(debug=bool(debug))