diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e964156..8fc05df 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,12 +19,12 @@ strategy: matrix: - platform: ["ubuntu-latest"] + platform: ["ubuntu-20.04"] python-version: ["3.6", "3.7", "3.8"] steps: - - uses: "actions/checkout@v2" - - uses: "actions/setup-python@v2" + - uses: "actions/checkout@v3" + - uses: "actions/setup-python@v4" with: python-version: "${{ matrix.python-version }}" - name: "Install dependencies" @@ -44,8 +44,8 @@ runs-on: "ubuntu-latest" steps: - - uses: "actions/checkout@v2" - - uses: "actions/setup-python@v2" + - uses: "actions/checkout@v3" + - uses: "actions/setup-python@v4" with: python-version: "3.8" @@ -67,8 +67,8 @@ runs-on: "${{ matrix.os }}" steps: - - uses: "actions/checkout@v2" - - uses: "actions/setup-python@v2" + - uses: "actions/checkout@v3" + - uses: "actions/setup-python@v4" with: python-version: "3.8" - name: "Install in dev mode" diff --git a/rest_framework_yaml/encoders.py b/rest_framework_yaml/encoders.py index e9e0c5a..3646d59 100644 --- a/rest_framework_yaml/encoders.py +++ b/rest_framework_yaml/encoders.py @@ -48,7 +48,10 @@ def represent_mapping(self, tag, mapping, flow_style=None): if hasattr(mapping, "items"): mapping = list(mapping.items()) if not isinstance(mapping, OrderedDict): - mapping.sort() + try: + mapping.sort() + except TypeError: + pass for item_key, item_value in mapping: item_value = self._fix_value_before_representation(item_value) node_key = self.represent_data(item_key) diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 4d3c402..2a29e20 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -103,3 +103,16 @@ def test_proper_encoding(self): renderer = YAMLRenderer() content = renderer.render(obj, "application/yaml") self.assertEqual(content.strip(), _yaml_repr.encode("utf-8")) + + def test_render_none_type(self): + """ + Test YAML rendering with None type + """ + _yaml_repr = "foo:\n- bar\n- baz\nnull:\n- null\n" + + obj = {"foo": ["bar", "baz"], None: [None]} + + renderer = YAMLRenderer() + content = renderer.render(obj, "application/yaml") + + self.assertEqual(_yaml_repr, content.decode("utf-8"))