From ab86ddc38a8dce3f924d73b685536e58b5a438f6 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 23 Oct 2023 22:08:07 -0300 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=90=9B=20fix(service.py):=20fix=20ind?= =?UTF-8?q?ex=20out=20of=20range=20error=20when=20getting=20component=20in?= =?UTF-8?q?=20download=20method?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/services/store/service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/langflow/services/store/service.py b/src/backend/langflow/services/store/service.py index b22bdb24b..4486535a7 100644 --- a/src/backend/langflow/services/store/service.py +++ b/src/backend/langflow/services/store/service.py @@ -106,7 +106,7 @@ class StoreService(Service): def download(self, api_key: str, id: str) -> ComponentResponse: url = f"{self.components_url}/{id}" params = {"fields": ",".join(["id", "name", "description", "data"])} - component = self._get(url, api_key, params)[0] + component = self._get(url, api_key, params) return ComponentResponse(**component) def upload(self, api_key: str, component_data: Dict[str, Any]) -> ComponentResponse: From 0ce19818ec7ccfa7137258bd9c22f2bdbb130dfa Mon Sep 17 00:00:00 2001 From: anovazzi1 Date: Mon, 23 Oct 2023 22:10:17 -0300 Subject: [PATCH 2/3] feat(API): add support for saving parent information when saving a flow store The `saveFlowStore` function in the API controller now accepts a `parent` parameter. This allows the user to specify the parent of the flow when saving it to the store. The `parent` parameter is included in the request payload sent to the server. --- src/frontend/src/controllers/API/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/frontend/src/controllers/API/index.ts b/src/frontend/src/controllers/API/index.ts index 14309bc0b..70b37489d 100644 --- a/src/frontend/src/controllers/API/index.ts +++ b/src/frontend/src/controllers/API/index.ts @@ -553,6 +553,7 @@ export async function saveFlowStore(newFlow: { description?: string; style?: FlowStyleType; is_component?: boolean; + parent?: string; }): Promise { try { const response = await api.post(`${BASE_URL_API}store/components/`, { @@ -560,6 +561,7 @@ export async function saveFlowStore(newFlow: { data: newFlow.data, description: newFlow.description, is_component: newFlow.is_component, + parent: newFlow.parent, }); if (response.status !== 201) { From e6ae03105f2902287fb48f17f1183b408698212a Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 23 Oct 2023 22:56:15 -0300 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=90=9B=20fix(store.py):=20pass=20comp?= =?UTF-8?q?onent=20object=20instead=20of=20dict=20to=20store=5Fservice.upl?= =?UTF-8?q?oad()=20to=20fix=20data=20type=20mismatch=20=F0=9F=90=9B=20fix(?= =?UTF-8?q?service.py):=20convert=20parent=20UUID=20to=20string=20before?= =?UTF-8?q?=20sending=20to=20store=20in=20upload()=20method=20to=20fix=20d?= =?UTF-8?q?ata=20type=20mismatch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/api/v1/store.py | 2 +- src/backend/langflow/services/store/service.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/backend/langflow/api/v1/store.py b/src/backend/langflow/api/v1/store.py index 9ecca12c3..20e4c2d05 100644 --- a/src/backend/langflow/api/v1/store.py +++ b/src/backend/langflow/api/v1/store.py @@ -41,7 +41,7 @@ def create_component( ): try: decrypted = auth_utils.decrypt_api_key(store_api_Key, settings_service) - return store_service.upload(decrypted, component.dict()) + return store_service.upload(decrypted, component) except Exception as exc: raise HTTPException(status_code=400, detail=str(exc)) diff --git a/src/backend/langflow/services/store/service.py b/src/backend/langflow/services/store/service.py index 4486535a7..c4cf355cf 100644 --- a/src/backend/langflow/services/store/service.py +++ b/src/backend/langflow/services/store/service.py @@ -3,7 +3,7 @@ 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 +from langflow.services.store.schema import ComponentResponse, StoreComponentCreate if TYPE_CHECKING: from langflow.services.settings.service import SettingsService @@ -109,11 +109,17 @@ class StoreService(Service): component = self._get(url, api_key, params) return ComponentResponse(**component) - def upload(self, api_key: str, component_data: Dict[str, Any]) -> ComponentResponse: + def upload( + self, api_key: str, component_data: StoreComponentCreate + ) -> ComponentResponse: headers = {"Authorization": f"Bearer {api_key}"} + component_dict = component_data.dict(exclude_unset=True) + # Parent is a UUID, but the store expects a string + if component_dict.get("parent"): + component_dict["parent"] = str(component_dict["parent"]) try: response = httpx.post( - self.components_url, headers=headers, json=component_data + self.components_url, headers=headers, json=component_dict ) response.raise_for_status() component = response.json()["data"]