From 750a24521aa825700898984f0aa37f514cd54339 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 16 Nov 2023 12:03:23 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(store.py):=20change=20variab?= =?UTF-8?q?le=20name=20'liked'=20to=20'use=5Fapi=5Fkey'=20for=20better=20c?= =?UTF-8?q?larity=20and=20semantics=20=F0=9F=94=A7=20refactor(store.py):?= =?UTF-8?q?=20remove=20unnecessary=20condition=20for=20'status'=20variable?= =?UTF-8?q?=20in=20build=5Fsearch=5Ffilter=5Fconditions=20method=20?= =?UTF-8?q?=F0=9F=94=A7=20refactor(store.py):=20remove=20unnecessary=20con?= =?UTF-8?q?dition=20for=20'liked'=20variable=20in=20build=5Fliked=5Ffilter?= =?UTF-8?q?=20method=20=F0=9F=94=A7=20refactor(store.py):=20remove=20unnec?= =?UTF-8?q?essary=20condition=20for=20'liked'=20variable=20in=20query=5Fco?= =?UTF-8?q?mponents=20method=20=F0=9F=94=A7=20refactor(store.py):=20remove?= =?UTF-8?q?=20unnecessary=20condition=20for=20'use=5Fapi=5Fkey'=20variable?= =?UTF-8?q?=20in=20query=5Fcomponents=20method=20=F0=9F=94=A7=20refactor(s?= =?UTF-8?q?tore.py):=20remove=20unnecessary=20condition=20for=20'store=5Fa?= =?UTF-8?q?pi=5FKey'=20variable=20in=20query=5Fcomponents=20method=20?= =?UTF-8?q?=F0=9F=94=A7=20refactor(store.py):=20add=20default=20value=20fo?= =?UTF-8?q?r=20'use=5Fapi=5Fkey'=20parameter=20in=20query=5Fcomponents=20m?= =?UTF-8?q?ethod=20=F0=9F=94=A7=20refactor(store.py):=20remove=20unnecessa?= =?UTF-8?q?ry=20condition=20for=20'liked'=20variable=20in=20query=5Fcompon?= =?UTF-8?q?ents=20method=20=F0=9F=94=A7=20=F0=9F=94=A7=20refactor(store?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/api/v1/store.py | 3 +- .../langflow/services/store/service.py | 28 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/backend/langflow/api/v1/store.py b/src/backend/langflow/api/v1/store.py index 23438e36d..5b79ff2f6 100644 --- a/src/backend/langflow/api/v1/store.py +++ b/src/backend/langflow/api/v1/store.py @@ -4,6 +4,7 @@ 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 @@ -127,7 +128,7 @@ async def get_components( limit=limit, sort=sort, filter_conditions=filter_conditions, - liked=liked, + use_api_key=liked or filter_by_user, ) except HTTPStatusError as exc: if exc.response.status_code == 403: diff --git a/src/backend/langflow/services/store/service.py b/src/backend/langflow/services/store/service.py index f3c083d28..1128af0c8 100644 --- a/src/backend/langflow/services/store/service.py +++ b/src/backend/langflow/services/store/service.py @@ -4,6 +4,8 @@ from uuid import UUID import httpx from httpx import HTTPError, HTTPStatusError +from loguru import logger + from langflow.services.base import Service from langflow.services.store.schema import ( CreateComponentResponse, @@ -12,7 +14,6 @@ from langflow.services.store.schema import ( StoreComponentCreate, ) from langflow.services.store.utils import process_tags_for_post -from loguru import logger if TYPE_CHECKING: from langflow.services.settings.service import SettingsService @@ -150,7 +151,7 @@ class StoreService(Service): search_conditions = self.build_search_filter_conditions(search) filter_conditions.append(search_conditions) - if status: + if status is not None: filter_conditions.append({"status": {"_eq": status}}) if tags: @@ -171,20 +172,17 @@ class StoreService(Service): filter_conditions.append({"user_created": {"_eq": user_data["id"]}}) elif filter_by_user and not store_api_Key: raise ValueError("You must provide an API key to filter your components") + else: + filter_conditions.append({"status": {"_in": ["public", "Public"]}}) + return filter_conditions def build_liked_filter(self, liked: bool, api_key: Optional[str] = None): - if liked and not api_key: - raise ValueError("No API key provided") - - if liked and api_key: - user_data = user_data_var.get() - # params["filter"] = json.dumps({"user_created": {"_eq": user_data["id"]}}) - if not user_data: - raise ValueError("No user data") - return {"liked_by": {"_eq": user_data["id"]}} - else: - return {"status": {"_in": ["public", "Public"]}} + user_data = user_data_var.get() + # params["filter"] = json.dumps({"user_created": {"_eq": user_data["id"]}}) + if not user_data: + raise ValueError("No user data") + return {"liked_by": {"_eq": user_data["id"]}} async def query_components( self, @@ -194,7 +192,7 @@ class StoreService(Service): limit: int = 15, fields: Optional[List[str]] = None, filter_conditions: Optional[List[Dict[str, Any]]] = None, - liked: Optional[bool] = False, + use_api_key: Optional[bool] = False, ) -> List[ListComponentResponse]: params: Dict[str, Any] = { "page": page, @@ -211,7 +209,7 @@ class StoreService(Service): if filter_conditions: params["filter"] = json.dumps({"_and": filter_conditions}) - if not liked: + if not use_api_key: # If not liked, this means we are getting public components # so we don't need to risk passing an invalid api_key # and getting 401