|
|
|
@ -1,11 +1,14 @@ |
|
|
|
from __future__ import annotations |
|
|
|
|
|
|
|
import logging |
|
|
|
from typing import Any, Dict, Optional |
|
|
|
|
|
|
|
import requests |
|
|
|
from django.conf import settings |
|
|
|
from django.core.exceptions import ImproperlyConfigured |
|
|
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
|
|
|
class WebEgressError(Exception): |
|
|
|
def __init__( |
|
|
|
@ -64,15 +67,23 @@ class WebEgressClient: |
|
|
|
if self.service_token: |
|
|
|
headers["Authorization"] = f"Bearer {self.service_token}" |
|
|
|
|
|
|
|
request_url = f"{self.base_url}{path}" |
|
|
|
|
|
|
|
try: |
|
|
|
response = requests.request( |
|
|
|
method, |
|
|
|
f"{self.base_url}{path}", |
|
|
|
request_url, |
|
|
|
headers=headers, |
|
|
|
timeout=self.timeout, |
|
|
|
**kwargs, |
|
|
|
) |
|
|
|
except requests.RequestException as exc: |
|
|
|
logger.exception( |
|
|
|
"[WebEgressClient] Request failed method=%s url=%s error=%s", |
|
|
|
method, |
|
|
|
request_url, |
|
|
|
str(exc), |
|
|
|
) |
|
|
|
raise WebEgressError("Failed to reach WebEgress service.") from exc |
|
|
|
|
|
|
|
data = self._safe_json(response) |
|
|
|
@ -83,6 +94,14 @@ class WebEgressClient: |
|
|
|
or response.text |
|
|
|
or "WebEgress service request failed." |
|
|
|
) |
|
|
|
logger.error( |
|
|
|
"[WebEgressClient] Non-success response method=%s url=%s status=%s message=%s payload=%s", |
|
|
|
method, |
|
|
|
request_url, |
|
|
|
response.status_code, |
|
|
|
message, |
|
|
|
data, |
|
|
|
) |
|
|
|
raise WebEgressError( |
|
|
|
message, |
|
|
|
status_code=response.status_code, |
|
|
|
|