|
|
@@ -1,18 +1,22 @@
|
|
|
from dataclasses import dataclass, field
|
|
|
from datetime import datetime
|
|
|
-from copy import deepcopy
|
|
|
+from typing import List
|
|
|
|
|
|
from .mixins import SchemaMixin, DbMixin
|
|
|
from .milestones import Milestone
|
|
|
+from planner import db
|
|
|
|
|
|
|
|
|
@dataclass(repr=False)
|
|
|
class Sprint(SchemaMixin, DbMixin):
|
|
|
+ cache_keys = ('name',)
|
|
|
+
|
|
|
document: dict
|
|
|
name: str
|
|
|
description: str
|
|
|
milestone_id: int
|
|
|
milestone: Milestone = field(init=False)
|
|
|
+ items: List['Item'] = None
|
|
|
uuid: str = None
|
|
|
date_added: datetime = None
|
|
|
date_expected: datetime = None
|
|
|
@@ -36,11 +40,16 @@ class Sprint(SchemaMixin, DbMixin):
|
|
|
type: datetime
|
|
|
default_setter: utcnow
|
|
|
"""
|
|
|
+
|
|
|
def __post_init__(self):
|
|
|
self.milestone = Milestone.fetch(self.milestone_id)
|
|
|
|
|
|
+ def load_reverse(self):
|
|
|
+ from .items import Item
|
|
|
+ self.items = [Item.get(d) for d in db.table('item').all()]
|
|
|
+
|
|
|
def __repr__(self):
|
|
|
return "{}(name='{}', milestone='{}')".format(self.__class__.__qualname__, self.name, repr(self.milestone))
|
|
|
|
|
|
def __terminal__(self):
|
|
|
- return f"Sprint : {self.name}"
|
|
|
+ return f"Sprint : {self.name} ({self.items})"
|