| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from .template import template
- from .message import message
- from .message_builder import message_builder
- class builder_template(message_builder):
- def __init__(self, result_type: type) -> None:
- super().__init__()
- self.__required = set()
- self.__result_type = result_type
- def _import_template(self, target: template) -> None:
- default_keys = target.default_keys
- for key in default_keys:
- name = "set_" + key
- setattr(self, name, self._create_setter(key))
- for section in target.sections_names:
- for key in target.get_section_keys(section):
- name = "set_" + key
- if name in default_keys:
- name = "set_" + key + "_" + section
- setattr(self, name, self._create_setter(key, section))
-
- self.set_key("typename", target.typename)
- def __create_setter_name(self, key: str, section: str | None) -> str:
- if section is None:
- return "kn_" + key
-
- return "ks_" + key + section
- def _set_required_key(
- self,
- key: str,
- target: str,
- section: str | None
- ) -> object:
- name = self.__create_setter_name(key, section)
- if not name in self.__required:
- raise RuntimeError("Key " + key + " had been already set.")
- self.__required.remove(name)
- return self.set_key(key, target, section)
- def _create_setter(self, key: str, section: str | None = None) -> object:
- self.__required.add(self.__create_setter_name(key, section))
- return lambda target: self._set_required_key(key, target, section)
- def build(self) -> message:
- if len(self.__required) > 0:
- raise RuntimeError("One or more required keys are not set.")
- return super().build(help_type = self.__result_type)
|