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;
This commit is contained in:
Egor Pavlovich Gorbunov 2025-10-02 13:37:47 +03:00
parent eb69fd3328
commit f2456d1391
2 changed files with 8 additions and 1 deletions

View file

@ -8,6 +8,7 @@ from django.db import transaction
from core.crm.exceptions import CRMException from core.crm.exceptions import CRMException
from core.models import CustomerRelationshipManagementProvider, Order, OrderCrmLink from core.models import CustomerRelationshipManagementProvider, Order, OrderCrmLink
from core.utils import is_status_code_success
logger = logging.getLogger("django") logger = logging.getLogger("django")
@ -59,7 +60,9 @@ class AmoCRM:
payload["grant_type"] = "authorization_code" payload["grant_type"] = "authorization_code"
payload["code"] = self.authorization_code payload["code"] = self.authorization_code
r = requests.post(f"{self.base}/oauth2/access_token", json=payload, timeout=15) 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() data = r.json()
self.access_token = data["access_token"] self.access_token = data["access_token"]
cache.set("amo_refresh_token", data["refresh_token"], 604800) cache.set("amo_refresh_token", data["refresh_token"], 604800)

View file

@ -255,3 +255,7 @@ def generate_human_readable_token() -> str:
str: A 20-character random token. str: A 20-character random token.
""" """
return "".join([secrets.choice(CROCKFORD) for _ in range(20)]) return "".join([secrets.choice(CROCKFORD) for _ in range(20)])
def is_status_code_success(status_code: int) -> bool:
return 200 <= status_code < 300