1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
from rest_framework import serializers
from drf_spectacular.extensions import (
OpenApiSerializerExtension, OpenApiSerializerFieldExtension, OpenApiViewExtension
)
from drf_spectacular.plumbing import build_basic_type
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import OpenApiParameter, extend_schema, extend_schema_field
class Fix1(OpenApiViewExtension):
target_class = 'oscarapi.views.root.api_root'
def view_replacement(self):
return extend_schema(responses=OpenApiTypes.OBJECT)(self.target_class)
class Fix2(OpenApiViewExtension):
target_class = 'oscarapi.views.product.ProductAvailability'
def view_replacement(self):
from oscarapi.serializers.product import AvailabilitySerializer
class Fixed(self.target_class):
serializer_class = AvailabilitySerializer
return Fixed
class Fix3(OpenApiViewExtension):
target_class = 'oscarapi.views.product.ProductPrice'
def view_replacement(self):
from oscarapi.serializers.checkout import PriceSerializer
class Fixed(self.target_class):
serializer_class = PriceSerializer
return Fixed
class Fix4(OpenApiViewExtension):
target_class = 'oscarapi.views.checkout.UserAddressDetail'
def view_replacement(self):
from oscar.apps.address.models import UserAddress
class Fixed(self.target_class):
queryset = UserAddress.objects.none()
return Fixed
class Fix5(OpenApiViewExtension):
target_class = 'oscarapi.views.product.CategoryList'
def view_replacement(self):
class Fixed(self.target_class):
@extend_schema(parameters=[
OpenApiParameter(name='breadcrumbs', type=OpenApiTypes.STR, location=OpenApiParameter.PATH)
])
def get(self, request, *args, **kwargs):
pass
return Fixed
class Fix6(OpenApiSerializerExtension):
target_class = 'oscarapi.serializers.checkout.OrderSerializer'
def map_serializer(self, auto_schema, direction):
from oscarapi.serializers.checkout import OrderOfferDiscountSerializer, OrderVoucherOfferSerializer
class Fixed(self.target_class):
@extend_schema_field(OrderOfferDiscountSerializer(many=True))
def get_offer_discounts(self):
pass
@extend_schema_field(OpenApiTypes.URI)
def get_payment_url(self):
pass
@extend_schema_field(OrderVoucherOfferSerializer(many=True))
def get_voucher_discounts(self):
pass
return auto_schema._map_serializer(Fixed, direction)
class Fix7(OpenApiSerializerFieldExtension):
target_class = 'oscarapi.serializers.fields.CategoryField'
def map_serializer_field(self, auto_schema, direction):
return build_basic_type(OpenApiTypes.STR)
class Fix8(OpenApiSerializerFieldExtension):
target_class = 'oscarapi.serializers.fields.AttributeValueField'
def map_serializer_field(self, auto_schema, direction):
return {
'oneOf': [
build_basic_type(OpenApiTypes.STR),
]
}
class Fix9(OpenApiSerializerExtension):
target_class = 'oscarapi.serializers.basket.BasketSerializer'
def map_serializer(self, auto_schema, direction):
class Fixed(self.target_class):
is_tax_known = serializers.SerializerMethodField()
def get_is_tax_known(self) -> bool:
pass
return auto_schema._map_serializer(Fixed, direction)
class Fix10(Fix9):
target_class = 'oscarapi.serializers.basket.BasketLineSerializer'
|