diff --git a/src/apps/core/admin_dashboard.py b/src/apps/core/admin_dashboard.py index 47d0620..0d1ccbe 100644 --- a/src/apps/core/admin_dashboard.py +++ b/src/apps/core/admin_dashboard.py @@ -5,10 +5,6 @@ from __future__ import annotations from dataclasses import dataclass from typing import Any -from django.db import models -from django.db.models import Count, Max -from django.urls import NoReverseMatch, reverse - from apps.form_1.models import FormF1Record from apps.form_2.models import FormF2Record from apps.form_3.models import FormF3Record @@ -17,6 +13,9 @@ from apps.form_5.models import FormF5Record from apps.form_6.models import FormF6Record from apps.organization.models import Organization from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod +from django.db import models +from django.db.models import Count, Max +from django.urls import NoReverseMatch, reverse SOURCE_COLORS = ( "#49d0c8", diff --git a/src/apps/core/exception_handler.py b/src/apps/core/exception_handler.py index 94a1e01..00cda96 100644 --- a/src/apps/core/exception_handler.py +++ b/src/apps/core/exception_handler.py @@ -7,6 +7,9 @@ Converts all exceptions to a unified API response format. import logging from typing import Any +from apps.core.exceptions import BaseAPIException +from apps.core.middleware import get_request_id +from apps.core.response import api_error_response from django.core.exceptions import PermissionDenied from django.http import Http404 from rest_framework import status @@ -14,10 +17,6 @@ from rest_framework.exceptions import APIException from rest_framework.response import Response from rest_framework.views import exception_handler as drf_exception_handler -from apps.core.exceptions import BaseAPIException -from apps.core.middleware import get_request_id -from apps.core.response import api_error_response - logger = logging.getLogger(__name__) diff --git a/src/apps/core/management/commands/generate_test_reports.py b/src/apps/core/management/commands/generate_test_reports.py index d7f8807..d5886b8 100644 --- a/src/apps/core/management/commands/generate_test_reports.py +++ b/src/apps/core/management/commands/generate_test_reports.py @@ -6,8 +6,6 @@ from dataclasses import dataclass from datetime import date from decimal import Decimal -from django.db.models import Max - from apps.core.management.commands.base import BaseAppCommand from apps.external_data.models import ( ArbitrationCase, @@ -29,6 +27,7 @@ from apps.form_6.models import FormF6Record from apps.form_6.services import FormF6Service from apps.organization.models import IndustryCluster, Organization, OrganizationType from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod +from django.db.models import Max MONEY_Q = Decimal("0.01") RATE_Q = Decimal("0.01") diff --git a/src/apps/core/models.py b/src/apps/core/models.py index 02dd817..9b4cb7c 100644 --- a/src/apps/core/models.py +++ b/src/apps/core/models.py @@ -10,12 +10,11 @@ Background Job Tracking - отслеживание статуса Celery зад import uuid from typing import Any +from apps.core.mixins import TimestampMixin from django.db import models from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from apps.core.mixins import TimestampMixin - class JobStatus(models.TextChoices): """Статусы фоновых задач.""" diff --git a/src/apps/core/services.py b/src/apps/core/services.py index 11658d7..1eb45b0 100644 --- a/src/apps/core/services.py +++ b/src/apps/core/services.py @@ -8,11 +8,10 @@ They are easily testable and can manage transactions. import logging from typing import Any, Generic, TypeVar +from apps.core.exceptions import NotFoundError from django.db import models, transaction from django.db.models import QuerySet -from apps.core.exceptions import NotFoundError - logger = logging.getLogger(__name__) # Type variable for model @@ -660,9 +659,8 @@ class BackgroundJobService(BaseReadOnlyService): """ from datetime import timedelta - from django.utils import timezone - from apps.core.models import JobStatus + from django.utils import timezone cutoff = timezone.now() - timedelta(days=days) deleted, _ = ( diff --git a/src/apps/core/urls.py b/src/apps/core/urls.py index 26defd7..382194e 100644 --- a/src/apps/core/urls.py +++ b/src/apps/core/urls.py @@ -2,9 +2,8 @@ URL configuration for core app. """ -from django.urls import path - from apps.core.views import HealthCheckView, LivenessView, ReadinessView +from django.urls import path app_name = "core" diff --git a/src/apps/core/views.py b/src/apps/core/views.py index 131ca03..efcf519 100644 --- a/src/apps/core/views.py +++ b/src/apps/core/views.py @@ -12,6 +12,12 @@ import logging import time from typing import Any +from apps.core.openapi import CommonResponses, ErrorResponses, swagger_tag +from apps.core.serializers import ( + BackgroundJobListResponseSerializer, + BackgroundJobListSerializer, + BackgroundJobSerializer, +) from django.conf import settings from django.db import connection from django.http import StreamingHttpResponse @@ -23,13 +29,6 @@ from rest_framework.request import Request from rest_framework.response import Response from rest_framework.views import APIView -from apps.core.openapi import CommonResponses, ErrorResponses, swagger_tag -from apps.core.serializers import ( - BackgroundJobListResponseSerializer, - BackgroundJobListSerializer, - BackgroundJobSerializer, -) - logger = logging.getLogger(__name__) HEALTH_TAG = swagger_tag("Мониторинг", "monitoring") diff --git a/src/apps/core/viewsets.py b/src/apps/core/viewsets.py index 7e4bc3e..4f8f95d 100644 --- a/src/apps/core/viewsets.py +++ b/src/apps/core/viewsets.py @@ -7,6 +7,8 @@ import logging from typing import Any, Generic, TypeVar +from apps.core.pagination import ClassicPagination, StandardPagination +from apps.core.response import api_error_response, api_response from django.db.models import Model, QuerySet from django_filters import rest_framework as filters from rest_framework import status, viewsets @@ -16,9 +18,6 @@ from rest_framework.request import Request from rest_framework.response import Response from rest_framework.serializers import Serializer -from apps.core.pagination import ClassicPagination, StandardPagination -from apps.core.response import api_error_response, api_response - logger = logging.getLogger(__name__) M = TypeVar("M", bound=Model) diff --git a/src/apps/exchange/admin.py b/src/apps/exchange/admin.py index 44064f8..3915776 100644 --- a/src/apps/exchange/admin.py +++ b/src/apps/exchange/admin.py @@ -4,12 +4,6 @@ from __future__ import annotations import json -from django.contrib import admin, messages -from django.shortcuts import redirect -from django.template.response import TemplateResponse -from django.urls import path, reverse -from django.utils.html import format_html - from apps.exchange.models import ( ExchangeDeliveryChannel, ExchangeImportStatus, @@ -18,6 +12,11 @@ from apps.exchange.models import ( from apps.exchange.serializers import ExchangePackageUploadSerializer from apps.exchange.services import ExchangeImportError, ExchangePackageImportService from apps.organization.models import Organization +from django.contrib import admin, messages +from django.shortcuts import redirect +from django.template.response import TemplateResponse +from django.urls import path, reverse +from django.utils.html import format_html @admin.register(ExchangePackageImport) diff --git a/src/apps/exchange/management/commands/import_exchange_package.py b/src/apps/exchange/management/commands/import_exchange_package.py index eebc861..2865b21 100644 --- a/src/apps/exchange/management/commands/import_exchange_package.py +++ b/src/apps/exchange/management/commands/import_exchange_package.py @@ -5,11 +5,10 @@ from __future__ import annotations import json from pathlib import Path -from django.core.files import File - from apps.core.management.commands.base import BaseAppCommand from apps.exchange.models import ExchangeDeliveryChannel from apps.exchange.services import ExchangePackageImportService +from django.core.files import File class Command(BaseAppCommand): diff --git a/src/apps/exchange/models.py b/src/apps/exchange/models.py index 5331269..713747f 100644 --- a/src/apps/exchange/models.py +++ b/src/apps/exchange/models.py @@ -2,12 +2,11 @@ from __future__ import annotations +from apps.core.mixins import TimestampMixin, UUIDPrimaryKeyMixin from django.conf import settings from django.db import models from django.utils.translation import gettext_lazy as _ -from apps.core.mixins import TimestampMixin, UUIDPrimaryKeyMixin - class ExchangeDeliveryChannel(models.TextChoices): API = "api", _("API upload") diff --git a/src/apps/exchange/services.py b/src/apps/exchange/services.py index 347c326..6c5b203 100644 --- a/src/apps/exchange/services.py +++ b/src/apps/exchange/services.py @@ -14,11 +14,6 @@ from io import BytesIO from typing import Any from zipfile import ZipFile -from cryptography.hazmat.primitives.ciphers.aead import AESGCM -from django.conf import settings -from django.db import transaction -from django.db.models import Q - from apps.exchange.models import ( ExchangeDeliveryChannel, ExchangeImportStatus, @@ -31,6 +26,10 @@ from apps.external_data.models import ( PublicProcurement, ) from apps.organization.models import IndustryCluster, Organization, OrganizationType +from cryptography.hazmat.primitives.ciphers.aead import AESGCM +from django.conf import settings +from django.db import transaction +from django.db.models import Q class ExchangeImportError(ValueError): diff --git a/src/apps/exchange/urls.py b/src/apps/exchange/urls.py index 91e0038..e37fad3 100644 --- a/src/apps/exchange/urls.py +++ b/src/apps/exchange/urls.py @@ -1,8 +1,7 @@ """URL routes for exchange uploads.""" -from django.urls import path - from apps.exchange.views import ExchangePackageUploadView +from django.urls import path app_name = "exchange" diff --git a/src/apps/exchange/views.py b/src/apps/exchange/views.py index 4aab99e..e7c1c86 100644 --- a/src/apps/exchange/views.py +++ b/src/apps/exchange/views.py @@ -2,6 +2,9 @@ from __future__ import annotations +from apps.exchange.models import ExchangeDeliveryChannel +from apps.exchange.serializers import ExchangePackageUploadSerializer +from apps.exchange.services import ExchangeImportError, ExchangePackageImportService from django.conf import settings from django.utils.crypto import constant_time_compare from drf_yasg import openapi @@ -12,10 +15,6 @@ from rest_framework.permissions import AllowAny from rest_framework.response import Response from rest_framework.views import APIView -from apps.exchange.models import ExchangeDeliveryChannel -from apps.exchange.serializers import ExchangePackageUploadSerializer -from apps.exchange.services import ExchangeImportError, ExchangePackageImportService - EXCHANGE_TAG = "Обмен данными" diff --git a/src/apps/external_data/api.py b/src/apps/external_data/api.py index 270bc78..17797fa 100644 --- a/src/apps/external_data/api.py +++ b/src/apps/external_data/api.py @@ -1,8 +1,5 @@ """Read-only APIs for external data registries.""" -from django_filters import rest_framework as filters -from rest_framework.permissions import IsAuthenticated - from apps.core.viewsets import ClassicReadOnlyViewSet from apps.external_data.models import ( ArbitrationCase, @@ -16,6 +13,8 @@ from apps.external_data.serializers import ( ProsecutorCheckSerializer, PublicProcurementSerializer, ) +from django_filters import rest_framework as filters +from rest_framework.permissions import IsAuthenticated class IndustrialProductFilter(filters.FilterSet): diff --git a/src/apps/external_data/models.py b/src/apps/external_data/models.py index 02f1602..2519641 100644 --- a/src/apps/external_data/models.py +++ b/src/apps/external_data/models.py @@ -2,11 +2,10 @@ from __future__ import annotations -from django.db import models -from django.utils.translation import gettext_lazy as _ - from apps.core.mixins import TimestampMixin, UUIDPrimaryKeyMixin from apps.organization.models import Organization +from django.db import models +from django.utils.translation import gettext_lazy as _ class IndustrialProduct(UUIDPrimaryKeyMixin, TimestampMixin, models.Model): diff --git a/src/apps/external_data/serializers.py b/src/apps/external_data/serializers.py index 8b9fcaf..0f21f9f 100644 --- a/src/apps/external_data/serializers.py +++ b/src/apps/external_data/serializers.py @@ -1,13 +1,12 @@ """Serializers for external data registries.""" -from rest_framework import serializers - from apps.external_data.models import ( ArbitrationCase, IndustrialProduct, ProsecutorCheck, PublicProcurement, ) +from rest_framework import serializers class IndustrialProductSerializer(serializers.ModelSerializer): diff --git a/src/apps/external_data/urls.py b/src/apps/external_data/urls.py index 7b64cca..b3579be 100644 --- a/src/apps/external_data/urls.py +++ b/src/apps/external_data/urls.py @@ -1,14 +1,13 @@ """Root routes for external data APIs.""" -from django.urls import include, path -from rest_framework.routers import DefaultRouter - from apps.external_data.api import ( ArbitrationCaseViewSet, IndustrialProductViewSet, ProsecutorCheckViewSet, PublicProcurementViewSet, ) +from django.urls import include, path +from rest_framework.routers import DefaultRouter app_name = "external_data" diff --git a/src/apps/form_1/admin.py b/src/apps/form_1/admin.py index 3a6929f..bb6ace3 100644 --- a/src/apps/form_1/admin.py +++ b/src/apps/form_1/admin.py @@ -1,10 +1,9 @@ """Административный интерфейс для формы Ф-1.""" -from django.contrib import admin - from apps.core.admin_mixins import HiddenFromAdminIndexMixin from apps.core.admin_paper_forms import PaperFormPreviewAdminMixin from apps.form_1.models import FormF1Record +from django.contrib import admin @admin.register(FormF1Record) diff --git a/src/apps/form_1/api.py b/src/apps/form_1/api.py index 1cb1ecc..544c3fd 100644 --- a/src/apps/form_1/api.py +++ b/src/apps/form_1/api.py @@ -8,17 +8,6 @@ API для формы Ф-1. import logging -from django.core.files.storage import default_storage -from django_filters import rest_framework as filters -from drf_yasg.utils import swagger_auto_schema -from rest_framework import status -from rest_framework.decorators import action -from rest_framework.parsers import MultiPartParser -from rest_framework.permissions import IsAuthenticated -from rest_framework.request import Request -from rest_framework.response import Response -from rest_framework.views import APIView - from apps.core.response import api_response from apps.core.viewsets import ReadOnlyViewSet from apps.form_1.models import FormF1Record @@ -31,6 +20,16 @@ from apps.form_1.serializers import ( ) from apps.form_1.services import FormF1Service, parse_form_f1_file from apps.form_1.tasks import process_form_f1_file +from django.core.files.storage import default_storage +from django_filters import rest_framework as filters +from drf_yasg.utils import swagger_auto_schema +from rest_framework import status +from rest_framework.decorators import action +from rest_framework.parsers import MultiPartParser +from rest_framework.permissions import IsAuthenticated +from rest_framework.request import Request +from rest_framework.response import Response +from rest_framework.views import APIView logger = logging.getLogger(__name__) diff --git a/src/apps/form_1/models.py b/src/apps/form_1/models.py index e50f1b9..c924541 100644 --- a/src/apps/form_1/models.py +++ b/src/apps/form_1/models.py @@ -7,11 +7,10 @@ import uuid -from django.db import models -from django.utils.translation import gettext_lazy as _ - from apps.core.mixins import ReportingPeriodMixin, TimestampMixin from apps.organization.models import Organization +from django.db import models +from django.utils.translation import gettext_lazy as _ class FormF1Record(ReportingPeriodMixin, TimestampMixin, models.Model): diff --git a/src/apps/form_1/serializers.py b/src/apps/form_1/serializers.py index 8d61fb2..d8b4d97 100644 --- a/src/apps/form_1/serializers.py +++ b/src/apps/form_1/serializers.py @@ -8,10 +8,9 @@ - FormF1ParseResultSerializer - результат парсинга """ -from rest_framework import serializers - from apps.form_1.models import FormF1Record from apps.organization.serializers import OrganizationListSerializer +from rest_framework import serializers class FormF1RecordSerializer(serializers.ModelSerializer): diff --git a/src/apps/form_1/services.py b/src/apps/form_1/services.py index 081da1d..898ebe3 100644 --- a/src/apps/form_1/services.py +++ b/src/apps/form_1/services.py @@ -9,9 +9,6 @@ import logging from typing import Any -from django.db import transaction -from django.db.models import Max - from apps.core.excel import ( BaseExcelParser, ColumnMapping, @@ -22,6 +19,8 @@ from apps.core.reporting import ReportingPeriodParserMixin, VersionedReportServi from apps.core.services import BaseService, BulkOperationsMixin from apps.form_1.models import FormF1Record from apps.organization.services import OrganizationService +from django.db import transaction +from django.db.models import Max logger = logging.getLogger(__name__) diff --git a/src/apps/form_1/tasks.py b/src/apps/form_1/tasks.py index c2bc917..9065880 100644 --- a/src/apps/form_1/tasks.py +++ b/src/apps/form_1/tasks.py @@ -8,13 +8,12 @@ Celery задачи для формы Ф-1. import logging from contextlib import suppress +from apps.core.tasks import TrackedTask +from apps.form_1.services import parse_form_f1_file from celery import shared_task from django.core.files.storage import default_storage from django.utils import timezone -from apps.core.tasks import TrackedTask -from apps.form_1.services import parse_form_f1_file - logger = logging.getLogger(__name__) diff --git a/src/apps/form_1/urls.py b/src/apps/form_1/urls.py index 73e262d..531bc09 100644 --- a/src/apps/form_1/urls.py +++ b/src/apps/form_1/urls.py @@ -1,10 +1,9 @@ """URL маршруты для формы Ф-1.""" +from apps.form_1.api import FormF1RecordViewSet, FormF1UploadView from django.urls import include, path from rest_framework.routers import DefaultRouter -from apps.form_1.api import FormF1RecordViewSet, FormF1UploadView - router = DefaultRouter() router.register("records", FormF1RecordViewSet, basename="form-f1-record") diff --git a/src/apps/form_2/admin.py b/src/apps/form_2/admin.py index 951b34e..74fe2d1 100644 --- a/src/apps/form_2/admin.py +++ b/src/apps/form_2/admin.py @@ -2,11 +2,10 @@ Админка формы Ф-2. """ -from django.contrib import admin - from apps.core.admin_mixins import HiddenFromAdminIndexMixin from apps.core.admin_paper_forms import PaperFormPreviewAdminMixin from apps.form_2.models import FormF2Record +from django.contrib import admin @admin.register(FormF2Record) diff --git a/src/apps/form_2/api.py b/src/apps/form_2/api.py index 77db24b..371d8b1 100644 --- a/src/apps/form_2/api.py +++ b/src/apps/form_2/api.py @@ -8,12 +8,6 @@ API формы Ф-2. import logging -from rest_framework import status -from rest_framework.parsers import MultiPartParser -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response -from rest_framework.views import APIView - from apps.core.viewsets import ReadOnlyViewSet from apps.form_2.models import FormF2Record from apps.form_2.serializers import ( @@ -24,6 +18,11 @@ from apps.form_2.serializers import ( ) from apps.form_2.services import parse_form_f2_file from apps.form_2.tasks import process_form_f2_file +from rest_framework import status +from rest_framework.parsers import MultiPartParser +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView logger = logging.getLogger(__name__) diff --git a/src/apps/form_2/models.py b/src/apps/form_2/models.py index 65082aa..fdca023 100644 --- a/src/apps/form_2/models.py +++ b/src/apps/form_2/models.py @@ -7,11 +7,10 @@ import uuid -from django.db import models -from django.utils.translation import gettext_lazy as _ - from apps.core.mixins import ReportingPeriodMixin, TimestampMixin from apps.organization.models import Organization +from django.db import models +from django.utils.translation import gettext_lazy as _ class FormF2Record(ReportingPeriodMixin, TimestampMixin, models.Model): diff --git a/src/apps/form_2/serializers.py b/src/apps/form_2/serializers.py index 3779324..da9e0fd 100644 --- a/src/apps/form_2/serializers.py +++ b/src/apps/form_2/serializers.py @@ -7,10 +7,9 @@ - FormF2ParseResultSerializer - результат парсинга """ -from rest_framework import serializers - from apps.form_2.models import FormF2Record from apps.organization.serializers import OrganizationSerializer +from rest_framework import serializers class FormF2RecordSerializer(serializers.ModelSerializer): diff --git a/src/apps/form_2/services.py b/src/apps/form_2/services.py index fa57644..f5ad9fa 100644 --- a/src/apps/form_2/services.py +++ b/src/apps/form_2/services.py @@ -9,9 +9,6 @@ import logging from typing import Any -from django.db import transaction -from django.db.models import Count, Max - from apps.core.excel import ( BaseExcelParser, ColumnMapping, @@ -22,6 +19,8 @@ from apps.core.reporting import ReportingPeriodParserMixin, VersionedReportServi from apps.core.services import BaseService, BulkOperationsMixin from apps.form_2.models import FormF2Record from apps.organization.services import OrganizationService +from django.db import transaction +from django.db.models import Count, Max logger = logging.getLogger(__name__) diff --git a/src/apps/form_2/tasks.py b/src/apps/form_2/tasks.py index 0db27b2..d292b1f 100644 --- a/src/apps/form_2/tasks.py +++ b/src/apps/form_2/tasks.py @@ -7,10 +7,9 @@ Celery задачи для формы Ф-2. import logging -from celery import shared_task - from apps.core.tasks import TrackedTask from apps.form_2.services import FormF2Parser +from celery import shared_task logger = logging.getLogger(__name__) diff --git a/src/apps/form_2/urls.py b/src/apps/form_2/urls.py index 7333ae3..14f1d3e 100644 --- a/src/apps/form_2/urls.py +++ b/src/apps/form_2/urls.py @@ -2,11 +2,10 @@ URL маршруты формы Ф-2. """ +from apps.form_2.api import FormF2RecordViewSet, FormF2UploadView from django.urls import include, path from rest_framework.routers import DefaultRouter -from apps.form_2.api import FormF2RecordViewSet, FormF2UploadView - router = DefaultRouter() router.register("records", FormF2RecordViewSet, basename="form-f2-records") diff --git a/src/apps/form_3/admin.py b/src/apps/form_3/admin.py index e810843..a8c3215 100644 --- a/src/apps/form_3/admin.py +++ b/src/apps/form_3/admin.py @@ -1,10 +1,9 @@ """Админка формы Ф-3.""" -from django.contrib import admin - from apps.core.admin_mixins import HiddenFromAdminIndexMixin from apps.core.admin_paper_forms import PaperFormPreviewAdminMixin from apps.form_3.models import FormF3Record +from django.contrib import admin @admin.register(FormF3Record) diff --git a/src/apps/form_3/api.py b/src/apps/form_3/api.py index a363702..c7c1ccf 100644 --- a/src/apps/form_3/api.py +++ b/src/apps/form_3/api.py @@ -8,12 +8,6 @@ API формы Ф-3. import logging -from rest_framework import status -from rest_framework.parsers import MultiPartParser -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response -from rest_framework.views import APIView - from apps.core.viewsets import ReadOnlyViewSet from apps.form_3.models import FormF3Record from apps.form_3.serializers import ( @@ -24,6 +18,11 @@ from apps.form_3.serializers import ( ) from apps.form_3.services import parse_form_f3_file from apps.form_3.tasks import process_form_f3_file +from rest_framework import status +from rest_framework.parsers import MultiPartParser +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView logger = logging.getLogger(__name__) diff --git a/src/apps/form_3/models.py b/src/apps/form_3/models.py index 5c51989..c7d7b27 100644 --- a/src/apps/form_3/models.py +++ b/src/apps/form_3/models.py @@ -7,11 +7,10 @@ import uuid -from django.db import models -from django.utils.translation import gettext_lazy as _ - from apps.core.mixins import ReportingPeriodMixin, TimestampMixin from apps.organization.models import Organization +from django.db import models +from django.utils.translation import gettext_lazy as _ class FormF3Record(ReportingPeriodMixin, TimestampMixin, models.Model): diff --git a/src/apps/form_3/serializers.py b/src/apps/form_3/serializers.py index 423a161..0aa6d51 100644 --- a/src/apps/form_3/serializers.py +++ b/src/apps/form_3/serializers.py @@ -7,10 +7,9 @@ - FormF3ParseResultSerializer - результат парсинга """ -from rest_framework import serializers - from apps.form_3.models import FormF3Record from apps.organization.serializers import OrganizationSerializer +from rest_framework import serializers class FormF3RecordSerializer(serializers.ModelSerializer): diff --git a/src/apps/form_3/services.py b/src/apps/form_3/services.py index b49e9f1..a853694 100644 --- a/src/apps/form_3/services.py +++ b/src/apps/form_3/services.py @@ -9,9 +9,6 @@ import logging from typing import Any -from django.db import transaction -from django.db.models import Count, Max - from apps.core.excel import ( BaseExcelParser, ColumnMapping, @@ -22,6 +19,8 @@ from apps.core.reporting import ReportingPeriodParserMixin, VersionedReportServi from apps.core.services import BaseService, BulkOperationsMixin from apps.form_3.models import FormF3Record from apps.organization.services import OrganizationService +from django.db import transaction +from django.db.models import Count, Max logger = logging.getLogger(__name__) diff --git a/src/apps/form_3/tasks.py b/src/apps/form_3/tasks.py index 5ad0b24..1423678 100644 --- a/src/apps/form_3/tasks.py +++ b/src/apps/form_3/tasks.py @@ -7,10 +7,9 @@ Celery задачи для формы Ф-3. import logging -from celery import shared_task - from apps.core.tasks import TrackedTask from apps.form_3.services import FormF3Parser +from celery import shared_task logger = logging.getLogger(__name__) diff --git a/src/apps/form_3/urls.py b/src/apps/form_3/urls.py index b46b0bd..8c25423 100644 --- a/src/apps/form_3/urls.py +++ b/src/apps/form_3/urls.py @@ -2,11 +2,10 @@ URL маршруты формы Ф-3. """ +from apps.form_3.api import FormF3RecordViewSet, FormF3UploadView from django.urls import include, path from rest_framework.routers import DefaultRouter -from apps.form_3.api import FormF3RecordViewSet, FormF3UploadView - router = DefaultRouter() router.register("records", FormF3RecordViewSet, basename="form-f3-records") diff --git a/src/apps/form_4/admin.py b/src/apps/form_4/admin.py index 21df592..6b3842d 100644 --- a/src/apps/form_4/admin.py +++ b/src/apps/form_4/admin.py @@ -1,10 +1,9 @@ """Админка формы Ф-4.""" -from django.contrib import admin - from apps.core.admin_mixins import HiddenFromAdminIndexMixin from apps.core.admin_paper_forms import PaperFormPreviewAdminMixin from apps.form_4.models import FormF4Record +from django.contrib import admin @admin.register(FormF4Record) diff --git a/src/apps/form_4/api.py b/src/apps/form_4/api.py index d5cd2ce..1b5c0e7 100644 --- a/src/apps/form_4/api.py +++ b/src/apps/form_4/api.py @@ -2,12 +2,6 @@ import logging -from rest_framework import status -from rest_framework.parsers import MultiPartParser -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response -from rest_framework.views import APIView - from apps.core.viewsets import ReadOnlyViewSet from apps.form_4.models import FormF4Record from apps.form_4.serializers import ( @@ -18,6 +12,11 @@ from apps.form_4.serializers import ( ) from apps.form_4.services import parse_form_f4_file from apps.form_4.tasks import process_form_f4_file +from rest_framework import status +from rest_framework.parsers import MultiPartParser +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView logger = logging.getLogger(__name__) BACKGROUND_THRESHOLD = 1024 * 1024 diff --git a/src/apps/form_4/models.py b/src/apps/form_4/models.py index 2f21977..96a50ad 100644 --- a/src/apps/form_4/models.py +++ b/src/apps/form_4/models.py @@ -7,11 +7,10 @@ import uuid -from django.db import models -from django.utils.translation import gettext_lazy as _ - from apps.core.mixins import ReportingPeriodMixin, TimestampMixin from apps.organization.models import Organization +from django.db import models +from django.utils.translation import gettext_lazy as _ class FormF4Record(ReportingPeriodMixin, TimestampMixin, models.Model): diff --git a/src/apps/form_4/serializers.py b/src/apps/form_4/serializers.py index 5885d97..b902dd3 100644 --- a/src/apps/form_4/serializers.py +++ b/src/apps/form_4/serializers.py @@ -1,9 +1,8 @@ """Сериализаторы формы Ф-4.""" -from rest_framework import serializers - from apps.form_4.models import FormF4Record from apps.organization.serializers import OrganizationSerializer +from rest_framework import serializers class FormF4RecordSerializer(serializers.ModelSerializer): diff --git a/src/apps/form_4/services.py b/src/apps/form_4/services.py index 6dcff18..2ae80f3 100644 --- a/src/apps/form_4/services.py +++ b/src/apps/form_4/services.py @@ -9,9 +9,6 @@ import logging from typing import Any -from django.db import transaction -from django.db.models import Count, Max - from apps.core.excel import ( BaseExcelParser, ColumnMapping, @@ -22,6 +19,8 @@ from apps.core.reporting import ReportingPeriodParserMixin, VersionedReportServi from apps.core.services import BaseService, BulkOperationsMixin from apps.form_4.models import FormF4Record from apps.organization.services import OrganizationService +from django.db import transaction +from django.db.models import Count, Max logger = logging.getLogger(__name__) diff --git a/src/apps/form_4/tasks.py b/src/apps/form_4/tasks.py index 94ba184..9e337d7 100644 --- a/src/apps/form_4/tasks.py +++ b/src/apps/form_4/tasks.py @@ -3,10 +3,9 @@ import logging from io import BytesIO -from celery import shared_task - from apps.core.tasks import TrackedTask from apps.form_4.services import FormF4Parser +from celery import shared_task logger = logging.getLogger(__name__) diff --git a/src/apps/form_4/urls.py b/src/apps/form_4/urls.py index ad95ad8..cc769bf 100644 --- a/src/apps/form_4/urls.py +++ b/src/apps/form_4/urls.py @@ -1,10 +1,9 @@ """URL маршруты формы Ф-4.""" +from apps.form_4.api import FormF4RecordViewSet, FormF4UploadView from django.urls import include, path from rest_framework.routers import DefaultRouter -from apps.form_4.api import FormF4RecordViewSet, FormF4UploadView - router = DefaultRouter() router.register("records", FormF4RecordViewSet, basename="form-f4-records") diff --git a/src/apps/form_5/admin.py b/src/apps/form_5/admin.py index 08e8843..22012a7 100644 --- a/src/apps/form_5/admin.py +++ b/src/apps/form_5/admin.py @@ -1,10 +1,9 @@ """Админка формы Ф-5.""" -from django.contrib import admin - from apps.core.admin_mixins import HiddenFromAdminIndexMixin from apps.core.admin_paper_forms import PaperFormPreviewAdminMixin from apps.form_5.models import FormF5Record +from django.contrib import admin @admin.register(FormF5Record) diff --git a/src/apps/form_5/api.py b/src/apps/form_5/api.py index 3014c11..c228710 100644 --- a/src/apps/form_5/api.py +++ b/src/apps/form_5/api.py @@ -2,12 +2,6 @@ import logging -from rest_framework import status -from rest_framework.parsers import MultiPartParser -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response -from rest_framework.views import APIView - from apps.core.viewsets import ReadOnlyViewSet from apps.form_5.models import FormF5Record from apps.form_5.serializers import ( @@ -18,6 +12,11 @@ from apps.form_5.serializers import ( ) from apps.form_5.services import parse_form_f5_file from apps.form_5.tasks import process_form_f5_file +from rest_framework import status +from rest_framework.parsers import MultiPartParser +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView logger = logging.getLogger(__name__) BACKGROUND_THRESHOLD = 1024 * 1024 diff --git a/src/apps/form_5/models.py b/src/apps/form_5/models.py index eb92071..b8df795 100644 --- a/src/apps/form_5/models.py +++ b/src/apps/form_5/models.py @@ -7,11 +7,10 @@ import uuid -from django.db import models -from django.utils.translation import gettext_lazy as _ - from apps.core.mixins import ReportingPeriodMixin, TimestampMixin from apps.organization.models import Organization +from django.db import models +from django.utils.translation import gettext_lazy as _ class FormF5Record(ReportingPeriodMixin, TimestampMixin, models.Model): diff --git a/src/apps/form_5/serializers.py b/src/apps/form_5/serializers.py index b86d367..773b611 100644 --- a/src/apps/form_5/serializers.py +++ b/src/apps/form_5/serializers.py @@ -1,9 +1,8 @@ """Сериализаторы формы Ф-5.""" -from rest_framework import serializers - from apps.form_5.models import FormF5Record from apps.organization.serializers import OrganizationSerializer +from rest_framework import serializers class FormF5RecordSerializer(serializers.ModelSerializer): diff --git a/src/apps/form_5/services.py b/src/apps/form_5/services.py index c552736..4735750 100644 --- a/src/apps/form_5/services.py +++ b/src/apps/form_5/services.py @@ -9,9 +9,6 @@ import logging from typing import Any -from django.db import transaction -from django.db.models import Count, Max - from apps.core.excel import ( BaseExcelParser, ColumnMapping, @@ -22,6 +19,8 @@ from apps.core.reporting import ReportingPeriodParserMixin, VersionedReportServi from apps.core.services import BaseService, BulkOperationsMixin from apps.form_5.models import FormF5Record from apps.organization.services import OrganizationService +from django.db import transaction +from django.db.models import Count, Max logger = logging.getLogger(__name__) diff --git a/src/apps/form_5/tasks.py b/src/apps/form_5/tasks.py index c0f62ed..1937261 100644 --- a/src/apps/form_5/tasks.py +++ b/src/apps/form_5/tasks.py @@ -3,10 +3,9 @@ import logging from io import BytesIO -from celery import shared_task - from apps.core.tasks import TrackedTask from apps.form_5.services import FormF5Parser +from celery import shared_task logger = logging.getLogger(__name__) diff --git a/src/apps/form_5/urls.py b/src/apps/form_5/urls.py index 17dab7c..07cdca5 100644 --- a/src/apps/form_5/urls.py +++ b/src/apps/form_5/urls.py @@ -1,10 +1,9 @@ """URL маршруты формы Ф-5.""" +from apps.form_5.api import FormF5RecordViewSet, FormF5UploadView from django.urls import include, path from rest_framework.routers import DefaultRouter -from apps.form_5.api import FormF5RecordViewSet, FormF5UploadView - router = DefaultRouter() router.register("records", FormF5RecordViewSet, basename="form-f5-records") diff --git a/src/apps/form_6/admin.py b/src/apps/form_6/admin.py index bd28165..97dbe1d 100644 --- a/src/apps/form_6/admin.py +++ b/src/apps/form_6/admin.py @@ -1,10 +1,9 @@ """Админка формы Ф-6.""" -from django.contrib import admin - from apps.core.admin_mixins import HiddenFromAdminIndexMixin from apps.core.admin_paper_forms import PaperFormPreviewAdminMixin from apps.form_6.models import FormF6Record +from django.contrib import admin @admin.register(FormF6Record) diff --git a/src/apps/form_6/api.py b/src/apps/form_6/api.py index e92cd84..ab87c33 100644 --- a/src/apps/form_6/api.py +++ b/src/apps/form_6/api.py @@ -2,12 +2,6 @@ import logging -from rest_framework import status -from rest_framework.parsers import MultiPartParser -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response -from rest_framework.views import APIView - from apps.core.viewsets import ReadOnlyViewSet from apps.form_6.models import FormF6Record from apps.form_6.serializers import ( @@ -18,6 +12,11 @@ from apps.form_6.serializers import ( ) from apps.form_6.services import parse_form_f6_file from apps.form_6.tasks import process_form_f6_file +from rest_framework import status +from rest_framework.parsers import MultiPartParser +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView logger = logging.getLogger(__name__) BACKGROUND_THRESHOLD = 1024 * 1024 diff --git a/src/apps/form_6/models.py b/src/apps/form_6/models.py index 1822893..0c8e10e 100644 --- a/src/apps/form_6/models.py +++ b/src/apps/form_6/models.py @@ -7,11 +7,10 @@ import uuid -from django.db import models -from django.utils.translation import gettext_lazy as _ - from apps.core.mixins import ReportingPeriodMixin, TimestampMixin from apps.organization.models import Organization +from django.db import models +from django.utils.translation import gettext_lazy as _ class FormF6Record(ReportingPeriodMixin, TimestampMixin, models.Model): diff --git a/src/apps/form_6/serializers.py b/src/apps/form_6/serializers.py index 219e59b..304f35c 100644 --- a/src/apps/form_6/serializers.py +++ b/src/apps/form_6/serializers.py @@ -1,9 +1,8 @@ """Сериализаторы формы Ф-6.""" -from rest_framework import serializers - from apps.form_6.models import FormF6Record from apps.organization.serializers import OrganizationSerializer +from rest_framework import serializers class FormF6RecordSerializer(serializers.ModelSerializer): diff --git a/src/apps/form_6/services.py b/src/apps/form_6/services.py index e1f0fb3..ad5b64d 100644 --- a/src/apps/form_6/services.py +++ b/src/apps/form_6/services.py @@ -9,9 +9,6 @@ import logging from typing import Any -from django.db import transaction -from django.db.models import Count, Max - from apps.core.excel import ( BaseExcelParser, ColumnMapping, @@ -22,6 +19,8 @@ from apps.core.reporting import ReportingPeriodParserMixin, VersionedReportServi from apps.core.services import BaseService, BulkOperationsMixin from apps.form_6.models import FormF6Record from apps.organization.services import OrganizationService +from django.db import transaction +from django.db.models import Count, Max logger = logging.getLogger(__name__) diff --git a/src/apps/form_6/tasks.py b/src/apps/form_6/tasks.py index 983b2e7..7c88e57 100644 --- a/src/apps/form_6/tasks.py +++ b/src/apps/form_6/tasks.py @@ -3,10 +3,9 @@ import logging from io import BytesIO -from celery import shared_task - from apps.core.tasks import TrackedTask from apps.form_6.services import FormF6Parser +from celery import shared_task logger = logging.getLogger(__name__) diff --git a/src/apps/form_6/urls.py b/src/apps/form_6/urls.py index 12070b2..c669e1b 100644 --- a/src/apps/form_6/urls.py +++ b/src/apps/form_6/urls.py @@ -1,10 +1,9 @@ """URL маршруты формы Ф-6.""" +from apps.form_6.api import FormF6RecordViewSet, FormF6UploadView from django.urls import include, path from rest_framework.routers import DefaultRouter -from apps.form_6.api import FormF6RecordViewSet, FormF6UploadView - router = DefaultRouter() router.register("records", FormF6RecordViewSet, basename="form-f6-records") diff --git a/src/apps/organization/admin.py b/src/apps/organization/admin.py index f1efd6b..ecd7f5f 100644 --- a/src/apps/organization/admin.py +++ b/src/apps/organization/admin.py @@ -2,9 +2,6 @@ from __future__ import annotations -from django.contrib import admin -from django.db.models import F, Prefetch - from apps.core.admin_paper_forms import PaperFormPreviewRendererMixin from apps.form_1.admin import FormF1RecordAdmin from apps.form_1.models import FormF1Record @@ -20,6 +17,8 @@ from apps.form_6.admin import FormF6RecordAdmin from apps.form_6.models import FormF6Record from apps.organization.models import Organization from apps.registers.models import Register, RegistryMembershipPeriod +from django.contrib import admin +from django.db.models import F, Prefetch class ActiveRegistryListFilter(admin.SimpleListFilter): diff --git a/src/apps/organization/analytics_root_urls.py b/src/apps/organization/analytics_root_urls.py index 956ab5b..113f020 100644 --- a/src/apps/organization/analytics_root_urls.py +++ b/src/apps/organization/analytics_root_urls.py @@ -1,8 +1,7 @@ """Root-level analytics routes.""" -from django.urls import path - from apps.organization.analytics_views import AnalyticsDashboardView +from django.urls import path app_name = "organization_analytics" diff --git a/src/apps/organization/analytics_services.py b/src/apps/organization/analytics_services.py index b74a815..b93ad9f 100644 --- a/src/apps/organization/analytics_services.py +++ b/src/apps/organization/analytics_services.py @@ -7,8 +7,6 @@ from collections.abc import Iterable from datetime import date from decimal import Decimal -from django.db.models import Avg, Case, Count, IntegerField, Sum, When - from apps.core.exceptions import NotFoundError from apps.form_1.models import FormF1Record from apps.form_2.models import FormF2Record @@ -18,6 +16,7 @@ from apps.form_5.models import FormF5Record from apps.form_6.models import FormF6Record from apps.organization.models import IndustryCluster, Organization from apps.organization.scope_utils import filter_queryset_by_scopes +from django.db.models import Avg, Case, Count, IntegerField, Sum, When ZERO = Decimal("0") THOUSAND = Decimal("1000") diff --git a/src/apps/organization/analytics_views.py b/src/apps/organization/analytics_views.py index bf64939..975df94 100644 --- a/src/apps/organization/analytics_views.py +++ b/src/apps/organization/analytics_views.py @@ -2,11 +2,6 @@ from __future__ import annotations -from django.shortcuts import get_object_or_404 -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response -from rest_framework.views import APIView - from apps.organization.analytics_services import ( DashboardAnalyticsService, OrganizationAnalyticsService, @@ -21,6 +16,10 @@ from apps.organization.query_serializers import ( PersonnelQuerySerializer, ProductsQuerySerializer, ) +from django.shortcuts import get_object_or_404 +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView class OrganizationAnalyticsBaseView(APIView): diff --git a/src/apps/organization/api.py b/src/apps/organization/api.py index 7a61f7b..42ce81a 100644 --- a/src/apps/organization/api.py +++ b/src/apps/organization/api.py @@ -5,10 +5,6 @@ API ViewSets для организаций. - OrganizationViewSet - frontend-facing read API for organizations. """ -from django.db.models import Prefetch -from django_filters import rest_framework as filters -from rest_framework.permissions import IsAuthenticated - from apps.core.viewsets import ClassicReadOnlyViewSet from apps.organization.models import Organization from apps.organization.scope_utils import filter_queryset_by_scopes @@ -17,6 +13,9 @@ from apps.organization.serializers import ( OrganizationCatalogListSerializer, ) from apps.registers.models import RegistryMembershipPeriod +from django.db.models import Prefetch +from django_filters import rest_framework as filters +from rest_framework.permissions import IsAuthenticated class OrganizationFilter(filters.FilterSet): diff --git a/src/apps/organization/models.py b/src/apps/organization/models.py index 9aea530..ecd7c09 100644 --- a/src/apps/organization/models.py +++ b/src/apps/organization/models.py @@ -9,11 +9,10 @@ from __future__ import annotations import uuid -from django.db import models -from django.utils.translation import gettext_lazy as _ - from apps.core.mixins import TimestampMixin from apps.organization.scope_utils import scope_labels, scopes_from_registry_names +from django.db import models +from django.utils.translation import gettext_lazy as _ class CorporationScope(models.TextChoices): diff --git a/src/apps/organization/query_serializers.py b/src/apps/organization/query_serializers.py index bed8ad4..cbc860a 100644 --- a/src/apps/organization/query_serializers.py +++ b/src/apps/organization/query_serializers.py @@ -1,8 +1,7 @@ """Query serializers for organization analytics endpoints.""" -from rest_framework import serializers - from apps.organization.models import CorporationScope +from rest_framework import serializers class DashboardQuerySerializer(serializers.Serializer): diff --git a/src/apps/organization/serializers.py b/src/apps/organization/serializers.py index 52af923..a65227f 100644 --- a/src/apps/organization/serializers.py +++ b/src/apps/organization/serializers.py @@ -6,10 +6,9 @@ - frontend-facing serializers for organization catalog endpoints. """ -from rest_framework import serializers - from apps.organization.models import Organization from apps.registers.models import Register +from rest_framework import serializers class OrganizationRegisterSerializer(serializers.ModelSerializer): diff --git a/src/apps/organization/services.py b/src/apps/organization/services.py index 8100465..0331ddf 100644 --- a/src/apps/organization/services.py +++ b/src/apps/organization/services.py @@ -8,10 +8,9 @@ import logging from typing import Any -from django.db import transaction - from apps.core.services import BaseService from apps.organization.models import Organization +from django.db import transaction logger = logging.getLogger(__name__) diff --git a/src/apps/organization/urls.py b/src/apps/organization/urls.py index bf4f92c..ef6641b 100644 --- a/src/apps/organization/urls.py +++ b/src/apps/organization/urls.py @@ -1,8 +1,5 @@ """URL маршруты для организаций.""" -from django.urls import include, path -from rest_framework.routers import DefaultRouter - from apps.organization.analytics_views import ( OrganizationEconomicsView, OrganizationEquipmentView, @@ -13,6 +10,8 @@ from apps.organization.analytics_views import ( OrganizationRiskProfileView, ) from apps.organization.api import OrganizationViewSet +from django.urls import include, path +from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register("", OrganizationViewSet, basename="organization") diff --git a/src/apps/registers/admin.py b/src/apps/registers/admin.py index 7bfa0ec..b198d8f 100644 --- a/src/apps/registers/admin.py +++ b/src/apps/registers/admin.py @@ -1,15 +1,14 @@ """Admin configuration for registers app.""" -from django.contrib import admin, messages -from django.shortcuts import redirect -from django.template.response import TemplateResponse -from django.urls import path, reverse -from rest_framework import serializers - from apps.organization.models import Organization from apps.registers.models import RegisterUpload from apps.registers.serializers import RegisterFileUploadSerializer from apps.registers.services import RegisterBackupImportService, RegisterImportError +from django.contrib import admin, messages +from django.shortcuts import redirect +from django.template.response import TemplateResponse +from django.urls import path, reverse +from rest_framework import serializers @admin.register(RegisterUpload) diff --git a/src/apps/registers/models.py b/src/apps/registers/models.py index 2ecc454..9e93228 100644 --- a/src/apps/registers/models.py +++ b/src/apps/registers/models.py @@ -1,13 +1,12 @@ """Модели приложения реестров организаций.""" +from apps.core.mixins import TimestampMixin, UUIDPrimaryKeyMixin +from apps.organization.models import Organization from django.conf import settings from django.db import models from django.db.models import Q from django.utils.translation import gettext_lazy as _ -from apps.core.mixins import TimestampMixin, UUIDPrimaryKeyMixin -from apps.organization.models import Organization - class Register(UUIDPrimaryKeyMixin, TimestampMixin, models.Model): """Справочник реестров.""" diff --git a/src/apps/registers/serializers.py b/src/apps/registers/serializers.py index 6b39f2d..1e6987a 100644 --- a/src/apps/registers/serializers.py +++ b/src/apps/registers/serializers.py @@ -1,9 +1,8 @@ """Сериализаторы для API реестров.""" -from rest_framework import serializers - from apps.organization.models import Organization from apps.registers.models import Register, RegistryMembershipPeriod +from rest_framework import serializers class RegisterSerializer(serializers.ModelSerializer): diff --git a/src/apps/registers/services.py b/src/apps/registers/services.py index 469cb03..826d9e2 100644 --- a/src/apps/registers/services.py +++ b/src/apps/registers/services.py @@ -12,6 +12,8 @@ from datetime import date from io import BytesIO from zipfile import ZipFile +from apps.organization.models import Organization +from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod from cryptography.hazmat.primitives.ciphers.aead import AESGCM from django.conf import settings from django.db import transaction @@ -19,9 +21,6 @@ from django.db.models import Q from django.utils import timezone from openpyxl import load_workbook -from apps.organization.models import Organization -from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod - class RegisterImportError(ValueError): """Ошибка импорта Excel файла реестра.""" @@ -84,9 +83,11 @@ class RegisterImportService: uploaded_by=uploaded_by, ) - snapshot_org_ids, organizations_created, organizations_updated = ( - cls._upsert_organizations(rows) - ) + ( + snapshot_org_ids, + organizations_created, + organizations_updated, + ) = cls._upsert_organizations(rows) active_by_org = cls._get_active_periods_by_org(registry) active_org_ids = set(active_by_org.keys()) @@ -624,9 +625,11 @@ class RegisterBackupImportService: period_rows = data.get("registers.RegistryMembershipPeriod", []) register_map, registers_created = cls._upsert_registers(registers_rows) - organization_map, organizations_created, organizations_updated = ( - cls._upsert_organizations(organizations_rows) - ) + ( + organization_map, + organizations_created, + organizations_updated, + ) = cls._upsert_organizations(organizations_rows) upload_map, uploads_created = cls._upsert_uploads( upload_rows=upload_rows, register_map=register_map, diff --git a/src/apps/registers/urls.py b/src/apps/registers/urls.py index ff9b697..6f01ca2 100644 --- a/src/apps/registers/urls.py +++ b/src/apps/registers/urls.py @@ -1,14 +1,13 @@ """URL конфигурация для приложения реестров.""" -from django.urls import include, path -from rest_framework.routers import DefaultRouter - from apps.registers.views import ( RegisterOrganizationViewSet, RegisterUploadView, RegisterViewSet, RegistryOrganizationListView, ) +from django.urls import include, path +from rest_framework.routers import DefaultRouter app_name = "registers" diff --git a/src/apps/registers/views.py b/src/apps/registers/views.py index e8adbd8..737a212 100644 --- a/src/apps/registers/views.py +++ b/src/apps/registers/views.py @@ -4,14 +4,6 @@ from __future__ import annotations from datetime import date -from django.shortcuts import get_object_or_404 -from rest_framework import status -from rest_framework.exceptions import ValidationError -from rest_framework.generics import ListAPIView -from rest_framework.parsers import MultiPartParser -from rest_framework.permissions import IsAdminUser, IsAuthenticated -from rest_framework.views import APIView - from apps.core.response import api_response from apps.core.viewsets import ReadOnlyViewSet from apps.organization.models import Organization @@ -30,6 +22,13 @@ from apps.registers.services import ( RegisterImportError, RegisterImportService, ) +from django.shortcuts import get_object_or_404 +from rest_framework import status +from rest_framework.exceptions import ValidationError +from rest_framework.generics import ListAPIView +from rest_framework.parsers import MultiPartParser +from rest_framework.permissions import IsAdminUser, IsAuthenticated +from rest_framework.views import APIView class RegisterViewSet(ReadOnlyViewSet[Register]): @@ -73,10 +72,11 @@ class RegisterOrganizationViewSet(ReadOnlyViewSet[Organization]): ) params_serializer.is_valid(raise_exception=True) - queryset, self.actual_date_meta = ( - RegisterImportService.get_organizations_queryset( - **params_serializer.validated_data - ) + ( + queryset, + self.actual_date_meta, + ) = RegisterImportService.get_organizations_queryset( + **params_serializer.validated_data ) return queryset @@ -101,11 +101,12 @@ class RegistryOrganizationListView(ListAPIView): ) params_serializer.is_valid(raise_exception=True) - queryset, self.actual_date_meta = ( - RegisterImportService.get_registry_organizations_queryset( - registry=registry, - **params_serializer.validated_data, - ) + ( + queryset, + self.actual_date_meta, + ) = RegisterImportService.get_registry_organizations_queryset( + registry=registry, + **params_serializer.validated_data, ) return queryset diff --git a/src/apps/user/admin.py b/src/apps/user/admin.py index 627f5d5..6c389b3 100644 --- a/src/apps/user/admin.py +++ b/src/apps/user/admin.py @@ -2,6 +2,8 @@ from contextlib import suppress +from apps.core.models import BackgroundJob +from apps.user.models import Profile, User from django.contrib import admin from django.contrib.admin.sites import NotRegistered from django.contrib.auth.admin import UserAdmin as BaseUserAdmin @@ -9,9 +11,6 @@ from django.contrib.auth.models import Group from django.utils.html import format_html from django.utils.translation import gettext_lazy as _ -from apps.core.models import BackgroundJob -from apps.user.models import Profile, User - try: from django_celery_beat.models import ( ClockedSchedule, diff --git a/src/apps/user/services.py b/src/apps/user/services.py index c63607e..de36d1b 100644 --- a/src/apps/user/services.py +++ b/src/apps/user/services.py @@ -1,11 +1,10 @@ from typing import Any +from apps.core.exceptions import NotFoundError from django.contrib.auth import get_user_model from django.db import transaction from rest_framework_simplejwt.tokens import RefreshToken -from apps.core.exceptions import NotFoundError - from .models import Profile User = get_user_model() diff --git a/src/core/api_v1_urls.py b/src/core/api_v1_urls.py index bb417f7..01ad31f 100644 --- a/src/core/api_v1_urls.py +++ b/src/core/api_v1_urls.py @@ -4,13 +4,12 @@ API v1 URL configuration. Все API эндпоинты версионированы под /api/v1/ """ -from django.urls import include, path - from apps.core.views import ( BackgroundJobListView, BackgroundJobStatusView, BackgroundJobStreamView, ) +from django.urls import include, path app_name = "api_v1" diff --git a/src/core/asgi.py b/src/core/asgi.py index 1a0a0b2..0ee4e62 100644 --- a/src/core/asgi.py +++ b/src/core/asgi.py @@ -9,9 +9,8 @@ https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/ import os -from django.core.asgi import get_asgi_application - from apps.core.startup_checks import run_startup_checks +from django.core.asgi import get_asgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.production") run_startup_checks(component="asgi") diff --git a/src/core/celery.py b/src/core/celery.py index fa27285..bb17498 100644 --- a/src/core/celery.py +++ b/src/core/celery.py @@ -8,9 +8,8 @@ import logging import os import sys -from celery import Celery - from apps.core.startup_checks import run_startup_checks +from celery import Celery logger = logging.getLogger(__name__) diff --git a/src/core/urls.py b/src/core/urls.py index 1b5ff53..4e71e67 100644 --- a/src/core/urls.py +++ b/src/core/urls.py @@ -4,6 +4,11 @@ URL Configuration for the project. The `urlpatterns` list routes URLs to views. """ +from apps.core.openapi import ( + OPENAPI_PROJECT_DESCRIPTION, + OPENAPI_PROJECT_TITLE, + RussianTagSchemaGenerator, +) from django.conf import settings from django.conf.urls.static import static from django.contrib import admin @@ -12,12 +17,6 @@ from drf_yasg import openapi from drf_yasg.views import get_schema_view from rest_framework import permissions -from apps.core.openapi import ( - OPENAPI_PROJECT_DESCRIPTION, - OPENAPI_PROJECT_TITLE, - RussianTagSchemaGenerator, -) - # Swagger schema view schema_view = get_schema_view( openapi.Info( diff --git a/src/core/wsgi.py b/src/core/wsgi.py index a426684..513d1c1 100644 --- a/src/core/wsgi.py +++ b/src/core/wsgi.py @@ -9,9 +9,8 @@ https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/ import os -from django.core.wsgi import get_wsgi_application - from apps.core.startup_checks import run_startup_checks +from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.dev") run_startup_checks(component="wsgi") diff --git a/tests/apps/core/test_background_jobs.py b/tests/apps/core/test_background_jobs.py index 7e3f7b3..756c4d9 100644 --- a/tests/apps/core/test_background_jobs.py +++ b/tests/apps/core/test_background_jobs.py @@ -1,10 +1,9 @@ """Тесты для BackgroundJob.""" -from django.test import TestCase -from faker import Faker - from apps.core.models import BackgroundJob, JobStatus from apps.core.services import BackgroundJobService +from django.test import TestCase +from faker import Faker fake = Faker() diff --git a/tests/apps/core/test_bulk_operations.py b/tests/apps/core/test_bulk_operations.py index 5c9c34c..5227ed4 100644 --- a/tests/apps/core/test_bulk_operations.py +++ b/tests/apps/core/test_bulk_operations.py @@ -1,13 +1,12 @@ """Тесты для BulkOperationsMixin и QueryOptimizerMixin.""" -from django.test import TestCase -from faker import Faker - from apps.core.models import BackgroundJob from apps.core.services import ( BulkOperationsMixin, QueryOptimizerMixin, ) +from django.test import TestCase +from faker import Faker fake = Faker() diff --git a/tests/apps/core/test_cache.py b/tests/apps/core/test_cache.py index 5287d45..ed8ca70 100644 --- a/tests/apps/core/test_cache.py +++ b/tests/apps/core/test_cache.py @@ -1,14 +1,13 @@ """Tests for core cache utilities""" -from django.core.cache import cache -from django.test import TestCase - from apps.core.cache import ( CacheManager, _build_cache_key, cache_method, cache_result, ) +from django.core.cache import cache +from django.test import TestCase class CacheResultDecoratorTest(TestCase): diff --git a/tests/apps/core/test_excel.py b/tests/apps/core/test_excel.py index f0602cc..36423ba 100644 --- a/tests/apps/core/test_excel.py +++ b/tests/apps/core/test_excel.py @@ -2,8 +2,6 @@ from unittest.mock import MagicMock -from django.test import TestCase - from apps.core.excel import ( BaseExcelParser, ColumnMapping, @@ -16,6 +14,7 @@ from apps.core.excel import ( validate_ogrn, validate_okpo, ) +from django.test import TestCase class ValidatorsTest(TestCase): diff --git a/tests/apps/core/test_exceptions.py b/tests/apps/core/test_exceptions.py index 89d764f..f862d1a 100644 --- a/tests/apps/core/test_exceptions.py +++ b/tests/apps/core/test_exceptions.py @@ -1,7 +1,5 @@ """Tests for core exceptions and exception handler""" -from django.test import TestCase - from apps.core.exceptions import ( AuthenticationError, BadRequestError, @@ -18,6 +16,7 @@ from apps.core.exceptions import ( ServiceUnavailableError, ValidationError, ) +from django.test import TestCase class BaseAPIExceptionTest(TestCase): diff --git a/tests/apps/core/test_filters.py b/tests/apps/core/test_filters.py index 9d7bb87..609761f 100644 --- a/tests/apps/core/test_filters.py +++ b/tests/apps/core/test_filters.py @@ -1,9 +1,5 @@ """Tests for core filter utilities""" -from django.test import TestCase -from django_filters import rest_framework as filters -from rest_framework.filters import OrderingFilter, SearchFilter - from apps.core.filters import ( BaseFilterSet, FilterMixin, @@ -11,6 +7,9 @@ from apps.core.filters import ( StandardSearchFilter, get_filter_backends, ) +from django.test import TestCase +from django_filters import rest_framework as filters +from rest_framework.filters import OrderingFilter, SearchFilter class BaseFilterSetTest(TestCase): diff --git a/tests/apps/core/test_generate_test_reports_command.py b/tests/apps/core/test_generate_test_reports_command.py index f81517c..828ac17 100644 --- a/tests/apps/core/test_generate_test_reports_command.py +++ b/tests/apps/core/test_generate_test_reports_command.py @@ -2,9 +2,6 @@ from io import StringIO -from django.core.management import call_command -from django.test import TestCase - from apps.external_data.models import ( ArbitrationCase, IndustrialProduct, @@ -19,6 +16,8 @@ from apps.form_5.models import FormF5Record from apps.form_6.models import FormF6Record from apps.organization.models import Organization from apps.registers.models import RegisterUpload, RegistryMembershipPeriod +from django.core.management import call_command +from django.test import TestCase class GenerateTestReportsCommandTest(TestCase): diff --git a/tests/apps/core/test_logging.py b/tests/apps/core/test_logging.py index b5230e2..394085c 100644 --- a/tests/apps/core/test_logging.py +++ b/tests/apps/core/test_logging.py @@ -4,13 +4,12 @@ import json import logging from io import StringIO -from django.test import TestCase - from apps.core.logging import ( ContextLogger, JSONFormatter, get_json_logging_config, ) +from django.test import TestCase class JSONFormatterTest(TestCase): diff --git a/tests/apps/core/test_management_commands.py b/tests/apps/core/test_management_commands.py index ffd421c..9288da3 100644 --- a/tests/apps/core/test_management_commands.py +++ b/tests/apps/core/test_management_commands.py @@ -2,11 +2,10 @@ from io import StringIO +from apps.core.management.commands.base import BaseAppCommand from django.core.management.base import CommandError from django.test import TestCase -from apps.core.management.commands.base import BaseAppCommand - class TestCommand(BaseAppCommand): """Тестовая команда для проверки BaseAppCommand.""" diff --git a/tests/apps/core/test_mixins.py b/tests/apps/core/test_mixins.py index 2be3fb1..f92d2b7 100644 --- a/tests/apps/core/test_mixins.py +++ b/tests/apps/core/test_mixins.py @@ -1,12 +1,11 @@ """Тесты для Model Mixins.""" -from django.test import TestCase - from apps.core.mixins import ( OrderableMixin, SoftDeleteMixin, StatusMixin, ) +from django.test import TestCase class TimestampMixinTest(TestCase): diff --git a/tests/apps/core/test_openapi.py b/tests/apps/core/test_openapi.py index 5a5cdf5..9bc164f 100644 --- a/tests/apps/core/test_openapi.py +++ b/tests/apps/core/test_openapi.py @@ -1,9 +1,5 @@ """Tests for core OpenAPI utilities""" -from django.test import TestCase -from drf_yasg import openapi -from rest_framework import serializers - from apps.core.openapi import ( CommonParameters, CommonResponses, @@ -11,6 +7,9 @@ from apps.core.openapi import ( api_docs, paginated_response, ) +from django.test import TestCase +from drf_yasg import openapi +from rest_framework import serializers class DummySerializer(serializers.Serializer): diff --git a/tests/apps/core/test_permissions.py b/tests/apps/core/test_permissions.py index e382b33..10d7dea 100644 --- a/tests/apps/core/test_permissions.py +++ b/tests/apps/core/test_permissions.py @@ -1,9 +1,5 @@ """Tests for core permissions""" -from django.contrib.auth import get_user_model -from django.test import RequestFactory, TestCase -from rest_framework.views import APIView - from apps.core.permissions import ( IsAdmin, IsAdminOrReadOnly, @@ -13,6 +9,10 @@ from apps.core.permissions import ( IsSuperuser, IsVerified, ) +from django.contrib.auth import get_user_model +from django.test import RequestFactory, TestCase +from rest_framework.views import APIView + from tests.apps.user.factories import UserFactory User = get_user_model() diff --git a/tests/apps/core/test_response.py b/tests/apps/core/test_response.py index fa26543..4368625 100644 --- a/tests/apps/core/test_response.py +++ b/tests/apps/core/test_response.py @@ -1,8 +1,5 @@ """Tests for core response wrapper""" -from django.test import TestCase -from rest_framework import status - from apps.core.response import ( api_created_response, api_error_response, @@ -10,6 +7,8 @@ from apps.core.response import ( api_paginated_response, api_response, ) +from django.test import TestCase +from rest_framework import status class APIResponseTest(TestCase): diff --git a/tests/apps/core/test_services.py b/tests/apps/core/test_services.py index 4c41ae2..e7b2c2e 100644 --- a/tests/apps/core/test_services.py +++ b/tests/apps/core/test_services.py @@ -1,10 +1,9 @@ """Tests for core services""" -from django.contrib.auth import get_user_model -from django.test import TestCase - from apps.core.exceptions import NotFoundError from apps.core.services import BaseService +from django.contrib.auth import get_user_model +from django.test import TestCase User = get_user_model() diff --git a/tests/apps/core/test_signals.py b/tests/apps/core/test_signals.py index dd776dd..1d8903a 100644 --- a/tests/apps/core/test_signals.py +++ b/tests/apps/core/test_signals.py @@ -1,9 +1,5 @@ """Tests for core signals utilities""" -from django.contrib.auth import get_user_model -from django.db.models.signals import post_save, pre_save -from django.test import TestCase - from apps.core.signals import ( SignalDispatcher, emit_password_changed, @@ -15,6 +11,10 @@ from apps.core.signals import ( user_registered, user_verified, ) +from django.contrib.auth import get_user_model +from django.db.models.signals import post_save, pre_save +from django.test import TestCase + from tests.apps.user.factories import UserFactory User = get_user_model() diff --git a/tests/apps/core/test_tasks.py b/tests/apps/core/test_tasks.py index c7477f5..c90e41b 100644 --- a/tests/apps/core/test_tasks.py +++ b/tests/apps/core/test_tasks.py @@ -1,8 +1,5 @@ """Tests for core Celery tasks""" -from celery import Task -from django.test import TestCase - from apps.core.tasks import ( BaseTask, IdempotentTask, @@ -10,6 +7,8 @@ from apps.core.tasks import ( TimedTask, TransactionalTask, ) +from celery import Task +from django.test import TestCase class BaseTaskTest(TestCase): diff --git a/tests/apps/core/test_viewsets.py b/tests/apps/core/test_viewsets.py index 717ca63..21cb965 100644 --- a/tests/apps/core/test_viewsets.py +++ b/tests/apps/core/test_viewsets.py @@ -4,14 +4,6 @@ from __future__ import annotations from typing import Any -from django.test import TestCase, override_settings -from django.urls import include, path -from rest_framework import serializers, status, viewsets -from rest_framework.decorators import action -from rest_framework.permissions import IsAuthenticated -from rest_framework.routers import DefaultRouter -from rest_framework.test import APITestCase - from apps.core.pagination import StandardPagination from apps.core.viewsets import ( BaseViewSet, @@ -21,6 +13,14 @@ from apps.core.viewsets import ( ) from apps.organization.models import Organization from apps.user.models import Profile, User +from django.test import TestCase, override_settings +from django.urls import include, path +from rest_framework import serializers, status, viewsets +from rest_framework.decorators import action +from rest_framework.permissions import IsAuthenticated +from rest_framework.routers import DefaultRouter +from rest_framework.test import APITestCase + from tests.apps.organization.factories import OrganizationFactory, fake from tests.apps.user.factories import ProfileFactory, UserFactory diff --git a/tests/apps/exchange/test_admin.py b/tests/apps/exchange/test_admin.py index 46b50b2..fc1954b 100644 --- a/tests/apps/exchange/test_admin.py +++ b/tests/apps/exchange/test_admin.py @@ -2,11 +2,11 @@ from __future__ import annotations +from apps.exchange.models import ExchangeDeliveryChannel, ExchangePackageImport +from apps.organization.models import Organization from django.test import TestCase from django.urls import reverse -from apps.exchange.models import ExchangeDeliveryChannel, ExchangePackageImport -from apps.organization.models import Organization from tests.apps.exchange.test_api import build_exchange_archive, build_exchange_payload from tests.apps.user.factories import UserFactory diff --git a/tests/apps/exchange/test_api.py b/tests/apps/exchange/test_api.py index 63b6452..86268bf 100644 --- a/tests/apps/exchange/test_api.py +++ b/tests/apps/exchange/test_api.py @@ -12,15 +12,6 @@ from datetime import date from io import BytesIO from zipfile import ZIP_DEFLATED, ZipFile -from cryptography.hazmat.primitives.ciphers.aead import AESGCM -from django.conf import settings -from django.core.files.uploadedfile import SimpleUploadedFile -from django.core.management import call_command -from django.urls import reverse -from django.utils.crypto import get_random_string -from rest_framework import status -from rest_framework.test import APITestCase - from apps.exchange.models import ExchangeDeliveryChannel, ExchangePackageImport from apps.exchange.services import ExchangePackageImportService from apps.external_data.models import ( @@ -31,6 +22,14 @@ from apps.external_data.models import ( ) from apps.organization.models import Organization from apps.user.models import User +from cryptography.hazmat.primitives.ciphers.aead import AESGCM +from django.conf import settings +from django.core.files.uploadedfile import SimpleUploadedFile +from django.core.management import call_command +from django.urls import reverse +from django.utils.crypto import get_random_string +from rest_framework import status +from rest_framework.test import APITestCase TEST_TOKEN = settings.EXCHANGE_SHARED_TOKEN diff --git a/tests/apps/external_data/factories.py b/tests/apps/external_data/factories.py index 71bcda3..31e21b0 100644 --- a/tests/apps/external_data/factories.py +++ b/tests/apps/external_data/factories.py @@ -1,14 +1,14 @@ """Factories for external data models.""" import factory -from faker import Faker - from apps.external_data.models import ( ArbitrationCase, IndustrialProduct, ProsecutorCheck, PublicProcurement, ) +from faker import Faker + from tests.apps.organization.factories import OrganizationFactory fake = Faker("ru_RU") diff --git a/tests/apps/form_1/factories.py b/tests/apps/form_1/factories.py index 27dc11a..2c7cc68 100644 --- a/tests/apps/form_1/factories.py +++ b/tests/apps/form_1/factories.py @@ -1,9 +1,9 @@ """Factories for form_1 app.""" import factory +from apps.form_1.models import FormF1Record from faker import Faker -from apps.form_1.models import FormF1Record from tests.apps.organization.factories import OrganizationFactory fake = Faker("ru_RU") diff --git a/tests/apps/form_1/test_services.py b/tests/apps/form_1/test_services.py index 8b89bf4..8afa2c4 100644 --- a/tests/apps/form_1/test_services.py +++ b/tests/apps/form_1/test_services.py @@ -1,8 +1,8 @@ """Tests for FormF1 services.""" +from apps.form_1.services import FormF1Parser, FormF1Service from django.test import TestCase -from apps.form_1.services import FormF1Parser, FormF1Service from tests.apps.organization.factories import OrganizationFactory from .factories import FormF1RecordFactory diff --git a/tests/apps/form_2/factories.py b/tests/apps/form_2/factories.py index fc4fa38..1a75bcb 100644 --- a/tests/apps/form_2/factories.py +++ b/tests/apps/form_2/factories.py @@ -1,9 +1,9 @@ """Factories for form_2 app.""" import factory +from apps.form_2.models import FormF2Record from faker import Faker -from apps.form_2.models import FormF2Record from tests.apps.organization.factories import OrganizationFactory fake = Faker("ru_RU") diff --git a/tests/apps/form_2/test_services.py b/tests/apps/form_2/test_services.py index cf4ed6b..7974fde 100644 --- a/tests/apps/form_2/test_services.py +++ b/tests/apps/form_2/test_services.py @@ -1,8 +1,8 @@ """Tests for FormF2 services.""" +from apps.form_2.services import FormF2Parser, FormF2Service from django.test import TestCase -from apps.form_2.services import FormF2Parser, FormF2Service from tests.apps.organization.factories import OrganizationFactory from .factories import FormF2RecordFactory diff --git a/tests/apps/form_3/factories.py b/tests/apps/form_3/factories.py index 2e242c3..e057a01 100644 --- a/tests/apps/form_3/factories.py +++ b/tests/apps/form_3/factories.py @@ -1,9 +1,9 @@ """Factories for form_3 app.""" import factory +from apps.form_3.models import FormF3Record from faker import Faker -from apps.form_3.models import FormF3Record from tests.apps.organization.factories import OrganizationFactory fake = Faker("ru_RU") diff --git a/tests/apps/form_3/test_services.py b/tests/apps/form_3/test_services.py index ef60c62..87a8a3b 100644 --- a/tests/apps/form_3/test_services.py +++ b/tests/apps/form_3/test_services.py @@ -1,8 +1,8 @@ """Tests for FormF3 services.""" +from apps.form_3.services import FormF3Parser, FormF3Service from django.test import TestCase -from apps.form_3.services import FormF3Parser, FormF3Service from tests.apps.organization.factories import OrganizationFactory from .factories import FormF3RecordFactory diff --git a/tests/apps/form_4/factories.py b/tests/apps/form_4/factories.py index 2d34adc..1c030b8 100644 --- a/tests/apps/form_4/factories.py +++ b/tests/apps/form_4/factories.py @@ -1,9 +1,9 @@ """Factories for form_4 app.""" import factory +from apps.form_4.models import FormF4Record from faker import Faker -from apps.form_4.models import FormF4Record from tests.apps.organization.factories import OrganizationFactory fake = Faker("ru_RU") diff --git a/tests/apps/form_4/test_services.py b/tests/apps/form_4/test_services.py index c06bdc2..f7b3b67 100644 --- a/tests/apps/form_4/test_services.py +++ b/tests/apps/form_4/test_services.py @@ -1,8 +1,8 @@ """Tests for FormF4 services.""" +from apps.form_4.services import FormF4Parser, FormF4Service from django.test import TestCase -from apps.form_4.services import FormF4Parser, FormF4Service from tests.apps.organization.factories import OrganizationFactory from .factories import FormF4RecordFactory diff --git a/tests/apps/form_5/factories.py b/tests/apps/form_5/factories.py index 4247939..533eba4 100644 --- a/tests/apps/form_5/factories.py +++ b/tests/apps/form_5/factories.py @@ -1,9 +1,9 @@ """Factories for form_5 app.""" import factory +from apps.form_5.models import FormF5Record from faker import Faker -from apps.form_5.models import FormF5Record from tests.apps.organization.factories import OrganizationFactory fake = Faker("ru_RU") diff --git a/tests/apps/form_5/test_services.py b/tests/apps/form_5/test_services.py index ca588a0..7023f5e 100644 --- a/tests/apps/form_5/test_services.py +++ b/tests/apps/form_5/test_services.py @@ -1,8 +1,8 @@ """Tests for FormF5 services.""" +from apps.form_5.services import FormF5Parser, FormF5Service from django.test import TestCase -from apps.form_5.services import FormF5Parser, FormF5Service from tests.apps.organization.factories import OrganizationFactory from .factories import FormF5RecordFactory diff --git a/tests/apps/form_6/factories.py b/tests/apps/form_6/factories.py index 7b3f0e5..b816a0b 100644 --- a/tests/apps/form_6/factories.py +++ b/tests/apps/form_6/factories.py @@ -1,9 +1,9 @@ """Factories for form_6 app.""" import factory +from apps.form_6.models import FormF6Record from faker import Faker -from apps.form_6.models import FormF6Record from tests.apps.organization.factories import OrganizationFactory fake = Faker("ru_RU") diff --git a/tests/apps/form_6/test_services.py b/tests/apps/form_6/test_services.py index 6347afa..c7136d5 100644 --- a/tests/apps/form_6/test_services.py +++ b/tests/apps/form_6/test_services.py @@ -1,8 +1,8 @@ """Tests for FormF6 services.""" +from apps.form_6.services import FormF6Parser, FormF6Service from django.test import TestCase -from apps.form_6.services import FormF6Parser, FormF6Service from tests.apps.organization.factories import OrganizationFactory from .factories import FormF6RecordFactory diff --git a/tests/apps/organization/factories.py b/tests/apps/organization/factories.py index bfdf2d2..72e9d14 100644 --- a/tests/apps/organization/factories.py +++ b/tests/apps/organization/factories.py @@ -1,9 +1,8 @@ """Factories for organization app.""" import factory -from faker import Faker - from apps.organization.models import IndustryCluster, Organization, OrganizationType +from faker import Faker fake = Faker("ru_RU") diff --git a/tests/apps/organization/test_analytics_api.py b/tests/apps/organization/test_analytics_api.py index ce2a0aa..663f51a 100644 --- a/tests/apps/organization/test_analytics_api.py +++ b/tests/apps/organization/test_analytics_api.py @@ -5,11 +5,11 @@ from __future__ import annotations from datetime import date from decimal import Decimal +from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod from django.test import override_settings from rest_framework import status from rest_framework.test import APITestCase -from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod from tests.apps.form_1.factories import FormF1RecordFactory from tests.apps.form_2.factories import FormF2RecordFactory from tests.apps.form_3.factories import FormF3RecordFactory diff --git a/tests/apps/organization/test_api.py b/tests/apps/organization/test_api.py index 3e3e9fc..77c35e6 100644 --- a/tests/apps/organization/test_api.py +++ b/tests/apps/organization/test_api.py @@ -4,11 +4,11 @@ from __future__ import annotations from datetime import date +from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod from django.test import override_settings from rest_framework import status from rest_framework.test import APITestCase -from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod from tests.apps.organization.factories import OrganizationFactory from tests.apps.user.factories import UserFactory diff --git a/tests/apps/organization/test_models.py b/tests/apps/organization/test_models.py index 3d7f0cf..3906916 100644 --- a/tests/apps/organization/test_models.py +++ b/tests/apps/organization/test_models.py @@ -2,9 +2,8 @@ from datetime import date -from django.test import TestCase - from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod +from django.test import TestCase from .factories import OrganizationFactory diff --git a/tests/apps/organization/test_services.py b/tests/apps/organization/test_services.py index 0ba100e..5697752 100644 --- a/tests/apps/organization/test_services.py +++ b/tests/apps/organization/test_services.py @@ -1,8 +1,7 @@ """Tests for Organization services.""" -from django.test import TestCase - from apps.organization.services import OrganizationService +from django.test import TestCase from .factories import OrganizationFactory diff --git a/tests/apps/registers/test_backup_import.py b/tests/apps/registers/test_backup_import.py index e37fb72..851e512 100644 --- a/tests/apps/registers/test_backup_import.py +++ b/tests/apps/registers/test_backup_import.py @@ -11,15 +11,14 @@ from datetime import date from io import BytesIO from zipfile import ZIP_DEFLATED, ZipFile -from cryptography.hazmat.primitives.ciphers.aead import AESGCM -from django.core.files.uploadedfile import SimpleUploadedFile -from django.test import TestCase, override_settings -from django.utils.crypto import get_random_string - from apps.organization.models import Organization from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod from apps.registers.services import RegisterBackupImportService from apps.user.models import User +from cryptography.hazmat.primitives.ciphers.aead import AESGCM +from django.core.files.uploadedfile import SimpleUploadedFile +from django.test import TestCase, override_settings +from django.utils.crypto import get_random_string TEST_BACKUP_KEY = base64.urlsafe_b64encode(b"k" * 32).decode("ascii").rstrip("=") TEST_AAD = b"state-corp-backup-v1" diff --git a/tests/apps/registers/test_services.py b/tests/apps/registers/test_services.py index e61815f..f436b03 100644 --- a/tests/apps/registers/test_services.py +++ b/tests/apps/registers/test_services.py @@ -5,13 +5,12 @@ from __future__ import annotations import io from datetime import date -from django.core.files.uploadedfile import SimpleUploadedFile -from django.test import TestCase -from openpyxl import Workbook - from apps.organization.models import Organization from apps.registers.models import Register, RegisterUpload, RegistryMembershipPeriod from apps.registers.services import RegisterImportService +from django.core.files.uploadedfile import SimpleUploadedFile +from django.test import TestCase +from openpyxl import Workbook def build_registry_upload(name: str, rows: list[dict[str, str]]) -> SimpleUploadedFile: diff --git a/tests/apps/user/factories.py b/tests/apps/user/factories.py index 00dcfd8..cd768d7 100644 --- a/tests/apps/user/factories.py +++ b/tests/apps/user/factories.py @@ -1,9 +1,8 @@ """Фабрики для создания тестовых объектов с использованием factory_boy и faker""" import factory -from faker import Faker - from apps.user.models import Profile, User +from faker import Faker fake = Faker("ru_RU") diff --git a/tests/apps/user/test_serializers.py b/tests/apps/user/test_serializers.py index e2e509e..e1f2402 100644 --- a/tests/apps/user/test_serializers.py +++ b/tests/apps/user/test_serializers.py @@ -1,9 +1,5 @@ """Tests for user serializers""" -from django.contrib.auth import get_user_model -from django.test import TestCase -from faker import Faker - from apps.user.serializers import ( LoginSerializer, PasswordChangeSerializer, @@ -13,6 +9,9 @@ from apps.user.serializers import ( UserSerializer, UserUpdateSerializer, ) +from django.contrib.auth import get_user_model +from django.test import TestCase +from faker import Faker from .factories import ProfileFactory, UserFactory diff --git a/tests/apps/user/test_services.py b/tests/apps/user/test_services.py index 08dfb27..a836541 100644 --- a/tests/apps/user/test_services.py +++ b/tests/apps/user/test_services.py @@ -1,13 +1,12 @@ """Tests for user services""" +from apps.core.exceptions import NotFoundError +from apps.user.services import ProfileService, UserService from django.contrib.auth import get_user_model from django.test import TestCase from faker import Faker from rest_framework_simplejwt.tokens import RefreshToken -from apps.core.exceptions import NotFoundError -from apps.user.services import ProfileService, UserService - from .factories import ProfileFactory, UserFactory User = get_user_model() diff --git a/tests/apps/user/test_views.py b/tests/apps/user/test_views.py index 52ea323..03db98f 100644 --- a/tests/apps/user/test_views.py +++ b/tests/apps/user/test_views.py @@ -1,14 +1,13 @@ """Tests for user DRF views""" +from apps.user.models import Profile +from apps.user.services import UserService from django.contrib.auth import get_user_model from django.urls import reverse from faker import Faker from rest_framework import status from rest_framework.test import APITestCase -from apps.user.models import Profile -from apps.user.services import UserService - from .factories import ProfileFactory, UserFactory User = get_user_model()