Commit b3cbf10c by Clinton Blackburn

Merge pull request #70 from edx/serializer-cleanup

Cleaned API Serializers
parents 709692eb 76b7110b
"""Serializers for order and line item data.""" """Serializers for order and line item data."""
# pylint: disable=abstract-method # pylint: disable=abstract-method
from decimal import Decimal from oscar.core.loading import get_model
from rest_framework import serializers from rest_framework import serializers
from ecommerce.extensions.payment.constants import ISO_8601_FORMAT
class TransactionSerializer(serializers.Serializer): BillingAddress = get_model('order', 'BillingAddress')
"""Serializes a transaction. """ Line = get_model('order', 'Line')
txn_type = serializers.CharField(max_length=128) Order = get_model('order', 'Order')
amount = serializers.DecimalField(decimal_places=2, max_digits=12) Product = get_model('catalogue', 'Product')
reference = serializers.CharField(max_length=128) ProductAttributeValue = get_model('catalogue', 'ProductAttributeValue')
status = serializers.CharField(max_length=128)
date_created = serializers.DateTimeField()
class SourceTypeSerializer(serializers.Serializer): class BillingAddressSerializer(serializers.ModelSerializer):
"""Serializes the payment source type. """
name = serializers.CharField(max_length=128)
code = serializers.CharField(max_length=128)
class SourceSerializer(serializers.Serializer):
"""Serializes a payment source. """
source_type = SourceTypeSerializer()
transactions = TransactionSerializer(many=True)
currency = serializers.CharField(max_length=12)
amount_allocated = serializers.DecimalField(decimal_places=2, max_digits=12)
amount_debited = serializers.DecimalField(decimal_places=2, max_digits=12)
amount_refunded = serializers.DecimalField(decimal_places=2, max_digits=12)
reference = serializers.CharField(max_length=128)
label = serializers.CharField(max_length=128)
class CountrySerializer(serializers.Serializer):
"""Serializes a country, related to a billing address. """
printable_name = serializers.CharField(max_length=128)
name = serializers.CharField(max_length=128)
is_shipping_country = serializers.BooleanField()
class BillingAddressSerializer(serializers.Serializer):
"""Serializes a Billing Address. """ """Serializes a Billing Address. """
title = serializers.CharField(max_length=64) city = serializers.CharField(max_length=255, source='line4')
first_name = serializers.CharField(max_length=255)
last_name = serializers.CharField(max_length=255) class Meta(object):
line1 = serializers.CharField(max_length=255) model = BillingAddress
line2 = serializers.CharField(max_length=255) fields = ('first_name', 'last_name', 'line1', 'line2', 'postcode', 'state', 'country', 'city')
line3 = serializers.CharField(max_length=255)
line4 = serializers.CharField(max_length=255)
state = serializers.CharField(max_length=255)
postcode = serializers.CharField(max_length=64)
country = CountrySerializer()
class ProductAttributeValueSerializer(serializers.Serializer): class ProductAttributeValueSerializer(serializers.Serializer):
""" Serializer for ProductAttributeValue objects. """ """ Serializer for ProductAttributeValue objects. """
name = serializers.SerializerMethodField() name = serializers.SerializerMethodField()
value = serializers.CharField() value = serializers.CharField()
type = serializers.SerializerMethodField()
def get_name(self, instance): def get_name(self, instance):
return instance.attribute.name return instance.attribute.name
def get_type(self, instance):
return instance.attribute.type
class Meta(object):
model = ProductAttributeValue
fields = ('name', 'value', 'type')
class ProductSerializer(serializers.Serializer): class ProductSerializer(serializers.ModelSerializer):
""" Serializer for Products. """ """ Serializer for Products. """
attribute_values = ProductAttributeValueSerializer(many=True) attribute_values = ProductAttributeValueSerializer(many=True)
class Meta(object):
model = Product
fields = ('attribute_values',)
class LineSerializer(serializers.Serializer):
class LineSerializer(serializers.ModelSerializer):
"""Serializer for parsing line item data.""" """Serializer for parsing line item data."""
title = serializers.CharField(max_length=255)
quantity = serializers.IntegerField(min_value=0)
description = serializers.CharField()
status = serializers.CharField(max_length=255)
line_price_excl_tax = serializers.DecimalField(max_digits=12, decimal_places=2, min_value=Decimal('0.00'))
unit_price_excl_tax = serializers.DecimalField(max_digits=12, decimal_places=2, min_value=Decimal('0.00'))
product = ProductSerializer() product = ProductSerializer()
class Meta(object):
model = Line
fields = ('title', 'quantity', 'description', 'status', 'line_price_excl_tax', 'unit_price_excl_tax', 'product')
class OrderSerializer(serializers.Serializer): class OrderSerializer(serializers.ModelSerializer):
"""Serializer for parsing order data.""" """Serializer for parsing order data."""
number = serializers.CharField(max_length=128) date_placed = serializers.DateTimeField(format=ISO_8601_FORMAT)
date_placed = serializers.DateTimeField()
status = serializers.CharField(max_length=100)
sources = SourceSerializer(many=True)
currency = serializers.CharField(min_length=3, max_length=3)
total_excl_tax = serializers.DecimalField(max_digits=12, decimal_places=2, min_value=Decimal('0.00'))
lines = LineSerializer(many=True) lines = LineSerializer(many=True)
billing_address = BillingAddressSerializer(allow_null=True) billing_address = BillingAddressSerializer(allow_null=True)
class Meta(object):
model = Order
fields = ('number', 'date_placed', 'status', 'currency', 'total_excl_tax', 'lines', 'billing_address')
class PaymentProcessorSerializer(serializers.Serializer): class PaymentProcessorSerializer(serializers.Serializer):
""" Serializer to use with instances of processors.BasePaymentProcessor """ """ Serializer to use with instances of processors.BasePaymentProcessor """
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment