From d7ad8fedc442c48e82dff3c0d36cd88d653c21bd Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Mon, 11 Jun 2018 22:46:09 -0400 Subject: [PATCH 1/2] Fixes #78 Now if a box object is given to dump, it will call `to_dict` on it before attempting to serialize it with `json` or `yaml`. This prevents random, interal box information from showing up. --- tests/yapconf_test.py | 27 +++++++++++++++++++++++++++ yapconf/__init__.py | 4 ++++ 2 files changed, 31 insertions(+) diff --git a/tests/yapconf_test.py b/tests/yapconf_test.py index 2820851..2bdba9c 100644 --- a/tests/yapconf_test.py +++ b/tests/yapconf_test.py @@ -2,6 +2,8 @@ import os import pytest +from box import Box +from mock import patch import yapconf @@ -111,6 +113,31 @@ def test_dump_data(tmpdir, data, file_type): assert data == yapconf.load_file(filename, file_type) +def test_dump_box(ascii_data): + data = {'writes': ''} + + def mock_write(x): + data['writes'] += x + + writes = [ + 'db:\n', + ' name: db_name\n', + ' port: 123\n', + 'foo: bar\n', + 'items:\n', + '- 1\n', + '- 2\n', + '- 3\n', + ] + + boxed_data = Box(ascii_data) + with patch('sys.stdout') as mock_stdout: + mock_stdout.write = mock_write + yapconf.dump_data(boxed_data, file_type='yaml') + + assert data['writes'] == ''.join(writes) + + @pytest.mark.parametrize('original,expected', [ ({}, {}), ({'foo': 'bar'}, {'foo': 'bar'}), diff --git a/yapconf/__init__.py b/yapconf/__init__.py index 41c60d3..ff8d0db 100644 --- a/yapconf/__init__.py +++ b/yapconf/__init__.py @@ -6,6 +6,7 @@ import sys import six +from box import Box if sys.version_info.major < 3: from io import open @@ -152,6 +153,9 @@ def _dump(data, stream, file_type, **kwargs): 'encoding': 'utf-8' } + if isinstance(data, Box): + data = data.to_dict() + if str(file_type).lower() == 'json': dumped = json.dumps(data, **kwargs) if isinstance(dumped, unicode): From e7efed6d7e6f29896054dabaeed34698d0304367 Mon Sep 17 00:00:00 2001 From: Logan Jones Date: Mon, 11 Jun 2018 22:47:33 -0400 Subject: [PATCH 2/2] Locked watchdog to major version. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 69866e6..a6f7ee9 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ requirements = [ 'six<2', 'python-box<4', - 'watchdog', + 'watchdog<1', ] extras = {