diff --git a/changelog/62983.added b/changelog/62983.added index 424011c7ac7..673c9f2239a 100644 --- a/changelog/62983.added +++ b/changelog/62983.added @@ -1 +1 @@ -Add environment file serializer +Add keyvalue serializer for environment files diff --git a/doc/ref/serializers/all/index.rst b/doc/ref/serializers/all/index.rst index bdf2f6ad1b0..730249e5ca3 100644 --- a/doc/ref/serializers/all/index.rst +++ b/doc/ref/serializers/all/index.rst @@ -11,8 +11,8 @@ serializer modules :template: autosummary.rst.tmpl configparser - envfile json + keyvalue msgpack plist python diff --git a/doc/ref/serializers/all/salt.serializers.envfile.rst b/doc/ref/serializers/all/salt.serializers.envfile.rst deleted file mode 100644 index 884d4c1b9a2..00000000000 --- a/doc/ref/serializers/all/salt.serializers.envfile.rst +++ /dev/null @@ -1,6 +0,0 @@ -salt.serializers.envfile -======================== - -.. automodule:: salt.serializers.envfile - :members: - diff --git a/doc/ref/serializers/all/salt.serializers.keyvalue.rst b/doc/ref/serializers/all/salt.serializers.keyvalue.rst new file mode 100644 index 00000000000..e8e1fc766f2 --- /dev/null +++ b/doc/ref/serializers/all/salt.serializers.keyvalue.rst @@ -0,0 +1,6 @@ +salt.serializers.keyvalue +========================= + +.. automodule:: salt.serializers.keyvalue + :members: + diff --git a/salt/serializers/envfile.py b/salt/serializers/keyvalue.py similarity index 80% rename from salt/serializers/envfile.py rename to salt/serializers/keyvalue.py index e48f90f0450..c83f05850b8 100644 --- a/salt/serializers/envfile.py +++ b/salt/serializers/keyvalue.py @@ -1,8 +1,31 @@ """ - salt.serializers.envfile - ~~~~~~~~~~~~~~~~~~~~~~~~ + salt.serializers.keyvalue + ~~~~~~~~~~~~~~~~~~~~~~~~~ - Implements environment file serializer. + Implements keyvalue serializer which can be used for serializing or + deserializing any file which defines keys and values separated by a common + set of characters, such environment files, which are in "KEY=value" format. + + A dataset such as: + + .. code-block:: yaml + + foo: bar + wang: chung + + or + + .. code-block:: yaml + + - [foo, bar] + - [wang, chung] + + can be represented as: + + .. code-block:: text + + foo=bar + wang=chung """ import salt.utils.platform diff --git a/tests/pytests/unit/serializers/test_serializers.py b/tests/pytests/unit/serializers/test_serializers.py index f5ebd0adc3a..653d65d7323 100644 --- a/tests/pytests/unit/serializers/test_serializers.py +++ b/tests/pytests/unit/serializers/test_serializers.py @@ -5,14 +5,15 @@ import pytest import yaml as _yaml import salt.serializers.configparser as configparser -import salt.serializers.envfile as envfile import salt.serializers.json as json +import salt.serializers.keyvalue as keyvalue import salt.serializers.msgpack as msgpack import salt.serializers.plist as plist import salt.serializers.python as python import salt.serializers.tomlmod as tomlmod import salt.serializers.yaml as yaml import salt.serializers.yamlex as yamlex +import salt.utils.platform from salt.serializers import SerializationError from salt.serializers.yaml import EncryptedString from salt.utils.odict import OrderedDict @@ -400,38 +401,42 @@ def test_serialize_binary_plist(): assert deserialized == data, deserialized -def test_serialize_envfile(): +def test_serialize_keyvalue(): data = {"foo": "bar baz"} - serialized = envfile.serialize(data) + serialized = keyvalue.serialize(data) assert serialized == "foo=bar baz", serialized - deserialized = envfile.deserialize(serialized) + deserialized = keyvalue.deserialize(serialized) assert deserialized == data, deserialized -def test_serialize_envfile_quoting(): +def test_serialize_keyvalue_quoting(): data = {"foo": "bar baz"} - serialized = envfile.serialize(data, quoting=True) + serialized = keyvalue.serialize(data, quoting=True) assert serialized == "foo='bar baz'", serialized - deserialized = envfile.deserialize(serialized, quoting=False) + deserialized = keyvalue.deserialize(serialized, quoting=False) assert deserialized == data, deserialized -def test_serialize_envfile_separator(): +def test_serialize_keyvalue_separator(): data = {"foo": "bar baz"} - serialized = envfile.serialize(data, separator=" = ") + serialized = keyvalue.serialize(data, separator=" = ") assert serialized == "foo = bar baz", serialized - deserialized = envfile.deserialize(serialized, separator=" = ") + deserialized = keyvalue.deserialize(serialized, separator=" = ") assert deserialized == data, deserialized -def test_serialize_envfile_list_of_lists(): +def test_serialize_keyvalue_list_of_lists(): + if salt.utils.platform.is_windows(): + linend = "\r\n" + else: + linend = "\n" data = [["foo", "bar baz"], ["salt", "rocks"]] expected = {"foo": "bar baz", "salt": "rocks"} - serialized = envfile.serialize(data) - assert serialized == "foo=bar baz\nsalt=rocks", serialized + serialized = keyvalue.serialize(data) + assert serialized == f"foo=bar baz{linend}salt=rocks", serialized - deserialized = envfile.deserialize(serialized) + deserialized = keyvalue.deserialize(serialized) assert deserialized == expected, deserialized