From 654a1de6c6fbc8257e5ab2efff4265c0347a043a Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 26 Oct 2023 15:48:42 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20fix(store.py):=20flatten=20the?= =?UTF-8?q?=20tags=20in=20the=20list=5Fcomponents=20response=20to=20match?= =?UTF-8?q?=20the=20schema=20=F0=9F=94=A7=20fix(store.py):=20add=20user=5F?= =?UTF-8?q?created.id=20field=20to=20the=20list=5Fcomponents=20response=20?= =?UTF-8?q?to=20match=20the=20schema=20=F0=9F=94=A7=20fix(store.py):=20add?= =?UTF-8?q?=20count(downloads)=20field=20to=20the=20list=5Fcomponents=20re?= =?UTF-8?q?sponse=20to=20match=20the=20schema=20=F0=9F=94=A7=20fix(store.p?= =?UTF-8?q?y):=20add=20tags=5Fid=20field=20to=20the=20TagsIdResponse=20sch?= =?UTF-8?q?ema=20to=20match=20the=20response=20structure=20=F0=9F=94=A7=20?= =?UTF-8?q?fix(service.py):=20add=20user=5Fcreated.first=5Fname=20and=20us?= =?UTF-8?q?er=5Fcreated.id=20fields=20to=20the=20list=5Fcomponents=20query?= =?UTF-8?q?=20to=20match=20the=20schema=20=F0=9F=94=A7=20fix(service.py):?= =?UTF-8?q?=20add=20count(downloads)=20field=20to=20the=20list=5Fcomponent?= =?UTF-8?q?s=20query=20to=20match=20the=20schema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/api/v1/store.py | 5 ++++ src/backend/langflow/services/store/schema.py | 6 +++++ .../langflow/services/store/service.py | 24 +++++++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/backend/langflow/api/v1/store.py b/src/backend/langflow/api/v1/store.py index e2632911f..47f377058 100644 --- a/src/backend/langflow/api/v1/store.py +++ b/src/backend/langflow/api/v1/store.py @@ -79,10 +79,12 @@ def list_components( "name", "description", "user_created.first_name", + "user_created.id", "is_component", "tags.tags_id.name", "tags.tags_id.id", "count(liked_by)", + "count(downloads)", "metadata", ] result = store_service.query_components( @@ -92,6 +94,9 @@ def list_components( fields=fields, filter_by_user=filter_by_user, ) + # tags comes as "tags" : [{"tags_id": {"name": "tag1", "id": 1}}] + # so we need to flatten it + 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 ceef1c9a3..1b4e82d54 100644 --- a/src/backend/langflow/services/store/schema.py +++ b/src/backend/langflow/services/store/schema.py @@ -32,6 +32,10 @@ class ComponentResponse(BaseModel): metadata: Optional[dict] +class TagsIdResponse(BaseModel): + tags_id: Optional[TagResponse] + + class ListComponentResponse(BaseModel): id: UUID name: Optional[str] @@ -39,6 +43,8 @@ class ListComponentResponse(BaseModel): liked_by_count: Optional[int] is_component: Optional[bool] metadata: Optional[dict] + user_created: Optional[dict] + tags: Optional[List[TagsIdResponse]] = None class DownloadComponentResponse(BaseModel): diff --git a/src/backend/langflow/services/store/service.py b/src/backend/langflow/services/store/service.py index e71f1def1..22d93057b 100644 --- a/src/backend/langflow/services/store/service.py +++ b/src/backend/langflow/services/store/service.py @@ -1,6 +1,7 @@ from datetime import datetime import json from uuid import UUID +from bs4 import Tag from langflow.services.base import Service from typing import TYPE_CHECKING, List, Dict, Any, Optional, Union import httpx @@ -11,6 +12,7 @@ from langflow.services.store.schema import ( DownloadComponentResponse, ListComponentResponse, StoreComponentCreate, + TagResponse, ) if TYPE_CHECKING: @@ -152,7 +154,19 @@ class StoreService(Service): ",".join(fields) if fields else ",".join( - ["id", "name", "description", "count(liked_by)", "is_component"] + [ + "id", + "name", + "description", + "user_created.first_name", + "user_created.id", + "is_component", + "tags.tags_id.name", + "tags.tags_id.id", + "count(liked_by)", + "count(downloads)", + "metadata", + ] ) ) # Only public components or the ones created by the user @@ -174,6 +188,7 @@ class StoreService(Service): "tags.tags_id.name", "tags.tags_id.id", "count(liked_by)", + "count(downloads)", "metadata", ] else: @@ -182,7 +197,12 @@ class StoreService(Service): ) results = self._get(self.components_url, api_key, params) - return [ListComponentResponse(**component) for component in results] + results_objects = [ListComponentResponse(**component) for component in results] + # Flatten the tags + for component in results_objects: + if component.tags: + component.tags = [tags_id.tags_id for tags_id in component.tags] + return results_objects def download(self, api_key: str, component_id: str) -> DownloadComponentResponse: url = f"{self.components_url}/{component_id}"