🐛 fix(GetRequest.py): change variable name 'url' to 'urls' to improve clarity and semantics
✨ feat(PatchRequest.py): add new component 'PatchRequest' to make PATCH requests to a given URL 🐛 fix(PostRequest.py): change variable name 'document' to 'documents' to improve clarity and semantics
This commit is contained in:
parent
663e648af2
commit
938fcbab62
3 changed files with 84 additions and 5 deletions
|
|
@ -62,9 +62,8 @@ class GetRequest(CustomComponent):
|
||||||
) -> list[Document]:
|
) -> list[Document]:
|
||||||
if headers is None:
|
if headers is None:
|
||||||
headers = {}
|
headers = {}
|
||||||
if not isinstance(url, list):
|
urls = url if isinstance(url, list) else [url]
|
||||||
url: list[str] = [url]
|
|
||||||
with requests.Session() as session:
|
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
|
self.repr_value = documents
|
||||||
return documents
|
return documents
|
||||||
|
|
|
||||||
76
src/backend/langflow/components/utilities/PatchRequest.py
Normal file
76
src/backend/langflow/components/utilities/PatchRequest.py
Normal file
|
|
@ -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
|
||||||
|
|
@ -64,13 +64,17 @@ class PostRequest(CustomComponent):
|
||||||
headers = {}
|
headers = {}
|
||||||
|
|
||||||
if not isinstance(document, list) and isinstance(document, Document):
|
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:
|
else:
|
||||||
raise ValueError("document must be a Document or a list of Documents")
|
raise ValueError("document must be a Document or a list of Documents")
|
||||||
|
|
||||||
with requests.Session() as session:
|
with requests.Session() as session:
|
||||||
documents = [
|
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
|
self.repr_value = documents
|
||||||
return documents
|
return documents
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue