diff --git a/aspy/yaml/__init__.py b/aspy/yaml/__init__.py index c65e5d9..b97a815 100644 --- a/aspy/yaml/__init__.py +++ b/aspy/yaml/__init__.py @@ -2,10 +2,12 @@ from __future__ import absolute_import from __future__ import unicode_literals +import sys from collections import OrderedDict import yaml + MAP_TYPE = yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG @@ -30,6 +32,9 @@ class OrderedDumper(getattr(yaml, 'CSafeDumper', yaml.SafeDumper)): OrderedDumper.add_representer(OrderedDict, dump_map) +# in python3.6+, dicts have order by default +if sys.version_info >= (3, 6): # pragma: no cover (py36+) + OrderedDumper.add_representer(dict, dump_map) def ordered_load(stream): diff --git a/tests/yaml_test.py b/tests/yaml_test.py index 97b7785..894de68 100644 --- a/tests/yaml_test.py +++ b/tests/yaml_test.py @@ -1,7 +1,10 @@ from __future__ import absolute_import from __future__ import unicode_literals +import sys + import aspy.yaml +import pytest def test_ordered_load(): @@ -47,3 +50,15 @@ def test_ordered_dump(): 'b: harp\n' 'd: darp\n' ) + + +@pytest.mark.xfail(sys.version_info < (3, 6), reason='py36+') +def test_ordered_dump_plain_dict_py36_plus(): + ret = aspy.yaml.ordered_dump({'z': 1, 'a': 2, 'c': 3, 'b': 4, 'd': -1}) + assert ret == ( + 'z: 1\n' + 'a: 2\n' + 'c: 3\n' + 'b: 4\n' + 'd: -1\n' + )