Pydantic-resolve, a hierarchical solution for data fetching and processing
github.comI’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?
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
That sounds pretty useful.
Anyone know of a library to do the same in Rust?
Thanks!
I too was confused. If the authors are reading this, the readme could do with a little bit more of an intro.
my fault lol.
here is a step by step tutorial, building various kinds of views data you need, and keep service layer simple and clear at the same time.
https://github.com/allmonday/composition-oriented-developmen...
code is ready, documents of english version is still wip.
If you know Django, this looks like a more general version of how Django does foreign-key fields.
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...
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~
There was COM/Corba like this. It was hanging/freezing. So somebody will have to refactor it back to normal.
Could this be used to efficiently model an hierichical comment thread for example, like HN or reddit?
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.
Is this more-or-less functional reactive programming (FRP) using Pydantic?
not really, it only traversal (with resolving descendants at the same time) once from top to bottom and then back.