100 lines
1.9 KiB
Python
100 lines
1.9 KiB
Python
import os
|
|
|
|
from typing import Generator, Tuple, IO
|
|
|
|
from ums.messages.message import Message
|
|
|
|
class Riddle(Message):
|
|
|
|
_ATTRIBUTES = { # * in name -> optional
|
|
"context" : str,
|
|
"question" : str,
|
|
"solution_before*" : str,
|
|
"review_before*" : str
|
|
}
|
|
_DEFAULTS = {}
|
|
|
|
|
|
class RiddleStatus(Message):
|
|
|
|
_ATTRIBUTES = { # * in name -> optional
|
|
"steps" : {
|
|
"extract" : bool,
|
|
"solve" : bool,
|
|
"validate" : bool
|
|
},
|
|
"trial" : int,
|
|
"solved" : bool
|
|
}
|
|
_DEFAULTS = {
|
|
"steps" : {
|
|
"extract" : True,
|
|
"solve" : True,
|
|
"validate" : True
|
|
},
|
|
"trial" : 0,
|
|
"solved" : False
|
|
}
|
|
|
|
class RiddleData(Message):
|
|
|
|
TYPE_TEXT = "text"
|
|
TYPE_IMAGE = "image"
|
|
TYPE_AUDIO = "audio"
|
|
|
|
DATA_TYPES = [
|
|
TYPE_IMAGE,
|
|
TYPE_TEXT,
|
|
TYPE_AUDIO
|
|
]
|
|
|
|
FILE_BASEPATH = '/ums-agenten/share'
|
|
|
|
_ATTRIBUTES = [
|
|
{
|
|
"type" : str,
|
|
"file_plain" : str,
|
|
"file_extracted*" : str
|
|
}
|
|
]
|
|
_DEFAULTS = []
|
|
|
|
def iterate(self,
|
|
yield_plain:bool=True, yield_extracted:bool=True,
|
|
file_pointer:bool=False
|
|
) -> Generator[Tuple[str, str|IO|None, str|IO|None], None, None]:
|
|
for item in self.items:
|
|
if item["type"] in self.DATA_TYPES:
|
|
|
|
f_e = None
|
|
if yield_extracted and "file_extracted" in item:
|
|
f_e_p = os.path.join(self.FILE_BASEPATH, item["file_extracted"])
|
|
if os.path.isfile(f_e_p):
|
|
f_e = open(f_e_p, 'r') if file_pointer else f_e_p
|
|
|
|
f_p = None
|
|
if yield_plain:
|
|
f_p_p = os.path.join(self.FILE_BASEPATH, item["file_plain"])
|
|
if os.path.isfile(f_p_p):
|
|
f_e = open(f_p_p, 'r') if file_pointer else f_p_p
|
|
|
|
yield item["type"], f_p, f_e
|
|
|
|
if hasattr(f_p, 'close'):
|
|
f_p.close()
|
|
if hasattr(f_e, 'close'):
|
|
f_e.close()
|
|
|
|
def __iter__(self):
|
|
yield from self.iterate()
|
|
|
|
class Solution(Message):
|
|
|
|
_ATTRIBUTES = {
|
|
"solution" : str,
|
|
"explanation" : str,
|
|
"used_data*" : "ums.messages.specials.RiddleData",
|
|
"review*" : str
|
|
}
|
|
_DEFAULTS = {}
|