521xueweihan / HelloGitHub

:octocat: 分享 GitHub 上有趣、入门级的开源项目。Share interesting, entry-level open source projects on GitHub.
https://hellogithub.com
85.63k stars 9.44k forks source link

【开源自荐】Pydantic-resolve, 构造更精准的视图数据 #2696

Open allmonday opened 2 months ago

allmonday commented 2 months ago

推荐项目

class Blog(BaseModel): id: int title: str

comments: list[Comment] = []
def resolve_comments(self, loader=LoaderDepend(blog_to_comments_loader)):
    return loader.load(self.id)

comment_count: int = 0
def post_comment_count(self):
    return len(self.comments)

class MyBlogSite(BaseModel): blogs: list[Blog] name: str

comment_count: int = 0
def post_comment_count(self):
    return sum([b.comment_count for b in self.blogs])

async def main(): my_blog_site = MyBlogSite( name: "tangkikodo's blog" blogs = [ Blog(id=1, title='what is pydantic-resolve'), Blog(id=2, title='what is composition oriented development pattarn'), ] ) my_blog_site = await Resolver().resolve(my_blog_site)


output
```json
{
    "name": "tangkikodo's blog",
    "blogs": [
        {
            "id": 1,
            "title": "what is pydantic-resolve",
            "comments": [
                {
                    "id": 1,
                    "content": "its interesting"
                },
                {
                    "id": 2,
                    "content": "i dont understand"
                }
            ],
            "comment_count": 2
        },
        {
            "id": 2,
            "title": "what is composition oriented development pattarn",
            "comments": [
                {
                    "id": 3,
                    "content": "why? how?"
                },
                {
                    "id": 4,
                    "content": "wow!"
                }
            ],
            "comment_count": 2
        }
    ],
    "comment_count": 4
}