1
0
Fork 0
mirror of https://codeberg.org/Mo8it/AdvLabDB.git synced 2024-12-20 23:41:20 +00:00

Replace all .has()

This commit is contained in:
Mo 2022-05-21 20:56:02 +02:00
parent d7886eb773
commit 91826cc98d

View file

@ -78,7 +78,7 @@ class SemesterRowFilter(FilterEqual):
if not has_request_context(): if not has_request_context():
return tuple() return tuple()
semesters = Semester.query.order_by(Semester.id.desc()) semesters = sortedSemestersStartingWithNewest()
return tuple((semester.id, semester.repr()) for semester in semesters) return tuple((semester.id, semester.repr()) for semester in semesters)
@ -474,7 +474,7 @@ class PartRowFilter(FilterEqual):
if not has_request_context(): if not has_request_context():
return tuple() return tuple()
parts = Part.query.filter(Part.semester == current_user.active_semester) parts = db.execute(select(Part).where(Part.semester == current_user.active_semester)).scalars()
return tuple((part.id, f"{part.program.repr()}{part.number}") for part in parts) return tuple((part.id, f"{part.program.repr()}{part.number}") for part in parts)
@ -576,7 +576,7 @@ class ProgramRowFilter(FilterEqual):
if not has_request_context(): if not has_request_context():
return tuple() return tuple()
programs = Program.query programs = db.execute(select(Program)).scalars()
return tuple((program.id, program.repr()) for program in programs) return tuple((program.id, program.repr()) for program in programs)
@ -596,7 +596,7 @@ class GroupView(SecureAdminModelView):
def query_factory(): def query_factory():
return partStudentQueryFactory().where( return partStudentQueryFactory().where(
or_( or_(
and_(PartStudent.group == None, PartStudent.part.has(Part.program == group.program)), and_(PartStudent.group == None, Part.program == group.program),
PartStudent.group == group, PartStudent.group == group,
) )
) )
@ -702,13 +702,13 @@ class ExperimentView(SecureAdminModelView):
def assistantQueryFactory(): def assistantQueryFactory():
return Assistant.query.filter(Assistant.user.has(User.active == True)) return Assistant.query.join(User).where(User.active == True)
class SemesterExperimentView(SecureAdminModelView): class SemesterExperimentView(SecureAdminModelView):
class ProgramFilter(ProgramRowFilter): class ProgramFilter(ProgramRowFilter):
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
return query.filter(self.column.experiment.has(Experiment.program_id == int(value))) return query.join(Experiment).where(Experiment.program_id == int(value))
class ExperimentEndpointLinkRowAction(CustomIdEndpointLinkRowAction): class ExperimentEndpointLinkRowAction(CustomIdEndpointLinkRowAction):
def customId(self, row): def customId(self, row):
@ -823,10 +823,11 @@ class SemesterExperimentView(SecureAdminModelView):
def userHasRoleFilterFactory(column, role_name): def userHasRoleFilterFactory(column, role_name):
class UserHasRoleFilter(BooleanEqualFilter): class UserHasRoleFilter(BooleanEqualFilter):
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
query = query.join(User)
if bool(int(value)): # value is string "0" or "1" if bool(int(value)): # value is string "0" or "1"
return query.filter(self.column.user.has(User.roles.any(Role.name == role_name))) return query.join(User.roles).where(Role.name == role_name)
else: else:
return query.filter(self.column.user.has(not_(User.roles.any(Role.name == role_name)))) return query.where(not_(User.roles.any(Role.name == role_name)))
return UserHasRoleFilter(column, f"Currently has {role_name} role") return UserHasRoleFilter(column, f"Currently has {role_name} role")
@ -930,7 +931,7 @@ class ExperimentRowFilter(FilterEqual):
if not has_request_context(): if not has_request_context():
return tuple() return tuple()
activeExperiments = Experiment.query.filter(Experiment.active == True) activeExperiments = db.execute(select(Experiment).where(Experiment.active == True)).scalars()
return tuple( return tuple(
( (
f"{activeExperiment.number},{activeExperiment.program_id}", f"{activeExperiment.number},{activeExperiment.program_id}",
@ -939,21 +940,23 @@ class ExperimentRowFilter(FilterEqual):
for activeExperiment in activeExperiments for activeExperiment in activeExperiments
) )
def get_values(value):
class GroupExperimentView(SecureAdminModelView):
class ExperimentFilter(ExperimentRowFilter):
def apply(self, query, value, alias=None):
values = value.split(",") values = value.split(",")
experimentNumber = int(values[0]) experimentNumber = int(values[0])
programId = int(values[1]) programId = int(values[1])
return query.filter( return (experimentNumber, programId)
self.column.semester_experiment.has(
SemesterExperiment.experiment.has(Experiment.program_id == programId)
), class GroupExperimentView(SecureAdminModelView):
self.column.semester_experiment.has( class ExperimentFilter(ExperimentRowFilter):
SemesterExperiment.experiment.has(Experiment.number == experimentNumber) def apply(self, query, value, alias=None):
), experimentNumber, programId = ExperimentRowFilter.get_values(value)
return (
query.join(SemesterExperiment)
.join(Experiment)
.where(Experiment.program_id == programId, Experiment.number == experimentNumber)
) )
class GroupEndpointLinkRowAction(CustomIdEndpointLinkRowAction): class GroupEndpointLinkRowAction(CustomIdEndpointLinkRowAction):
@ -1068,8 +1071,8 @@ class GroupExperimentView(SecureAdminModelView):
def groupExperimentQueryFactory(): def groupExperimentQueryFactory():
return GroupExperiment.query.filter( return GroupExperiment.query.join(SemesterExperiment).where(
GroupExperiment.semester_experiment.has(SemesterExperiment.semester == current_user.active_semester) SemesterExperiment.semester == current_user.active_semester
) )
@ -1085,21 +1088,13 @@ class AssistantRowFilter(FilterEqual):
class AppointmentView(SecureAdminModelView): class AppointmentView(SecureAdminModelView):
class ExperimentFilter(ExperimentRowFilter): class ExperimentFilter(ExperimentRowFilter):
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
values = value.split(",") experimentNumber, programId = ExperimentRowFilter.get_values(value)
experimentNumber = int(values[0])
programId = int(values[1])
return query.filter( return (
self.column.group_experiment.has( query.join(GroupExperiment)
GroupExperiment.semester_experiment.has( .join(SemesterExperiment)
SemesterExperiment.experiment.has(Experiment.program_id == programId) .join(Experiment)
) .where(Experiment.program_id == programId, Experiment.number == experimentNumber)
),
self.column.group_experiment.has(
GroupExperiment.semester_experiment.has(
SemesterExperiment.experiment.has(Experiment.number == experimentNumber)
)
),
) )
class AssistantFilter(AssistantRowFilter): class AssistantFilter(AssistantRowFilter):
@ -1205,7 +1200,7 @@ class ExperimentMarkView(SecureAdminModelView):
return False return False
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
return query.filter(self.column.part_student.has(PartStudent.student_id == int(value))) return query.join(PartStudent).where(PartStudent.student_id == int(value))
class AssistantFilter(AssistantRowFilter): class AssistantFilter(AssistantRowFilter):
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
@ -1216,7 +1211,7 @@ class ExperimentMarkView(SecureAdminModelView):
if not has_request_context(): if not has_request_context():
return tuple() return tuple()
admins = Admin.query.filter(Admin.user.has(User.active == True)) admins = db.execute(select(Admin).join(User).where(User.active == True)).scalars()
return tuple((admin.id, admin.repr()) for admin in admins) return tuple((admin.id, admin.repr()) for admin in admins)
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
@ -1224,37 +1219,27 @@ class ExperimentMarkView(SecureAdminModelView):
class ExperimentFilter(ExperimentRowFilter): class ExperimentFilter(ExperimentRowFilter):
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
values = value.split(",") experimentNumber, programId = ExperimentRowFilter.get_values(value)
experimentNumber = int(values[0])
programId = int(values[1])
return query.filter( return (
self.column.group_experiment.has( query.join(GroupExperiment)
GroupExperiment.semester_experiment.has( .join(SemesterExperiment)
SemesterExperiment.experiment.has(Experiment.program_id == programId) .join(Experiment)
) .where(Experiment.program_id == programId, Experiment.number == experimentNumber)
),
self.column.group_experiment.has(
GroupExperiment.semester_experiment.has(
SemesterExperiment.experiment.has(Experiment.number == experimentNumber)
)
),
) )
class ProgramFilter(ProgramRowFilter): class ProgramFilter(ProgramRowFilter):
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
return query.filter(self.column.part_student.has(PartStudent.part.has(Part.program_id == int(value)))) return query.join(PartStudent).join(Part).where(Part.program_id == int(value))
class PartFilter(PartRowFilter): class PartFilter(PartRowFilter):
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
return query.filter(self.column.part_student.has(PartStudent.part_id == int(value))) return query.join(PartStudent).where(PartStudent.part_id == int(value))
class SemesterFilter(SemesterRowFilter): class SemesterFilter(SemesterRowFilter):
def apply(self, query, value, alias=None): def apply(self, query, value, alias=None):
return query.filter( return (
self.column.group_experiment.has( query.join(GroupExperiment).join(SemesterExperiment).where(SemesterExperiment.semester_id == int(value))
GroupExperiment.semester_experiment.has(SemesterExperiment.semester_id == int(value))
)
) )
class PartStudentEndpointLinkRowAction(CustomIdEndpointLinkRowAction): class PartStudentEndpointLinkRowAction(CustomIdEndpointLinkRowAction):