def post(self, request, uuid): password = request.POST.get("password", None) if self.password_reset_code is None: raise PermissionDenied if self.account is None: raise PermissionDenied if not password: set_notification(request, "Password is required", ALERT_DANGER) raise HttpRedirectException( reverse("account_manager.password_reset_confirm", kwargs={"uuid": uuid}), "Password is required") self.account.user.set_password(password) self.account.user.save() self.password_reset_code.delete() set_notification(request, "Successfully updated account password", ALERT_SUCCESS) return HttpResponseRedirect(reverse("login"))
def delete_simulation_view(request, simulation_id): if not request.user.is_superuser: raise PermissionDenied simulation = get_object_or_404(Simulation, pk=simulation_id) simulation.delete() set_notification(request, "Successfully deleted simulation", SUCCESS) return HttpResponseRedirect(reverse("home.display_simulations"))
def dispatch(self, request, *args, **kwargs): uuid = kwargs["uuid"] # Check if this code is real if PasswordResetCode.objects.filter(id=uuid).exists(): self.password_reset_code = PasswordResetCode.objects.get(id=uuid) else: set_notification(request, "Invalid password reset code", ALERT_DANGER) raise HttpRedirectException(reverse("login"), "Invalid password reset code") # Get the email associated with the EmailInstance associated with this PasswordResetCode recipient_email = self.password_reset_code.recipient_email # Check if that email address is associated with an Account if not Account.objects.filter(user__email=recipient_email).exists(): set_notification( request, "No account with email of \"" + recipient_email + "\"", ALERT_DANGER) raise HttpRedirectException( reverse("login"), "No account with email of \"" + recipient_email + "\"") # Set the view's Account to that account so it can be used in the get_context_data() and post() self.account = Account.objects.get(user__email=recipient_email) return super(PasswordResetConfirmView, self).dispatch(request, *args, **kwargs)
def delete_simulation_view(request, simulation_id): if not request.user.is_superuser: raise PermissionDenied simulation = get_object_or_404(Simulation, pk=simulation_id) simulation.delete() set_notification(request, "Successfully deleted simulation", SUCCESS) return HttpResponseRedirect(reverse("home.list_view"))
def post(self, *args, **kwargs): scenario_id = self.kwargs["scenario_id"] scenario = ScenarioModel.objects.get(id=scenario_id) if self.request.user != scenario.user: raise PermissionDenied scenario.name = self.request.POST.get('name', scenario.name) scenario.description = self.request.POST.get('desc', scenario.description) if not self.request.is_ajax() or "save" in self.request.POST and json.loads(self.request.POST["save"]): scenario.save() if self.request.is_ajax(): return JsonResponse({"success": True, "xml": scenario.xml}) if 'submit_type' in self.request.POST and self.request.POST["submit_type"] == "run": # Clicked "Save and Run" button # Will submit a scenario to Simulation Manager here simulation = submit.submit(self.request.user, scenario.xml) if simulation is None: set_notification(self.request, "Can't submit simulation", "alert-danger") else: scenario.simulation = simulation scenario.save() set_notification(self.request, "Successfully started simulation", "alert-success") raise HttpRedirectException(reverse('ts_om.list'))
def test_http_code_500(request): # View to test # - HTTP 500 handler in production mode (when DEBUG = False) # - Django logging configuration set_notification(request.session, "hello", "alert-info") logger.debug("Raising RuntimeError - just because") raise RuntimeError
def test_http_code_500(request): # View to test # - HTTP 500 handler in production mode (when DEBUG = False) # - Django logging configuration set_notification(request, "hello", "alert-info") logger.debug("Raising RuntimeError - just because") raise RuntimeError
def delete_species_from_scenario_view(request, scenario_id, species): scenario = ScenarioModel.objects.get(id=scenario_id) om_scenario = Scenario(scenario.xml) del om_scenario.entomology.vectors[species] scenario.xml = om_scenario.xml scenario.save() set_notification(request, "Successfully deleted mosquito %s" % species, "alert-success") raise HttpRedirectException(reverse("ts_om.entomology", kwargs={"scenario_id": scenario_id}))
def staff_member_password_change_done_view(request): # Reset generated_password if user is an StaffMember after they changed it if hasattr(request.user, "staff_member"): request.user.staff_member.generated_password = "" request.user.staff_member.save() set_notification(request, "Successfully changed the password", ALERT_SUCCESS) return HttpResponseRedirect(reverse("index"))
def delete_scenario_view(request, scenario_id): scenario = get_object_or_404(Scenario, id=scenario_id) if scenario.user != request.user: raise PermissionDenied scenario.deleted = not scenario.deleted scenario.save() set_notification(request, "Scenario %s successfully deleted" % scenario.name, SUCCESS) return HttpResponseRedirect(reverse("ts_om.list"))
def get(self, request, *args, **kwargs): staff_member_id = kwargs["staff_member_id"] try: return super(self.__class__, self).get(request, *args, **kwargs) except ObjectDoesNotExist: set_notification( request, "staff_member_id of " + staff_member_id + " does not exist.", ALERT_DANGER ) raise HttpRedirectException( reverse("staff_member_manager.browse"), "staff_member_id of " + staff_member_id + " does not exist." )
def get(self, request, *args, **kwargs): account_id = kwargs["account_id"] if account_id == "new": return super(EditView, self).get(request, *args, **kwargs) try: return super(EditView, self).get(request, *args, **kwargs) except ObjectDoesNotExist: set_notification(request, "account_id of " + account_id + " does not exist.", ALERT_DANGER) raise HttpRedirectException( reverse("account_manager.browse"), "account_id of " + account_id + " does not exist." )
def get_context_data(self, **kwargs): context = super(ScenarioSummaryView, self).get_context_data(**kwargs) try: self.scenario = Scenario(self.model_scenario.xml) except ParseError: set_notification(self.request, "Invalid XML Document", DANGER) self.scenario = None context["scenario"] = self.model_scenario context["xml"] = self.model_scenario.xml context["desc"] = self.model_scenario.description if self.model_scenario.description else "" if self.scenario: vectors = list(self.scenario.entomology.vectors) context["scenario_id"] = self.model_scenario.id context["name"] = self.model_scenario.name context["deleted"] = self.model_scenario.deleted context["version"] = self.scenario.schemaVersion if self.model_scenario.new_simulation: context['sim_id'] = self.model_scenario.new_simulation.id monitor_info = get_survey_times(self.scenario.monitoring, self.model_scenario.start_date) context["monitor_type"] = monitor_info["type"] context["monitor_yrs"] = monitor_info["yrs"] context["monitor_mos"] = monitor_info["mos"] context["timesteps"] = monitor_info["timesteps"] context["demography"] = self.scenario.demography.name context["pop_size"] = self.scenario.demography.popSize context["first_line_drug"] = self.scenario.healthSystem.ImmediateOutcomes.firstLine context["vectors"] = vectors if hasattr(self.scenario.entomology, 'scaledAnnualEIR'): context["annual_eir"] = self.scenario.entomology.scaledAnnualEIR else: context["annual_eir"] = None interventions = [] for component in self.scenario.interventions.human: interventions.append(component.id) for vectorPop in self.scenario.interventions.vectorPop: interventions.append(vectorPop.name) context["interventions"] = interventions return context
def get(self, *args, **kwargs): items = self.get_queryset() error_log = [] success_log = [] if items.count() == 0: set_notification(self.request, "There were no staff members selected to delete", ALERT_DANGER) raise HttpRedirectException(reverse("staff_member_manager.browse")) items_deleted_count = 0 items_protected_count = 0 for item in items: try: temp_id = item.id item.delete() items_deleted_count += 1 success_log.append("ID " + temp_id + ": Deleted successfully") except ProtectedError as error: logger.info(str(error)) error_log.append("ID " + item.id + ": " + (error[0])) items_protected_count += 1 if items_deleted_count == 0: set_notification( self.request, "Failed to delete " + str(items_protected_count) + " staff members due to protection <br>" + create_notification_log(error_log, 1, ERROR_LOG), ALERT_DANGER) else: set_notification( self.request, "Successfully deleted " + str(items_deleted_count) + " staff members <br>" + create_notification_log(success_log, 1, SUCCESS_LOG), ALERT_SUCCESS) if len(error_log) > 0: set_notification( self.request, "Failed to delete " + str(items_protected_count) + " staff members due to protection<br>" + create_notification_log(error_log, 2, ERROR_LOG), ALERT_DANGER) return HttpResponseRedirect(reverse("staff_member_manager.browse"))
def form_valid(self, form, **kwargs): validation_result = json.loads(rest_validate(self.scenario.xml)) valid = True if (validation_result['result'] == 0) else False if not valid: self.kwargs['validation_error'] = 'Error: Invalid openmalaria xml.' set_notification(self.request, validation_result, DANGER) return super(ScenarioBaseFormView, self).form_invalid(form) self.model_scenario.xml = self.scenario.xml if not self.request.is_ajax() or json.loads(self.request.POST["save"]): if not self.model_scenario.new_simulation: self.model_scenario.save() else: # Don't save scenario if it has been submitted already set_notification(self.request, "Not saved", INFO) if not self.request.is_ajax(): return super(ScenarioBaseFormView, self).form_valid(form) else: data = {'xml': kwargs['kwargs']["xml"]} return self.render_to_json_response(data)
def post(self, *args, **kwargs): scenario_id = self.kwargs["scenario_id"] scenario = ScenarioModel.objects.get(id=scenario_id) scenario.name = self.request.POST.get('name', scenario.name) scenario.description = self.request.POST.get('desc', scenario.description) xml = self.request.POST.get('xml', scenario.xml) result = get_xml_validation_errors(xml, skip_openmalaria_validation=True) if result is not None: set_notification(self.request, "Invalid XML: %s. Changes not recorded" % result, DANGER) return HttpResponseRedirect(reverse("ts_om.summary", kwargs={"scenario_id": scenario_id})) scenario.xml = xml scenario.save() if 'submit_run' in self.request.POST: # Clicked "Save and Run" button # Will submit a scenario to backend here simulation = submit.submit(scenario) if simulation is None: set_notification(self.request, "Can't submit simulation", "alert-danger") else: set_notification(self.request, "Successfully started simulation", "alert-success") set_notification(self.request, "Successfully saved scenario", "alert-success") return HttpResponseRedirect(reverse('ts_om.list'))
def post(self, request, account_id): name = request.POST.get("name", None) if not name: set_notification(request, "Name is required", ALERT_DANGER) raise HttpRedirectException(reverse("account_manager.edit", account_id), "Name is required") if account_id == "new": account = Account.objects.create(name=name) account_id = account.id set_notification(request, "Created account \"" + account.name + "\"", ALERT_SUCCESS) else: account = Account.objects.get(id=account_id) account.name = name account.save() set_notification(request, "Successfully updated account", ALERT_SUCCESS) return HttpResponseRedirect(reverse("account_manager.edit", kwargs={"account_id": account_id}))
def post(self, request, email_id): name = request.POST.get("name", None) if not name: set_notification(request, "Name is required", ALERT_DANGER) raise HttpRedirectException( reverse("email_manager.edit", email_id), "Name is required") if email_id == "new": email = Email.objects.create(name=name, created_by_id=1) email_id = email.id set_notification(request, "Created email \"" + email.name + "\"", ALERT_SUCCESS) else: email = Email.objects.get(id=email_id) email.name = name email.save() set_notification(request, "Successfully updated email", ALERT_SUCCESS) return HttpResponseRedirect( reverse("email_manager.edit", kwargs={"email_id": email_id}))
def get_context_data(self, **kwargs): context = super(self.__class__, self).get_context_data(**kwargs) sim_id = kwargs["id"] request = self.request if "survey_measure_id" in request.GET and "survey_third_dimension" in request.GET: context["survey_measure_id"] = int(request.GET["survey_measure_id"]) context["survey_third_dimension"] = int(request.GET["survey_third_dimension"]) context["sim_id"] = sim_id try: simulation = Simulation.objects.get(id=sim_id) # Get contents of xml input file and filename (if available) scenario_file = SimulationInputFile.objects.filter(simulations=simulation, name="scenario.xml") if "filename" in scenario_file[0].metadata: xml_filename = scenario_file[0].metadata["filename"] else: xml_filename = "scenario.xml" context["xml_filename"] = xml_filename except ObjectDoesNotExist: set_notification(self.request, '<strong>Error! Simulation %s does not exist </strong>' % sim_id, 'alert-error') return context except Exception as e: set_notification(self.request, '<strong>Error! %s </strong>' % e, 'alert-error') return context try: output_file = SimulationOutputFile.objects.get(simulation=simulation, name="output.txt") output_txt_filename = "output.txt" except: output_txt_filename = None try: output_file = SimulationOutputFile.objects.get(simulation=simulation, name="ctsout.txt") ctsout_txt_filename = "ctsout.txt" except: ctsout_txt_filename = None context["output_txt_filename"] = output_txt_filename context["ctsout_txt_filename"] = ctsout_txt_filename try: model_stdout_stderr_file = SimulationOutputFile.objects.get(simulation=simulation, name="model_stdout_stderr.txt") context["model_stdout"] = "model_stdout_stderr.txt" except (ObjectDoesNotExist, MultipleObjectsReturned): pass try: output_parser = om_output_parser_from_simulation(simulation) except (TypeError, ValueError) as e: error_type = "%s" % type(e) error_type = error_type.replace("<", "").replace(">", "") set_notification(self.request, "Error processing input or output files: (%s) %s" % (error_type, str(e)), 'alert-error') # noqa return context try: survey_measures = {} for measure in output_parser.get_survey_measures(): # print output_parser.get_survey_measure_name( # measure_id=measure[0], third_dimension=measure[1]) # measure_key = surveyFileMap[measure[0]][0] + ": " + surveyFileMap[measure[0]][2] + ", ages (" + output_parser.get_survey_measure_name( # measure_id=measure[0], third_dimension=measure[1]) #.split("(")[1] measure_name = "" if surveyFileMap[measure[0]][1] == "age group": age_group = output_parser.get_monitoring_age_group(measure[1] - 1) age_group_name = "%s - %s" % (age_group["lowerbound"], age_group["upperbound"]) measure_name = "(%s)" % age_group_name elif surveyFileMap[measure[0]][1] == "vector species": measure_name = "(%s)" % measure[1] measure_name = surveyFileMap[measure[0]][0] + ": " + surveyFileMap[measure[0]][2] + measure_name survey_measures[measure_name] = measure except AttributeError: survey_measures = {} try: cts_measures = {} for measure in output_parser.get_cts_measures(): cts_measures[measure] = continuousMeasuresDescription.get(measure, "").split(".")[0] except AttributeError: cts_measures = {} context["survey_measures"] = survey_measures context["cts_measures"] = cts_measures context["request"] = request return context
def invalid_notification(self, err): set_notification(self.request, '<strong>Error! %s</strong>'% str(err.__str__()), 'alert-error')
def post(self, request, staff_member_id): username = request.POST.get("username", None) first_name = request.POST.get("first_name", None) last_name = request.POST.get("last_name", None) email = request.POST.get("email", None) is_active = request.POST.get("is_active", True) is_staff = request.POST.get("is_staff", True) is_superuser = request.POST.get("is_superuser", True) if not username: set_notification(request, "Username is required", ALERT_DANGER) raise HttpRedirectException( reverse("staff_member_manager.edit", staff_member_id), "Username is required") if not email: set_notification(request, "Email is required", ALERT_DANGER) raise HttpRedirectException( reverse("staff_member_manager.edit", staff_member_id), "Email is required") if staff_member_id == "new": user = User.objects.create(username=username, first_name=first_name, last_name=last_name, email=email, is_active=is_active, is_staff=is_staff, is_superuser=is_superuser) staff_member = StaffMember.objects.create( user=user, created_by=request.user.staff_member, updated_by=request.user.staff_member) staff_member_id = staff_member.id set_notification( request, "Created staff member \"" + staff_member.user.username + "\"", ALERT_SUCCESS) try: create_account_for_staff_member(staff_member) set_notification( request, "Created account for \"" + staff_member.user.username + "\"", ALERT_SUCCESS) except Exception as error: set_notification( request, "Failed to create account for \"" + staff_member.user.username + "\". Error: " + str(error), ALERT_DANGER) else: staff_member = StaffMember.objects.get(id=staff_member_id) staff_member.user.username = username staff_member.user.first_name = first_name staff_member.user.last_name = last_name staff_member.user.email = email staff_member.user.is_active = is_active staff_member.user.is_staff = is_staff staff_member.user.is_superuser = is_superuser staff_member.user.save() staff_member.updated_by = request.user.staff_member staff_member.save() set_notification( request, "Successfully updated staff member \"" + staff_member.user.username + "\"", ALERT_SUCCESS) return HttpResponseRedirect( reverse("staff_member_manager.details", kwargs={"staff_member_id": staff_member_id}))
def get_context_data(self, **kwargs): context = super(self.__class__, self).get_context_data(**kwargs) sim_id = kwargs["id"] request = self.request if "survey_measure_id" in request.GET and "survey_third_dimension" in request.GET: context["survey_measure_id"] = int( request.GET["survey_measure_id"]) context["survey_third_dimension"] = int( request.GET["survey_third_dimension"]) context["sim_id"] = sim_id simulation = get_object_or_404(Simulation, id=sim_id) if simulation.scenario.user != request.user: raise PermissionDenied context["simulation"] = simulation # Get contents of xml input file and filename (if available) if simulation.input_file: context["xml_filename"] = "scenario.xml" if simulation.output_file: output_txt_filename = "output.txt" else: output_txt_filename = None if simulation.ctsout_file: ctsout_txt_filename = "ctsout.txt" else: ctsout_txt_filename = None context["output_txt_filename"] = output_txt_filename context["ctsout_txt_filename"] = ctsout_txt_filename if simulation.model_stdout: context["model_stdout"] = "model_stdout_stderr.txt" try: output_parser = om_output_parser_from_simulation(simulation) except (TypeError, ValueError) as e: error_type = "%s" % type(e) error_type = error_type.replace("<", "").replace(">", "") set_notification( self.request, "Error processing input or output files: (%s) %s" % (error_type, str(e)), 'alert-error') # noqa return context try: survey_measures = {} for measure in output_parser.get_survey_measures(): # print output_parser.get_survey_measure_name( # measure_id=measure[0], third_dimension=measure[1]) # measure_key = surveyFileMap[measure[0]][0] + ": " + surveyFileMap[measure[0]][2] + ", ages (" + output_parser.get_survey_measure_name( # measure_id=measure[0], third_dimension=measure[1]) #.split("(")[1] measure_name = "" if surveyFileMap[measure[0]][1] == "age group": age_group = output_parser.get_monitoring_age_group( measure[1] - 1) age_group_name = "%s - %s" % (age_group["lowerbound"], age_group["upperbound"]) measure_name = "(%s)" % age_group_name elif surveyFileMap[measure[0]][1] == "vector species": measure_name = "(%s)" % measure[1] measure_name = surveyFileMap[measure[0]][ 0] + ": " + surveyFileMap[measure[0]][2] + measure_name survey_measures[measure_name] = measure except AttributeError: survey_measures = {} try: cts_measures = {} for measure in output_parser.get_cts_measures(): cts_measures[measure] = continuousMeasuresDescription.get( measure, "").split(".")[0] except AttributeError: cts_measures = {} context["survey_measures"] = survey_measures context["cts_measures"] = cts_measures context["request"] = request return context