dependencies is a python library for resolving parameter dependency
- Parameter dependency parsing
- Support class and pydantic.BaseModel dependencies
- Sub dependency
- Asynchronous
Python 3.11 or above.
pip install git+https://github.com/lolord/dependencies.git
from typing import Annotated, Dict, List
from pydantic import BaseModel
from dependencies import Depends, decorator
class User(BaseModel):
name: str
score: int
@decorator
def create_user(user:Annotated[ User, Depends()]) -> User:
return user
async def get_users(users: List[Dict]) -> List[User]:
results: List[User] = []
for user in users:
results.append(await create_user(**user))
return results
async def length(users: Annotated[List[User] , Depends(get_users, use_cache=True)]):
return len(users) or 1
async def sum_score(users: Annotated[List[User], Depends(get_users, use_cache=True)]):
return sum(user.score for user in users)
@decorator
async def avg(sum:Annotated[int, Depends(sum_score)], length: Annotated[int, Depends(length)]):
return sum / length
async def main():
user = await create_user(name="Tom", score=90)
assert user.name == "Tom"
assert user.score == 90
users = [{"name": "Tom", "score": 90}, {"name": "Bob", "score": 80}]
assert await avg(users=users) == 85