From 998a7122423ebf4ca01893e4a46904991e27c9d9 Mon Sep 17 00:00:00 2001 From: Paul Morelle Date: Mon, 18 Jan 2016 05:55:03 +0100 Subject: [PATCH] When wrap is False, don't wrap JSON result Test and solution for issue pudo/dataset#149 --- dataset/freeze/format/fjson.py | 2 +- test/test_freeze.py | 35 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/dataset/freeze/format/fjson.py b/dataset/freeze/format/fjson.py index 11a7714..fcd67d5 100644 --- a/dataset/freeze/format/fjson.py +++ b/dataset/freeze/format/fjson.py @@ -25,7 +25,7 @@ class JSONSerializer(Serializer): def wrap(self, result): if self.mode == 'item': result = result[0] - if self.wrap: + if self.export.get_bool('wrap'): result = { 'count': len(result), 'results': result diff --git a/test/test_freeze.py b/test/test_freeze.py index 09c8b98..73ba187 100644 --- a/test/test_freeze.py +++ b/test/test_freeze.py @@ -62,6 +62,41 @@ class FreezeTestCase(unittest.TestCase): finally: fh.close() + def test_freeze_json_no_wrap(self): + freeze(self.tbl.all(), format='json', + filename='weather.csv', prefix=self.d, wrap=False) + path = os.path.join(self.d, 'weather.csv') + if PY3: + fh = open(path, 'rt', encoding='utf8', newline='') + else: + fh = open(path, 'rU') + try: + import json + data = json.load(fh) + self.assertIsInstance(data, list, + 'Without wrapping, returned JSON should be a list') + finally: + fh.close() + + def test_freeze_json_wrap(self): + freeze(self.tbl.all(), format='json', + filename='weather.csv', prefix=self.d, wrap=True) + path = os.path.join(self.d, 'weather.csv') + if PY3: + fh = open(path, 'rt', encoding='utf8', newline='') + else: + fh = open(path, 'rU') + try: + import json + data = json.load(fh) + self.assertIsInstance(data, dict, + 'With wrapping, returned JSON should be a dict') + self.assertIn('results', data.keys()) + self.assertIn('count', data.keys()) + self.assertIn('meta', data.keys()) + finally: + fh.close() + class SerializerTestCase(unittest.TestCase):