Source code for config_resolver.handler.json

"""
Handler for JSON files
"""

from json import load, loads
from typing import Any, Dict, Optional

from packaging.version import Version

from .base import Handler

TJsonConfig = Dict[str, Any]


[docs]class JsonHandler(Handler[TJsonConfig]): """ A config-resolver handler capable of reading ".json" files. """ DEFAULT_FILENAME = "app.json"
[docs] @staticmethod def empty() -> TJsonConfig: return {}
[docs] @staticmethod def from_string(data: str) -> TJsonConfig: return loads(data) # type: ignore
[docs] @staticmethod def from_filename(filename: str) -> TJsonConfig: with open(filename) as fptr: output = load(fptr) return output # type: ignore
[docs] @staticmethod def get_version(config: TJsonConfig) -> Optional[Version]: if "meta" not in config or "version" not in config["meta"]: return None raw_value = config["meta"]["version"] parsed = Version(raw_value) return parsed
[docs] @staticmethod def update_from_file(config: TJsonConfig, filename: str) -> None: with open(filename) as fptr: new_data = load(fptr) config.update(new_data)