🐛 fix(GetRequest.py): handle request timeout by returning a Document with status code 408 and "Request Timed Out" content

✨ feat(GetRequest.py): add timeout parameter to the build method to allow configuring the request timeout value
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-08-22 15:31:47 -03:00
commit 696a139171

View file

@ -25,48 +25,46 @@ class GetRequest(CustomComponent):
} }
def get_document( def get_document(
self, self, session: requests.Session, url: str, headers: Optional[dict], timeout: int
url: str,
headers: Optional[dict] = None,
) -> Document: ) -> Document:
try: try:
if headers is None: response = session.get(url, headers=headers, timeout=timeout)
headers = {} try:
with requests.Session() as session: response_json = response.json()
response = session.get(url, headers=headers) result = orjson_dumps(response_json, indent=2)
try: except Exception:
response_json = response.json() result = response.text
result = orjson_dumps(response_json, indent_2=False) self.repr_value = result
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( return Document(
page_content=str(exc), page_content=result,
metadata={ metadata={
"source": url, "source": url,
"headers": headers, "headers": headers,
"status_code": 500, "status_code": response.status_code,
}, },
) )
except requests.Timeout:
return Document(
page_content="Request Timed Out",
metadata={"source": url, "headers": headers, "status_code": 408},
)
except Exception as exc:
return Document(
page_content=str(exc),
metadata={"source": url, "headers": headers, "status_code": 500},
)
def build( def build(
self, self,
url: str, url: str,
headers: Optional[dict] = None, headers: Optional[dict] = None,
timeout: int = 5,
) -> Document: ) -> Document:
if headers is None: if headers is None:
headers = {} headers = {}
if not isinstance(url, list): if not isinstance(url, list):
url = [url] url = [url]
documents = [self.get_document(u, headers) for u in url] with requests.Session() as session:
self.repr_value = documents documents = [self.get_document(session, u, headers, timeout) for u in url]
self.repr_value = documents
return documents return documents