message.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import types
  2. #from types import MappingProxyType
  3. class message:
  4. def __init__(self, default: dict, sections: dict) -> None:
  5. sections_proxy = dict()
  6. for key, value in sections.items():
  7. sections_proxy[key] = types.MappingProxyType(value)
  8. self.__sections = types.MappingProxyType(sections_proxy
  9. self.__default = types.MappingProxyType(default)
  10. def get_key(self, key: str, section: str | None = None) -> str:
  11. if section is None:
  12. return self.get_from_default(key)
  13. return self.get_from_section(section, key)
  14. def get_from_default(self, key: str) -> any:
  15. return self.__default[key]
  16. def get_from_sections(self, section: str, key: str) -> any:
  17. return self.__sections[section][key]
  18. @property
  19. def default(self) -> types.MappingProxyType:
  20. return self.__default
  21. @property
  22. def sections(self) -> types.MappingProxyType:
  23. return self.__sections
  24. class message_builder:
  25. def __init__(self) -> None:
  26. self.__sections = dict()
  27. self.__default = dict()
  28. def __add_section(self, section: str) -> object:
  29. if not section in self.__content.keys():
  30. selt.__sections[section] = dict()
  31. def __set_section_key(self, section: str, key: str, value: str) -> None:
  32. self.__sections[section][key] = value
  33. def __set_default_key(self, key: str, value: str) -> None:
  34. self.__default[key] = value
  35. def set_key(
  36. self,
  37. key: str,
  38. value: any,
  39. section: str | None = None
  40. ) -> object:
  41. key = key.strip()
  42. value = str(value).strip()
  43. if len(key) == 0:
  44. raise RuntimeError("Key nam can nob being empty.")
  45. if section is None:
  46. self.__set_default_key(key, value)
  47. return self
  48. section = section.strip()
  49. if len(section) == 0:
  50. raise RuntimeError("Section name can not being empty.")
  51. self.__add_section(section)
  52. self.__set_section_key(section, key, value)
  53. return self
  54. def build(self) -> message:
  55. return message(self.__default, self.__sections)