From 938fcbab62a1f4300799d588c448d67b5fbbf31b Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 22 Aug 2023 16:37:43 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(GetRequest.py):=20change=20v?= =?UTF-8?q?ariable=20name=20'url'=20to=20'urls'=20to=20improve=20clarity?= =?UTF-8?q?=20and=20semantics=20=E2=9C=A8=20feat(PatchRequest.py):=20add?= =?UTF-8?q?=20new=20component=20'PatchRequest'=20to=20make=20PATCH=20reque?= =?UTF-8?q?sts=20to=20a=20given=20URL=20=F0=9F=90=9B=20fix(PostRequest.py)?= =?UTF-8?q?:=20change=20variable=20name=20'document'=20to=20'documents'=20?= =?UTF-8?q?to=20improve=20clarity=20and=20semantics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/utilities/GetRequest.py | 5 +- .../components/utilities/PatchRequest.py | 76 +++++++++++++++++++ .../components/utilities/PostRequest.py | 8 +- 3 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 src/backend/langflow/components/utilities/PatchRequest.py diff --git a/src/backend/langflow/components/utilities/GetRequest.py b/src/backend/langflow/components/utilities/GetRequest.py index 40fe8935f..793d5b936 100644 --- a/src/backend/langflow/components/utilities/GetRequest.py +++ b/src/backend/langflow/components/utilities/GetRequest.py @@ -62,9 +62,8 @@ class GetRequest(CustomComponent): ) -> list[Document]: if headers is None: headers = {} - if not isinstance(url, list): - url: list[str] = [url] + urls = url if isinstance(url, list) else [url] with requests.Session() as session: - documents = [self.get_document(session, u, headers, timeout) for u in url] + documents = [self.get_document(session, u, headers, timeout) for u in urls] self.repr_value = documents return documents diff --git a/src/backend/langflow/components/utilities/PatchRequest.py b/src/backend/langflow/components/utilities/PatchRequest.py new file mode 100644 index 000000000..86fd2e1b4 --- /dev/null +++ b/src/backend/langflow/components/utilities/PatchRequest.py @@ -0,0 +1,76 @@ +from typing import List, Optional +import requests +from langflow import CustomComponent +from langchain.schema import Document +from langflow.database.models.base import orjson_dumps + + +class PatchRequest(CustomComponent): + display_name: str = "Patch Request" + description: str = "Make a PATCH request to the given URL." + output_types: list[str] = ["Document"] + beta = True + field_config = { + "url": {"display_name": "URL", "info": "The URL to make the request to."}, + "headers": { + "display_name": "Headers", + "field_type": "code", + "info": "The headers to send with the request.", + }, + "code": {"show": False}, + "document": {"display_name": "Document"}, + } + + def patch_document( + self, + session: requests.Session, + document: Document, + url: str, + headers: Optional[dict] = None, + ) -> Document: + try: + response = session.patch(url, headers=headers, data=document.page_content) + try: + response_json = response.json() + result = orjson_dumps(response_json, indent_2=False) + except Exception: + result = response.text + self.repr_value = result + return Document( + page_content=result, + metadata={ + "source": url, + "headers": headers, + "status_code": response.status_code, + }, + ) + except Exception as exc: + return Document( + page_content=str(exc), + metadata={"source": url, "headers": headers, "status_code": 500}, + ) + + def build( + self, + document: Document, + url: str, + headers: Optional[dict] = None, + ) -> List[Document]: + if headers is None: + headers = {} + + if not isinstance(document, list) and isinstance(document, Document): + documents: list[Document] = [document] + elif isinstance(document, list) and all( + isinstance(doc, Document) for doc in document + ): + documents = document + else: + raise ValueError("document must be a Document or a list of Documents") + + with requests.Session() as session: + documents = [ + self.patch_document(session, doc, url, headers) for doc in documents + ] + self.repr_value = documents + return documents diff --git a/src/backend/langflow/components/utilities/PostRequest.py b/src/backend/langflow/components/utilities/PostRequest.py index e0687a6f7..ab02f9412 100644 --- a/src/backend/langflow/components/utilities/PostRequest.py +++ b/src/backend/langflow/components/utilities/PostRequest.py @@ -64,13 +64,17 @@ class PostRequest(CustomComponent): headers = {} if not isinstance(document, list) and isinstance(document, Document): - document: list[Document] = [document] + documents: list[Document] = [document] + elif isinstance(document, list) and all( + isinstance(doc, Document) for doc in document + ): + documents = document else: raise ValueError("document must be a Document or a list of Documents") with requests.Session() as session: documents = [ - self.post_document(session, doc, url, headers) for doc in document + self.post_document(session, doc, url, headers) for doc in documents ] self.repr_value = documents return documents