make dataset.freeze.config compatible with python3
This commit is contained in:
parent
4bf19159c6
commit
5b7908893d
@ -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
32
test/Freezefile.yaml
Normal 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
|
||||
|
||||
35
test/test_freeze_config.py
Normal file
35
test/test_freeze_config.py
Normal 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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user