From 820bde254101d48fec554a108d20bb0f082d3f6d Mon Sep 17 00:00:00 2001 From: Mo8it Date: Wed, 2 Mar 2022 18:59:14 +0100 Subject: [PATCH] Further filter and sort --- advlabdb/adminModelViews.py | 36 +++++++++++++++++++++++++++++++++--- poetry.lock | 8 ++++---- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/advlabdb/adminModelViews.py b/advlabdb/adminModelViews.py index 0f931ab..3a2ea0e 100644 --- a/advlabdb/adminModelViews.py +++ b/advlabdb/adminModelViews.py @@ -281,6 +281,10 @@ class SemesterView(SecureAdminModelView): "label", "year", ] + column_default_sort = [ + ("year", True), + ("label", True), + ] def customCreateModel(self, form): return Semester.customInitFromOldSemester( @@ -553,9 +557,20 @@ class GroupView(SecureAdminModelView): class ExperimentView(SecureAdminModelView): + class ProgramFilter(FilterEqual): + def get_options(self, view): + programs = Program.query + return tuple((program.id, program.repr()) for program in programs) + + def apply(self, query, value, alias=None): + return query.filter(self.column.program_id == int(value)) + can_view_details = True - column_filters = ("active",) + column_filters = ( + ProgramFilter(Experiment, "Program"), + "active", + ) column_list = [ "number", "program", @@ -574,6 +589,10 @@ class ExperimentView(SecureAdminModelView): "duration_in_days", "semester_experiments", ] + column_searchable_list = [ + "number", + "title", + ] form_columns = column_details_list.copy() form_columns.remove("semester_experiments") @@ -597,6 +616,14 @@ def assistantQueryFactory(): class SemesterExperimentView(SecureAdminModelView): + class ProgramFilter(FilterEqual): + def get_options(self, view): + programs = Program.query + return tuple((program.id, program.repr()) for program in programs) + + def apply(self, query, value, alias=None): + return query.filter(self.column.experiment.has(Experiment.program_id == int(value))) + class CreateForm(Form): def experimentQueryFactory(): return Experiment.query.filter(Experiment.active == True) @@ -640,7 +667,6 @@ class SemesterExperimentView(SecureAdminModelView): column_list = [ "experiment", "assistants", - "semester", ] column_details_list = column_list + [ "oral_weighting", @@ -648,7 +674,11 @@ class SemesterExperimentView(SecureAdminModelView): "final_weighting", "group_experiments", ] - column_filters = ("experiment",) + column_filters = (ProgramFilter(SemesterExperiment, "Program"),) + column_searchable_list = [ + "experiment.number", + "experiment.title", + ] def queryFilter(self): return SemesterExperiment.semester == userActiveSemester() diff --git a/poetry.lock b/poetry.lock index 81d6b22..4ed0967 100644 --- a/poetry.lock +++ b/poetry.lock @@ -146,7 +146,7 @@ Flask = "*" [[package]] name = "flask-security-too" -version = "4.1.2" +version = "4.1.3" description = "Simple security for Flask apps." category = "main" optional = false @@ -164,7 +164,7 @@ passlib = ">=1.7.2" [package.extras] babel = ["babel (>=2.7.0)", "flask-babel (>=2.0.0)"] -common = ["bcrypt (>=3.1.5)", "flask-mail (>=0.9.1)"] +common = ["bcrypt (>=3.1.5)", "flask-mail (>=0.9.1)", "bleach (>=3.3.1)"] fsqla = ["flask-sqlalchemy (>=2.4.4)", "sqlalchemy (>=1.3.6)", "sqlalchemy-utils (>=0.34.1)"] mfa = ["cryptography (>=3.0.0)", "pyqrcode (>=1.2)", "phonenumberslite (>=8.11.1)"] @@ -470,8 +470,8 @@ flask-principal = [ {file = "Flask-Principal-0.4.0.tar.gz", hash = "sha256:f5d6134b5caebfdbb86f32d56d18ee44b080876a27269560a96ea35f75c99453"}, ] flask-security-too = [ - {file = "Flask-Security-Too-4.1.2.tar.gz", hash = "sha256:88c3d4cfa415ef4dd6f71052ef7a806a5079d8ee33d3e384d2fcd48d802d9a9b"}, - {file = "Flask_Security_Too-4.1.2-py2.py3-none-any.whl", hash = "sha256:ad33186feb9e03bf299e9bb6577c8425a38da0246e14e06fd4c28660a1acc099"}, + {file = "Flask-Security-Too-4.1.3.tar.gz", hash = "sha256:996d8d286789a72478462ee6f8a1371254a0dc4f8feea6f33534c2a3772c91cf"}, + {file = "Flask_Security_Too-4.1.3-py2.py3-none-any.whl", hash = "sha256:d417b5fccef96bad852944ffcfae9267baa2f353699ff4a6f77b4a8286a93d37"}, ] flask-sqlalchemy = [ {file = "Flask-SQLAlchemy-2.5.1.tar.gz", hash = "sha256:2bda44b43e7cacb15d4e05ff3cc1f8bc97936cc464623424102bfc2c35e95912"},