Fix interval string handling
This commit is contained in:
2
setup.py
2
setup.py
@@ -39,7 +39,7 @@ extras_require = {
|
||||
'anyjson': ['anyjson>=0.3.3'],
|
||||
'babel': ['Babel>=1.3'],
|
||||
'arrow': ['arrow>=0.3.4'],
|
||||
'intervals': ['intervals>=0.2.4'],
|
||||
'intervals': ['intervals>=0.7.1'],
|
||||
'phone': ['phonenumbers>=5.9.2'],
|
||||
'password': ['passlib >= 1.6, < 2.0'],
|
||||
'color': ['colour>=0.0.4'],
|
||||
|
@@ -286,13 +286,17 @@ class RangeType(types.TypeDecorator, ScalarCoercible):
|
||||
return value
|
||||
|
||||
def process_result_value(self, value, dialect):
|
||||
if isinstance(value, six.string_types):
|
||||
factory_func = self.interval_class.from_string
|
||||
else:
|
||||
factory_func = self.interval_class
|
||||
if value is not None:
|
||||
if self.interval_class.step is not None:
|
||||
return self.canonicalize_result_value(
|
||||
self.interval_class(value, step=self.step)
|
||||
factory_func(value, step=self.step)
|
||||
)
|
||||
else:
|
||||
return self.interval_class(value, step=self.step)
|
||||
return factory_func(value, step=self.step)
|
||||
return value
|
||||
|
||||
def canonicalize_result_value(self, value):
|
||||
|
@@ -50,7 +50,7 @@ class NumberRangeTestCase(object):
|
||||
assert building.persons_at_night is None
|
||||
|
||||
def test_update_with_none(self, session, create_building):
|
||||
interval = intervals.IntInterval('(,)')
|
||||
interval = intervals.IntInterval([None, None])
|
||||
building = create_building(interval)
|
||||
building.persons_at_night = None
|
||||
assert building.persons_at_night is None
|
||||
@@ -61,7 +61,7 @@ class NumberRangeTestCase(object):
|
||||
'number_range',
|
||||
(
|
||||
[1, 3],
|
||||
'1 - 3',
|
||||
(0, 4),
|
||||
)
|
||||
)
|
||||
def test_save_number_range(self, create_building, number_range):
|
||||
@@ -94,10 +94,6 @@ class NumberRangeTestCase(object):
|
||||
building = session.query(Building).first()
|
||||
assert building.persons_at_night is None
|
||||
|
||||
def test_string_coercion(self, Building):
|
||||
building = Building(persons_at_night='[12, 18]')
|
||||
assert isinstance(building.persons_at_night, intervals.IntInterval)
|
||||
|
||||
def test_integer_coercion(self, Building):
|
||||
building = Building(persons_at_night=15)
|
||||
assert building.persons_at_night.lower == 15
|
||||
@@ -110,7 +106,6 @@ class TestIntRangeTypeOnPostgres(NumberRangeTestCase):
|
||||
'number_range',
|
||||
(
|
||||
[1, 3],
|
||||
'1 - 3',
|
||||
(0, 4)
|
||||
)
|
||||
)
|
||||
@@ -158,7 +153,6 @@ class TestIntRangeTypeOnPostgres(NumberRangeTestCase):
|
||||
'number_range',
|
||||
(
|
||||
[[1, 3]],
|
||||
['1 - 3'],
|
||||
[(0, 4)],
|
||||
)
|
||||
)
|
||||
@@ -180,7 +174,6 @@ class TestIntRangeTypeOnPostgres(NumberRangeTestCase):
|
||||
'number_range',
|
||||
(
|
||||
[1, 3],
|
||||
'1 - 3',
|
||||
(0, 4),
|
||||
)
|
||||
)
|
||||
@@ -202,7 +195,6 @@ class TestIntRangeTypeOnPostgres(NumberRangeTestCase):
|
||||
'number_range',
|
||||
(
|
||||
[1, 3],
|
||||
'1 - 3',
|
||||
(0, 4),
|
||||
)
|
||||
)
|
||||
@@ -224,7 +216,6 @@ class TestIntRangeTypeOnPostgres(NumberRangeTestCase):
|
||||
'number_range',
|
||||
(
|
||||
[1, 3],
|
||||
'1 - 3',
|
||||
(1, 3),
|
||||
2
|
||||
)
|
||||
@@ -247,7 +238,6 @@ class TestIntRangeTypeOnPostgres(NumberRangeTestCase):
|
||||
'number_range',
|
||||
(
|
||||
[1, 3],
|
||||
'1 - 3',
|
||||
(0, 8),
|
||||
(-inf, inf)
|
||||
)
|
||||
@@ -270,7 +260,6 @@ class TestIntRangeTypeOnPostgres(NumberRangeTestCase):
|
||||
'number_range',
|
||||
(
|
||||
[2, 5],
|
||||
'0 - 2',
|
||||
0
|
||||
)
|
||||
)
|
||||
@@ -303,7 +292,6 @@ class TestIntRangeTypeOnPostgres(NumberRangeTestCase):
|
||||
'number_range',
|
||||
(
|
||||
[1, 2],
|
||||
'1 - 3',
|
||||
(0, 4),
|
||||
[0, 3],
|
||||
0,
|
||||
|
@@ -51,7 +51,7 @@ class NumericRangeTestCase(object):
|
||||
'number_range',
|
||||
(
|
||||
[1, 3],
|
||||
'1 - 3',
|
||||
(1, 3)
|
||||
)
|
||||
)
|
||||
def test_save_number_range(self, create_car, number_range):
|
||||
@@ -84,10 +84,6 @@ class NumericRangeTestCase(object):
|
||||
car = session.query(Car).first()
|
||||
assert car.price_range is None
|
||||
|
||||
def test_string_coercion(self, Car):
|
||||
car = Car(price_range='[12, 18]')
|
||||
assert isinstance(car.price_range, intervals.DecimalInterval)
|
||||
|
||||
def test_integer_coercion(self, Car):
|
||||
car = Car(price_range=15)
|
||||
assert car.price_range.lower == 15
|
||||
@@ -124,7 +120,6 @@ class TestNumericRangeOnPostgres(NumericRangeTestCase):
|
||||
|
||||
@pytest.mark.skipif('intervals is None')
|
||||
class TestNumericRangeWithStep(object):
|
||||
|
||||
@pytest.fixture
|
||||
def Car(self, Base):
|
||||
class Car(Base):
|
||||
|
Reference in New Issue
Block a user