From 183f80b1fc9e3b630c312d6682be1341b70c4fd9 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 6 Jun 2023 16:23:37 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A5=20chore(database.py):=20remove=20u?= =?UTF-8?q?nused=20code=20and=20endpoints=20related=20to=20flows=20?= =?UTF-8?q?=E2=9C=A8=20feat(router.py):=20add=20new=20routers=20for=20flow?= =?UTF-8?q?s=20and=20flow=20styles=20=F0=9F=94=A7=20refactor(=5F=5Finit=5F?= =?UTF-8?q?=5F.py):=20add=20new=20routers=20to=20=5F=5Fall=5F=5F=20list=20?= =?UTF-8?q?=F0=9F=94=A7=20refactor(conftest.py):=20update=20import=20state?= =?UTF-8?q?ment=20for=20get=5Fsession=20function=20The=20unused=20code=20a?= =?UTF-8?q?nd=20endpoints=20related=20to=20flows=20have=20been=20removed?= =?UTF-8?q?=20from=20the=20database.py=20file.=20New=20routers=20for=20flo?= =?UTF-8?q?ws=20and=20flow=20styles=20have=20been=20added=20to=20the=20rou?= =?UTF-8?q?ter.py=20file.=20The=20=5F=5Fall=5F=5F=20list=20in=20the=20=5F?= =?UTF-8?q?=5Finit=5F=5F.py=20file=20has=20been=20updated=20to=20include?= =?UTF-8?q?=20the=20new=20routers.=20The=20import=20statement=20for=20the?= =?UTF-8?q?=20get=5Fsession=20function=20in=20the=20conftest.py=20file=20h?= =?UTF-8?q?as=20been=20updated=20to=20reflect=20the=20new=20location=20of?= =?UTF-8?q?=20the=20function.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/api/database.py | 106 ------------------------ src/backend/langflow/api/router.py | 14 +++- src/backend/langflow/api/v1/__init__.py | 10 ++- tests/conftest.py | 2 +- 4 files changed, 22 insertions(+), 110 deletions(-) delete mode 100644 src/backend/langflow/api/database.py diff --git a/src/backend/langflow/api/database.py b/src/backend/langflow/api/database.py deleted file mode 100644 index 34e3a2bc8..000000000 --- a/src/backend/langflow/api/database.py +++ /dev/null @@ -1,106 +0,0 @@ -from typing import List -from uuid import UUID -from langflow.api.schemas import FlowListCreate -from langflow.database.models.flow import Flow, FlowCreate, FlowRead -from langflow.database.base import get_session -from sqlmodel import Session, select -from fastapi import APIRouter, Depends, HTTPException - - -from fastapi import File, UploadFile -import json - -# build router -router = APIRouter(prefix="/flows", tags=["Flows"]) - - -@router.post("/", response_model=FlowRead) -def create_flow(*, session: Session = Depends(get_session), flow: FlowCreate): - """Create a new flow.""" - db_flow = Flow.from_orm(flow) - session.add(db_flow) - session.commit() - session.refresh(db_flow) - return db_flow - - -@router.get("/", response_model=list[FlowRead]) -def read_flows(*, session: Session = Depends(get_session)): - """Read all flows.""" - flows = session.exec(select(Flow)).all() - return flows - - -@router.get("/{flow_id}", response_model=FlowRead) -def read_flow(*, session: Session = Depends(get_session), flow_id: UUID): - """Read a flow.""" - flow = session.get(Flow, flow_id) - if not flow: - raise HTTPException(status_code=404, detail="Flow not found") - return flow - - -@router.put("/{flow_id}", response_model=FlowRead) -def update_flow( - *, session: Session = Depends(get_session), flow_id: UUID, flow: FlowCreate -): - """Update a flow.""" - db_flow = session.get(Flow, flow_id) - if not db_flow: - raise HTTPException(status_code=404, detail="Flow not found") - update_data = flow.dict(exclude_unset=True) - for key, value in update_data.items(): - setattr(db_flow, key, value) - session.add(db_flow) - session.commit() - session.refresh(db_flow) - return db_flow - - -@router.delete("/{flow_id}") -def delete_flow(*, session: Session = Depends(get_session), flow_id: UUID): - """Delete a flow.""" - flow = session.get(Flow, flow_id) - if not flow: - raise HTTPException(status_code=404, detail="Flow not found") - session.delete(flow) - session.commit() - return {"message": "Flow deleted successfully"} - - -# Define a new model to handle multiple flows - - -@router.post("/batch/", response_model=List[FlowRead]) -def create_flows(*, session: Session = Depends(get_session), flow_list: FlowListCreate): - """Create multiple new flows.""" - db_flows = [] - for flow in flow_list.flows: - db_flow = Flow.from_orm(flow) - session.add(db_flow) - db_flows.append(db_flow) - session.commit() - for db_flow in db_flows: - session.refresh(db_flow) - return db_flows - - -@router.post("/upload/", response_model=List[FlowRead]) -async def upload_file( - *, session: Session = Depends(get_session), file: UploadFile = File(...) -): - """Upload flows from a file.""" - contents = await file.read() - data = json.loads(contents) - if "flows" in data: - flow_list = FlowListCreate(**data) - else: - flow_list = FlowListCreate(flows=[FlowCreate(**flow) for flow in data]) - return create_flows(session=session, flow_list=flow_list) - - -@router.get("/download/") -async def download_file(*, session: Session = Depends(get_session)): - """Download all flows as a file.""" - flows = read_flows(session=session) - return {"file": json.dumps([flow.dict() for flow in flows], default=str)} diff --git a/src/backend/langflow/api/router.py b/src/backend/langflow/api/router.py index 23b5aa1c5..f090abe74 100644 --- a/src/backend/langflow/api/router.py +++ b/src/backend/langflow/api/router.py @@ -1,8 +1,18 @@ # Router for base api from fastapi import APIRouter -from langflow.api.v1 import chat_router, endpoints_router, validate_router +from langflow.api.v1 import ( + chat_router, + endpoints_router, + validate_router, + flows_router, + flow_styles_router, +) -router = APIRouter(prefix="/api/v1", tags=["api"]) +router = APIRouter( + prefix="/api/v1", +) router.include_router(chat_router) router.include_router(endpoints_router) router.include_router(validate_router) +router.include_router(flows_router) +router.include_router(flow_styles_router) diff --git a/src/backend/langflow/api/v1/__init__.py b/src/backend/langflow/api/v1/__init__.py index d835b4535..f18f90e42 100644 --- a/src/backend/langflow/api/v1/__init__.py +++ b/src/backend/langflow/api/v1/__init__.py @@ -1,5 +1,13 @@ from langflow.api.v1.endpoints import router as endpoints_router from langflow.api.v1.validate import router as validate_router from langflow.api.v1.chat import router as chat_router +from langflow.api.v1.flows import router as flows_router +from langflow.api.v1.flow_styles import router as flow_styles_router -__all__ = ["chat_router", "endpoints_router", "validate_router"] +__all__ = [ + "chat_router", + "endpoints_router", + "validate_router", + "flows_router", + "flow_styles_router", +] diff --git a/tests/conftest.py b/tests/conftest.py index 61eab9fbb..35ec5eac6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ import json from pathlib import Path from typing import AsyncGenerator -from langflow.api.database import get_session +from langflow.api.v1.flows import get_session from langflow.graph.graph.base import Graph import pytest