mirror of
https://github.com/hwchase17/langchain.git
synced 2025-08-10 05:20:39 +00:00
Allow passing auth objects in TextRequestsWrapper (#7701)
- Description: This allows passing auth objects in request wrappers. Currently, we can handle auth by editing headers in the RequestsWrappers, but more complex auth methods, such as Kerberos, could be handled better by using existing functionality within the requests library. There are many authentication options supported both natively and by extensions, such as requests-kerberos or requests-ntlm. - Issue: Fixes #7542 - Dependencies: none Co-authored-by: eric.speidel@de.bosch.com <eric.speidel@de.bosch.com>
This commit is contained in:
parent
1e40427755
commit
663b0933e4
@ -16,6 +16,7 @@ class Requests(BaseModel):
|
|||||||
|
|
||||||
headers: Optional[Dict[str, str]] = None
|
headers: Optional[Dict[str, str]] = None
|
||||||
aiosession: Optional[aiohttp.ClientSession] = None
|
aiosession: Optional[aiohttp.ClientSession] = None
|
||||||
|
auth: Optional[Any] = None
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
"""Configuration for this pydantic object."""
|
"""Configuration for this pydantic object."""
|
||||||
@ -25,23 +26,29 @@ class Requests(BaseModel):
|
|||||||
|
|
||||||
def get(self, url: str, **kwargs: Any) -> requests.Response:
|
def get(self, url: str, **kwargs: Any) -> requests.Response:
|
||||||
"""GET the URL and return the text."""
|
"""GET the URL and return the text."""
|
||||||
return requests.get(url, headers=self.headers, **kwargs)
|
return requests.get(url, headers=self.headers, auth=self.auth, **kwargs)
|
||||||
|
|
||||||
def post(self, url: str, data: Dict[str, Any], **kwargs: Any) -> requests.Response:
|
def post(self, url: str, data: Dict[str, Any], **kwargs: Any) -> requests.Response:
|
||||||
"""POST to the URL and return the text."""
|
"""POST to the URL and return the text."""
|
||||||
return requests.post(url, json=data, headers=self.headers, **kwargs)
|
return requests.post(
|
||||||
|
url, json=data, headers=self.headers, auth=self.auth, **kwargs
|
||||||
|
)
|
||||||
|
|
||||||
def patch(self, url: str, data: Dict[str, Any], **kwargs: Any) -> requests.Response:
|
def patch(self, url: str, data: Dict[str, Any], **kwargs: Any) -> requests.Response:
|
||||||
"""PATCH the URL and return the text."""
|
"""PATCH the URL and return the text."""
|
||||||
return requests.patch(url, json=data, headers=self.headers, **kwargs)
|
return requests.patch(
|
||||||
|
url, json=data, headers=self.headers, auth=self.auth, **kwargs
|
||||||
|
)
|
||||||
|
|
||||||
def put(self, url: str, data: Dict[str, Any], **kwargs: Any) -> requests.Response:
|
def put(self, url: str, data: Dict[str, Any], **kwargs: Any) -> requests.Response:
|
||||||
"""PUT the URL and return the text."""
|
"""PUT the URL and return the text."""
|
||||||
return requests.put(url, json=data, headers=self.headers, **kwargs)
|
return requests.put(
|
||||||
|
url, json=data, headers=self.headers, auth=self.auth, **kwargs
|
||||||
|
)
|
||||||
|
|
||||||
def delete(self, url: str, **kwargs: Any) -> requests.Response:
|
def delete(self, url: str, **kwargs: Any) -> requests.Response:
|
||||||
"""DELETE the URL and return the text."""
|
"""DELETE the URL and return the text."""
|
||||||
return requests.delete(url, headers=self.headers, **kwargs)
|
return requests.delete(url, headers=self.headers, auth=self.auth, **kwargs)
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def _arequest(
|
async def _arequest(
|
||||||
@ -51,12 +58,12 @@ class Requests(BaseModel):
|
|||||||
if not self.aiosession:
|
if not self.aiosession:
|
||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
async with session.request(
|
async with session.request(
|
||||||
method, url, headers=self.headers, **kwargs
|
method, url, headers=self.headers, auth=self.auth, **kwargs
|
||||||
) as response:
|
) as response:
|
||||||
yield response
|
yield response
|
||||||
else:
|
else:
|
||||||
async with self.aiosession.request(
|
async with self.aiosession.request(
|
||||||
method, url, headers=self.headers, **kwargs
|
method, url, headers=self.headers, auth=self.auth, **kwargs
|
||||||
) as response:
|
) as response:
|
||||||
yield response
|
yield response
|
||||||
|
|
||||||
@ -65,7 +72,7 @@ class Requests(BaseModel):
|
|||||||
self, url: str, **kwargs: Any
|
self, url: str, **kwargs: Any
|
||||||
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
||||||
"""GET the URL and return the text asynchronously."""
|
"""GET the URL and return the text asynchronously."""
|
||||||
async with self._arequest("GET", url, **kwargs) as response:
|
async with self._arequest("GET", url, auth=self.auth, **kwargs) as response:
|
||||||
yield response
|
yield response
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
@ -73,7 +80,9 @@ class Requests(BaseModel):
|
|||||||
self, url: str, data: Dict[str, Any], **kwargs: Any
|
self, url: str, data: Dict[str, Any], **kwargs: Any
|
||||||
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
||||||
"""POST to the URL and return the text asynchronously."""
|
"""POST to the URL and return the text asynchronously."""
|
||||||
async with self._arequest("POST", url, json=data, **kwargs) as response:
|
async with self._arequest(
|
||||||
|
"POST", url, json=data, auth=self.auth, **kwargs
|
||||||
|
) as response:
|
||||||
yield response
|
yield response
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
@ -81,7 +90,9 @@ class Requests(BaseModel):
|
|||||||
self, url: str, data: Dict[str, Any], **kwargs: Any
|
self, url: str, data: Dict[str, Any], **kwargs: Any
|
||||||
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
||||||
"""PATCH the URL and return the text asynchronously."""
|
"""PATCH the URL and return the text asynchronously."""
|
||||||
async with self._arequest("PATCH", url, json=data, **kwargs) as response:
|
async with self._arequest(
|
||||||
|
"PATCH", url, json=data, auth=self.auth, **kwargs
|
||||||
|
) as response:
|
||||||
yield response
|
yield response
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
@ -89,7 +100,9 @@ class Requests(BaseModel):
|
|||||||
self, url: str, data: Dict[str, Any], **kwargs: Any
|
self, url: str, data: Dict[str, Any], **kwargs: Any
|
||||||
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
||||||
"""PUT the URL and return the text asynchronously."""
|
"""PUT the URL and return the text asynchronously."""
|
||||||
async with self._arequest("PUT", url, json=data, **kwargs) as response:
|
async with self._arequest(
|
||||||
|
"PUT", url, json=data, auth=self.auth, **kwargs
|
||||||
|
) as response:
|
||||||
yield response
|
yield response
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
@ -97,7 +110,7 @@ class Requests(BaseModel):
|
|||||||
self, url: str, **kwargs: Any
|
self, url: str, **kwargs: Any
|
||||||
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
) -> AsyncGenerator[aiohttp.ClientResponse, None]:
|
||||||
"""DELETE the URL and return the text asynchronously."""
|
"""DELETE the URL and return the text asynchronously."""
|
||||||
async with self._arequest("DELETE", url, **kwargs) as response:
|
async with self._arequest("DELETE", url, auth=self.auth, **kwargs) as response:
|
||||||
yield response
|
yield response
|
||||||
|
|
||||||
|
|
||||||
@ -109,6 +122,7 @@ class TextRequestsWrapper(BaseModel):
|
|||||||
|
|
||||||
headers: Optional[Dict[str, str]] = None
|
headers: Optional[Dict[str, str]] = None
|
||||||
aiosession: Optional[aiohttp.ClientSession] = None
|
aiosession: Optional[aiohttp.ClientSession] = None
|
||||||
|
auth: Optional[Any] = None
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
"""Configuration for this pydantic object."""
|
"""Configuration for this pydantic object."""
|
||||||
@ -118,7 +132,9 @@ class TextRequestsWrapper(BaseModel):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def requests(self) -> Requests:
|
def requests(self) -> Requests:
|
||||||
return Requests(headers=self.headers, aiosession=self.aiosession)
|
return Requests(
|
||||||
|
headers=self.headers, aiosession=self.aiosession, auth=self.auth
|
||||||
|
)
|
||||||
|
|
||||||
def get(self, url: str, **kwargs: Any) -> str:
|
def get(self, url: str, **kwargs: Any) -> str:
|
||||||
"""GET the URL and return the text."""
|
"""GET the URL and return the text."""
|
||||||
|
Loading…
Reference in New Issue
Block a user