This commit is contained in:
2026-04-29 02:58:56 +03:30
parent f0f2ac34b7
commit 27784ee8b9
15 changed files with 1277 additions and 36 deletions
+13 -2
View File
@@ -1,8 +1,10 @@
from dataclasses import dataclass, field
import json
import logging
import requests
from django.conf import settings
from django.core.serializers.json import DjangoJSONEncoder
from .exceptions import ExternalAPIRequestError
from .exceptions import MockDirectoryNotFound, MockFileNotFound
@@ -72,7 +74,8 @@ class ExternalAPIAdapter:
url = f"{base_url}/{str(path).lstrip('/')}"
files = None
request_payload = payload
request_payload = self._make_json_safe(payload)
request_query = self._make_json_safe(query)
request_headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
@@ -95,7 +98,7 @@ class ExternalAPIAdapter:
request_kwargs = {
"method": method,
"url": url,
"params": query,
"params": request_query,
"headers": request_headers,
"timeout": getattr(settings, "EXTERNAL_API_TIMEOUT", 30),
}
@@ -150,6 +153,14 @@ class ExternalAPIAdapter:
if method not in supported_methods:
raise ValueError(f"Unsupported HTTP method '{method}'. Supported methods: {sorted(supported_methods)}")
@staticmethod
def _make_json_safe(value):
if value is None:
return None
# Match Django/DRF JSON rendering so UUID/date-like values can be forwarded safely.
return json.loads(json.dumps(value, cls=DjangoJSONEncoder))
_default_adapter = ExternalAPIAdapter()