116 lines
3.6 KiB
Python
116 lines
3.6 KiB
Python
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
|