From f9b57f90a71ef45e4ed7cd50fad13e604e0faf86 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 7 Nov 2023 15:42:54 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20fix(store.py):=20rename=20list?= =?UTF-8?q?=5Fcomponents=20function=20to=20get=5Fcomponents=20to=20improve?= =?UTF-8?q?=20semantics=20and=20clarity=20=F0=9F=94=A7=20fix(service.py):?= =?UTF-8?q?=20add=20search,=20status,=20tags,=20and=20sort=20parameters=20?= =?UTF-8?q?to=20query=5Fcomponents=20function=20to=20enable=20filtering=20?= =?UTF-8?q?and=20sorting=20of=20components=20=E2=9C=A8=20feat(service.py):?= =?UTF-8?q?=20add=20build=5Fsearch=5Ffilter=5Fconditions=20method=20to=20b?= =?UTF-8?q?uild=20filter=20conditions=20for=20search=20query=20in=20query?= =?UTF-8?q?=5Fcomponents=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/api/v1/store.py | 12 +++++-- .../langflow/services/store/service.py | 31 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/backend/langflow/api/v1/store.py b/src/backend/langflow/api/v1/store.py index ae8740093..0f5d6e2d9 100644 --- a/src/backend/langflow/api/v1/store.py +++ b/src/backend/langflow/api/v1/store.py @@ -71,11 +71,15 @@ def create_component( @router.get("/components/", response_model=ListComponentResponseModel) -def list_components( +def get_components( + search: Optional[List[str]] = Query(None), + status: Optional[str] = Query(None), + is_component: Optional[bool] = Query(None), + tags: Optional[List[str]] = Query(None), + sort: Optional[List[str]] = Query(None), filter_by_user: bool = Query(False), page: int = 1, limit: int = 10, - is_component: Optional[bool] = Query(None), store_service: StoreService = Depends(get_store_service), store_api_Key: Optional[str] = Depends(get_optional_user_store_api_key), ): @@ -88,6 +92,10 @@ def list_components( limit=limit, filter_by_user=filter_by_user, is_component=is_component, + search=search, + status=status, + tags=tags, + sort=sort, ) comp_count = store_service.count_components( diff --git a/src/backend/langflow/services/store/service.py b/src/backend/langflow/services/store/service.py index 1877becd4..79e124a2b 100644 --- a/src/backend/langflow/services/store/service.py +++ b/src/backend/langflow/services/store/service.py @@ -201,9 +201,23 @@ class StoreService(Service): results = self._get(self.components_url, api_key, params) return results[0].get("count", 0) + @staticmethod + def build_search_filter_conditions(query: str): + # instead of build the param ?search=query, we will build the filter + # that will use _icontains (case insensitive) + conditions = {"_or": []} + conditions["_or"].append({"name": {"_icontains": query}}) + conditions["_or"].append({"description": {"_icontains": query}}) + conditions["_or"].append({"tags": {"tags_id": {"name": {"_icontains": query}}}}) + return conditions + def query_components( self, api_key: str, + search: Optional[str] = None, + status: Optional[str] = None, + tags: Optional[List[str]] = None, + sort: Optional[List[str]] = None, page: int = 1, limit: int = 15, fields: Optional[List[str]] = None, @@ -213,8 +227,25 @@ class StoreService(Service): params = {"page": page, "limit": limit} # ?aggregate[count]=likes params["fields"] = ",".join(fields) if fields else ",".join(self.default_fields) + + if sort: + params["sort"] = ",".join(sort) + filter_conditions = [] + if search is not None: + search_conditions = self.build_search_filter_conditions(search) + filter_conditions.append(search_conditions) + + if status: + filter_conditions.append({"status": {"_eq": status}}) + + if tags: + filter_conditions.append({"tags": {"tags_id": {"name": {"_in": tags}}}}) + + if is_component is not None: + filter_conditions.append({"is_component": {"_eq": is_component}}) + if is_component is not None: filter_conditions.append({"is_component": {"_eq": is_component}})