Fixed defer_except and NumberRange
This commit is contained in:
@@ -4,6 +4,13 @@ Changelog
|
||||
Here you can see the full list of changes between each SQLAlchemy-Utils release.
|
||||
|
||||
|
||||
0.7.5 (2013-03-26)
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
- Fixed defer_except
|
||||
- Better string representations for NumberRange
|
||||
|
||||
|
||||
0.7.4 (2013-03-26)
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
2
setup.py
2
setup.py
@@ -24,7 +24,7 @@ class PyTest(Command):
|
||||
|
||||
setup(
|
||||
name='SQLAlchemy-Utils',
|
||||
version='0.7.4',
|
||||
version='0.7.5',
|
||||
url='https://github.com/kvesteri/sqlalchemy-utils',
|
||||
license='BSD',
|
||||
author='Konsta Vesterinen',
|
||||
|
@@ -1,3 +1,4 @@
|
||||
from sqlalchemy.orm import defer
|
||||
from sqlalchemy.orm.mapper import Mapper
|
||||
from sqlalchemy.orm.query import _ColumnEntity
|
||||
from sqlalchemy.orm.properties import ColumnProperty
|
||||
|
@@ -88,7 +88,8 @@ class NumberRangeType(types.TypeDecorator):
|
||||
impl = NumberRangeRawType
|
||||
|
||||
def process_bind_param(self, value, dialect):
|
||||
return str(value)
|
||||
if value:
|
||||
return value.normalized
|
||||
|
||||
def process_result_value(self, value, dialect):
|
||||
return NumberRange.from_normalized_str(value)
|
||||
@@ -154,6 +155,10 @@ class NumberRange(object):
|
||||
)
|
||||
return cls(min_value, max_value)
|
||||
|
||||
@property
|
||||
def normalized(self):
|
||||
return '[%s, %s]' % (self.min_value, self.max_value)
|
||||
|
||||
def __eq__(self, other):
|
||||
try:
|
||||
return (
|
||||
@@ -167,7 +172,9 @@ class NumberRange(object):
|
||||
return 'NumberRange(%r, %r)' % (self.min_value, self.max_value)
|
||||
|
||||
def __str__(self):
|
||||
return '[%s, %s]' % (self.min_value, self.max_value)
|
||||
if self.min_value != self.max_value:
|
||||
return '%s - %s' % (self.min_value, self.max_value)
|
||||
return str(self.min_value)
|
||||
|
||||
def __add__(self, other):
|
||||
try:
|
||||
|
@@ -34,7 +34,8 @@ class TestNumberRange(object):
|
||||
assert NumberRange(1, 3) == NumberRange(1, 3)
|
||||
|
||||
def test_str_representation(self):
|
||||
assert str(NumberRange(1, 3)) == '[1, 3]'
|
||||
assert str(NumberRange(1, 3)) == '1 - 3'
|
||||
assert str(NumberRange(1, 1)) == '1'
|
||||
|
||||
def test_raises_exception_for_badly_constructed_range(self):
|
||||
with raises(NumberRangeException):
|
||||
@@ -46,6 +47,6 @@ class TestNumberRange(object):
|
||||
assert number_range.max_value == 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]'
|
||||
assert str(NumberRange.from_normalized_str('(1,3)')) == '[2, 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)')) == '2'
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy_utils import escape_like, sort_query
|
||||
from sqlalchemy_utils import escape_like, sort_query, defer_except
|
||||
from tests import TestCase
|
||||
|
||||
|
||||
@@ -8,6 +8,13 @@ class TestEscapeLike(TestCase):
|
||||
assert escape_like('_*%') == '*_***%'
|
||||
|
||||
|
||||
class TestDeferExcept(TestCase):
|
||||
def test_deferred_loads_all_columns_except_the_ones_given(self):
|
||||
query = self.session.query(self.Article)
|
||||
query = defer_except(query, ['id'])
|
||||
assert str(query) == 'SELECT article.id AS article_id \nFROM article'
|
||||
|
||||
|
||||
class TestSortQuery(TestCase):
|
||||
def test_without_sort_param_returns_the_query_object_untouched(self):
|
||||
query = self.session.query(self.Article)
|
||||
|
Reference in New Issue
Block a user