top | item 39500565

Pydantic-resolve, a hierarchical solution for data fetching and processing

58 points| tangkikodo | 2 years ago |github.com

14 comments

order

navbaker|2 years ago

I’ve used Pydantic with FastAPI, but can’t really get a solid feel for what this is doing. Can someone explain this to me like I’m 5?

thornewolf|2 years ago

say you have a model with two attributes profile_image_url: str and profile_image: bytes

it's expensive to fetch profile_image since it will involve a http call to profile_image_url. right now, i would resolve this by using the @property decorator

this library offers an alternative method for populating profile_image by explicitly giving the user a hook for when they want to resolve this dependency. they might want to do it before access time, they might want to batch requests to this external profile_image service to reduce roundtrip latency

this pattern has potential to become more powerful if we only have user_id in context initially. we might want to fetch the product_image_url from the database then fetch the actual product_image after. this dependency graph might be simplified/optimized using this tool

the repo provides its own concrete example of this form with batch_person_age_loader

yen223|2 years ago

If you know Django, this looks like a more general version of how Django does foreign-key fields.

tangkikodo|2 years ago

A powerful tool to build nested view data.

based on pydantic, pydantic-resolve uses declaretive way to define and resolve (fetch) data from top to bottom

and provides post-process hooks from bottom to top (friendly for aggregation & calculation)

it also provides visibility control over all fields.

concept diagram: https://raw.githubusercontent.com/allmonday/pydantic-resolve...

tangkikodo|2 years ago

inspired by graphql (define schema in declaretive way)

however gql itself only walks from top to bottom, which lack the ability to change data after it's descdenants are resolved.

pydantic-resolve is progressive, this means you don't need to introduce a big framework to build a nested view data, all you need to do is just:

- simpilify your query of root data (no complex sql any more, then you can reuse it)

- define the related data you wanted, and then let resolver to fetch it.

that's all~

dlahoda|2 years ago

There was COM/Corba like this. It was hanging/freezing. So somebody will have to refactor it back to normal.

canadiantim|2 years ago

Could this be used to efficiently model an hierichical comment thread for example, like HN or reddit?

lucky_cloud|2 years ago

The modeling could be done in pure Pydantic.

This project might be helpful in fetching the actual content from a database in an efficient way.

malcolmgreaves|2 years ago

Is this more-or-less functional reactive programming (FRP) using Pydantic?

tangkikodo|2 years ago

not really, it only traversal (with resolving descendants at the same time) once from top to bottom and then back.