ValueErrors now wrapped in RangeExceptions
This commit is contained in:
@@ -4,6 +4,12 @@ Changelog
|
|||||||
Here you can see the full list of changes between each SQLAlchemy-Utils release.
|
Here you can see the full list of changes between each SQLAlchemy-Utils release.
|
||||||
|
|
||||||
|
|
||||||
|
0.7.6 (2013-03-26)
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- NumberRange now wraps ValueErrors as NumberRangeExceptions
|
||||||
|
|
||||||
|
|
||||||
0.7.5 (2013-03-26)
|
0.7.5 (2013-03-26)
|
||||||
^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
2
setup.py
2
setup.py
@@ -24,7 +24,7 @@ class PyTest(Command):
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='SQLAlchemy-Utils',
|
name='SQLAlchemy-Utils',
|
||||||
version='0.7.5',
|
version='0.7.6',
|
||||||
url='https://github.com/kvesteri/sqlalchemy-utils',
|
url='https://github.com/kvesteri/sqlalchemy-utils',
|
||||||
license='BSD',
|
license='BSD',
|
||||||
author='Konsta Vesterinen',
|
author='Konsta Vesterinen',
|
||||||
|
@@ -96,6 +96,10 @@ class NumberRangeType(types.TypeDecorator):
|
|||||||
|
|
||||||
|
|
||||||
class NumberRangeException(Exception):
|
class NumberRangeException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class RangeBoundsException(NumberRangeException):
|
||||||
def __init__(self, min_value, max_value):
|
def __init__(self, min_value, max_value):
|
||||||
self.message = 'Min value %d is bigger than max value %d.' % (
|
self.message = 'Min value %d is bigger than max value %d.' % (
|
||||||
min_value,
|
min_value,
|
||||||
@@ -106,7 +110,7 @@ class NumberRangeException(Exception):
|
|||||||
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:
|
if min_value > max_value:
|
||||||
raise NumberRangeException(min_value, max_value)
|
raise RangeBoundsException(min_value, max_value)
|
||||||
self.min_value = min_value
|
self.min_value = min_value
|
||||||
self.max_value = max_value
|
self.max_value = max_value
|
||||||
|
|
||||||
@@ -131,9 +135,12 @@ class NumberRange(object):
|
|||||||
"""
|
"""
|
||||||
if value is not None:
|
if value is not None:
|
||||||
values = value[1:-1].split(',')
|
values = value[1:-1].split(',')
|
||||||
min_value, max_value = map(
|
try:
|
||||||
lambda a: int(a.strip()), values
|
min_value, max_value = map(
|
||||||
)
|
lambda a: int(a.strip()), values
|
||||||
|
)
|
||||||
|
except ValueError, e:
|
||||||
|
raise NumberRangeException(e.message)
|
||||||
|
|
||||||
if value[0] == '(':
|
if value[0] == '(':
|
||||||
min_value += 1
|
min_value += 1
|
||||||
@@ -150,9 +157,12 @@ class NumberRange(object):
|
|||||||
if len(values) == 1:
|
if len(values) == 1:
|
||||||
min_value = max_value = int(value.strip())
|
min_value = max_value = int(value.strip())
|
||||||
else:
|
else:
|
||||||
min_value, max_value = map(
|
try:
|
||||||
lambda a: int(a.strip()), values
|
min_value, max_value = map(
|
||||||
)
|
lambda a: int(a.strip()), values
|
||||||
|
)
|
||||||
|
except ValueError, e:
|
||||||
|
raise NumberRangeException(e.message)
|
||||||
return cls(min_value, max_value)
|
return cls(min_value, max_value)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@@ -46,6 +46,10 @@ class TestNumberRange(object):
|
|||||||
assert number_range.min_value == 1
|
assert number_range.min_value == 1
|
||||||
assert number_range.max_value == 1
|
assert number_range.max_value == 1
|
||||||
|
|
||||||
|
def test_from_str_exception_handling(self):
|
||||||
|
with raises(NumberRangeException):
|
||||||
|
NumberRange.from_str('1 - ')
|
||||||
|
|
||||||
def test_from_normalized_str(self):
|
def test_from_normalized_str(self):
|
||||||
assert str(NumberRange.from_normalized_str('[1,2]')) == '1 - 2'
|
assert str(NumberRange.from_normalized_str('[1,2]')) == '1 - 2'
|
||||||
assert str(NumberRange.from_normalized_str('[1,3)')) == '1 - 2'
|
assert str(NumberRange.from_normalized_str('[1,3)')) == '1 - 2'
|
||||||
|
Reference in New Issue
Block a user