Refactor store API endpoints

This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-12-07 18:21:30 -03:00
commit 62697ac3a6

View file

@ -1,9 +1,9 @@
import warnings
from typing import Annotated, List, Optional, Union from typing import Annotated, List, Optional, Union
from uuid import UUID from uuid import UUID
from fastapi import APIRouter, Depends, HTTPException, Query from fastapi import APIRouter, Depends, HTTPException, Query
from langflow.api.utils import check_langflow_version
from langflow.services.auth import utils as auth_utils from langflow.services.auth import utils as auth_utils
from langflow.services.database.models.user.model import User from langflow.services.database.models.user.model import User
from langflow.services.deps import get_settings_service, get_store_service from langflow.services.deps import get_settings_service, get_store_service
@ -17,7 +17,6 @@ from langflow.services.store.schema import (
UsersLikesResponse, UsersLikesResponse,
) )
from langflow.services.store.service import StoreService from langflow.services.store.service import StoreService
from langflow.services.store.utils import get_lf_version_from_pypi
router = APIRouter(prefix="/store", tags=["Components Store"]) router = APIRouter(prefix="/store", tags=["Components Store"])
@ -71,31 +70,11 @@ async def check_if_store_has_api_key(
async def share_component( async def share_component(
component: StoreComponentCreate, component: StoreComponentCreate,
store_service: StoreService = Depends(get_store_service), store_service: StoreService = Depends(get_store_service),
store_api_Key: str = Depends(get_user_store_api_key), store_api_key: str = Depends(get_user_store_api_key),
): ):
try: try:
# Verify if this is the latest version of Langflow await check_langflow_version(component)
# If not, raise an error result = await store_service.upload(store_api_key, component)
if not component.last_tested_version:
# Get the local version of Langflow
from langflow import __version__ as current_version
component.last_tested_version = current_version
langflow_version = get_lf_version_from_pypi()
if langflow_version is None:
raise HTTPException(
status_code=500,
detail="Unable to verify the latest version of Langflow",
)
elif langflow_version != component.last_tested_version:
# If the user is using an older version of Langflow, we need to raise an error
# raise ValueError(
warnings.warn(
f"Your version of Langflow ({component.last_tested_version}) is outdated."
f" Please update to the latest version ({langflow_version}) and try again."
)
result = await store_service.upload(store_api_Key, component)
return result return result
except Exception as exc: except Exception as exc:
raise HTTPException(status_code=400, detail=str(exc)) raise HTTPException(status_code=400, detail=str(exc))
@ -106,31 +85,11 @@ async def update_shared_component(
component_id: UUID, component_id: UUID,
component: StoreComponentCreate, component: StoreComponentCreate,
store_service: StoreService = Depends(get_store_service), store_service: StoreService = Depends(get_store_service),
store_api_Key: str = Depends(get_user_store_api_key), store_api_key: str = Depends(get_user_store_api_key),
): ):
try: try:
# Verify if this is the latest version of Langflow await check_langflow_version(component)
# If not, raise an error result = await store_service.update(store_api_key, component_id, component)
if not component.last_tested_version:
# Get the local version of Langflow
from langflow import __version__ as current_version
component.last_tested_version = current_version
langflow_version = get_lf_version_from_pypi()
if langflow_version is None:
raise HTTPException(
status_code=500,
detail="Unable to verify the latest version of Langflow",
)
elif langflow_version != component.last_tested_version:
# If the user is using an older version of Langflow, we need to raise an error
# raise ValueError(
warnings.warn(
f"Your version of Langflow ({component.last_tested_version}) is outdated."
f" Please update to the latest version ({langflow_version}) and try again."
)
result = await store_service.update(store_api_Key, component_id, component)
return result return result
except Exception as exc: except Exception as exc:
raise HTTPException(status_code=400, detail=str(exc)) raise HTTPException(status_code=400, detail=str(exc))
@ -150,7 +109,7 @@ async def get_components(
page: int = 1, page: int = 1,
limit: int = 10, limit: int = 10,
store_service: StoreService = Depends(get_store_service), store_service: StoreService = Depends(get_store_service),
store_api_Key: Optional[str] = Depends(get_optional_user_store_api_key), store_api_key: Optional[str] = Depends(get_optional_user_store_api_key),
): ):
try: try:
return await store_service.get_list_component_response_model( return await store_service.get_list_component_response_model(
@ -165,7 +124,7 @@ async def get_components(
filter_by_user=filter_by_user, filter_by_user=filter_by_user,
page=page, page=page,
limit=limit, limit=limit,
store_api_key=store_api_Key, store_api_key=store_api_key,
) )
except CustomException as exc: except CustomException as exc:
raise HTTPException(status_code=exc.status_code, detail=str(exc)) from exc raise HTTPException(status_code=exc.status_code, detail=str(exc)) from exc
@ -177,10 +136,10 @@ async def get_components(
async def download_component( async def download_component(
component_id: UUID, component_id: UUID,
store_service: StoreService = Depends(get_store_service), store_service: StoreService = Depends(get_store_service),
store_api_Key: str = Depends(get_user_store_api_key), store_api_key: str = Depends(get_user_store_api_key),
): ):
try: try:
component = await store_service.download(store_api_Key, component_id) component = await store_service.download(store_api_key, component_id)
except CustomException as exc: except CustomException as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc raise HTTPException(status_code=400, detail=str(exc)) from exc
except Exception as exc: except Exception as exc:
@ -207,10 +166,10 @@ async def get_tags(
@router.get("/users/likes", response_model=List[UsersLikesResponse]) @router.get("/users/likes", response_model=List[UsersLikesResponse])
async def get_list_of_components_liked_by_user( async def get_list_of_components_liked_by_user(
store_service: StoreService = Depends(get_store_service), store_service: StoreService = Depends(get_store_service),
store_api_Key: str = Depends(get_user_store_api_key), store_api_key: str = Depends(get_user_store_api_key),
): ):
try: try:
return await store_service.get_user_likes(store_api_Key) return await store_service.get_user_likes(store_api_key)
except CustomException as exc: except CustomException as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc raise HTTPException(status_code=400, detail=str(exc)) from exc
except Exception as exc: except Exception as exc:
@ -221,11 +180,11 @@ async def get_list_of_components_liked_by_user(
async def like_component( async def like_component(
component_id: UUID, component_id: UUID,
store_service: StoreService = Depends(get_store_service), store_service: StoreService = Depends(get_store_service),
store_api_Key: str = Depends(get_user_store_api_key), store_api_key: str = Depends(get_user_store_api_key),
): ):
try: try:
result = await store_service.like_component(store_api_Key, str(component_id)) result = await store_service.like_component(store_api_key, str(component_id))
likes_count = await store_service.get_component_likes_count(str(component_id), store_api_Key) likes_count = await store_service.get_component_likes_count(str(component_id), store_api_key)
return UsersLikesResponse(likes_count=likes_count, liked_by_user=result) return UsersLikesResponse(likes_count=likes_count, liked_by_user=result)
except CustomException as exc: except CustomException as exc: