From 15285f2f493a126206226b67677fb51df49c9857 Mon Sep 17 00:00:00 2001 From: Aleksandr Meshchriakov Date: Sun, 22 Mar 2026 13:31:23 +0100 Subject: [PATCH] fix: stabilize profile name migration and parser validation imports --- src/apps/core/views.py | 4 +++- src/apps/parsers/serializers.py | 2 +- src/apps/parsers/urls.py | 2 +- src/apps/parsers/views.py | 16 +++++++++++----- .../migrations/0010_profile_names_required.py | 2 ++ src/apps/user/serializers.py | 4 +--- src/apps/user/services.py | 5 ++++- 7 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/apps/core/views.py b/src/apps/core/views.py index 7316aa3..7ae8a0f 100644 --- a/src/apps/core/views.py +++ b/src/apps/core/views.py @@ -285,7 +285,9 @@ class BackgroundJobStreamView(BackgroundJobStatusView): "task_id": job.task_id, "status": "error", "progress": job.progress, - "message": job.error or job.progress_message or "Задача завершилась с ошибкой", + "message": job.error + or job.progress_message + or "Задача завершилась с ошибкой", }, ) diff --git a/src/apps/parsers/serializers.py b/src/apps/parsers/serializers.py index cbb07f5..e27fd5f 100644 --- a/src/apps/parsers/serializers.py +++ b/src/apps/parsers/serializers.py @@ -12,8 +12,8 @@ from apps.parsers.models import ( IndustrialProductRecord, InspectionRecord, ManufacturerRecord, - ParsingSettings, ParserLoadLog, + ParsingSettings, ProcurementRecord, Proxy, ) diff --git a/src/apps/parsers/urls.py b/src/apps/parsers/urls.py index b721098..a20946c 100644 --- a/src/apps/parsers/urls.py +++ b/src/apps/parsers/urls.py @@ -11,9 +11,9 @@ from apps.parsers.views import ( IndustrialProductViewSet, InspectionViewSet, ManufacturerViewSet, - ParsingSettingsView, ParserLoadLogExportView, ParserLoadLogViewSet, + ParsingSettingsView, ProcurementViewSet, ProxyViewSet, SourceCardDetailView, diff --git a/src/apps/parsers/views.py b/src/apps/parsers/views.py index e1f804c..e62687f 100644 --- a/src/apps/parsers/views.py +++ b/src/apps/parsers/views.py @@ -16,8 +16,8 @@ from apps.parsers.models import ( IndustrialProductRecord, InspectionRecord, ManufacturerRecord, - ParsingSettings, ParserLoadLog, + ParsingSettings, ProcurementRecord, Proxy, ) @@ -28,10 +28,10 @@ from apps.parsers.serializers import ( IndustrialCertificateSerializer, IndustrialProductSerializer, InspectionSerializer, - ParserLoadLogListSerializer, - ParsingSettingsSerializer, ManufacturerSerializer, + ParserLoadLogListSerializer, ParserLoadLogSerializer, + ParsingSettingsSerializer, ProcurementSerializer, ProxySerializer, SourceCardDetailSerializer, @@ -48,6 +48,7 @@ from django.http import HttpResponse from drf_yasg import openapi from drf_yasg.utils import swagger_auto_schema from rest_framework import status +from rest_framework.exceptions import ValidationError from rest_framework.parsers import MultiPartParser from rest_framework.permissions import IsAdminUser, IsAuthenticated from rest_framework.response import Response @@ -170,7 +171,9 @@ def _paginate_results(request, rows: list[dict]): page_number = max(1, int(page_raw)) except (TypeError, ValueError) as exc: raise ValidationError( - {"detail": "Параметры page и page_size должны быть положительными целыми числами."} + { + "detail": "Параметры page и page_size должны быть положительными целыми числами." + } ) from exc paginator = Paginator(rows, page_size) @@ -1041,7 +1044,10 @@ class ParserLoadLogExportView(APIView): }, ) def get(self, request): - rows = [_serialize_parser_log_row(item) for item in _apply_parser_log_filters(request)] + rows = [ + _serialize_parser_log_row(item) + for item in _apply_parser_log_filters(request) + ] search_term = request.query_params.get("search", "").strip() if search_term: rows = [row for row in rows if _matches_parser_log_search(row, search_term)] diff --git a/src/apps/user/migrations/0010_profile_names_required.py b/src/apps/user/migrations/0010_profile_names_required.py index 6821ffa..c643071 100644 --- a/src/apps/user/migrations/0010_profile_names_required.py +++ b/src/apps/user/migrations/0010_profile_names_required.py @@ -26,6 +26,8 @@ def backfill_profile_names(apps, schema_editor): class Migration(migrations.Migration): + atomic = False + dependencies = [ ("user", "0009_alter_user_groups"), ] diff --git a/src/apps/user/serializers.py b/src/apps/user/serializers.py index 294d149..0238843 100644 --- a/src/apps/user/serializers.py +++ b/src/apps/user/serializers.py @@ -258,9 +258,7 @@ class AdminUserUpdateSerializer(serializers.ModelSerializer): required=False, help_text="Прикладная роль пользователя", ) - first_name = serializers.CharField( - required=False, allow_blank=True - ) + first_name = serializers.CharField(required=False, allow_blank=True) middle_name = serializers.CharField( required=False, allow_blank=True, diff --git a/src/apps/user/services.py b/src/apps/user/services.py index 552caf0..b52cd91 100644 --- a/src/apps/user/services.py +++ b/src/apps/user/services.py @@ -5,7 +5,10 @@ from django.contrib.auth import get_user_model from django.contrib.auth.models import Group from django.db import transaction from django.db.models import F, Q -from rest_framework_simplejwt.token_blacklist.models import BlacklistedToken, OutstandingToken +from rest_framework_simplejwt.token_blacklist.models import ( + BlacklistedToken, + OutstandingToken, +) from rest_framework_simplejwt.tokens import RefreshToken from .models import Profile