diff --git a/CHANGELOG.md b/CHANGELOG.md index 23fe8841..14b8b615 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.15.2 (2021-09-03) + +- Fixed `ValueError` when loading enum values from TOML files. + # 0.15.1 (2021-07-01) - Fixed handling of no file extension to use YAML by default. diff --git a/datafiles/formats.py b/datafiles/formats.py index 2a1e356e..42066f78 100644 --- a/datafiles/formats.py +++ b/datafiles/formats.py @@ -9,7 +9,7 @@ import log -from . import types +from . import types, utils _REGISTRY: Dict[str, type] = {} @@ -66,7 +66,7 @@ def extensions(cls): def deserialize(cls, file_object): import tomlkit - return tomlkit.loads(file_object.read()) + return utils.dictify(tomlkit.loads(file_object.read())) @classmethod def serialize(cls, data): diff --git a/pyproject.toml b/pyproject.toml index 626ec41d..58fbc64b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "datafiles" -version = "0.15.1" +version = "0.15.2" description = "File-based ORM for dataclasses." license = "MIT" diff --git a/tests/test_extended_converters.py b/tests/test_extended_converters.py index 7ffaf1dd..10a5afde 100644 --- a/tests/test_extended_converters.py +++ b/tests/test_extended_converters.py @@ -3,6 +3,8 @@ # pylint: disable=unused-variable +from enum import Enum + import pytest from datafiles import datafile @@ -111,3 +113,32 @@ def with_extra_newlines(sample, expect): sample.datafile.save() expect(sample.text) == "abc\ndef\n" + + +def describe_enum(): + def as_toml(expect): + class FileOutputType(Enum): + IN_MESSAGE = 1 + FILESYSTEM = 2 + + @datafile('../tmp/sample.toml') + class Sample: + path_type: FileOutputType = FileOutputType.IN_MESSAGE + + sample = Sample() + sample.path_type = FileOutputType.FILESYSTEM + + expect(read('tmp/sample.toml')) == dedent( + """ + path_type = 2 + """ + ) + + write( + 'tmp/sample.toml', + """ + path_type = 1 + """, + ) + + expect(sample.path_type) == FileOutputType.IN_MESSAGE