From f9c981ccf34e35c0a70528fa78b8983c5f63f176 Mon Sep 17 00:00:00 2001 From: Konsta Vesterinen Date: Thu, 31 Oct 2013 10:33:07 +0200 Subject: [PATCH] Added integer coercion for NumberRangeType --- CHANGES.rst | 1 + sqlalchemy_utils/types/number_range.py | 4 +++- tests/types/test_number_range.py | 7 ++++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index a9687a0..ceed25a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,6 +8,7 @@ Here you can see the full list of changes between each SQLAlchemy-Utils release. ^^^^^^^^^^^^^^^^^^^ - Added JSONType +- NumberRangeType now supports coercing of integer values 0.19.0 (2013-10-24) diff --git a/sqlalchemy_utils/types/number_range.py b/sqlalchemy_utils/types/number_range.py index cdfb648..f80837d 100644 --- a/sqlalchemy_utils/types/number_range.py +++ b/sqlalchemy_utils/types/number_range.py @@ -73,8 +73,10 @@ class NumberRangeType(types.TypeDecorator, ScalarCoercible): if value is not None and not isinstance(value, NumberRange): if isinstance(value, six.string_types): value = NumberRange.from_normalized_str(value) + elif isinstance(value, six.integer_types): + value = NumberRange(value, value) else: - raise TypeError + raise TypeError('Could not coerce value to NumberRange.') return value diff --git a/tests/types/test_number_range.py b/tests/types/test_number_range.py index 3e00d86..c413fb1 100644 --- a/tests/types/test_number_range.py +++ b/tests/types/test_number_range.py @@ -48,11 +48,16 @@ class TestNumberRangeType(TestCase): building = self.session.query(self.Building).first() assert building.persons_at_night is None - def test_scalar_attributes_get_coerced_to_objects(self): + def test_string_coercion(self): building = self.Building(persons_at_night='[12, 18]') assert isinstance(building.persons_at_night, NumberRange) + def test_integer_coercion(self): + building = self.Building(persons_at_night=15) + assert building.persons_at_night.min_value == 15 + assert building.persons_at_night.max_value == 15 + class TestNumberRange(object): def test_equality_operator(self):