diff --git a/.gitignore b/.gitignore index 8efd63d..7450d94 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ docs/_build /.idea *.ropeproject *.swp +.venv diff --git a/HISTORY.rst b/HISTORY.rst index b30ddd0..332b639 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -3,6 +3,11 @@ History ------- +0.2.1 (2017-04-27) +~~~~~~~~~~~~~~~~~~ + +* Fixed bugs in ``RoundedDecimalField`` + 0.2.0 (2017-04-25) ~~~~~~~~~~~~~~~~~~ diff --git a/Makefile b/Makefile index 30e071c..cb3a613 100644 --- a/Makefile +++ b/Makefile @@ -52,11 +52,9 @@ test: python tests/manage.py test ${TEST_FLAGS} test-coverage: clean-test - -coverage run ${COVER_FLAGS} tests/manage.py test ${TEST_FLAGS} - @exit_code=$? - @-coverage report -m - @-coverage html - @exit ${exit_code} + coverage run ${COVER_FLAGS} tests/manage.py test ${TEST_FLAGS} + coverage report -m + coverage html test-all: tox diff --git a/drf_braces/__init__.py b/drf_braces/__init__.py index 85d65b7..b2ec3c0 100755 --- a/drf_braces/__init__.py +++ b/drf_braces/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals __author__ = 'Miroslav Shubernetskiy' __email__ = 'miroslav@miki725.com' -__version__ = '0.2.0' +__version__ = '0.2.1' diff --git a/drf_braces/fields/__init__.py b/drf_braces/fields/__init__.py index d9fc336..0cf2940 100644 --- a/drf_braces/fields/__init__.py +++ b/drf_braces/fields/__init__.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import, print_function, unicode_literals + from ._fields import * # noqa from .custom import * # noqa from .modified import * # noqa diff --git a/drf_braces/fields/_fields.py b/drf_braces/fields/_fields.py index 28059de..9047495 100644 --- a/drf_braces/fields/_fields.py +++ b/drf_braces/fields/_fields.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import inspect from rest_framework import fields diff --git a/drf_braces/fields/custom.py b/drf_braces/fields/custom.py index 35e0b9e..12f4b32 100644 --- a/drf_braces/fields/custom.py +++ b/drf_braces/fields/custom.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import inspect import pytz @@ -63,18 +63,15 @@ class NumericField(ValueAsTextFieldMixin, fields.IntegerField): } -__all__ = [name for name, value in locals().items() - if inspect.isclass(value) and issubclass(value, fields.Field)] - - class RoundedDecimalField(fields.DecimalField): """ Currency field subclass of Decimal used for rounding currencies to two decimal places. """ - def __init__(self, max_digits=100, decimal_places=2, *args, **kwargs): - super(fields.DecimalField, self).__init__( + def __init__(self, max_digits=None, decimal_places=2, *args, **kwargs): + max_digits = max_digits or self.MAX_STRING_LENGTH + super(RoundedDecimalField, self).__init__( max_digits=max_digits, decimal_places=decimal_places, *args, **kwargs @@ -85,3 +82,7 @@ def to_internal_value(self, data): def validate_precision(self, data): return data + + +__all__ = [name for name, value in locals().items() + if inspect.isclass(value) and issubclass(value, fields.Field)] diff --git a/drf_braces/fields/mixins.py b/drf_braces/fields/mixins.py index b4b901c..22f89f7 100644 --- a/drf_braces/fields/mixins.py +++ b/drf_braces/fields/mixins.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import six from rest_framework.fields import CharField, empty diff --git a/drf_braces/fields/modified.py b/drf_braces/fields/modified.py index 82f3919..9a04b04 100644 --- a/drf_braces/fields/modified.py +++ b/drf_braces/fields/modified.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import inspect from . import _fields as fields diff --git a/drf_braces/forms/fields.py b/drf_braces/forms/fields.py index 0964b79..b908ef0 100644 --- a/drf_braces/forms/fields.py +++ b/drf_braces/forms/fields.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import six from dateutil.parser import parse diff --git a/drf_braces/forms/serializer_form.py b/drf_braces/forms/serializer_form.py index 45d39cf..0b4e56c 100644 --- a/drf_braces/forms/serializer_form.py +++ b/drf_braces/forms/serializer_form.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import inspect import six diff --git a/drf_braces/mixins.py b/drf_braces/mixins.py index 079fc46..f5d90e5 100644 --- a/drf_braces/mixins.py +++ b/drf_braces/mixins.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals from .parsers import StrippingJSONParser diff --git a/drf_braces/parsers.py b/drf_braces/parsers.py index c8ff5d6..a3087cc 100644 --- a/drf_braces/parsers.py +++ b/drf_braces/parsers.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import json from collections import OrderedDict diff --git a/drf_braces/serializers/enforce_validation_serializer.py b/drf_braces/serializers/enforce_validation_serializer.py index d18ca86..bf2ead6 100644 --- a/drf_braces/serializers/enforce_validation_serializer.py +++ b/drf_braces/serializers/enforce_validation_serializer.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import inspect from rest_framework import fields, serializers diff --git a/drf_braces/serializers/form_serializer.py b/drf_braces/serializers/form_serializer.py index b8c0a64..4ce9511 100644 --- a/drf_braces/serializers/form_serializer.py +++ b/drf_braces/serializers/form_serializer.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals from collections import OrderedDict import six diff --git a/drf_braces/tests/fields/test_custom.py b/drf_braces/tests/fields/test_custom.py index f978c41..355010c 100644 --- a/drf_braces/tests/fields/test_custom.py +++ b/drf_braces/tests/fields/test_custom.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest from collections import OrderedDict from decimal import Decimal @@ -59,7 +59,7 @@ def test_to_internal_value(self): self.assertEqual(field.to_internal_value('haha'), 'haha') -class TestCurrencyField(unittest.TestCase): +class TestRoundedDecimalField(unittest.TestCase): def test_init(self): field = RoundedDecimalField() self.assertIsNotNone(field.max_digits) @@ -67,6 +67,19 @@ def test_init(self): def test_to_internal_value(self): field = RoundedDecimalField() + self.assertEqual(field.to_internal_value(5), Decimal('5')) + self.assertEqual(field.to_internal_value(5.2), Decimal('5.2')) + self.assertEqual(field.to_internal_value(5.23), Decimal('5.23')) + self.assertEqual(field.to_internal_value(5.2345), Decimal('5.23')) + self.assertEqual(field.to_internal_value(5.2356), Decimal('5.24')) + self.assertEqual(field.to_internal_value('5'), Decimal('5')) + self.assertEqual(field.to_internal_value('5.2'), Decimal('5.2')) + self.assertEqual(field.to_internal_value('5.23'), Decimal('5.23')) + self.assertEqual(field.to_internal_value('5.2345'), Decimal('5.23')) + self.assertEqual(field.to_internal_value('5.2356'), Decimal('5.24')) + self.assertEqual(field.to_internal_value(Decimal('5')), Decimal('5')) + self.assertEqual(field.to_internal_value(Decimal('5.2')), Decimal('5.2')) + self.assertEqual(field.to_internal_value(Decimal('5.23')), Decimal('5.23')) self.assertEqual(field.to_internal_value(Decimal('5.2345')), Decimal('5.23')) self.assertEqual(field.to_internal_value(Decimal('5.2356')), Decimal('5.24')) self.assertEqual(field.to_internal_value(Decimal('4.2399')), Decimal('4.24')) diff --git a/drf_braces/tests/fields/test_fields.py b/drf_braces/tests/fields/test_fields.py index eedafc7..0721578 100644 --- a/drf_braces/tests/fields/test_fields.py +++ b/drf_braces/tests/fields/test_fields.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest from drf_braces.fields import _fields diff --git a/drf_braces/tests/fields/test_mixins.py b/drf_braces/tests/fields/test_mixins.py index 4e2671c..7c64d62 100644 --- a/drf_braces/tests/fields/test_mixins.py +++ b/drf_braces/tests/fields/test_mixins.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest import mock diff --git a/drf_braces/tests/fields/test_modified.py b/drf_braces/tests/fields/test_modified.py index 8e5671d..09534cc 100644 --- a/drf_braces/tests/fields/test_modified.py +++ b/drf_braces/tests/fields/test_modified.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest from decimal import Decimal diff --git a/drf_braces/tests/forms/test_fields.py b/drf_braces/tests/forms/test_fields.py index 722771b..7905f92 100644 --- a/drf_braces/tests/forms/test_fields.py +++ b/drf_braces/tests/forms/test_fields.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest from datetime import datetime diff --git a/drf_braces/tests/forms/test_serializer_form.py b/drf_braces/tests/forms/test_serializer_form.py index 4cba54d..236f949 100644 --- a/drf_braces/tests/forms/test_serializer_form.py +++ b/drf_braces/tests/forms/test_serializer_form.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest from datetime import datetime diff --git a/drf_braces/tests/serializers/test_enforce_validation_serializer.py b/drf_braces/tests/serializers/test_enforce_validation_serializer.py index 9f92b5a..117d8f9 100644 --- a/drf_braces/tests/serializers/test_enforce_validation_serializer.py +++ b/drf_braces/tests/serializers/test_enforce_validation_serializer.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest import mock diff --git a/drf_braces/tests/serializers/test_form_serialzier.py b/drf_braces/tests/serializers/test_form_serialzier.py index c488803..e378e8b 100644 --- a/drf_braces/tests/serializers/test_form_serialzier.py +++ b/drf_braces/tests/serializers/test_form_serialzier.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest from collections import OrderedDict from datetime import datetime diff --git a/drf_braces/tests/test_mixins.py b/drf_braces/tests/test_mixins.py index 2c41db4..5745cf2 100644 --- a/drf_braces/tests/test_mixins.py +++ b/drf_braces/tests/test_mixins.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest import mock diff --git a/drf_braces/tests/test_parsers.py b/drf_braces/tests/test_parsers.py index cacf438..3db3fb1 100644 --- a/drf_braces/tests/test_parsers.py +++ b/drf_braces/tests/test_parsers.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import json import unittest from collections import OrderedDict diff --git a/drf_braces/tests/test_utils.py b/drf_braces/tests/test_utils.py index 1809e1e..7c72877 100644 --- a/drf_braces/tests/test_utils.py +++ b/drf_braces/tests/test_utils.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import unittest from rest_framework import fields diff --git a/drf_braces/utils.py b/drf_braces/utils.py index ced3b2c..0b49f97 100644 --- a/drf_braces/utils.py +++ b/drf_braces/utils.py @@ -1,4 +1,4 @@ -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import inspect import itertools diff --git a/tests/manage.py b/tests/manage.py index 2258a7f..ad8ebc8 100755 --- a/tests/manage.py +++ b/tests/manage.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import os import sys diff --git a/tests/settings.py b/tests/settings.py index 326aca1..551f226 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals import os import django diff --git a/tests/urls.py b/tests/urls.py index 0a48d4d..a8ab943 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from __future__ import print_function, unicode_literals +from __future__ import absolute_import, print_function, unicode_literals urlpatterns = [] diff --git a/tox.ini b/tox.ini index ccbfa17..4a0e897 100644 --- a/tox.ini +++ b/tox.ini @@ -5,7 +5,6 @@ envlist = [testenv] basepython = py27: python2.7 - py34: python3.4 py36: python3.6 pypy: pypy pypy3: pypy3