Files
langflow/src/backend/langflow/api/v1/flows.py
Gabriel Luiz Freitas Almeida 4547edef0f 🔥 refactor(api): remove unused flow_styles module and related code
🔥 refactor(api): remove unused flow_styles router and related endpoints
🔥 refactor(api): remove unused FlowStyle model and related code
🔥 refactor(api): remove unused FlowStyleCreate, FlowStyleRead, and FlowStyleUpdate models
🔥 refactor(api): remove unused style relationship from Flow model
🔥 refactor(api): remove unused FlowReadWithStyle model
🔥 refactor(api): remove unused flow_styles_id parameter from read_flow_style endpoint
🔥 refactor(api): remove unused update_flow_style endpoint
🔥 refactor(api): remove unused delete_flow_style endpoint
🔥 refactor(api): remove unused flow_id parameter from delete_flow_style endpoint
🔥 refactor(api): remove unused style parameter from create_flow_style endpoint
🔥 refactor(api): remove unused read_flow_styles endpoint
🔥 refactor(api): remove unused flow_styles_id parameter from read_flow_styles endpoint
🔥 refactor(api): remove unused flow_style_id parameter from update_flow_style endpoint
🔥 refactor(api): remove unused flow_style parameter from update_flow_style endpoint
🔥 refactor(api): remove unused flow_style parameter from create_flow_style endpoint
🔥 refactor(api): remove unused flow_styles_router import
🔥 refactor(api): remove unused flow_styles_router variable
🔥 refactor(api): remove unused flow_styles_router prefix and tags
2023-08-07 10:13:40 -03:00

121 lines
3.8 KiB
Python

from typing import List
from uuid import UUID
from langflow.api.utils import remove_api_keys
from langflow.api.v1.schemas import FlowListCreate, FlowListRead
from langflow.services.database.models.flow import (
Flow,
FlowCreate,
FlowRead,
FlowUpdate,
)
from langflow.services.utils import get_session
from langflow.services.utils import get_settings_manager
from sqlmodel import Session, select
from fastapi import APIRouter, Depends, HTTPException
from fastapi.encoders import jsonable_encoder
from fastapi import File, UploadFile
import json
# build router
router = APIRouter(prefix="/flows", tags=["Flows"])
@router.post("/", response_model=FlowRead, status_code=201)
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], status_code=200)
def read_flows(*, session: Session = Depends(get_session)):
"""Read all flows."""
try:
flows = session.exec(select(Flow)).all()
except Exception as e:
raise HTTPException(status_code=500, detail=str(e)) from e
return [jsonable_encoder(flow) for flow in flows]
@router.get("/{flow_id}", response_model=FlowRead, status_code=200)
def read_flow(*, session: Session = Depends(get_session), flow_id: UUID):
"""Read a flow."""
if flow := session.get(Flow, flow_id):
return flow
else:
raise HTTPException(status_code=404, detail="Flow not found")
@router.patch("/{flow_id}", response_model=FlowRead, status_code=200)
def update_flow(
*, session: Session = Depends(get_session), flow_id: UUID, flow: FlowUpdate
):
"""Update a flow."""
db_flow = session.get(Flow, flow_id)
if not db_flow:
raise HTTPException(status_code=404, detail="Flow not found")
flow_data = flow.dict(exclude_unset=True)
settings_manager = get_settings_manager()
if settings_manager.settings.REMOVE_API_KEYS:
flow_data = remove_api_keys(flow_data)
for key, value in flow_data.items():
setattr(db_flow, key, value)
session.add(db_flow)
session.commit()
session.refresh(db_flow)
return db_flow
@router.delete("/{flow_id}", status_code=200)
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], status_code=201)
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], status_code=201)
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/", response_model=FlowListRead, status_code=200)
async def download_file(*, session: Session = Depends(get_session)):
"""Download all flows as a file."""
flows = read_flows(session=session)
return FlowListRead(flows=flows)