From 8b9267b2e8c68378f9a9d2a3d60614692c0eefe8 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 23 Oct 2023 23:37:08 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(store.py):=20import=20missin?= =?UTF-8?q?g=20schema=20classes=20in=20store.py=20to=20fix=20NameError=20?= =?UTF-8?q?=E2=9C=A8=20feat(store.py):=20change=20response=20models=20for?= =?UTF-8?q?=20list=5Fcomponents=20and=20read=5Fcomponent=20endpoints=20to?= =?UTF-8?q?=20use=20new=20schema=20classes=20for=20improved=20consistency?= =?UTF-8?q?=20and=20clarity=20=F0=9F=90=9B=20fix(schema.py):=20add=20missi?= =?UTF-8?q?ng=20ListComponentResponse=20and=20DownloadComponentResponse=20?= =?UTF-8?q?classes=20to=20schema.py=20to=20fix=20NameError=20=E2=9C=A8=20f?= =?UTF-8?q?eat(service.py):=20change=20return=20types=20of=20list=5Fcompon?= =?UTF-8?q?ents=20and=20download=20methods=20in=20StoreService=20to=20use?= =?UTF-8?q?=20new=20schema=20classes=20for=20improved=20consistency=20and?= =?UTF-8?q?=20clarity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/api/v1/store.py | 13 ++++++++----- src/backend/langflow/services/store/schema.py | 17 +++++++++++++++++ .../langflow/services/store/service.py | 19 +++++++++++++------ 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/backend/langflow/api/v1/store.py b/src/backend/langflow/api/v1/store.py index 137259157..3aec1fa7b 100644 --- a/src/backend/langflow/api/v1/store.py +++ b/src/backend/langflow/api/v1/store.py @@ -3,11 +3,15 @@ from uuid import UUID from langflow.services.auth import utils as auth_utils from langflow.services.database.models.user.user import User from langflow.services.deps import ( - get_session, get_store_service, get_settings_service, ) -from langflow.services.store.schema import ComponentResponse, StoreComponentCreate +from langflow.services.store.schema import ( + ComponentResponse, + DownloadComponentResponse, + ListComponentResponse, + StoreComponentCreate, +) from fastapi import APIRouter, Depends, HTTPException, Query from datetime import datetime @@ -46,7 +50,7 @@ def create_component( raise HTTPException(status_code=400, detail=str(exc)) -@router.get("/components/", response_model=List[ComponentResponse]) +@router.get("/components/", response_model=List[ListComponentResponse]) def list_components( page: int = 1, limit: int = 10, @@ -66,13 +70,12 @@ def list_components( raise HTTPException(status_code=400, detail=str(exc)) -@router.get("/components/{component_id}", response_model=ComponentResponse) +@router.get("/components/{component_id}", response_model=DownloadComponentResponse) def read_component( component_id: UUID, store_service: StoreService = Depends(get_store_service), store_api_Key: str = Depends(get_user_store_api_key), settings_service=Depends(get_settings_service), - session=Depends(get_session), ): # If the component is from the store, we need to get it from the store diff --git a/src/backend/langflow/services/store/schema.py b/src/backend/langflow/services/store/schema.py index ef35da8be..34a0ac574 100644 --- a/src/backend/langflow/services/store/schema.py +++ b/src/backend/langflow/services/store/schema.py @@ -21,6 +21,23 @@ class ComponentResponse(BaseModel): parent: Optional[UUID] +class ListComponentResponse(BaseModel): + (["id", "name", "description", "count(likes)", "is_component"]) + id: UUID + name: Optional[str] + description: Optional[str] + likes_count: Optional[int] + is_component: Optional[bool] + + +class DownloadComponentResponse(BaseModel): + id: UUID + name: Optional[str] + description: Optional[str] + data: Optional[dict] + is_component: Optional[bool] + + class StoreComponentCreate(BaseModel): name: str description: Optional[str] diff --git a/src/backend/langflow/services/store/service.py b/src/backend/langflow/services/store/service.py index c4cf355cf..4d95ebcc8 100644 --- a/src/backend/langflow/services/store/service.py +++ b/src/backend/langflow/services/store/service.py @@ -3,7 +3,12 @@ from langflow.services.base import Service from typing import TYPE_CHECKING, List, Dict, Any, Optional import httpx from httpx import HTTPError -from langflow.services.store.schema import ComponentResponse, StoreComponentCreate +from langflow.services.store.schema import ( + ComponentResponse, + DownloadComponentResponse, + ListComponentResponse, + StoreComponentCreate, +) if TYPE_CHECKING: from langflow.services.settings.service import SettingsService @@ -91,7 +96,7 @@ class StoreService(Service): page: int = 1, limit: int = 10, fields: Optional[List[str]] = None, - ) -> List[ComponentResponse]: + ) -> List[ListComponentResponse]: params = {"page": page, "limit": limit} # ?aggregate[count]=likes params["fields"] = ( @@ -101,13 +106,15 @@ class StoreService(Service): ) results = self._get(self.components_url, api_key, params) - return [ComponentResponse(**component) for component in results] + return [ListComponentResponse(**component) for component in results] - def download(self, api_key: str, id: str) -> ComponentResponse: + def download(self, api_key: str, id: str) -> DownloadComponentResponse: url = f"{self.components_url}/{id}" - params = {"fields": ",".join(["id", "name", "description", "data"])} + params = { + "fields": ",".join(["id", "name", "description", "data", "is_component"]) + } component = self._get(url, api_key, params) - return ComponentResponse(**component) + return DownloadComponentResponse(**component) def upload( self, api_key: str, component_data: StoreComponentCreate