Features: 1) Add async logger initialization in core/vendors and log warnings for missing attribute values, groups, and integrity errors; 2) Add traceback logging for attribute-related errors in core/vendors;

Fixes: 1) Add missing `sku` to readonly fields in `core/admin`;

Extra: 1) Remove unnecessary import of `AnonymousUser` from `core/serializers/detail.py`.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-10-18 16:19:39 +03:00
parent efeab3e426
commit 44e5e74044
3 changed files with 9 additions and 1 deletions

View file

@ -410,6 +410,7 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type:
"sku", "sku",
) )
readonly_fields = ( readonly_fields = (
"sku",
"slug", "slug",
"uuid", "uuid",
"modified", "modified",

View file

@ -3,7 +3,6 @@ from collections import defaultdict
from contextlib import suppress from contextlib import suppress
from typing import Collection, Any from typing import Collection, Any
from django.contrib.auth.models import AnonymousUser
from django.core.cache import cache from django.core.cache import cache
from django.db.models.functions import Length from django.db.models.functions import Length
from rest_framework.fields import JSONField, SerializerMethodField from rest_framework.fields import JSONField, SerializerMethodField

View file

@ -1,5 +1,6 @@
import gzip import gzip
import json import json
import traceback
from contextlib import suppress from contextlib import suppress
from datetime import datetime from datetime import datetime
from decimal import Decimal from decimal import Decimal
@ -7,6 +8,7 @@ from io import BytesIO
from math import ceil, log10 from math import ceil, log10
from typing import Any from typing import Any
from celery.utils.log import get_task_logger
from constance import config from constance import config
from django.conf import settings from django.conf import settings
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
@ -28,6 +30,8 @@ from core.models import (
from payments.errors import RatesError from payments.errors import RatesError
from payments.utils import get_rates from payments.utils import get_rates
async_logger = get_task_logger(__name__)
class NotEnoughBalanceError(Exception): class NotEnoughBalanceError(Exception):
""" """
@ -416,9 +420,11 @@ class AbstractVendor:
def process_attribute(self, key: str, value: Any, product: Product, attr_group: AttributeGroup) -> None: def process_attribute(self, key: str, value: Any, product: Product, attr_group: AttributeGroup) -> None:
if not value: if not value:
async_logger.warning(f"No value for attribute {key!r} at {product.name!r}...")
return return
if not attr_group: if not attr_group:
async_logger.warning(f"No group for attribute {key!r} at {product.name!r}...")
return return
if key in self.blocked_attributes: if key in self.blocked_attributes:
@ -444,6 +450,8 @@ class AbstractVendor:
attribute.value_type = attr_value_type attribute.value_type = attr_value_type
attribute.save() attribute.save()
except IntegrityError: except IntegrityError:
async_logger.warning(f"IntegrityError while processing attribute {key!r}...")
async_logger.warning(traceback.format_exc())
return return
attribute.save() attribute.save()