Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 14 additions & 20 deletions cmscontrib/loaders/italy_yaml.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,6 @@
logger = logging.getLogger(__name__)


# Patch PyYAML to make it load all strings as unicode instead of str
# (see http://stackoverflow.com/questions/2890146).
def construct_yaml_str(self, node):
return self.construct_scalar(node)


yaml.Loader.add_constructor("tag:yaml.org,2002:str", construct_yaml_str)
yaml.SafeLoader.add_constructor("tag:yaml.org,2002:str", construct_yaml_str)


def getmtime(fname):
return os.stat(fname).st_mtime

Expand Down Expand Up @@ -605,7 +595,7 @@ def get_task(self, get_statement=True) -> Task | None:
stubs = True

if graders and stubs:
logger.fatal("Task contains both sol/grader and sol/stub")
logger.critical("Task contains both sol/grader and sol/stub")
return None
elif graders:
# Read grader for each language
Expand Down Expand Up @@ -766,13 +756,7 @@ def get_task(self, get_statement=True) -> Task | None:
args["score_type_parameters"] = input_value

# If output_only is set, then the task type is OutputOnly
if conf.get('output_only', False):
args["task_type"] = "OutputOnly"
args["time_limit"] = None
args["memory_limit"] = None
args["task_type_parameters"] = [evaluation_param]
task.submission_format = \
["output_%03d.txt" % i for i in range(n_input)]
output_only = bool(conf.get('output_only', False))

# If there is check/controller (or equivalent), then the task
# type is Interactive
Expand All @@ -792,8 +776,9 @@ def get_task(self, get_statement=True) -> Task | None:
manager_path = path
break

if controller_path is not None and manager_path is not None:
logger.fatal("Cannot have both a manager and a controller")
if sum((controller_path is not None, manager_path is not None, output_only)) > 1:
logger.critical("Can have at most one of manager, controller, and output_only")
sys.exit(1)

if controller_path is not None:
args["task_type"] = "Interactive"
Expand All @@ -812,6 +797,7 @@ def get_task(self, get_statement=True) -> Task | None:
controller_path,
"Controller for task %s" % task.name)
args["managers"] += [Manager("controller", digest)]

elif manager_path is not None:
num_processes = load(conf, None, "num_processes")
if num_processes is None:
Expand All @@ -832,6 +818,14 @@ def get_task(self, get_statement=True) -> Task | None:
manager_path,
"Manager for task %s" % task.name)
args["managers"] += [Manager("manager", digest)]

elif output_only:
args["task_type"] = "OutputOnly"
args["time_limit"] = None
args["memory_limit"] = None
args["task_type_parameters"] = [evaluation_param]
task.submission_format = ["output_%03d.txt" % i for i in range(n_input)]

else:
# Otherwise, the task type is Batch or BatchAndOutput
args["task_type"] = "Batch"
Expand Down
Loading