diff --git a/requirements.txt b/requirements.txt index beff915da..35fd4c044 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ aiohttp==3.7.2 async_timeout==3.0.1 +atomicwrites==1.4.0 attrs==20.3.0 brotlipy==0.7.0 cchardet==2.1.7 diff --git a/supervisor/utils/json.py b/supervisor/utils/json.py index 5c8e90347..60da3ceb8 100644 --- a/supervisor/utils/json.py +++ b/supervisor/utils/json.py @@ -4,6 +4,7 @@ import logging from pathlib import Path from typing import Any, Dict +from atomicwrites import atomic_write import voluptuous as vol from voluptuous.humanize import humanize_error @@ -17,7 +18,8 @@ _DEFAULT: Dict[str, Any] = {} def write_json_file(jsonfile: Path, data: Any) -> None: """Write a JSON file.""" try: - jsonfile.write_text(json.dumps(data, indent=2)) + with atomic_write(jsonfile, overwrite=True) as fp: + fp.write(json.dumps(data, indent=2)) jsonfile.chmod(0o600) except (OSError, ValueError, TypeError) as err: _LOGGER.error("Can't write %s: %s", jsonfile, err)