make dataset.freeze.config compatible with python3

This commit is contained in:
xrotwang 2014-11-06 11:08:07 +01:00
parent 4bf19159c6
commit 5b7908893d
3 changed files with 74 additions and 7 deletions

View File

@ -1,10 +1,7 @@
import json
import yaml
try:
str = unicode
except NameError:
pass
from six import text_type, PY3
from dataset.util import FreezeException
@ -33,6 +30,9 @@ class Configuration(object):
extension = file_name.rsplit('.', 1)[-1]
loader = DECODER.get(extension, json)
try:
if loader == json and PY3: # pragma: no cover
fh = open(file_name, encoding='utf8')
else:
fh = open(file_name, 'rb')
try:
self.data = loader.load(fh)
@ -40,7 +40,7 @@ class Configuration(object):
raise FreezeException("Invalid freeze file: %s" % ve)
fh.close()
except IOError as ioe:
raise FreezeException(str(ioe))
raise FreezeException(text_type(ioe))
@property
def exports(self):
@ -64,7 +64,7 @@ class Export(object):
def get_normalized(self, name, default=None):
value = self.get(name, default=default)
if value not in [None, default]:
value = str(value).lower().strip()
value = text_type(value).lower().strip()
return value
def get_bool(self, name, default=False):

32
test/Freezefile.yaml Normal file
View File

@ -0,0 +1,32 @@
common:
database: "postgresql://user:password@localhost/operational_database"
prefix: my_project/dumps/
format: json
nested:
property: "inner"
exports:
- query: "SELECT id, title, date FROM events"
filename: "index.json"
number: 5
bool: true
nested:
property: "override"
- query: "SELECT id, title, date, country FROM events"
filename: "countries/{{country}}.csv"
format: csv
- query: "SELECT * FROM events"
filename: "events/{{id}}.json"
mode: item
wrap: true
- query: "SELECT * FROM events"
filename: "all.json"
format: tabson

View File

@ -0,0 +1,35 @@
import os
import unittest
from dataset.util import FreezeException
class TestConfiguration(unittest.TestCase):
def test_init(self):
from dataset.freeze.config import Configuration
self.assertRaises(FreezeException, Configuration, 'x.x')
self.assertRaises(FreezeException, Configuration, __file__)
cfg = Configuration(os.path.join(os.path.dirname(__file__), 'Freezefile.yaml'))
def test_exports(self):
from dataset.freeze.config import Configuration
cfg = Configuration(os.path.join(os.path.dirname(__file__), 'Freezefile.yaml'))
exports = list(cfg.exports)
self.assertEqual(len(exports), 4)
self.assertFalse(exports[0].skip)
self.assertTrue(exports[0].get_bool('bool'))
self.assertEqual(exports[0].get_int('nan', 'default'), 'default')
self.assertEqual(exports[0].get_int('number'), 5)
self.assert_(exports[0].name)
def test_exports_fail(self):
from dataset.freeze.config import Configuration
cfg = Configuration(os.path.join(os.path.dirname(__file__), 'Freezefile.yaml'))
cfg.data = None
self.assertRaises(FreezeException, list, cfg.exports)
cfg.data = {}
self.assertRaises(FreezeException, list, cfg.exports)