ValueErrors now wrapped in RangeExceptions

This commit is contained in:
Konsta Vesterinen
2013-03-26 15:50:29 +02:00
parent 1aecfe1f83
commit ffda0eac51
4 changed files with 28 additions and 8 deletions

View File

@@ -4,6 +4,12 @@ Changelog
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)
^^^^^^^^^^^^^^^^^^

View File

@@ -24,7 +24,7 @@ class PyTest(Command):
setup(
name='SQLAlchemy-Utils',
version='0.7.5',
version='0.7.6',
url='https://github.com/kvesteri/sqlalchemy-utils',
license='BSD',
author='Konsta Vesterinen',

View File

@@ -96,6 +96,10 @@ class NumberRangeType(types.TypeDecorator):
class NumberRangeException(Exception):
pass
class RangeBoundsException(NumberRangeException):
def __init__(self, min_value, max_value):
self.message = 'Min value %d is bigger than max value %d.' % (
min_value,
@@ -106,7 +110,7 @@ class NumberRangeException(Exception):
class NumberRange(object):
def __init__(self, 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.max_value = max_value
@@ -131,9 +135,12 @@ class NumberRange(object):
"""
if value is not None:
values = value[1:-1].split(',')
min_value, max_value = map(
lambda a: int(a.strip()), values
)
try:
min_value, max_value = map(
lambda a: int(a.strip()), values
)
except ValueError, e:
raise NumberRangeException(e.message)
if value[0] == '(':
min_value += 1
@@ -150,9 +157,12 @@ class NumberRange(object):
if len(values) == 1:
min_value = max_value = int(value.strip())
else:
min_value, max_value = map(
lambda a: int(a.strip()), values
)
try:
min_value, max_value = map(
lambda a: int(a.strip()), values
)
except ValueError, e:
raise NumberRangeException(e.message)
return cls(min_value, max_value)
@property

View File

@@ -46,6 +46,10 @@ class TestNumberRange(object):
assert number_range.min_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):
assert str(NumberRange.from_normalized_str('[1,2]')) == '1 - 2'
assert str(NumberRange.from_normalized_str('[1,3)')) == '1 - 2'