Ejemplo n.º 1
0
    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"))
Ejemplo n.º 2
0
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"))
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
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"))
Ejemplo n.º 5
0
    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'))
Ejemplo n.º 6
0
Archivo: views.py Proyecto: vecnet/om
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
Ejemplo n.º 7
0
Archivo: views.py Proyecto: SwissTPH/om
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
Ejemplo n.º 8
0
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"))
Ejemplo n.º 10
0
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"))
Ejemplo n.º 11
0
    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."
            )
Ejemplo n.º 12
0
    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."
            )
Ejemplo n.º 13
0
    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
Ejemplo n.º 14
0
    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"))
Ejemplo n.º 15
0
    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)
Ejemplo n.º 16
0
    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'))
Ejemplo n.º 17
0
    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}))
Ejemplo n.º 18
0
    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}))
Ejemplo n.º 19
0
    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
Ejemplo n.º 20
0
 def invalid_notification(self, err):
     set_notification(self.request,
                      '<strong>Error! %s</strong>'% str(err.__str__()),
                      'alert-error')
Ejemplo n.º 21
0
    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}))
Ejemplo n.º 22
0
    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