From e925da56716ad05dc63df7b2db92fc5d178e876e Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 16 Nov 2023 09:44:07 -0300 Subject: [PATCH] Add last tested version to component creation and handle outdated versions --- src/backend/langflow/api/v1/store.py | 21 +++++++++++++----- src/backend/langflow/services/store/schema.py | 22 ++----------------- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/backend/langflow/api/v1/store.py b/src/backend/langflow/api/v1/store.py index bfb739c1c..4bf7fa2ed 100644 --- a/src/backend/langflow/api/v1/store.py +++ b/src/backend/langflow/api/v1/store.py @@ -1,13 +1,15 @@ +import warnings from typing import Annotated, Any, Dict, List, Optional, Union from uuid import UUID from fastapi import APIRouter, Depends, HTTPException, Query from httpx import HTTPStatusError + from langflow.services.auth import utils as auth_utils from langflow.services.database.models.user.user import User from langflow.services.deps import get_settings_service, get_store_service from langflow.services.store.schema import ( - ComponentResponse, + CreateComponentResponse, DownloadComponentResponse, ListComponentResponse, ListComponentResponseModel, @@ -59,8 +61,8 @@ def check_if_store_has_api_key( } -@router.post("/components/", response_model=ComponentResponse, status_code=201) -def create_component( +@router.post("/components/", response_model=CreateComponentResponse, status_code=201) +async def create_component( component: StoreComponentCreate, store_service: StoreService = Depends(get_store_service), store_api_Key: str = Depends(get_user_store_api_key), @@ -68,6 +70,11 @@ def create_component( try: # Verify if this is the latest version of Langflow # If not, raise an error + 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( @@ -76,12 +83,14 @@ def create_component( ) 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( + # raise ValueError( + warnings.warn( f"Your version of Langflow ({component.last_tested_version}) is outdated." - " Please update to the latest version ({langflow_version}) and try again." + f" Please update to the latest version ({langflow_version}) and try again." ) - return store_service.upload(store_api_Key, component) + result = await store_service.upload(store_api_Key, component) + return result except Exception as exc: raise HTTPException(status_code=400, detail=str(exc)) diff --git a/src/backend/langflow/services/store/schema.py b/src/backend/langflow/services/store/schema.py index 51a203d18..cbd9b3a52 100644 --- a/src/backend/langflow/services/store/schema.py +++ b/src/backend/langflow/services/store/schema.py @@ -1,4 +1,3 @@ -from datetime import datetime from typing import List, Optional from uuid import UUID @@ -15,24 +14,8 @@ class UsersLikesResponse(BaseModel): liked_by_user: Optional[bool] -class ComponentResponse(BaseModel): +class CreateComponentResponse(BaseModel): id: UUID - status: Optional[str] - sort: Optional[int] - user_name: Optional[str] - date_created: Optional[datetime] - user_updated: Optional[UUID] - date_updated: Optional[datetime] - is_component: Optional[bool] - name: Optional[str] - description: Optional[str] - data: Optional[dict] - tags: Optional[List[int]] - liked_by_count: Optional[int] - downloads_count: Optional[int] - parent: Optional[UUID] = None - metadata: Optional[dict] - last_tested_version: Optional[str] class TagsIdResponse(BaseModel): @@ -88,6 +71,5 @@ class StoreComponentCreate(BaseModel): tags: Optional[List[str]] parent: Optional[UUID] = None is_component: Optional[bool] - metadata: Optional[dict] - last_tested_version: Optional[str] + last_tested_version: Optional[str] = None public: Optional[bool] = False