decoder.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from .message import message
  2. from .message_builder import message_builder
  3. from .message_step_builder import message_step_builder
  4. from .protocol import protocol
  5. class decoder(protocol):
  6. def __init__(self, content: str) -> None:
  7. self.__content = content
  8. self.__builder = message_step_builder()
  9. def process(self) -> object:
  10. if self.__content is None:
  11. return self
  12. for line in self._lines:
  13. self.__parse_line(line)
  14. self.__content = None
  15. return self
  16. def result(self) -> message:
  17. if self.__content is not None:
  18. self.process()
  19. return self._builder.build()
  20. @property
  21. def _lines(self) -> str:
  22. return self.__content.split(self._line_separator)
  23. @property
  24. def _builder(self) -> message_step_builder:
  25. return self.__builder
  26. def __parse_line(self, line: str) -> None:
  27. line = line.strip()
  28. if self.__is_section(line):
  29. self.__parse_section(line)
  30. return
  31. self.__parse_key_value(line)
  32. def __is_section(self, line: str) -> bool:
  33. if len(line) < 1:
  34. return False
  35. return line[0] == self._section_buckles[0]
  36. def __parse_key_value(self, line: str) -> None:
  37. position = line.find("=")
  38. if position == -1:
  39. return
  40. key = line[:position].strip()
  41. position = position + 1
  42. value = line[position:].strip()
  43. self._builder.add(key, value)
  44. def __parse_section(self, line: str) -> None:
  45. for char in self._section_buckles:
  46. line = line.replace(char, "")
  47. self._builder.change_section(line)