|
|
@@ -1,67 +1,49 @@
|
|
|
-import types
|
|
|
+from .field import field
|
|
|
+from .message_coder import message_coder
|
|
|
+from .message_encoder import message_encoder
|
|
|
|
|
|
class message:
|
|
|
- def __init__(self, *args, **kwargs) -> None:
|
|
|
- if "clone_it" in kwargs:
|
|
|
- self.__from_clone(kwargs["clone_it"])
|
|
|
- return
|
|
|
+ _type = None
|
|
|
|
|
|
- self.__from_dicts(args[0], args[1])
|
|
|
+ def __init__(self) -> None:
|
|
|
+ self.__fields = list()
|
|
|
|
|
|
- def __from_clone(self, clone_it: object) -> None:
|
|
|
- self.__sections = clone_it.sections
|
|
|
- self.__default = clone_it.default
|
|
|
+ if self._type is None:
|
|
|
+ raise RuntimeError("Message type can not being None.")
|
|
|
|
|
|
- def __from_dicts(self, default: dict, sections: dict) -> None:
|
|
|
- sections_proxy = dict()
|
|
|
+ @classmethod
|
|
|
+ def get_type(cls) -> int:
|
|
|
+ return cls._type
|
|
|
|
|
|
- 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)
|
|
|
+ @property
|
|
|
+ def fields(self) -> tuple:
|
|
|
+ return tuple(self.__fields)
|
|
|
|
|
|
- return self.get_from_section(section, key)
|
|
|
+ def _add_field(self, target: field) -> None:
|
|
|
+ if target in self.__fields:
|
|
|
+ return
|
|
|
|
|
|
- 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
|
|
|
+ self.__fields.append(target)
|
|
|
|
|
|
- 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.")
|
|
|
+ title = target.title
|
|
|
+ setter = lambda content: target.set(content)
|
|
|
+ setter = lambda : target.get()
|
|
|
|
|
|
- return self.__default[key]
|
|
|
+ setattr(self, "set_" + title, setter)
|
|
|
+ setattr(self, "get_" + title, getter)
|
|
|
|
|
|
- def get_from_section(self, section: str, key: str) -> str:
|
|
|
- if not section in self.__sections:
|
|
|
- raise KeyError("Not found section " + section + " in message.")
|
|
|
+ @property
|
|
|
+ def size(self) -> int:
|
|
|
+ result = 0
|
|
|
|
|
|
- if not key in self.__sections[section]:
|
|
|
- raise KeyError( \
|
|
|
- "Not found key " \
|
|
|
- + key \
|
|
|
- + " in section " \
|
|
|
- + section \
|
|
|
- + " of message." \
|
|
|
- )
|
|
|
+ for count in self.__fields:
|
|
|
+ result += count.size
|
|
|
|
|
|
- return self.__sections[section][key]
|
|
|
+ return result
|
|
|
|
|
|
- @property
|
|
|
- def default(self) -> types.MappingProxyType:
|
|
|
- return self.__default
|
|
|
+ def __len__(self) -> int:
|
|
|
+ return self.size
|
|
|
|
|
|
- @property
|
|
|
- def sections(self) -> types.MappingProxyType:
|
|
|
- return self.__sections
|
|
|
+ def encoder(self) -> message_encoder:
|
|
|
+ return message_encoder(self)
|
|
|
|