added new module 'message.py'

This commit is contained in:
juk0de 2023-08-18 16:07:50 +02:00
parent 604e5ccf73
commit c76bd273e6

55
chatmastermind/message.py Normal file
View File

@ -0,0 +1,55 @@
"""
Module implementing message related functions and classes.
"""
from typing import Type, TypeVar
QuestionInst = TypeVar('QuestionInst', bound='Question')
class MessageError(Exception):
pass
def source_code(text: str, include_delims: bool = False) -> list[str]:
"""
Extracts all source code sections from the given text, i. e. all lines
surrounded by lines tarting with '```'. If 'include_delims' is True,
the surrounding lines are included, otherwise they are omitted. The
result list contains every source code section as a single string.
The order in the list represents the order of the sections in the text.
"""
code_sections: list[str] = []
code_lines: list[str] = []
in_code_block = False
print(text)
for line in text.split('\n'):
if line.strip().startswith("```"):
if include_delims:
code_lines.append(line)
if in_code_block:
code_sections.append("\n".join(code_lines))
code_lines.clear()
print(f" --> New code section:\n{code_sections}")
in_code_block = not in_code_block
elif in_code_block:
code_lines.append(line)
return code_sections
class Question(str):
"""
A single question with a defined prefix.
"""
prefix = '=== QUESTION ==='
def __new__(cls: Type[QuestionInst], string: str) -> QuestionInst:
"""
Make sure the question string does not contain the prefix.
"""
if cls.prefix in string:
raise MessageError(f"Question '{string}' contains the prefix '{cls.prefix}'")
instance = super().__new__(cls, string)
return instance