示例#1
0
def app(User):
    from fastapi_sqla import Session, setup

    try:
        from fastapi_sqla import AsyncSession
    except ImportError:
        AsyncSession = False

    app = FastAPI()
    setup(app)

    class UserIn(BaseModel):
        id: int
        first_name: str
        last_name: str

    @app.post("/users")
    def create_user(user: UserIn, session: Session = Depends()):
        session.add(User(**user.dict()))

    if AsyncSession:

        @app.post("/async/users")
        def create_user_with_async_session(user: UserIn,
                                           session: AsyncSession = Depends()):
            session.add(User(**user.dict()))

    return app
def app(User):
    from fastapi_sqla import Session, setup

    try:
        from fastapi_sqla import AsyncSession
    except ImportError:
        AsyncSession = False

    app = FastAPI()
    setup(app)

    class UserIn(BaseModel):
        id: int
        first_name: str
        last_name: str

    @app.post("/users")
    def create_user(user: UserIn, session: Session = Depends()):
        session.add(User(**user.dict()))

    if AsyncSession:

        @app.post("/async/users")
        def create_user_with_async_session(user: UserIn,
                                           session: AsyncSession = Depends()):
            session.add(User(**user.dict()))

    @app.get("/404")
    def get_users(session: Session = Depends(Session)):
        raise HTTPException(status_code=404, detail="YOLO")

    return app
示例#3
0
def app(user_cls, note_cls):
    from fastapi_sqla import (
        Page,
        Paginate,
        PaginateSignature,
        Pagination,
        Session,
        setup,
    )

    app = FastAPI()
    setup(app)

    class Note(BaseModel):
        id: int
        content: str

        class Config:
            orm_mode = True

    class User(BaseModel):
        id: int
        name: str
        notes: List[Note]

        class Config:
            orm_mode = True

    @app.get("/v1/users", response_model=Page[User])
    def sqla_13_all_users(session: Session = Depends(),
                          paginate: Paginate = Depends()):
        query = (session.query(user_cls).options(joinedload("notes")).order_by(
            user_cls.id))
        return paginate(query)

    @app.get("/v2/users", response_model=Page[User])
    def sqla_14_all_users(paginate: Paginate = Depends()):
        query = select(user_cls).options(joinedload("notes")).order_by(
            user_cls.id)
        return paginate(query)

    def query_count(session: Session, query: Select) -> int:
        return session.execute(select(
            func.count()).select_from(user_cls)).scalar()

    CustomPaginate: PaginateSignature = Pagination(query_count=query_count)

    @app.get("/v2/custom/users", response_model=Page[User])
    def sqla_14_all_users_custom_pagination(
            paginate: CustomPaginate = Depends()):
        query = select(user_cls).options(joinedload("notes")).order_by(
            user_cls.id)
        return paginate(query)

    return app
示例#4
0
async def test_fastapi_integration():
    from fastapi_sqla import _Session, setup

    app = FastAPI()
    setup(app)

    @app.get("/one")
    def now():
        session = _Session()
        result = session.execute(text("SELECT 1")).scalar()
        session.close()
        return result

    async with LifespanManager(app):
        async with httpx.AsyncClient(
            app=app, base_url="http://example.local"
        ) as client:
            res = await client.get("/one")

    assert res.json() == 1
def app(user_cls, note_cls):
    from fastapi_sqla import (
        Page,
        Paginate,
        PaginateSignature,
        Pagination,
        Session,
        setup,
    )

    app = FastAPI()
    setup(app)

    class Note(BaseModel):
        id: int
        content: str

        class Config:
            orm_mode = True

    class User(BaseModel):
        id: int
        name: str
        notes: List[Note]

        class Config:
            orm_mode = True

    class UserWithNotesCount(BaseModel):
        id: int
        name: str
        notes_count: int

    @app.get("/v1/users", response_model=Page[User])
    def sqla_13_all_users(session: Session = Depends(),
                          paginate: Paginate = Depends()):
        query = (session.query(user_cls).options(joinedload("notes")).order_by(
            user_cls.id))
        return paginate(query)

    @app.get("/v2/users", response_model=Page[User])
    def sqla_14_all_users(paginate: Paginate = Depends()):
        query = select(user_cls).options(joinedload("notes")).order_by(
            user_cls.id)
        return paginate(query)

    @app.get("/v2/users-with-notes-count",
             response_model=Page[UserWithNotesCount])
    def sqla_14_all_users_with_notes_count(paginate: Paginate = Depends()):
        query = (select(
            user_cls.id, user_cls.name,
            func.count(
                note_cls.id).label("notes_count")).join(note_cls).order_by(
                    user_cls.id).group_by(user_cls))
        return paginate(query, scalars=False)

    def count_user_notes(user_id: int, session: Session = Depends()) -> int:
        return session.execute(
            select(func.count(
                note_cls.id)).where(note_cls.user_id == user_id)).scalar()

    CustomPaginate: PaginateSignature = Pagination(
        query_count=count_user_notes)

    @app.get("/v2/users/{user_id}/notes", response_model=Page[Note])
    def list_user_notes_with_custom_pagination(
        user_id: int, paginate: CustomPaginate = Depends()):
        return paginate(select(note_cls).where(note_cls.user_id == user_id))

    return app