From 47a18a005b6c3660420244d406a1f6863b99a817 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Thu, 5 Jun 2025 17:52:21 +0300 Subject: [PATCH] Fixes: fix circular imports in serializers --- core/serializers/__init__.py | 64 ------------------------------------ core/serializers/simple.py | 2 +- core/serializers/utility.py | 64 ++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 65 deletions(-) create mode 100644 core/serializers/utility.py diff --git a/core/serializers/__init__.py b/core/serializers/__init__.py index ccce0500..f936a28a 100644 --- a/core/serializers/__init__.py +++ b/core/serializers/__init__.py @@ -1,9 +1,7 @@ from rest_framework.fields import ( BooleanField, CharField, - DictField, Field, - FloatField, IntegerField, JSONField, ListField, @@ -11,8 +9,6 @@ from rest_framework.fields import ( ) from rest_framework.serializers import ListSerializer, Serializer -from core.models import Address - from .detail import * # noqa: F403 from .simple import * # noqa: F403 @@ -111,63 +107,3 @@ class BuyAsBusinessOrderSerializer(Serializer): billing_business_address_uuid = CharField(required=False) shipping_business_address_uuid = CharField(required=False) payment_method = CharField(required=True) - - -class AddressAutocompleteInputSerializer(Serializer): - q = CharField(required=True) - limit = IntegerField(required=False, min_value=1, max_value=10, default=5) - - -class AddressSuggestionSerializer(Serializer): - display_name = CharField() - lat = FloatField() - lon = FloatField() - address = DictField(child=CharField()) - - -class AddressSerializer(ModelSerializer): # noqa: F405 - latitude = FloatField(source="location.y", read_only=True) - longitude = FloatField(source="location.x", read_only=True) - - class Meta: - model = Address - fields = [ - "uuid", - "street", - "district", - "city", - "region", - "postal_code", - "country", - "latitude", - "longitude", - "raw_data", - "api_response", - "user", - ] - read_only_fields = [ - "latitude", - "longitude", - "raw_data", - "api_response", - ] - - -class AddressCreateSerializer(ModelSerializer): # noqa: F405 - raw_data = CharField( - write_only=True, - max_length=512, - ) - address_line_1 = CharField(write_only=True, max_length=128, required=False) - address_line_2 = CharField(write_only=True, max_length=128, required=False) - - class Meta: - model = Address - fields = ["raw_data", "address_line_1", "address_line_2"] - - def create(self, validated_data): - raw = validated_data.pop("raw_data") - user = None - if self.context["request"].user.is_authenticated: - user = self.context["request"].user - return Address.objects.create(raw_data=raw, user=user, **validated_data) diff --git a/core/serializers/simple.py b/core/serializers/simple.py index 46722ed4..91f6e2c8 100644 --- a/core/serializers/simple.py +++ b/core/serializers/simple.py @@ -23,7 +23,7 @@ from core.models import ( Vendor, Wishlist, ) -from core.serializers import AddressSerializer +from core.serializers.utility import AddressSerializer class AttributeGroupSimpleSerializer(ModelSerializer): diff --git a/core/serializers/utility.py b/core/serializers/utility.py new file mode 100644 index 00000000..a07df7a9 --- /dev/null +++ b/core/serializers/utility.py @@ -0,0 +1,64 @@ +from rest_framework.fields import CharField, DictField, FloatField, IntegerField +from rest_framework.serializers import ModelSerializer, Serializer + +from core.models import Address + + +class AddressAutocompleteInputSerializer(Serializer): + q = CharField(required=True) + limit = IntegerField(required=False, min_value=1, max_value=10, default=5) + + +class AddressSuggestionSerializer(Serializer): + display_name = CharField() + lat = FloatField() + lon = FloatField() + address = DictField(child=CharField()) + + +class AddressSerializer(ModelSerializer): + latitude = FloatField(source="location.y", read_only=True) + longitude = FloatField(source="location.x", read_only=True) + + class Meta: + model = Address + fields = [ + "uuid", + "street", + "district", + "city", + "region", + "postal_code", + "country", + "latitude", + "longitude", + "raw_data", + "api_response", + "user", + ] + read_only_fields = [ + "latitude", + "longitude", + "raw_data", + "api_response", + ] + + +class AddressCreateSerializer(ModelSerializer): + raw_data = CharField( + write_only=True, + max_length=512, + ) + address_line_1 = CharField(write_only=True, max_length=128, required=False) + address_line_2 = CharField(write_only=True, max_length=128, required=False) + + class Meta: + model = Address + fields = ["raw_data", "address_line_1", "address_line_2"] + + def create(self, validated_data): + raw = validated_data.pop("raw_data") + user = None + if self.context["request"].user.is_authenticated: + user = self.context["request"].user + return Address.objects.create(raw_data=raw, user=user, **validated_data)