Quellcode durchsuchen

Clean the user's collection creation code

Guillaume Ayoub vor 9 Jahren
Ursprung
Commit
d322d3f394
2 geänderte Dateien mit 11 neuen und 13 gelöschten Zeilen
  1. 6 11
      radicale/__init__.py
  2. 5 2
      radicale/storage.py

+ 6 - 11
radicale/__init__.py

@@ -305,19 +305,14 @@ class Application:
         # Create principal collection
         if user and is_authenticated:
             principal_path = "/%s/" % user
-            if self.authorized(user, self.Collection(principal_path, True),
-                               "w"):
+            collection = self.Collection(principal_path, True)
+            if self.authorized(user, collection, "w"):
                 with self.Collection.acquire_lock("r"):
-                    principal = next(self.Collection.discover(principal_path),
-                                     None)
-                if not principal or principal.path != principal_path.strip("/"):
+                    principal = next(
+                        self.Collection.discover(principal_path), None)
+                if not principal or principal.path != user:
                     with self.Collection.acquire_lock("w"):
-                        # the collection might exist by now
-                        principal = next(self.Collection.discover(
-                            principal_path), None)
-                        if (not principal or
-                                principal.path != principal_path.strip("/")):
-                            self.Collection.create_collection(principal_path)
+                        self.Collection.create_collection(principal_path)
 
         # Get content
         content_length = int(environ.get("CONTENT_LENGTH") or 0)

+ 5 - 2
radicale/storage.py

@@ -407,11 +407,14 @@ class Collection(BaseCollection):
         folder = os.path.expanduser(
             cls.configuration.get("storage", "filesystem_folder"))
         path = path_to_filesystem(folder, href)
-        if not os.path.exists(path):
+
+        self = cls(href)
+        if os.path.exists(path):
+            return self
+        else:
             os.makedirs(path)
         if not tag and collection:
             tag = collection[0].name
-        self = cls(href)
 
         if tag == "VCALENDAR":
             self.set_meta("tag", "VCALENDAR")