added new module 'message.py'
This commit is contained in:
parent
604e5ccf73
commit
c76bd273e6
55
chatmastermind/message.py
Normal file
55
chatmastermind/message.py
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user