1
+ from __future__ import annotations
2
+
1
3
from typing import List , Optional
2
4
from pydantic import Field
3
- from pydantic_resolve import LoaderDepend , model_config
5
+ from pydantic_resolve import LoaderDepend , model_config , ICollector
4
6
5
7
import src .services .task .loader as tl
6
8
import src .services .user .loader as ul
13
15
import src .services .sprint .schema as sps
14
16
import src .services .team .schema as tms
15
17
16
- class Sample4TaskDetail ( ts . Task ):
17
- user : Optional [ us . User ] = None
18
- def resolve_user ( self , loader = LoaderDepend ( ul . user_batch_loader )):
19
- return loader . load ( self .owner_id )
18
+ class CntCollector ( ICollector ):
19
+ def __init__ ( self , alias ):
20
+ self . alias = alias
21
+ self .counter = 0
20
22
21
- # @model_config()
22
- class Sample4StoryDetail (ss .Story ):
23
- tasks : list [Sample4TaskDetail ] = []
24
- def resolve_tasks (self , loader = LoaderDepend (tl .story_to_task_loader )):
23
+ def add (self , val ):
24
+ self .counter = self .counter + len (val )
25
+
26
+ def values (self ):
27
+ return self .counter
28
+
29
+ class Sample4TeamDetail (tms .Team ):
30
+ sprints : list [Sample4SprintDetail ] = []
31
+ def resolve_sprints (self , loader = LoaderDepend (spl .team_to_sprint_loader )):
25
32
return loader .load (self .id )
26
-
33
+
27
34
task_count : int = 0
28
- # task_count: int = Field(default=0, exclude=True)
29
35
def post_task_count (self ):
30
- return len (self .tasks )
36
+ return sum ([s .task_count for s in self .sprints ])
37
+
38
+ total_task_count : int = 0
39
+ def post_total_task_count (self , collector = CntCollector (alias = 'story_tasks' )):
40
+ return collector .values ()
31
41
42
+ description : str = ''
43
+ def post_default_handler (self ):
44
+ self .description = f'team: "{ self .name } " has { self .task_count } tasks in total.'
45
+
32
46
# @model_config()
33
47
class Sample4SprintDetail (sps .Sprint ):
34
48
stories : list [Sample4StoryDetail ] = []
@@ -40,15 +54,20 @@ def resolve_stories(self, loader=LoaderDepend(sl.sprint_to_story_loader)):
40
54
def post_task_count (self ):
41
55
return sum ([s .task_count for s in self .stories ])
42
56
43
- class Sample4TeamDetail (tms .Team ):
44
- sprints : list [Sample4SprintDetail ] = []
45
- def resolve_sprints (self , loader = LoaderDepend (spl .team_to_sprint_loader )):
46
- return loader .load (self .id )
57
+ # @model_config()
58
+ class Sample4StoryDetail (ss .Story ):
59
+ __pydantic_resolve_collect__ = {'tasks' : 'story_tasks' }
47
60
61
+ tasks : list [Sample4TaskDetail ] = []
62
+ def resolve_tasks (self , loader = LoaderDepend (tl .story_to_task_loader )):
63
+ return loader .load (self .id )
64
+
48
65
task_count : int = 0
66
+ # task_count: int = Field(default=0, exclude=True)
49
67
def post_task_count (self ):
50
- return sum ([s .task_count for s in self .sprints ])
51
-
52
- description : str = ''
53
- def post_default_handler (self ):
54
- self .description = f'team: "{ self .name } " has { self .task_count } tasks in total.'
68
+ return len (self .tasks )
69
+
70
+ class Sample4TaskDetail (ts .Task ):
71
+ user : Optional [us .User ] = None
72
+ def resolve_user (self , loader = LoaderDepend (ul .user_batch_loader )):
73
+ return loader .load (self .owner_id )
0 commit comments