Added badly constructed range handling
This commit is contained in:
@@ -6,6 +6,7 @@ from .types import (
|
|||||||
PhoneNumber,
|
PhoneNumber,
|
||||||
PhoneNumberType,
|
PhoneNumberType,
|
||||||
NumberRange,
|
NumberRange,
|
||||||
|
NumberRangeException,
|
||||||
NumberRangeRawType,
|
NumberRangeRawType,
|
||||||
NumberRangeType
|
NumberRangeType
|
||||||
)
|
)
|
||||||
@@ -20,6 +21,7 @@ __all__ = (
|
|||||||
InstrumentedList,
|
InstrumentedList,
|
||||||
Merger,
|
Merger,
|
||||||
NumberRange,
|
NumberRange,
|
||||||
|
NumberRangeException,
|
||||||
NumberRangeRawType,
|
NumberRangeRawType,
|
||||||
NumberRangeType,
|
NumberRangeType,
|
||||||
PhoneNumber,
|
PhoneNumber,
|
||||||
|
@@ -90,8 +90,18 @@ class NumberRangeType(types.TypeDecorator):
|
|||||||
return NumberRange.from_normalized_str(value)
|
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):
|
class NumberRange(object):
|
||||||
def __init__(self, min_value, max_value):
|
def __init__(self, min_value, max_value):
|
||||||
|
if min_value > max_value:
|
||||||
|
raise NumberRangeException(min_value, max_value)
|
||||||
self.min_value = min_value
|
self.min_value = min_value
|
||||||
self.max_value = max_value
|
self.max_value = max_value
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
import sqlalchemy as sa
|
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
|
from tests import DatabaseTestCase
|
||||||
|
|
||||||
|
|
||||||
@@ -34,3 +35,7 @@ class TestNumberRange(object):
|
|||||||
|
|
||||||
def test_str_representation(self):
|
def test_str_representation(self):
|
||||||
assert str(NumberRange(1, 3)) == '[1, 3]'
|
assert str(NumberRange(1, 3)) == '[1, 3]'
|
||||||
|
|
||||||
|
def test_raises_exception_for_badly_constructed_range(self):
|
||||||
|
with raises(NumberRangeException):
|
||||||
|
NumberRange(3, 2)
|
||||||
|
Reference in New Issue
Block a user