|
|
@@ -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))
|