fix test_formatter
This commit is contained in:
parent
14ecef649e
commit
c818001b5c
14 changed files with 961 additions and 0 deletions
116
judge/views/test_formatter/tf_logic.py
Normal file
116
judge/views/test_formatter/tf_logic.py
Normal file
|
@ -0,0 +1,116 @@
|
|||
import os
|
||||
from judge.views.test_formatter import test_formatter as tf
|
||||
from judge.views.test_formatter import tf_pattern as pattern
|
||||
|
||||
|
||||
class TestSuite:
|
||||
def __init__(
|
||||
self,
|
||||
file_id: str,
|
||||
pattern_pair: pattern.PatternPair,
|
||||
test_id_list: list,
|
||||
extra_files: list,
|
||||
):
|
||||
self.file_id = file_id
|
||||
self.pattern_pair = pattern_pair
|
||||
self.test_id_list = test_id_list
|
||||
self.extra_files = extra_files
|
||||
|
||||
@classmethod
|
||||
def get_test_suite(cls, file_name: str, inp_format: str, out_format: str):
|
||||
pattern_pair = pattern.PatternPair.from_string_pair(inp_format, out_format)
|
||||
names = tf.get_names_in_archive(file_name)
|
||||
test_id_list, extra_files = pattern_pair.matches(
|
||||
names, returns="test_id_with_extra_files"
|
||||
)
|
||||
return cls(file_name, pattern_pair, test_id_list, extra_files)
|
||||
|
||||
def get_name_list(self, add_extra_info=False):
|
||||
important_files = []
|
||||
|
||||
for index, t in enumerate(self.test_id_list):
|
||||
inp_name = self.pattern_pair.x.get_name(t, index=index, use_index=True)
|
||||
out_name = self.pattern_pair.y.get_name(t, index=index, use_index=True)
|
||||
important_files.extend([inp_name, out_name])
|
||||
|
||||
result = []
|
||||
|
||||
for name in important_files:
|
||||
if add_extra_info:
|
||||
result.append({"value": name, "is_extra_file": False})
|
||||
else:
|
||||
result.append(name)
|
||||
|
||||
for name in self.extra_files:
|
||||
if add_extra_info:
|
||||
result.append({"value": name, "is_extra_file": True})
|
||||
else:
|
||||
result.append(name)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def is_valid_file_type(file_name):
|
||||
_, ext = os.path.splitext(file_name)
|
||||
return ext in [".zip", ".ZIP"]
|
||||
|
||||
|
||||
def preview(params):
|
||||
bif = params["bef_inp_format"]
|
||||
bof = params["bef_out_format"]
|
||||
aif = params["aft_inp_format"]
|
||||
aof = params["aft_out_format"]
|
||||
file_str = params["file_str"]
|
||||
|
||||
try:
|
||||
test_suite = TestSuite.get_test_suite(file_str, bif, bof)
|
||||
bef_preview = test_suite.get_name_list(add_extra_info=True)
|
||||
try:
|
||||
test_suite.pattern_pair = pattern.PatternPair.from_string_pair(aif, aof)
|
||||
aft_preview = test_suite.get_name_list(add_extra_info=True)
|
||||
return {"bef_preview": bef_preview, "aft_preview": aft_preview}
|
||||
except:
|
||||
return {"bef_preview": bef_preview, "aft_preview": []}
|
||||
except:
|
||||
test_suite = TestSuite.get_test_suite(file_id, "*", "*")
|
||||
preview = test_suite.get_name_list(add_extra_info=True)
|
||||
return {"bef_preview": preview, "aft_preview": []}
|
||||
|
||||
|
||||
def convert(params):
|
||||
bif = params["bef_inp_format"]
|
||||
bof = params["bef_out_format"]
|
||||
aif = params["aft_inp_format"]
|
||||
aof = params["aft_out_format"]
|
||||
file_str = params["file_str"]
|
||||
file_name = params["file_name"]
|
||||
file_path = params["file_path"]
|
||||
|
||||
test_suite = TestSuite.get_test_suite(file_str, bif, bof)
|
||||
bef_preview = test_suite.get_name_list()
|
||||
test_suite.pattern_pair = pattern.PatternPair.from_string_pair(aif, aof)
|
||||
aft_preview = test_suite.get_name_list()
|
||||
|
||||
result = tf.get_renamed_archive(
|
||||
file_str, file_name, file_path, bef_preview, aft_preview
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
def prefill(params):
|
||||
file_str = params["file_str"]
|
||||
file_name = params["file_name"]
|
||||
|
||||
names = tf.get_names_in_archive(file_str)
|
||||
pattern_pair = pattern.find_best_pattern_pair(names)
|
||||
|
||||
return {
|
||||
"file_name": file_name,
|
||||
"inp_format": pattern_pair.x.to_string(),
|
||||
"out_format": pattern_pair.y.to_string(),
|
||||
}
|
||||
|
||||
|
||||
def preview_file(file_str):
|
||||
names = tf.get_names_in_archive(file_str)
|
||||
return names
|
Loading…
Add table
Add a link
Reference in a new issue