Skip to content

Commit 4501f31

Browse files
committed
fix anntation, add collect demo
1 parent 6c1bfc3 commit 4501f31

File tree

4 files changed

+65
-44
lines changed

4 files changed

+65
-44
lines changed

fe-demo/.nvmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
18.19.0

requirement.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ greenlet==3.0.1
88
h11==0.14.0
99
httptools==0.6.1
1010
idna==3.6
11-
pydantic==2.5.2
12-
pydantic2-resolve==2.0.0
13-
pydantic_core==2.14.5
11+
pydantic==2.7.0
12+
pydantic2-resolve==2.1.1
1413
python-dotenv==1.0.0
1514
PyYAML==6.0.1
1615
sniffio==1.3.0

src/router/sample_1/schema.py

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from __future__ import annotations
2+
13
from typing import Optional
24
from pydantic_resolve import LoaderDepend
35
from pydantic import ConfigDict
@@ -14,25 +16,6 @@
1416
import src.services.team.schema as tms
1517

1618

17-
class Sample1TaskDetail(ts.Task):
18-
user: Optional[us.User] = None
19-
def resolve_user(self, loader=LoaderDepend(ul.user_batch_loader)):
20-
return loader.load(self.owner_id)
21-
22-
class Sample1StoryDetail(ss.Story):
23-
tasks: list[Sample1TaskDetail] = []
24-
def resolve_tasks(self, loader=LoaderDepend(tl.story_to_task_loader)):
25-
return loader.load(self.id)
26-
27-
owner: Optional[us.User] = None
28-
def resolve_owner(self, loader=LoaderDepend(ul.user_batch_loader)):
29-
return loader.load(self.owner_id)
30-
31-
class Sample1SprintDetail(sps.Sprint):
32-
stories: list[Sample1StoryDetail] = []
33-
def resolve_stories(self, loader=LoaderDepend(sl.sprint_to_story_loader)):
34-
return loader.load(self.id)
35-
3619
class Sample1TeamDetail(tms.Team):
3720
sprints: list[Sample1SprintDetail] = []
3821
def resolve_sprints(self, loader=LoaderDepend(spl.team_to_sprint_loader)):
@@ -47,4 +30,23 @@ class Sample1TeamDetail2(tms.Team):
4730

4831
members: list[us.User] = []
4932
def resolve_members(self, loader=LoaderDepend(ul.team_to_user_loader)):
50-
return loader.load(self.id)
33+
return loader.load(self.id)
34+
35+
class Sample1TaskDetail(ts.Task):
36+
user: Optional[us.User] = None
37+
def resolve_user(self, loader=LoaderDepend(ul.user_batch_loader)):
38+
return loader.load(self.owner_id)
39+
40+
class Sample1SprintDetail(sps.Sprint):
41+
stories: list[Sample1StoryDetail] = []
42+
def resolve_stories(self, loader=LoaderDepend(sl.sprint_to_story_loader)):
43+
return loader.load(self.id)
44+
45+
class Sample1StoryDetail(ss.Story):
46+
tasks: list[Sample1TaskDetail] = []
47+
def resolve_tasks(self, loader=LoaderDepend(tl.story_to_task_loader)):
48+
return loader.load(self.id)
49+
50+
owner: Optional[us.User] = None
51+
def resolve_owner(self, loader=LoaderDepend(ul.user_batch_loader)):
52+
return loader.load(self.owner_id)

src/router/sample_4/schema.py

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
from __future__ import annotations
2+
13
from typing import List, Optional
24
from pydantic import Field
3-
from pydantic_resolve import LoaderDepend, model_config
5+
from pydantic_resolve import LoaderDepend, model_config, ICollector
46

57
import src.services.task.loader as tl
68
import src.services.user.loader as ul
@@ -13,22 +15,34 @@
1315
import src.services.sprint.schema as sps
1416
import src.services.team.schema as tms
1517

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
2022

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)):
2532
return loader.load(self.id)
26-
33+
2734
task_count: int = 0
28-
# task_count: int = Field(default=0, exclude=True)
2935
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()
3141

42+
description: str = ''
43+
def post_default_handler(self):
44+
self.description = f'team: "{self.name}" has {self.task_count} tasks in total.'
45+
3246
# @model_config()
3347
class Sample4SprintDetail(sps.Sprint):
3448
stories: list[Sample4StoryDetail] = []
@@ -40,15 +54,20 @@ def resolve_stories(self, loader=LoaderDepend(sl.sprint_to_story_loader)):
4054
def post_task_count(self):
4155
return sum([s.task_count for s in self.stories])
4256

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'}
4760

61+
tasks: list[Sample4TaskDetail] = []
62+
def resolve_tasks(self, loader=LoaderDepend(tl.story_to_task_loader)):
63+
return loader.load(self.id)
64+
4865
task_count: int = 0
66+
# task_count: int = Field(default=0, exclude=True)
4967
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

Comments
 (0)