Source code for wtforglib.files
"""Top-level module for wtforglib Library."""
import json
from pathlib import Path
from typing import Any
import yaml
from wtforglib.errors import raise_filenotfound
from wtforglib.kinds import Fspec, StrAnyDict
WRITE_YAML_DEPRECATED = (
"WARNING: write_yaml_file is deprecated and will be removed "
"in a future release. Use safe_write_yaml_file."
)
[docs]
def load_yaml_file(
file_spec: Fspec,
missing_ok: bool = True,
) -> StrAnyDict:
"""Loads a yaml file.
Parameters
----------
file_spec : Fspec
The yaml file to load
missing_ok : bool optional default True
When False and file does not exist raises FileNotFound exception
Returns
-------
StrAnyDict
Representing contents of file_spec
"""
yaml_path = Path(file_spec)
yaml_result = {}
if yaml_path.exists() and yaml_path.is_file():
with open(yaml_path, "r") as yaml_file:
yaml_result = yaml.safe_load(yaml_file)
elif not missing_ok: # pragma no cover
raise_filenotfound(yaml_path)
return yaml_result
[docs]
def safe_write_yaml_file( # type: ignore [explicit-any]
file_spec: Fspec, src_data: StrAnyDict, **kwargs: Any
) -> bool:
"""Writes src_data to a file in a yaml format.
Parameters
----------
file_spec : Fspec
The yaml filename to write to
src_data : StrAnyDict
The data to write to a file
kwargs : Optional
Args passed to yaml.safe_dump
Returns
-------
bool
True if file exists else False
"""
yaml_path = Path(file_spec)
with open(yaml_path, "w") as out_file:
yaml.safe_dump(src_data, out_file, **kwargs)
return yaml_path.exists()
[docs]
def write_yaml_file(
file_spec: Fspec,
src_data: StrAnyDict,
encoding: str = "utf-8",
) -> bool:
"""Writes src_data to a file in a yaml format.
Parameters
----------
file_spec : Fspec
The yaml filename to write to
src_data : StrAnyDict
The data to write to a file
encoding : str Optional
encoding default 'utf-8'
Returns
-------
bool
True if file exists else False
"""
print(WRITE_YAML_DEPRECATED) # noqa: WPS421
yaml_path = Path(file_spec)
with open(yaml_path, "w") as out_file:
yaml.dump(src_data, out_file, encoding=encoding)
return yaml_path.exists()
[docs]
def load_json_file(
file_spec: Fspec,
missing_ok: bool = True,
) -> StrAnyDict:
"""Loads a json file.
Parameters
----------
file_spec : Fspec
The yaml file to load
missing_ok : bool optional default True
When False and file does not exist raises FileNotFound exception
Returns
-------
StrAnyDict
Representing contents of file_spec
"""
jpath = Path(file_spec)
rtn: StrAnyDict = {}
if jpath.exists() and jpath.is_file():
with open(jpath, "r") as json_file:
rtn = json.load(json_file)
elif not missing_ok: # pragma no cover
raise_filenotfound(jpath)
return rtn
[docs]
def write_json_file(
file_spec: Fspec,
src_data: StrAnyDict,
indent: int = 2,
) -> bool:
"""Writes src_data to a file in a json format.
Parameters
----------
file_spec : Fspec
The json filename to write to
src_data : StrAnyDict
The data to write to a file
indent : int Optional
The number of spaces to indent
Returns
-------
bool
True if file exists else False
"""
jpath = Path(file_spec)
with open(jpath, "w") as out_file:
out_file.write(json.dumps(src_data, indent=indent))
return jpath.exists()