Преглед на файлове

Httpx example (#24151)

tags/1.8.0
Asuka Minato преди 2 месеца
родител
ревизия
864872d24e
No account linked to committer's email address
променени са 1 файла, в които са добавени 14 реда и са изтрити 14 реда
  1. 14
    14
      api/core/mcp/auth/auth_flow.py

+ 14
- 14
api/core/mcp/auth/auth_flow.py Целия файл

@@ -7,7 +7,7 @@ import urllib.parse
from typing import Optional
from urllib.parse import urljoin

import requests
import httpx
from pydantic import BaseModel, ValidationError

from core.mcp.auth.auth_provider import OAuthClientProvider
@@ -105,18 +105,18 @@ def discover_oauth_metadata(server_url: str, protocol_version: Optional[str] = N

try:
headers = {"MCP-Protocol-Version": protocol_version or LATEST_PROTOCOL_VERSION}
response = requests.get(url, headers=headers)
response = httpx.get(url, headers=headers)
if response.status_code == 404:
return None
if not response.ok:
if not response.is_success:
raise ValueError(f"HTTP {response.status_code} trying to load well-known OAuth metadata")
return OAuthMetadata.model_validate(response.json())
except requests.RequestException as e:
if isinstance(e, requests.ConnectionError):
response = requests.get(url)
except httpx.RequestError as e:
if isinstance(e, httpx.ConnectError):
response = httpx.get(url)
if response.status_code == 404:
return None
if not response.ok:
if not response.is_success:
raise ValueError(f"HTTP {response.status_code} trying to load well-known OAuth metadata")
return OAuthMetadata.model_validate(response.json())
raise
@@ -206,8 +206,8 @@ def exchange_authorization(
if client_information.client_secret:
params["client_secret"] = client_information.client_secret

response = requests.post(token_url, data=params)
if not response.ok:
response = httpx.post(token_url, data=params)
if not response.is_success:
raise ValueError(f"Token exchange failed: HTTP {response.status_code}")
return OAuthTokens.model_validate(response.json())

@@ -237,8 +237,8 @@ def refresh_authorization(
if client_information.client_secret:
params["client_secret"] = client_information.client_secret

response = requests.post(token_url, data=params)
if not response.ok:
response = httpx.post(token_url, data=params)
if not response.is_success:
raise ValueError(f"Token refresh failed: HTTP {response.status_code}")
return OAuthTokens.model_validate(response.json())

@@ -256,12 +256,12 @@ def register_client(
else:
registration_url = urljoin(server_url, "/register")

response = requests.post(
response = httpx.post(
registration_url,
json=client_metadata.model_dump(),
headers={"Content-Type": "application/json"},
)
if not response.ok:
if not response.is_success:
response.raise_for_status()
return OAuthClientInformationFull.model_validate(response.json())

@@ -283,7 +283,7 @@ def auth(
raise ValueError("Existing OAuth client information is required when exchanging an authorization code")
try:
full_information = register_client(server_url, metadata, provider.client_metadata)
except requests.RequestException as e:
except httpx.RequestError as e:
raise ValueError(f"Could not register OAuth client: {e}")
provider.save_client_information(full_information)
client_information = full_information

Loading…
Отказ
Запис