|
|
@@ -0,0 +1,76 @@
|
|
|
+import types
|
|
|
+#from types import MappingProxyType
|
|
|
+
|
|
|
+class message:
|
|
|
+ def __init__(self, default: dict, sections: dict) -> None:
|
|
|
+ sections_proxy = dict()
|
|
|
+
|
|
|
+ for key, value in sections.items():
|
|
|
+ sections_proxy[key] = types.MappingProxyType(value)
|
|
|
+
|
|
|
+ self.__sections = types.MappingProxyType(sections_proxy
|
|
|
+ self.__default = types.MappingProxyType(default)
|
|
|
+
|
|
|
+ def get_key(self, key: str, section: str | None = None) -> str:
|
|
|
+ if section is None:
|
|
|
+ return self.get_from_default(key)
|
|
|
+
|
|
|
+ return self.get_from_section(section, key)
|
|
|
+
|
|
|
+ def get_from_default(self, key: str) -> any:
|
|
|
+ return self.__default[key]
|
|
|
+
|
|
|
+ def get_from_sections(self, section: str, key: str) -> any:
|
|
|
+ return self.__sections[section][key]
|
|
|
+
|
|
|
+ @property
|
|
|
+ def default(self) -> types.MappingProxyType:
|
|
|
+ return self.__default
|
|
|
+
|
|
|
+ @property
|
|
|
+ def sections(self) -> types.MappingProxyType:
|
|
|
+ return self.__sections
|
|
|
+
|
|
|
+class message_builder:
|
|
|
+ def __init__(self) -> None:
|
|
|
+ self.__sections = dict()
|
|
|
+ self.__default = dict()
|
|
|
+
|
|
|
+ def __add_section(self, section: str) -> object:
|
|
|
+ if not section in self.__content.keys():
|
|
|
+ selt.__sections[section] = dict()
|
|
|
+
|
|
|
+ def __set_section_key(self, section: str, key: str, value: str) -> None:
|
|
|
+ self.__sections[section][key] = value
|
|
|
+
|
|
|
+ def __set_default_key(self, key: str, value: str) -> None:
|
|
|
+ self.__default[key] = value
|
|
|
+
|
|
|
+ def set_key(
|
|
|
+ self,
|
|
|
+ key: str,
|
|
|
+ value: any,
|
|
|
+ section: str | None = None
|
|
|
+ ) -> object:
|
|
|
+ key = key.strip()
|
|
|
+ value = str(value).strip()
|
|
|
+
|
|
|
+ if len(key) == 0:
|
|
|
+ raise RuntimeError("Key nam can nob being empty.")
|
|
|
+
|
|
|
+ if section is None:
|
|
|
+ self.__set_default_key(key, value)
|
|
|
+ return self
|
|
|
+
|
|
|
+ section = section.strip()
|
|
|
+
|
|
|
+ if len(section) == 0:
|
|
|
+ raise RuntimeError("Section name can not being empty.")
|
|
|
+
|
|
|
+ self.__add_section(section)
|
|
|
+ self.__set_section_key(section, key, value)
|
|
|
+
|
|
|
+ return self
|
|
|
+
|
|
|
+ def build(self) -> message:
|
|
|
+ return message(self.__default, self.__sections)
|