theenglishway (time) пре 6 година
родитељ
комит
d5432f6e2d
4 измењених фајлова са 20 додато и 22 уклоњено
  1. 11 10
      planner/models/items.py
  2. 1 0
      planner/models/milestones.py
  3. 2 4
      planner/models/mixins.py
  4. 6 8
      planner/models/sprints.py

+ 11 - 10
planner/models/items.py

@@ -1,4 +1,4 @@
-from dataclasses import dataclass
+from dataclasses import dataclass, field
 from datetime import datetime
 from copy import deepcopy
 
@@ -13,8 +13,11 @@ class Item(SchemaMixin, DbMixin):
     name: str
     description: str
     category: str
-    milestone: Milestone
-    sprint: Sprint
+    milestone_id: int = None
+    milestone: Milestone = field(init=False)
+    sprint_id: int = None
+    sprint: Sprint = field(init=False)
+    uuid: str = None
     date_added: datetime = None
     date_expected: datetime = None
     date_started: datetime = None
@@ -55,13 +58,12 @@ class Item(SchemaMixin, DbMixin):
         date_started:
             type: date
     """
+    def __post_init__(self):
+        self.milestone = Milestone.fetch(self.milestone_id) if self.milestone_id else None
+        self.sprint = Sprint.fetch(self.sprint_id) if self.sprint_id else None
 
     @classmethod
     def get(cls, document):
-        kwargs = deepcopy(document)
-        milestone = Milestone.fetch(kwargs.pop('milestone_id', None))
-        sprint = Sprint.fetch(kwargs.pop('sprint_id', None))
-
         category_to_kls = {
             'feature': Feature,
             'limitation': Limitation,
@@ -69,9 +71,8 @@ class Item(SchemaMixin, DbMixin):
             'unknown': Unknown,
         }
 
-        kls = category_to_kls[kwargs.get('category')]
-
-        return kls(document=document, milestone=milestone, sprint=sprint, **kwargs)
+        kls = category_to_kls[document.get('category')]
+        return kls(document=document, **document)
 
     def __repr__(self):
         return "{}(name='{}', milestone='{}')".format(self.__class__.__qualname__, self.name, repr(self.milestone))

+ 1 - 0
planner/models/milestones.py

@@ -11,6 +11,7 @@ class Milestone(SchemaMixin, DbMixin):
     document: dict
     name: str
     description: str
+    uuid: str = None
     date_added: datetime = None
     date_expected: datetime = None
     date_started: datetime = None

+ 2 - 4
planner/models/mixins.py

@@ -1,4 +1,5 @@
 import yaml
+import uuid
 from planner import db, validator
 
 
@@ -16,10 +17,6 @@ class SchemaMixin:
         ok = validator.validate(data, cls.schema())
         return ok, validator.document if ok else validator.errors
 
-    @classmethod
-    def create(cls, document):
-        return cls(document=document, **(document))
-
     @classmethod
     def add_to_registry(cls, registry):
         registry.add(cls.class_name(), cls.schema())
@@ -43,4 +40,5 @@ class DbMixin:
             return None
 
     def save(self):
+        self.document.update({'uuid': str(uuid.uuid4())})
         db.table(self.class_name()).insert(self.document)

+ 6 - 8
planner/models/sprints.py

@@ -1,4 +1,4 @@
-from dataclasses import dataclass
+from dataclasses import dataclass, field
 from datetime import datetime
 from copy import deepcopy
 
@@ -11,7 +11,9 @@ class Sprint(SchemaMixin, DbMixin):
     document: dict
     name: str
     description: str
-    milestone: Milestone
+    milestone_id: int
+    milestone: Milestone = field(init=False)
+    uuid: str = None
     date_added: datetime = None
     date_expected: datetime = None
     date_started: datetime = None
@@ -34,12 +36,8 @@ class Sprint(SchemaMixin, DbMixin):
             type: datetime
             default_setter: utcnow
     """
-
-    @classmethod
-    def get(cls, document):
-        kwargs = deepcopy(document)
-        milestone = Milestone.fetch(kwargs.pop('milestone_id'))
-        return cls(document=document, milestone=milestone, **kwargs)
+    def __post_init__(self):
+        self.milestone = Milestone.fetch(self.milestone_id)
 
     def __repr__(self):
         return "{}(name='{}', milestone='{}')".format(self.__class__.__qualname__, self.name, repr(self.milestone))