import json
from typing import Any, Dict, cast
from .object import MWDBObject
[docs]class MWDBConfig(MWDBObject):
URL_TYPE = "config"
TYPE = "static_config"
@property
def family(self) -> str:
"""
Configuration family
"""
if "family" not in self.data:
self._load()
return cast(str, self.data["family"])
@property
def type(self) -> str:
"""
Configuration type ('static' or 'dynamic')
"""
if "config_type" not in self.data:
self._load()
return cast(str, self.data["config_type"])
@property
def config_dict(self) -> Dict[str, Any]:
"""
Raw dict object with configuration
(in-blob keys are not mapped to :class:`MWDBBlob` objects)
"""
if "cfg" not in self.data:
self._load()
return cast(Dict[str, Any], self.data["cfg"])
def _map_blobs(self, config: Dict[str, Any]) -> Dict[str, Any]:
"""
Maps in-blob keys to MWDBBlob objects
"""
from .blob import MWDBBlob
return {
key: (
MWDBBlob(self.api, {"id": value["in-blob"]})
if isinstance(value, dict) and "in-blob" in value
else value
)
for key, value in config.items()
}
@property
def config(self) -> Dict[str, Any]:
"""
dict object with configuration. In-blob keys are mapped to MWDBBlob objects.
"""
return self._map_blobs(self.config_dict)
@property
def content(self) -> bytes:
"""
Returns raw dict object as JSON bytes
:rtype: bytes
"""
return json.dumps(self.config_dict, indent=4).encode()
@property
def cfg(self) -> Dict[str, Any]:
"""
Raw dict object with configuration
.. seealso:: :py:attr:`config_dict`
"""
return self.config
def __repr__(self) -> str:
return (
f"MWDBConfig(id={repr(self.id)}, family={repr(self.family)}, "
f"type={repr(self.type)})"
)