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