From 82f53ef0c6fa92951eba7ed1ba9f5237dc9a6449 Mon Sep 17 00:00:00 2001
From: Jiri Kalvoda <jirikalvoda@kam.mff.cuni.cz>
Date: Wed, 6 Oct 2021 13:02:14 +0200
Subject: [PATCH] =?UTF-8?q?mo.rights:=20Ke=C5=A1ov=C3=A1n=C3=AD=20root=5Fp?=
 =?UTF-8?q?lace?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/db.py     | 3 ++-
 mo/rights.py | 9 ++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/mo/db.py b/mo/db.py
index 1b3e5ff9..c52547d2 100644
--- a/mo/db.py
+++ b/mo/db.py
@@ -136,7 +136,8 @@ class Place(Base):
         return place_levels[self.level].in_name() + " " + name
 
 
-def get_root_place():
+def get_root_place() -> Place:
+    """Obvykle voláme mo.rights.Gatekeeper.get_root_place(), kterékešuje."""
     return get_session().query(Place).filter_by(parent=None).one()
 
 
diff --git a/mo/rights.py b/mo/rights.py
index b0e8878a..1c8fdfa8 100644
--- a/mo/rights.py
+++ b/mo/rights.py
@@ -358,6 +358,7 @@ class Gatekeeper:
     roles: List[db.UserRole]
     parent_cache: Dict[int, List[db.Place]]
     rights_cache: Dict[Tuple[Optional[int], Optional[int], Optional[str], Optional[int], Optional[db.RoleType]], Rights]
+    root_place: Optional[db.Place]
 
     def __init__(self, user: db.User):
         self.user = user
@@ -365,6 +366,12 @@ class Gatekeeper:
         assert user.is_org or user.is_admin
         self.parent_cache = {}
         self.rights_cache = {}
+        self.root_place = None
+
+    def get_root_place(self) -> db.Place:
+        if not self.root_place:
+            self.root_place = db.get_root_place()
+        return self.root_place
 
     def get_ancestors(self, place: db.Place) -> List[db.Place]:
         pid = place.place_id
@@ -425,7 +432,7 @@ class Gatekeeper:
         elif for_place:
             place = for_place
         else:
-            place = db.get_root_place()
+            place = self.get_root_place()
         rights = RoundRights()
         rights.round = round
         rights._clone_from(self.rights_for(
-- 
GitLab