|
@@ -1,7 +1,18 @@
|
|
|
import types
|
|
import types
|
|
|
|
|
|
|
|
class message:
|
|
class message:
|
|
|
- def __init__(self, default: dict, sections: dict) -> None:
|
|
|
|
|
|
|
+ def __init__(self, *args, **kwargs) -> None:
|
|
|
|
|
+ if "clone_it" in kwargs:
|
|
|
|
|
+ self.__from_clone(kwargs["clone_it"])
|
|
|
|
|
+ return
|
|
|
|
|
+
|
|
|
|
|
+ self.__from_dicts(args[0], args[1])
|
|
|
|
|
+
|
|
|
|
|
+ def __from_clone(self, clone_it: object) -> None:
|
|
|
|
|
+ self.__sections = clone_it.sections
|
|
|
|
|
+ self.__default = clone_it.default
|
|
|
|
|
+
|
|
|
|
|
+ def __from_dicts(self, default: dict, sections: dict) -> None:
|
|
|
sections_proxy = dict()
|
|
sections_proxy = dict()
|
|
|
|
|
|
|
|
for key, value in sections.items():
|
|
for key, value in sections.items():
|
|
@@ -16,10 +27,34 @@ class message:
|
|
|
|
|
|
|
|
return self.get_from_section(section, key)
|
|
return self.get_from_section(section, key)
|
|
|
|
|
|
|
|
- def get_from_default(self, key: str) -> any:
|
|
|
|
|
|
|
+ def key_exists(self, key: str, section: str | None = None) -> bool:
|
|
|
|
|
+ if section is None:
|
|
|
|
|
+ return key in self.default
|
|
|
|
|
+
|
|
|
|
|
+ if not section in self.sections:
|
|
|
|
|
+ return False
|
|
|
|
|
+
|
|
|
|
|
+ return key in self.sections[section]
|
|
|
|
|
+
|
|
|
|
|
+ def get_from_default(self, key: str) -> str:
|
|
|
|
|
+ if not key in self.__default:
|
|
|
|
|
+ raise KeyError("Not found key " + key + " in message.")
|
|
|
|
|
+
|
|
|
return self.__default[key]
|
|
return self.__default[key]
|
|
|
|
|
|
|
|
- def get_from_section(self, section: str, key: str) -> any:
|
|
|
|
|
|
|
+ def get_from_section(self, section: str, key: str) -> str:
|
|
|
|
|
+ if not section in self.__sections:
|
|
|
|
|
+ raise KeyError("Not found section " + section + " in message.")
|
|
|
|
|
+
|
|
|
|
|
+ if not key in self.__sections[section]:
|
|
|
|
|
+ raise KeyError( \
|
|
|
|
|
+ "Not found key " \
|
|
|
|
|
+ + key \
|
|
|
|
|
+ + " in section " \
|
|
|
|
|
+ + section \
|
|
|
|
|
+ + " of message." \
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
return self.__sections[section][key]
|
|
return self.__sections[section][key]
|
|
|
|
|
|
|
|
@property
|
|
@property
|
|
@@ -30,46 +65,3 @@ class message:
|
|
|
def sections(self) -> types.MappingProxyType:
|
|
def sections(self) -> types.MappingProxyType:
|
|
|
return self.__sections
|
|
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.__sections.keys():
|
|
|
|
|
- self.__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: str,
|
|
|
|
|
- section: str | None = None
|
|
|
|
|
- ) -> object:
|
|
|
|
|
- key = key.strip()
|
|
|
|
|
- value = 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)
|
|
|