From d17b916c09e6cbb0ee5b726c020be5e224750e5f Mon Sep 17 00:00:00 2001 From: Konsta Vesterinen Date: Tue, 26 Mar 2013 13:24:00 +0200 Subject: [PATCH] Added badly constructed range handling --- sqlalchemy_utils/__init__.py | 2 ++ sqlalchemy_utils/types.py | 10 ++++++++++ tests/test_number_range.py | 7 ++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/sqlalchemy_utils/__init__.py b/sqlalchemy_utils/__init__.py index d57bb63..d4e4ceb 100644 --- a/sqlalchemy_utils/__init__.py +++ b/sqlalchemy_utils/__init__.py @@ -6,6 +6,7 @@ from .types import ( PhoneNumber, PhoneNumberType, NumberRange, + NumberRangeException, NumberRangeRawType, NumberRangeType ) @@ -20,6 +21,7 @@ __all__ = ( InstrumentedList, Merger, NumberRange, + NumberRangeException, NumberRangeRawType, NumberRangeType, PhoneNumber, diff --git a/sqlalchemy_utils/types.py b/sqlalchemy_utils/types.py index a475837..a4dc2b3 100644 --- a/sqlalchemy_utils/types.py +++ b/sqlalchemy_utils/types.py @@ -90,8 +90,18 @@ class NumberRangeType(types.TypeDecorator): return NumberRange.from_normalized_str(value) +class NumberRangeException(Exception): + def __init__(self, min_value, max_value): + self.message = 'Min value %d is bigger than max value %d.' % ( + min_value, + max_value + ) + + class NumberRange(object): def __init__(self, min_value, max_value): + if min_value > max_value: + raise NumberRangeException(min_value, max_value) self.min_value = min_value self.max_value = max_value diff --git a/tests/test_number_range.py b/tests/test_number_range.py index cef0367..83eaa3f 100644 --- a/tests/test_number_range.py +++ b/tests/test_number_range.py @@ -1,5 +1,6 @@ import sqlalchemy as sa -from sqlalchemy_utils import NumberRangeType, NumberRange +from pytest import raises +from sqlalchemy_utils import NumberRangeType, NumberRange, NumberRangeException from tests import DatabaseTestCase @@ -34,3 +35,7 @@ class TestNumberRange(object): def test_str_representation(self): assert str(NumberRange(1, 3)) == '[1, 3]' + + def test_raises_exception_for_badly_constructed_range(self): + with raises(NumberRangeException): + NumberRange(3, 2)