Include tests from PR, fixes #105.

This commit is contained in:
Friedrich Lindenberg 2015-05-21 16:47:36 +02:00
commit d3473fc4a6
3 changed files with 29 additions and 20 deletions

View File

@ -8,15 +8,7 @@ from dataset.freeze.format.common import Serializer
def value_to_str(value): def value_to_str(value):
if isinstance(value, datetime): if isinstance(value, (date, datetime)):
#
# FIXME: this check does not work for values returned from a db query!
# As a workaround, we make sure, the isoformat call returns the regular
# str representation.
#
sep = ' ' if PY3 else str(' ')
return text_type(value.isoformat(sep=sep))
if isinstance(value, date):
return text_type(value.isoformat()) return text_type(value.isoformat())
if not PY3 and hasattr(value, 'encode'): if not PY3 and hasattr(value, 'encode'):
return value.encode('utf-8') return value.encode('utf-8')

View File

@ -34,7 +34,8 @@ setup(
'sqlalchemy >= 0.9.1', 'sqlalchemy >= 0.9.1',
'alembic >= 0.6.2', 'alembic >= 0.6.2',
'python-slugify >= 0.0.6', 'python-slugify >= 0.0.6',
"PyYAML >= 3.10" "PyYAML >= 3.10",
"six >= 1.7.3"
] + py26_dependency, ] + py26_dependency,
tests_require=[], tests_require=[],
test_suite='test', test_suite='test',

View File

@ -9,6 +9,8 @@ from shutil import rmtree
from six import PY3, text_type, binary_type from six import PY3, text_type, binary_type
from dataset import connect from dataset import connect
from dataset.freeze.app import freeze
from dataset.freeze.format.fcsv import value_to_str
from .sample_data import TEST_DATA from .sample_data import TEST_DATA
@ -26,18 +28,16 @@ class FreezeTestCase(unittest.TestCase):
rmtree(self.d, ignore_errors=True) rmtree(self.d, ignore_errors=True)
def test_freeze(self): def test_freeze(self):
from dataset.freeze.app import freeze freeze(self.tbl.all(), format='csv',
filename='wäther.csv'.encode('utf8'), prefix=self.d)
freeze(self.db['weather'].all(), format='csv', filename='wäther.csv'.encode('utf8'), prefix=self.d)
self.assertTrue(os.path.exists(os.path.join(self.d, 'wäther.csv'))) self.assertTrue(os.path.exists(os.path.join(self.d, 'wäther.csv')))
freeze(self.db['weather'].all(), format='csv', filename='wäther.csv', prefix=self.d) freeze(self.tbl.all(), format='csv',
filename='wäther.csv', prefix=self.d)
self.assertTrue(os.path.exists(os.path.join(self.d, 'wäther.csv'))) self.assertTrue(os.path.exists(os.path.join(self.d, 'wäther.csv')))
def test_freeze_csv(self): def test_freeze_csv(self):
from dataset.freeze.app import freeze freeze(self.tbl.all(), format='csv',
from dataset.freeze.format.fcsv import value_to_str filename='weather.csv', prefix=self.d)
freeze(self.db['weather'].all(), format='csv', filename='weather.csv', prefix=self.d)
path = os.path.join(self.d, 'weather.csv') path = os.path.join(self.d, 'weather.csv')
if PY3: if PY3:
fh = open(path, 'rt', encoding='utf8', newline='') fh = open(path, 'rt', encoding='utf8', newline='')
@ -46,8 +46,6 @@ class FreezeTestCase(unittest.TestCase):
try: try:
rows = list(reader(fh)) rows = list(reader(fh))
keys = rows[0] keys = rows[0]
if not PY3:
keys = [k.decode('utf8') for k in keys]
for i, d1 in enumerate(TEST_DATA): for i, d1 in enumerate(TEST_DATA):
d2 = dict(zip(keys, rows[i + 1])) d2 = dict(zip(keys, rows[i + 1]))
for k in d1.keys(): for k in d1.keys():
@ -66,6 +64,7 @@ class FreezeTestCase(unittest.TestCase):
class SerializerTestCase(unittest.TestCase): class SerializerTestCase(unittest.TestCase):
def test_Serializer(self): def test_Serializer(self):
from dataset.freeze.format.common import Serializer from dataset.freeze.format.common import Serializer
from dataset.freeze.config import Export from dataset.freeze.config import Export
@ -78,3 +77,20 @@ class SerializerTestCase(unittest.TestCase):
s.wrap s.wrap
s = Serializer(Export({'filename': '-'}, {}), '') s = Serializer(Export({'filename': '-'}, {}), '')
self.assertTrue(s.fileobj) self.assertTrue(s.fileobj)
def test_value_to_str1(self):
assert '2011-01-01T00:00:00' == value_to_str(TEST_DATA[0]['date']), \
value_to_str(TEST_DATA[0]['date'])
def test_value_to_str2(self):
if PY3:
assert 'hóla' == value_to_str('\u0068\u00f3\u006c\u0061')
else:
assert u'hóla'.encode('utf-8') == value_to_str(u'\u0068\u00f3\u006c\u0061'), \
[value_to_str(u'\u0068\u00f3\u006c\u0061')]
def test_value_to_str3(self):
assert '' == value_to_str(None)
def test_value_to_str4(self):
assert [] == value_to_str([])