From 62b9bb523c7ee20a846bf47bb63ee51c0bc6c5bd Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 22 Aug 2023 14:56:34 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20fix(GetRequest.py):=20improve=20?= =?UTF-8?q?code=20readability=20and=20add=20support=20for=20multiple=20URL?= =?UTF-8?q?s=20and=20headers=20in=20GetRequest=20component=20=F0=9F=94=A7?= =?UTF-8?q?=20fix(PostRequest.py):=20improve=20code=20readability=20and=20?= =?UTF-8?q?add=20support=20for=20multiple=20documents,=20URLs,=20and=20hea?= =?UTF-8?q?ders=20in=20PostRequest=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/utilities/GetRequest.py | 55 ++++++++++++++++--- .../components/utilities/PostRequest.py | 55 ++++++++++++++++--- 2 files changed, 96 insertions(+), 14 deletions(-) diff --git a/src/backend/langflow/components/utilities/GetRequest.py b/src/backend/langflow/components/utilities/GetRequest.py index baa2139c2..424106f31 100644 --- a/src/backend/langflow/components/utilities/GetRequest.py +++ b/src/backend/langflow/components/utilities/GetRequest.py @@ -7,15 +7,57 @@ from typing import Optional class GetRequest(CustomComponent): display_name: str = "Get Request" - description: str = "Make a GET request to the given URL" + description: str = "Make a GET request to the given URL." output_types: list[str] = ["Document"] beta = True field_config = { - "url": {"display_name": "URL"}, - "headers": {"display_name": "Headers", "field_type": "code"}, + "url": { + "display_name": "URL", + "info": "The URL to make the request to", + "is_list": True, + }, + "headers": { + "display_name": "Headers", + "field_type": "code", + "info": "The headers to send with the request.", + }, "code": {"show": False}, } + def get_document( + self, + url: str, + headers: Optional[dict] = None, + ) -> Document: + try: + if headers is None: + headers = {} + with requests.Session() as session: + response = session.get(url, headers=headers) + 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, url: str, @@ -23,7 +65,6 @@ class GetRequest(CustomComponent): ) -> Document: if headers is None: headers = {} - with requests.get(url, headers=headers) as result: - result = result.json() - self.repr_value = result - return Document(page_content=orjson_dumps(result)) + if not isinstance(url, list): + url = [url] + return [self.get_document(u, headers) for u in url] diff --git a/src/backend/langflow/components/utilities/PostRequest.py b/src/backend/langflow/components/utilities/PostRequest.py index 83ae9db34..2f0ab2053 100644 --- a/src/backend/langflow/components/utilities/PostRequest.py +++ b/src/backend/langflow/components/utilities/PostRequest.py @@ -7,16 +7,55 @@ from typing import Optional class PostRequest(CustomComponent): display_name: str = "Post Request" - description: str = "Make a POST request to the given URL" + description: str = "Make a POST request to the given URL." output_types: list[str] = ["Document"] beta = True field_config = { - "url": {"display_name": "URL"}, - "headers": {"display_name": "Headers", "field_type": "code"}, + "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 post_document( + self, + document: Document, + url: str, + headers: Optional[dict] = None, + ) -> Document: + try: + with requests.Session() as session: + response = session.post( + 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, + }, + ) + except Exception as exc: + return Document( + page_content=str(exc), + metadata={ + "source": url, + "headers": headers, + "status_code": 500, + }, + ) + def build( self, document: Document, @@ -25,7 +64,9 @@ class PostRequest(CustomComponent): ) -> Document: if headers is None: headers = {} - with requests.post(url, headers=headers, json=document.page_content) as result: - result = result.json() - self.repr_value = result - return Document(page_content=orjson_dumps(result)) + + if not isinstance(document, list): + document = [document] + documents = [self.post_document(doc, url, headers) for doc in document] + self.repr_value = documents + return documents