From f2456d13919fdb98e16c7175a7422a516ecc2f03 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Thu, 2 Oct 2025 13:37:47 +0300 Subject: [PATCH] Features: 1) Add `is_status_code_success` utility function to check HTTP status success codes; 2) Implement `is_status_code_success` in AMO access token retrieval to improve error handling; Fixes: None; Extra: 1) Adjust minor formatting in `core/utils/__init__.py`; 2) Add logging for failed AMO access token requests; --- core/crm/amo/gateway.py | 5 ++++- core/utils/__init__.py | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/crm/amo/gateway.py b/core/crm/amo/gateway.py index 7eef103e..ce22c3b7 100644 --- a/core/crm/amo/gateway.py +++ b/core/crm/amo/gateway.py @@ -8,6 +8,7 @@ from django.db import transaction from core.crm.exceptions import CRMException from core.models import CustomerRelationshipManagementProvider, Order, OrderCrmLink +from core.utils import is_status_code_success logger = logging.getLogger("django") @@ -59,7 +60,9 @@ class AmoCRM: payload["grant_type"] = "authorization_code" payload["code"] = self.authorization_code r = requests.post(f"{self.base}/oauth2/access_token", json=payload, timeout=15) - r.raise_for_status() + if not is_status_code_success(r.status_code): + logger.error(f"Unable to get AMO access token: {r.status_code} {r.text}") + raise CRMException("Unable to get AMO access token") data = r.json() self.access_token = data["access_token"] cache.set("amo_refresh_token", data["refresh_token"], 604800) diff --git a/core/utils/__init__.py b/core/utils/__init__.py index 53d1f447..6b904606 100644 --- a/core/utils/__init__.py +++ b/core/utils/__init__.py @@ -255,3 +255,7 @@ def generate_human_readable_token() -> str: str: A 20-character random token. """ return "".join([secrets.choice(CROCKFORD) for _ in range(20)]) + + +def is_status_code_success(status_code: int) -> bool: + return 200 <= status_code < 300