From 22aff0a68b4f386120a5038aed83d50999b02ef0 Mon Sep 17 00:00:00 2001 From: Giki Date: Sun, 31 Aug 2025 13:27:22 +0300 Subject: [PATCH 1/2] Allow imageURL field to be imported dynamically --- oscarapi/serializers/utils.py | 3 ++- oscarapi/tests/unit/testserializers.py | 4 +++- oscarapi/utils/attributes.py | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/oscarapi/serializers/utils.py b/oscarapi/serializers/utils.py index 62672b5c..e56ab4d1 100644 --- a/oscarapi/serializers/utils.py +++ b/oscarapi/serializers/utils.py @@ -8,8 +8,9 @@ import oscar.models.fields from oscarapi.utils.exists import construct_id_filter -from .fields import ImageUrlField +from oscarapi.utils.loading import get_api_classes +[ImageUrlField] = get_api_classes("serializers.fields", ["ImageUrlField"]) logger = logging.getLogger(__name__) diff --git a/oscarapi/tests/unit/testserializers.py b/oscarapi/tests/unit/testserializers.py index d1612b4b..d0b3b774 100644 --- a/oscarapi/tests/unit/testserializers.py +++ b/oscarapi/tests/unit/testserializers.py @@ -1,7 +1,9 @@ from django.db import models from django.test import TestCase -from oscarapi.serializers.utils import ImageUrlField from rest_framework.fields import ImageField +from oscarapi.utils.loading import get_api_classes + +[ImageUrlField] = get_api_classes("serializers.fields", ["ImageUrlField"]) class SerializerstTest(TestCase): diff --git a/oscarapi/utils/attributes.py b/oscarapi/utils/attributes.py index bd5b9989..33f508ee 100644 --- a/oscarapi/utils/attributes.py +++ b/oscarapi/utils/attributes.py @@ -5,7 +5,9 @@ from rest_framework.exceptions import ErrorDetail from oscarapi.utils.loading import get_api_class from oscarapi.serializers import fields as oscarapi_fields +from oscarapi.utils.loading import get_api_classes +[ImageUrlField] = get_api_classes("serializers.fields", ["ImageUrlField"]) attribute_details = operator.itemgetter("code", "value") entity_internal_value = get_api_class("serializers.hooks", "entity_internal_value") @@ -57,7 +59,7 @@ def to_attribute_type_value(self, attribute, code, value): elif attribute.type == attribute.ENTITY: internal_value = entity_internal_value(attribute, value) elif attribute.type in [attribute.IMAGE, attribute.FILE]: - image_field = oscarapi_fields.ImageUrlField() + image_field = ImageUrlField() # pylint: disable=protected-access image_field._context = self.context internal_value = image_field.to_internal_value(value) From d96738bdd86327916a35d207d806e2a1f1cc2b75 Mon Sep 17 00:00:00 2001 From: Giki Date: Mon, 1 Sep 2025 12:45:53 +0300 Subject: [PATCH 2/2] replaced get_api_classes with get_api_class when importing ImageUrlField --- oscarapi/serializers/utils.py | 7 ++----- oscarapi/tests/unit/testserializers.py | 4 ++-- oscarapi/utils/attributes.py | 4 +--- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/oscarapi/serializers/utils.py b/oscarapi/serializers/utils.py index e56ab4d1..96c3b387 100644 --- a/oscarapi/serializers/utils.py +++ b/oscarapi/serializers/utils.py @@ -2,15 +2,12 @@ from django.db import models from django.db.models.manager import Manager from django.db.models.constants import LOOKUP_SEP - from rest_framework import serializers - import oscar.models.fields - from oscarapi.utils.exists import construct_id_filter -from oscarapi.utils.loading import get_api_classes +from oscarapi.utils.loading import get_api_class -[ImageUrlField] = get_api_classes("serializers.fields", ["ImageUrlField"]) +ImageUrlField = get_api_class("serializers.fields", "ImageUrlField") logger = logging.getLogger(__name__) diff --git a/oscarapi/tests/unit/testserializers.py b/oscarapi/tests/unit/testserializers.py index d0b3b774..ac2f8852 100644 --- a/oscarapi/tests/unit/testserializers.py +++ b/oscarapi/tests/unit/testserializers.py @@ -1,9 +1,9 @@ from django.db import models from django.test import TestCase from rest_framework.fields import ImageField -from oscarapi.utils.loading import get_api_classes +from oscarapi.utils.loading import get_api_class -[ImageUrlField] = get_api_classes("serializers.fields", ["ImageUrlField"]) +ImageUrlField = get_api_class("serializers.fields", "ImageUrlField") class SerializerstTest(TestCase): diff --git a/oscarapi/utils/attributes.py b/oscarapi/utils/attributes.py index 33f508ee..66c674f7 100644 --- a/oscarapi/utils/attributes.py +++ b/oscarapi/utils/attributes.py @@ -4,10 +4,8 @@ from rest_framework.fields import MISSING_ERROR_MESSAGE from rest_framework.exceptions import ErrorDetail from oscarapi.utils.loading import get_api_class -from oscarapi.serializers import fields as oscarapi_fields -from oscarapi.utils.loading import get_api_classes -[ImageUrlField] = get_api_classes("serializers.fields", ["ImageUrlField"]) +ImageUrlField = get_api_class("serializers.fields", "ImageUrlField") attribute_details = operator.itemgetter("code", "value") entity_internal_value = get_api_class("serializers.hooks", "entity_internal_value")