This commit is contained in:
2026-04-27 00:40:59 +03:30
parent 2cd96ceec6
commit 64e67c282c
56 changed files with 3912 additions and 745 deletions
+35
View File
@@ -1,4 +1,5 @@
from dataclasses import dataclass, field
import logging
import requests
from django.conf import settings
@@ -9,6 +10,9 @@ from .mock_loader import MockLoader
from .services import ServiceRegistry
logger = logging.getLogger(__name__)
@dataclass
class AdapterResponse:
status_code: int
@@ -26,6 +30,16 @@ class ExternalAPIAdapter:
request_method = method.upper()
self._validate_method(request_method)
service = self.service_registry.get(service_name)
logger.warning(
"External API adapter request start: service=%s method=%s path=%s payload_type=%s payload_keys=%s query_keys=%s header_keys=%s",
service_name,
request_method,
path,
type(payload).__name__,
sorted(payload.keys()) if isinstance(payload, dict) else None,
sorted(query.keys()) if isinstance(query, dict) else None,
sorted(headers.keys()) if isinstance(headers, dict) else None,
)
use_mock = getattr(settings, "USE_EXTERNAL_API_MOCK", False) and service_name != "ai"
if use_mock:
@@ -91,6 +105,16 @@ class ExternalAPIAdapter:
else:
request_kwargs["json"] = request_payload
logger.warning(
"External API adapter outbound request: method=%s url=%s has_files=%s json_keys=%s data_keys=%s timeout=%s",
method,
url,
bool(files),
sorted(request_payload.keys()) if isinstance(request_payload, dict) and not files else None,
sorted(request_payload.keys()) if isinstance(request_payload, dict) and files else None,
request_kwargs["timeout"],
)
response = requests.request(
**request_kwargs,
)
@@ -102,6 +126,17 @@ class ExternalAPIAdapter:
except ValueError:
response_data = response.text
logger.warning(
"External API adapter inbound response: method=%s url=%s status_code=%s response_type=%s response_keys=%s text_length=%s",
method,
url,
response.status_code,
type(response_data).__name__,
sorted(response_data.keys()) if isinstance(response_data, dict) else None,
len(response_data) if isinstance(response_data, str) else None,
)
logger.warning("Response : %s",response_data)
return AdapterResponse(
status_code=response.status_code,
data=response_data,