From 5eb56aae9c5f435a11c77b6bbc85124993a6a0c6 Mon Sep 17 00:00:00 2001 From: Hangzhi Yu <hangzhi@protonmail.com> Date: Sat, 18 Jul 2020 01:17:41 +0200 Subject: [PATCH] Refactor predicates --- aleksis/apps/alsijil/util/predicates.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/aleksis/apps/alsijil/util/predicates.py b/aleksis/apps/alsijil/util/predicates.py index 1eb8a8e8f..af229770c 100644 --- a/aleksis/apps/alsijil/util/predicates.py +++ b/aleksis/apps/alsijil/util/predicates.py @@ -16,7 +16,9 @@ def is_lesson_teacher(user: User, obj: LessonPeriod) -> bool: Checks whether the person linked to the user is a teacher in the lesson linked to the given LessonPeriod. """ - return user.person in obj.lesson.teachers.all() + if hasattr(obj, "lesson"): + return user.person in obj.lesson.teachers.all() + return True @predicate @@ -26,7 +28,9 @@ def is_lesson_participant(user: User, obj: LessonPeriod) -> bool: Checks whether the person linked to the user is a member in the groups linked to the given LessonPeriod. """ - return obj.lesson.groups.filter(members=user.person).exists() + if hasattr(obj, "lesson"): + return obj.lesson.groups.filter(members=user.person).exists() + return True @predicate @@ -37,7 +41,9 @@ def is_lesson_parent_group_owner(user: User, obj: LessonPeriod) -> bool: Checks whether the person linked to the user is the owner of any parent groups of any groups of the given LessonPeriods lesson. """ - return obj.lesson.groups.filter(parent_groups__owners=user.person).exists() + if hasattr(obj, "lesson"): + return obj.lesson.groups.filter(parent_groups__owners=user.person).exists() + return True @predicate @@ -106,9 +112,11 @@ def has_lesson_group_object_perm(perm: str): @predicate(name) def fn(user: User, obj: LessonPeriod) -> bool: - for group in obj.lesson.groups.all(): - if check_object_permission(user, perm, group): - return True - return False + if hasattr(obj, "lesson"): + for group in obj.lesson.groups.all(): + if check_object_permission(user, perm, group): + return True + return False + return True return fn -- GitLab