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
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)
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)