Kaynağa Gözat

Load only related objects

theenglishway (time) 6 yıl önce
ebeveyn
işleme
021eb80c8b

+ 1 - 0
planner/models/comments.py

@@ -14,6 +14,7 @@ class Comment(SchemaMixin, DbMixin):
 
     document: dict
     text: str
+    id: int = None
     item_id: int = None
     item: Item = field(init=False)
     uuid: str = None

+ 3 - 1
planner/models/items.py

@@ -1,6 +1,7 @@
 from dataclasses import dataclass, field
 from datetime import datetime
 from typing import List
+from tinydb import Query
 
 from .mixins import SchemaMixin, DbMixin
 from .milestones import Milestone
@@ -22,6 +23,7 @@ class Item(SchemaMixin, DbMixin):
     name: str
     description: str
     category: str
+    id: int = None
     comments: List['Comment'] = field(default_factory=lambda: [])
     milestone_id: int = None
     milestone: Milestone = field(init=False)
@@ -74,7 +76,7 @@ class Item(SchemaMixin, DbMixin):
 
     def load_reverse(self):
         from .comments import Comment
-        self.comments = [Comment.get(d) for d in db.table(Comment.class_name()).all()]
+        self.comments = [Comment.get(d) for d in db.table(Comment.class_name()).search(Query().item_id == self.id)]
 
     @classmethod
     def class_name(cls):

+ 5 - 3
planner/models/milestones.py

@@ -1,6 +1,6 @@
 import click
 from typing import List
-from jinja2 import Template
+from tinydb import Query
 
 from dataclasses import dataclass, field
 from datetime import datetime
@@ -21,6 +21,7 @@ class Milestone(SchemaMixin, DbMixin):
     document: dict
     name: str
     description: str
+    id: int = None
     sprints: List['Sprint'] = None
     items: List['Item'] = None
     uuid: str = None
@@ -48,8 +49,9 @@ class Milestone(SchemaMixin, DbMixin):
     def load_reverse(self):
         from .items import Item
         from .sprints import Sprint
-        self.items = [Item.get(d) for d in db.table(Item.class_name()).all()]
-        self.sprints = [Sprint.get(d) for d in db.table(Sprint.class_name()).all()]
+        db.table(Item.class_name())
+        self.items = [Item.get(d) for d in db.table(Item.class_name()).search(Query().milestone_id == self.id)]
+        self.sprints = [Sprint.get(d) for d in db.table(Sprint.class_name()).search(Query().milestone_id == self.id)]
 
     def __repr__(self):
         return "{}(name='{}')".format(self.__class__.__qualname__, self.name)

+ 1 - 0
planner/models/mixins.py

@@ -59,6 +59,7 @@ class DbMixin:
             # The cache is updated a first time so that instances looking up
             # for this instance during the load_reverse can find it
             kls.cache[key] = instance
+            instance.id = document.doc_id
             instance.load_reverse()
             # The cache value is updated with its final value
             kls.cache[key] = instance

+ 3 - 1
planner/models/sprints.py

@@ -1,6 +1,7 @@
 from dataclasses import dataclass, field
 from datetime import datetime
 from typing import List
+from tinydb import Query
 
 from .mixins import SchemaMixin, DbMixin
 from .milestones import Milestone
@@ -16,6 +17,7 @@ class Sprint(SchemaMixin, DbMixin):
     description: str
     milestone_id: int
     milestone: Milestone = field(init=False)
+    id: int = None
     items: List['Item'] = None
     uuid: str = None
     date_added: datetime = None
@@ -46,7 +48,7 @@ class Sprint(SchemaMixin, DbMixin):
 
     def load_reverse(self):
         from .items import Item
-        self.items = [Item.get(d) for d in db.table('item').all()]
+        self.items = [Item.get(d) for d in db.table('item').search(Query().sprint_id == self.id)]
 
     def __repr__(self):
         return "{}(name='{}', milestone='{}')".format(self.__class__.__qualname__, self.name, repr(self.milestone))