From dd4908cc4591aac4d05bded718bc83965415cce9 Mon Sep 17 00:00:00 2001 From: Mo8it Date: Mon, 23 May 2022 00:56:10 +0200 Subject: [PATCH] Fix analysis --- advlabdb/adminModelViews.py | 59 ++++++++++++++++++++++++------------- pyproject.toml | 2 ++ 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/advlabdb/adminModelViews.py b/advlabdb/adminModelViews.py index 39dea62..a44a33a 100644 --- a/advlabdb/adminModelViews.py +++ b/advlabdb/adminModelViews.py @@ -1467,32 +1467,47 @@ class AnalysisView(SecureAdminBaseView): return AnalysisView.htmlFig(fig) + def get_experiment_marks(assistant, attr): + data = [] + + for experimentMark in assistant.experiment_marks: + mark = getattr(experimentMark, attr) + if mark is not None: + data.append(mark) + + return np.array(data) + def markHists(markType, activeAssistants): attr = markType.lower() + "_mark" markTypeTitleAddition = f" | {markType} marks" + marks = [AnalysisView.get_experiment_marks(assistant, attr) for assistant in activeAssistants] hists = [ AnalysisView.markHist( - data=np.array([getattr(experimentMark, attr) for experimentMark in assistant.experiment_marks]), - title=assistant.repr() + markTypeTitleAddition, + data=marks[i], + title=activeAssistants[i].repr() + markTypeTitleAddition, ) - for assistant in activeAssistants + for i in range(len(marks)) ] hists.append( AnalysisView.markHist( - data=np.hstack( - [ - [getattr(experimentMark, attr) for experimentMark in assistant.experiment_marks] - for assistant in activeAssistants - ] - ), + data=np.hstack(marks), title="All" + markTypeTitleAddition, ) ) return hists + def get_final_part_marks(part): + data = [] + for partStudent in part.part_students: + mark = partStudent.final_part_mark + if mark is not None: + data.append(mark) + + return np.array(data) + @expose(methods=("GET", "POST")) def index(self): form = AnalysisView.AnalysisForm() @@ -1515,7 +1530,7 @@ class AnalysisView(SecureAdminBaseView): parts = current_user.active_semester.parts activeSemesterFinalPartMarksHists = [ AnalysisView.markHist( - data=np.array([partStudent.final_part_mark for partStudent in part.part_students]), + data=AnalysisView.get_final_part_marks(part), title=part.repr(), ) for part in parts @@ -1538,17 +1553,19 @@ class AnalysisView(SecureAdminBaseView): ) fig = Figure() - ax = fig.subplots() - x = range(1, len(meanFinalPartMarks) + 1) - ax.plot( - x, - meanFinalPartMarks, - marker="d", - ) - # TODO: Change ticks to semester labels - # TODO: Check linestyle - ax.set_xticks(x) - ax.set_xlim(0.5, x[-1] + 0.5) + lenMeanFinalPartMarks = len(meanFinalPartMarks) + if lenMeanFinalPartMarks > 0: + ax = fig.subplots() + x = range(1, lenMeanFinalPartMarks + 1) + ax.plot( + x, + meanFinalPartMarks, + marker="d", + ) + # TODO: Change ticks to semester labels + # TODO: Check linestyle + ax.set_xticks(x) + ax.set_xlim(0.5, x[-1] + 0.5) meanFinalPartMarksPlot = AnalysisView.htmlFig(fig) diff --git a/pyproject.toml b/pyproject.toml index 8c1a5f6..5d1c661 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,8 @@ python-dotenv = ">=0.20.0" gunicorn = ">=20.1.0" email-validator = ">=1.2.1" +[tool.poetry.dev-dependencies] + [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"