Python3 Migrate
This commit is contained in:
59
venv/lib/python3.7/site-packages/mopidy/internal/storage.py
Normal file
59
venv/lib/python3.7/site-packages/mopidy/internal/storage.py
Normal file
@@ -0,0 +1,59 @@
|
||||
import gzip
|
||||
import json
|
||||
import logging
|
||||
import pathlib
|
||||
import tempfile
|
||||
|
||||
from mopidy import models
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def load(path):
|
||||
"""
|
||||
Deserialize data from file.
|
||||
|
||||
:param path: full path to import file
|
||||
:type path: pathlib.Path
|
||||
:return: deserialized data
|
||||
:rtype: dict
|
||||
"""
|
||||
|
||||
# TODO: raise an exception in case of error?
|
||||
if not path.is_file():
|
||||
logger.info("File does not exist: %s", path)
|
||||
return {}
|
||||
try:
|
||||
with gzip.open(str(path), "rb") as fp:
|
||||
return json.load(fp, object_hook=models.model_json_decoder)
|
||||
except (OSError, ValueError) as exc:
|
||||
logger.warning(f"Loading JSON failed: {exc}")
|
||||
return {}
|
||||
|
||||
|
||||
def dump(path, data):
|
||||
"""
|
||||
Serialize data to file.
|
||||
|
||||
:param path: full path to export file
|
||||
:type path: pathlib.Path
|
||||
:param data: dictionary containing data to save
|
||||
:type data: dict
|
||||
"""
|
||||
|
||||
# TODO: cleanup directory/basename.* files.
|
||||
tmp = tempfile.NamedTemporaryFile(
|
||||
prefix=path.name + ".", dir=str(path.parent), delete=False
|
||||
)
|
||||
tmp_path = pathlib.Path(tmp.name)
|
||||
|
||||
try:
|
||||
data_string = json.dumps(
|
||||
data, cls=models.ModelJSONEncoder, indent=2, separators=(",", ": ")
|
||||
)
|
||||
with gzip.GzipFile(fileobj=tmp, mode="wb") as fp:
|
||||
fp.write(data_string.encode())
|
||||
tmp_path.rename(path)
|
||||
finally:
|
||||
if tmp_path.exists():
|
||||
tmp_path.unlink()
|
||||
Reference in New Issue
Block a user