Skip to content

Commit 46a44e5

Browse files
authored
Quantize incoming digitals (#4339)
1 parent aa349fe commit 46a44e5

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

rest_framework/fields.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,7 @@ def to_internal_value(self, data):
955955
if value in (decimal.Decimal('Inf'), decimal.Decimal('-Inf')):
956956
self.fail('invalid')
957957

958-
return self.validate_precision(value)
958+
return self.quantize(self.validate_precision(value))
959959

960960
def validate_precision(self, value):
961961
"""
@@ -1018,7 +1018,8 @@ def quantize(self, value):
10181018
context.prec = self.max_digits
10191019
return value.quantize(
10201020
decimal.Decimal('.1') ** self.decimal_places,
1021-
context=context)
1021+
context=context
1022+
)
10221023

10231024

10241025
# Date & time fields...

tests/test_fields.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,26 @@ def test_localize_forces_coerce_to_string(self):
912912
self.assertTrue(isinstance(field.to_representation(Decimal('1.1')), six.string_types))
913913

914914

915+
class TestQuantizedValueForDecimal(TestCase):
916+
def test_int_quantized_value_for_decimal(self):
917+
field = serializers.DecimalField(max_digits=4, decimal_places=2)
918+
value = field.to_internal_value(12).as_tuple()
919+
expected_digit_tuple = (0, (1, 2, 0, 0), -2)
920+
self.assertEqual(value, expected_digit_tuple)
921+
922+
def test_string_quantized_value_for_decimal(self):
923+
field = serializers.DecimalField(max_digits=4, decimal_places=2)
924+
value = field.to_internal_value('12').as_tuple()
925+
expected_digit_tuple = (0, (1, 2, 0, 0), -2)
926+
self.assertEqual(value, expected_digit_tuple)
927+
928+
def test_part_precision_string_quantized_value_for_decimal(self):
929+
field = serializers.DecimalField(max_digits=4, decimal_places=2)
930+
value = field.to_internal_value('12.0').as_tuple()
931+
expected_digit_tuple = (0, (1, 2, 0, 0), -2)
932+
self.assertEqual(value, expected_digit_tuple)
933+
934+
915935
class TestNoDecimalPlaces(FieldValues):
916936
valid_inputs = {
917937
'0.12345': Decimal('0.12345'),

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy