feat: add endpoint to get starter projects (#3370)
* feat(api): Add endpoint to get list of starter projects with error handling. * feat: Add test for getting starter projects with valid API key. * [autofix.ci] apply automated fixes * refactor(langflow): Update function name from get_all_graphs_dump to get_starter_projects_dump. * bug: fixes route collision * bug: fixes serialization * chore: move endpoint to new file * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: italojohnny <italojohnnydosanjos@gmail.com>
This commit is contained in:
parent
8accf4c64c
commit
b588ac071a
6 changed files with 48 additions and 6 deletions
|
|
@ -14,6 +14,7 @@ from langflow.api.v1 import (
|
|||
validate_router,
|
||||
variables_router,
|
||||
folders_router,
|
||||
starter_projects_router,
|
||||
)
|
||||
|
||||
router = APIRouter(
|
||||
|
|
@ -31,3 +32,4 @@ router.include_router(variables_router)
|
|||
router.include_router(files_router)
|
||||
router.include_router(monitor_router)
|
||||
router.include_router(folders_router)
|
||||
router.include_router(starter_projects_router)
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ from langflow.api.v1.users import router as users_router
|
|||
from langflow.api.v1.validate import router as validate_router
|
||||
from langflow.api.v1.variable import router as variables_router
|
||||
from langflow.api.v1.folders import router as folders_router
|
||||
from langflow.api.v1.starter_projects import router as starter_projects_router
|
||||
|
||||
__all__ = [
|
||||
"chat_router",
|
||||
|
|
@ -24,4 +25,5 @@ __all__ = [
|
|||
"monitor_router",
|
||||
"files_router",
|
||||
"folders_router",
|
||||
"starter_projects_router",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,17 +1,15 @@
|
|||
import io
|
||||
import json
|
||||
import re
|
||||
import zipfile
|
||||
from datetime import datetime, timezone
|
||||
from typing import List
|
||||
from uuid import UUID
|
||||
import zipfile
|
||||
|
||||
from fastapi.responses import StreamingResponse
|
||||
from langflow.services.database.models.transactions.crud import get_transactions_by_flow_id
|
||||
from langflow.services.database.models.vertex_builds.crud import get_vertex_builds_by_flow_id
|
||||
import orjson
|
||||
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile
|
||||
from fastapi.encoders import jsonable_encoder
|
||||
from fastapi.responses import StreamingResponse
|
||||
from loguru import logger
|
||||
from sqlmodel import Session, and_, col, select
|
||||
|
||||
|
|
@ -20,10 +18,12 @@ from langflow.api.v1.schemas import FlowListCreate
|
|||
from langflow.initial_setup.setup import STARTER_FOLDER_NAME
|
||||
from langflow.services.auth.utils import get_current_active_user
|
||||
from langflow.services.database.models.flow import Flow, FlowCreate, FlowRead, FlowUpdate
|
||||
from langflow.services.database.models.flow.utils import get_webhook_component_in_flow, delete_flow_by_id
|
||||
from langflow.services.database.models.flow.utils import delete_flow_by_id, get_webhook_component_in_flow
|
||||
from langflow.services.database.models.folder.constants import DEFAULT_FOLDER_NAME
|
||||
from langflow.services.database.models.folder.model import Folder
|
||||
from langflow.services.database.models.transactions.crud import get_transactions_by_flow_id
|
||||
from langflow.services.database.models.user.model import User
|
||||
from langflow.services.database.models.vertex_builds.crud import get_vertex_builds_by_flow_id
|
||||
from langflow.services.deps import get_session, get_settings_service
|
||||
from langflow.services.settings.service import SettingsService
|
||||
|
||||
|
|
|
|||
26
src/backend/base/langflow/api/v1/starter_projects.py
Normal file
26
src/backend/base/langflow/api/v1/starter_projects.py
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
from typing import List
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from loguru import logger
|
||||
|
||||
from langflow.graph.graph.schema import GraphDump
|
||||
from langflow.services.database.models.user.model import User
|
||||
from langflow.services.auth.utils import get_current_active_user
|
||||
from langflow.initial_setup.load import get_starter_projects_dump
|
||||
|
||||
|
||||
router = APIRouter(prefix="/starter-projects", tags=["Flows"])
|
||||
|
||||
|
||||
@router.get("/", response_model=List[GraphDump], status_code=200)
|
||||
def get_starter_projects(
|
||||
*,
|
||||
current_user: User = Depends(get_current_active_user),
|
||||
):
|
||||
"""Get a list of starter projects."""
|
||||
try:
|
||||
flows = get_starter_projects_dump()
|
||||
return flows
|
||||
except Exception as exc:
|
||||
logger.error(exc)
|
||||
raise HTTPException(status_code=500, detail=str(exc)) from exc
|
||||
|
|
@ -4,6 +4,7 @@ import inspect
|
|||
import os
|
||||
import traceback
|
||||
import types
|
||||
import json
|
||||
from enum import Enum
|
||||
from typing import TYPE_CHECKING, Any, AsyncIterator, Callable, Dict, Iterator, List, Mapping, Optional, Set
|
||||
|
||||
|
|
@ -103,7 +104,12 @@ class Vertex:
|
|||
self._custom_component._set_input_value(name, value)
|
||||
|
||||
def to_data(self):
|
||||
return self._data
|
||||
try:
|
||||
data = json.loads(json.dumps(self._data, default=str))
|
||||
except TypeError:
|
||||
data = self._data
|
||||
|
||||
return data
|
||||
|
||||
def add_component_instance(self, component_instance: "Component"):
|
||||
component_instance.set_vertex(self)
|
||||
|
|
|
|||
|
|
@ -671,3 +671,9 @@ def test_invalid_flow_id(client, created_api_key):
|
|||
response = client.post(f"/api/v1/run/{flow_id}", headers=headers)
|
||||
assert response.status_code == status.HTTP_404_NOT_FOUND, response.text
|
||||
# Check if the error detail is as expected
|
||||
|
||||
|
||||
def test_starter_projects(client, created_api_key):
|
||||
headers = {"x-api-key": created_api_key.api_key}
|
||||
response = client.get("/api/v1/starter-projects/", headers=headers)
|
||||
assert response.status_code == status.HTTP_200_OK, response.text
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue