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)
예제 #2
0
 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)
예제 #5
0
 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()
예제 #11
0
 def parse_problem(self, problem_content):
     return Problem.parse_problem(problem_content)
예제 #12
0
 def __init__(self, task, problemid, content, translations=None):
     Problem.__init__(self, task, problemid, content, translations)
     self._answer = str(content.get("answer", ""))
예제 #13
0
 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", ""))
예제 #14
0
    def get_text_fields(cls):
        textFields = Problem.get_text_fields()

        textFields["text"] = True

        return textFields
예제 #15
0
 def get_text_fields(cls):
     fields = Problem.get_text_fields()
     fields.update({"header": True})
     return fields
예제 #16
0
 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", ""))