Exemplo n.º 1
0
def get_scenarios(experiment_file, validate=False, count=-1):
    scenarios = []
    names = []
    rc = []
    data = []

    proj_path = getattr(settings, "PROJECT_PATH", None)
    full_path = proj_path + experiment_file.url

    if zipfile.is_zipfile(experiment_file):
        exp_zip = zipfile.ZipFile(full_path)
        name_lst = exp_zip.namelist()

        for n in name_lst:
            if n.endswith(".xml"):
                if -1 < count <= len(scenarios):
                    break

                with exp_zip.open(n) as exp_file:
                    xml = exp_file.read()

                    if validate:
                        temp = json.loads(rest_validate(xml))

                    scenarios.append(xml)

                    if validate:
                        names.append(n)
                        rc.append("VALID" if (temp['result'] == 0) else "FAILED")
                        data.append(temp['om_output'])
    else:
        if experiment_file.url.endswith(".xml"):
            xml = experiment_file.read()
            temp = json.loads(rest_validate(xml))

            scenarios.append(xml)

            if validate:
                names.append(os.path.basename(experiment_file.url))
                rc.append("VALID" if (temp['result'] == 0) else "FAILED")
                data.append(temp['om_output'])

    if validate:
        return [scenarios, zip(names, rc, data)]

    return scenarios
Exemplo n.º 2
0
    def form_valid(self, form):
        xml = None

        if form.cleaned_data['choice'] == 'build':
            xml = BaselineScenario.objects.get(name='Default').xml
        elif form.cleaned_data['choice'] == 'list':
            xml = form.cleaned_data['list'].xml
        elif form.cleaned_data['choice'] == 'upload':
            xml_file = self.request.FILES['xml_file']

            validation_result = json.loads(rest_validate(xml_file))

            valid = True if (validation_result['result'] == 0) else False

            if not valid:
                self.kwargs['upload_error'] = 'Error: Invalid openmalaria simulation uploaded.'

                return super(ScenarioStartView, self).form_invalid(form)

            xml_file.seek(0)

            xml = xml_file.read()

        name = form.cleaned_data['name']
        desc = form.cleaned_data['desc'] if form.cleaned_data['desc'] != '' else None

        if name:
            try:
                tree = etree.parse(StringIO(str(xml)))
            except XMLSyntaxError:
                pass
            else:
                tree.getroot().set('name', name)
                xml = etree.tostring(tree.getroot(), encoding='UTF-8')

        scenario = Scenario.objects.create(xml=xml, user=self.request.user, description=desc)
        scenario.save()

        self.kwargs["scenario_id"] = scenario.id

        return super(ScenarioStartView, self).form_valid(form)
Exemplo n.º 3
0
    def form_valid(self, form):
        xml = None
        baseline = None

        if form.cleaned_data['choice'] == 'upload' or 'xml_file' in self.request.FILES:
            xml_file = self.request.FILES['xml_file']
            baseline = None
            xml = xml_file.read()
            validation_result = json.loads(rest_validate(xml))

            valid = True if (validation_result['result'] == 0) else False

            if not valid:
                self.kwargs['upload_error'] = 'Error: Invalid openmalaria simulation uploaded.'

                return super(ScenarioStartView, self).form_invalid(form)

        elif form.cleaned_data['choice'] == 'build':
            baseline = BaselineScenario.objects.get(name='Default')
            xml = baseline.xml
        elif form.cleaned_data['choice'] == 'list':
            baseline = form.cleaned_data['list']
            if not baseline:
                self.kwargs['upload_error'] = 'Error: Please specify baseline'
                return super(ScenarioStartView, self).form_invalid(form)

            xml = baseline.xml


        name = form.cleaned_data['name']
        desc = form.cleaned_data['desc'] if form.cleaned_data['desc'] != '' else None

        scenario = Scenario.objects.create(
            name=name, xml=xml, user=self.request.user, description=desc, baseline=baseline
        )
        scenario.save()

        self.kwargs["scenario_id"] = scenario.id

        return super(ScenarioStartView, self).form_valid(form)