def __init__(self, task, problemid, content, translations=None): Problem.__init__(self, task, problemid, content, translations) self._boxes = [] self._box_types = {"input-text": InputBox, "input-decimal": InputBox, "input-integer": InputBox, "multiline": MultilineBox, "text": TextBox, "file": FileBox} if task.get_environment() is None: raise Exception("Environment undefined, but there is a problem with type=code or type=code-single-line") self._init_boxes(content)
def __init__(self, problemid, content, translations, taskfs): self._problemid = problemid self._trace = load_trace(taskfs, content.get('trace', ''), content.get('exclude', None)) self._hidden_fields = content.get('hide', {}) # The fields to be hidden self._redacted_fields = content.get('redact', {}) self._field_feedback = content.get('feedback', {}) self._header = content.get('header', '') self._shuffle = content.get('shuffle', False) self._shuffle_feedback = (content.get('shuffle-feedback') or '').strip() or 'The order of packets is incorrect' Problem.__init__(self, problemid, content, translations, taskfs)
def __init__(self, problemid, content, translations, taskfs): Problem.__init__(self, problemid, content, translations, taskfs) self._header = content['header'] if "header" in content else "" self._answers = list(content.get("answers", [])) or ( [content.get("answer", "")] if content.get("answer", "") else [] ) # retrocompat self._tolerance = content.get("tolerance", None) self._hints = content.get("hints", None) self._error_message = content.get("error_message", None) self._success_message = content.get("success_message", None) self._choices = content.get("choices", [])
def __init__(self, problemid, content, translations, taskfs): Problem.__init__(self, problemid, content, translations, taskfs) self._boxes = [] self._box_types = { "input-text": DisplayableInputBox, "input-decimal": DisplayableInputBox, "input-integer": DisplayableInputBox, "multiline": DisplayableMultilineBox, "text": DisplayableTextBox, "file": DisplayableFileBox } self._init_boxes(content)
def parse_problem(cls, problem_content): problem_content = Problem.parse_problem(problem_content) try: problem_content['exclude'] = load(problem_content['exclude']) or {} except ValueError as e: raise ValueError('Exclude fields does not contain valid YAML: %s' % e) try: problem_content['redact'] = load(problem_content['redact']) or {} except ValueError as e: raise ValueError('Redacted fields does not contain valid YAML: %s' % e) try: problem_content['hide'] = load(problem_content['hide']) or {} except ValueError as e: raise ValueError('Hide fields does not contain valid YAML: %s' % e) try: problem_content['feedback'] = load(problem_content['feedback']) or {} except ValueError as e: raise ValueError('Feedback does not contain valid YAML: %s' % e) problem_content['shuffle'] = problem_content.get('shuffle') == 'on' if problem_content.get('range', '').strip(): r = problem_content.get('range').strip() values = ('network', 'transport', 'application', 'network-transport', 'network-application', 'transport-application') if r not in values: raise ValueError('The network layers selected must be a value in ' + repr(values)) problem_content['range'] = r return problem_content
def parse_problem(cls, problem_content): problem_content = Problem.parse_problem(problem_content) if "tolerance" in problem_content: if problem_content["tolerance"]: problem_content["tolerance"] = float( problem_content["tolerance"]) else: del problem_content["tolerance"] if "choices" in problem_content: problem_content["choices"] = [ val for _, val in sorted(iter(problem_content["choices"].items()), key=lambda x: int(x[0])) if val["feedback"].strip() ] if "answers" in problem_content: problem_content["answers"] = [ val for _, val in problem_content["answers"].items() ] for message in ["error_message", "success_message"]: if message in problem_content and problem_content[message].strip( ) == "": del problem_content[message] return problem_content
def parse_problem(self, problem_content): problem_content = Problem.parse_problem(problem_content) try: problem_content["boxes"] = json.loads(problem_content["boxes"], object_pairs_hook=OrderedDict) except: raise Exception("Invalid JSON in boxes content") return problem_content
def __init__(self, problemid, content, translations, taskfs): Problem.__init__(self, problemid, content, translations, taskfs) self._header = content['header'] if "header" in content else "" self._answers = list(content.get("answers", [])) or ( [content.get("answer", "")] if content.get("answer", "") else [] ) # retrocompat self._tolerance = content.get("tolerance", None) self._hints = content.get("hints", None) self._error_message = content.get("error_message", None) self._success_message = content.get("success_message", None) self._choices = content.get("choices", []) self._comparison_type = content.get("comparison_type", "symbolic") self._use_log = content.get("use_log", False) self._use_trigo = content.get("use_trigo", False) self._use_complex = content.get("use_complex", False) self._error_message_visibility = content.get("error_msg_visibility", "always") self._error_msg_attempts = content.get("error_msg_attempts", 0) self._error_msg_visibility_start = content.get( "error_msg_visibility_start", "2000-01-01 00:00:00")
def parse_problem(cls, problem_content): problem_content = Problem.parse_problem(problem_content) if "error_msg_visibility_start" in problem_content and problem_content[ "error_msg_visibility"] == "hidden_until": if problem_content["error_msg_visibility_start"] == '': problem_content[ "error_msg_visibility_start"] = '2000-01-01 00:00:00' else: try: datetime.strptime( problem_content["error_msg_visibility_start"], '%Y-%m-%d %X') except ValueError: raise ValueError("Invalid date format") if "error_msg_attempts" in problem_content and problem_content[ "error_msg_visibility"] == "after_attempt" and problem_content[ "error_msg_attempts"] == '': problem_content["error_msg_attempts"] = 0 if "tolerance" in problem_content: if problem_content["tolerance"]: problem_content["tolerance"] = float( problem_content["tolerance"]) else: del problem_content["tolerance"] if "choices" in problem_content: problem_content["choices"] = [ val for _, val in sorted(iter(problem_content["choices"].items()), key=lambda x: int(x[0])) if val["feedback"].strip() ] if "answers" in problem_content: problem_content["answers"] = [ val for _, val in problem_content["answers"].items() ] for message in ["error_message", "success_message"]: if message in problem_content and problem_content[message].strip( ) == "": del problem_content[message] return problem_content
def get_text_fields(cls): return Problem.get_text_fields()
def parse_problem(self, problem_content): return Problem.parse_problem(problem_content)
def __init__(self, task, problemid, content, translations=None): Problem.__init__(self, task, problemid, content, translations) self._answer = str(content.get("answer", ""))
def __init__(self, problemid, content, translations, taskfs): Problem.__init__(self, problemid, content, translations, taskfs) self._header = content['header'] if "header" in content else "" self._answer = str(content.get("answer", ""))
def get_text_fields(cls): textFields = Problem.get_text_fields() textFields["text"] = True return textFields
def get_text_fields(cls): fields = Problem.get_text_fields() fields.update({"header": True}) return fields
def __init__(self, task, problemid, content, translations=None): Problem.__init__(self, task, problemid, content, translations) self._circuit = str(content.get("circuit", "")) self._input_cycle = str(content.get("input_cycle", "")) self._input_direct = str(content.get("input_direct", "")) self._input_reverse = str(content.get("input_reverse", ""))