message.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import types
  2. class message:
  3. def __init__(self, *args, **kwargs) -> None:
  4. if "clone_it" in kwargs:
  5. self.__from_clone(kwargs["clone_it"])
  6. return
  7. self.__from_dicts(args[0], args[1])
  8. def __from_clone(self, clone_it: object) -> None:
  9. self.__sections = clone_it.sections
  10. self.__default = clone_it.default
  11. def __from_dicts(self, default: dict, sections: dict) -> None:
  12. sections_proxy = dict()
  13. for key, value in sections.items():
  14. sections_proxy[key] = types.MappingProxyType(value)
  15. self.__sections = types.MappingProxyType(sections_proxy)
  16. self.__default = types.MappingProxyType(default)
  17. def get_key(self, key: str, section: str | None = None) -> str:
  18. if section is None:
  19. return self.get_from_default(key)
  20. return self.get_from_section(section, key)
  21. def key_exists(self, key: str, section: str | None = None) -> bool:
  22. if section is None:
  23. return key in self.default
  24. if not section in self.sections:
  25. return False
  26. return key in self.sections[section]
  27. def get_from_default(self, key: str) -> str:
  28. if not key in self.__default:
  29. raise KeyError("Not found key " + key + " in message.")
  30. return self.__default[key]
  31. def get_from_section(self, section: str, key: str) -> str:
  32. if not section in self.__sections:
  33. raise KeyError("Not found section " + section + " in message.")
  34. if not key in self.__sections[section]:
  35. raise KeyError( \
  36. "Not found key " \
  37. + key \
  38. + " in section " \
  39. + section \
  40. + " of message." \
  41. )
  42. return self.__sections[section][key]
  43. @property
  44. def default(self) -> types.MappingProxyType:
  45. return self.__default
  46. @property
  47. def sections(self) -> types.MappingProxyType:
  48. return self.__sections