Kaynağa Gözat

Store collection's parent in database (bug #77)

Guillaume Ayoub 12 yıl önce
ebeveyn
işleme
0c2c9c3a7e
1 değiştirilmiş dosya ile 7 ekleme ve 10 silme
  1. 7 10
      radicale/storage/database.py

+ 7 - 10
radicale/storage/database.py

@@ -45,10 +45,7 @@ class DBCollection(Base):
     __tablename__ = "collection"
 
     path = Column(String, primary_key=True)
-    parent_path = Column(String, ForeignKey("collection.path"))
-
-    parent = relationship(
-        "DBCollection", backref="children", remote_side=[path])
+    parent_path = Column(String)
 
 
 class DBItem(Base):
@@ -152,6 +149,7 @@ class Collection(ical.Collection):
         else:
             db_collection = DBCollection()
             db_collection.path = self.path
+            db_collection.parent_path = "/".join(self.path.split("/")[:-1])
             self.session.add(db_collection)
 
         for header in headers:
@@ -197,10 +195,9 @@ class Collection(ical.Collection):
     @classmethod
     def children(cls, path):
         session = Session()
-        if path:
-            children = session.query(DBCollection).get(path).children
-        else:
-            children = session.query(DBCollection).filter_by(parent=None).all()
+        children = (
+            session.query(DBCollection)
+            .filter_by(parent_path=path or "").all())
         collections = [cls(child.path) for child in children]
         session.close()
         return collections
@@ -212,7 +209,7 @@ class Collection(ical.Collection):
         session = Session()
         result = (
             session.query(DBCollection)
-            .filter_by(parent_path=path).count() > 0)
+            .filter_by(parent_path=path or "").count() > 0)
         session.close()
         return result
 
@@ -223,7 +220,7 @@ class Collection(ical.Collection):
         session = Session()
         result = (
             session.query(DBItem)
-            .filter_by(collection_path=path).count() > 0)
+            .filter_by(collection_path=path or "").count() > 0)
         session.close()
         return result