message.py 2.1 KB

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