Ejemplo n.º 1
0
def host_delete(host_id):
    host = Host.q.get(host_id)

    if host is None:
        flash(u"Host existiert nicht.", 'error')
        abort(404)

    form = FlaskForm()

    owner = host.owner

    if form.is_submitted():
        _, success = web_execute(lib_host.host_delete,
                                 "Host erfolgreich gelöscht.", host,
                                 current_user)

        if success:
            session.session.commit()

            return redirect(
                url_for('user.user_show', user_id=owner.id, _anchor='hosts'))

    form_args = {
        'form': form,
        'cancel_to': url_for('user.user_show', user_id=owner.id),
        'submit_text': 'Löschen',
        'actions_offset': 0
    }

    return render_template('generic_form.html',
                           page_title="Host löschen",
                           form_args=form_args,
                           form=form)
Ejemplo n.º 2
0
def transaction_delete(transaction_id):
    transaction = Transaction.q.get(transaction_id)

    if transaction is None:
        flash(u"Transaktion existiert nicht.", 'error')
        abort(404)

    if transaction.confirmed:
        flash(
            u"Diese Transaktion wurde bereits bestätigt und kann daher nicht gelöscht werden.",
            'error')
        abort(400)

    form = FlaskForm()

    if form.is_submitted():
        lib.finance.transaction_delete(transaction)

        session.commit()

        flash(u'Transaktion gelöscht.', 'success')
        return redirect(url_for('.transactions_unconfirmed'))

    form_args = {
        'form': form,
        'cancel_to': url_for('.transactions_unconfirmed'),
        'submit_text': 'Löschen',
        'actions_offset': 0
    }

    return render_template('generic_form.html',
                           page_title="Transaktion löschen",
                           form_args=form_args,
                           form=form)
Ejemplo n.º 3
0
def property_group_delete(group_id):
    group = PropertyGroup.get(group_id)

    if group is None:
        flash(f"Eigenschaftengruppe mit ID {group_id} existiert nicht!",
              'error')
        abort(404)

    form = FlaskForm()

    if form.is_submitted():
        delete_property_group(group, current_user)

        session.session.commit()

        flash('Eigenschaftsgruppe gelöscht.', 'success')
        return redirect(url_for('.property_groups'))

    form_args = {
        'form': form,
        'cancel_to': url_for('.property_groups'),
        'submit_text': 'Löschen',
        'actions_offset': 0
    }

    return render_template(
        'generic_form.html',
        page_title=f"Eigenschaftsgruppe '{group.name}' löschen",
        form_args=form_args,
        form=form)
Ejemplo n.º 4
0
def transaction_confirm_all():
    form = FlaskForm()

    def default_response():
        form_args = {
            'form': form,
            'cancel_to': url_for('.transactions_unconfirmed'),
            'submit_text': 'Alle Bestätigen',
            'actions_offset': 0
        }
        return render_template(
            'generic_form.html',
            page_title="Alle Transaktionen (älter als 1h) bestätigen",
            form_args=form_args,
            form=form)

    if not form.is_submitted():
        return default_response()

    try:
        with handle_errors(session):
            lib.finance.transaction_confirm_all(current_user)
            session.commit()
    except PycroftException:
        return default_response()

    flash("Alle Transaktionen wurden bestätigt.", 'success')
    return redirect(url_for('.transactions_unconfirmed'))
Ejemplo n.º 5
0
def transaction_confirm_all():
    form = FlaskForm()

    if form.is_submitted():
        _, success = web_execute(lib.finance.transaction_confirm_all,
                                 "Alle Transaktionen wurden bestätigt.",
                                 current_user)

        session.commit()

        return redirect(url_for('.transactions_unconfirmed'))

    form_args = {
        'form': form,
        'cancel_to': url_for('.transactions_unconfirmed'),
        'submit_text': 'Alle Bestätigen',
        'actions_offset': 0
    }

    return render_template(
        'generic_form.html',
        page_title="Alle Transaktionen (älter als 1h) bestätigen",
        form_args=form_args,
        form=form)
Ejemplo n.º 6
0
 def is_submitted(self):
     return FlaskForm.is_submitted(self) and request.form.get("form_name") == self._form_name
Ejemplo n.º 7
0
def financial_explan_summary():
    form = FlaskForm(request.form)
    categories = json.loads(session.get("categories", "{}"))
    form.subdomain = Subdomain.query.get(session.get("subdomain", None))
    ranges_for_feature = session.get("ranges_for_feature", {})
    range_groups_ages = ranges_for_feature.get("Age", [])
    form.presentation_type = "Percents"
    if form.validate_on_submit():
        form.presentation_type = request.form["presentation_type"]
    elif form.is_submitted():
        flash("Invalid data", "warning")

    form.table_heads = [
        "Client ID",
        "Age",
        "Risk of default",
        "Prediction_or_Confidence Score (Out of 100)",
    ]

    form.table_heads += [f"{name} Contribution" for name in categories]

    all_case_values_query = CaseValue.query.filter(
        CaseValue.user_data_id == session["user_data_id"])
    max_patient_id = max([v.case_id for v in all_case_values_query.all()])
    form.table_rows = []
    for patient_id in range(max_patient_id + 1):
        all_case_values_query_for_patient = all_case_values_query.filter(
            CaseValue.case_id == patient_id)
        if not all_case_values_query_for_patient.all():
            continue
        age_feature = Feature.query.filter(Feature.name == "Age").first()
        age_case_val = all_case_values_query_for_patient.filter(
            CaseValue.feature_id == age_feature.id).first()
        age = int(age_case_val.value)
        age = age_range_groups(range_groups_ages, age)
        prediction_score = int(round(age_case_val.prediction, 2) * 100)
        predicted = "No" if prediction_score < 10 else "Yes"
        prediction_score_color = "green"
        if prediction_score >= 10 and prediction_score <= 24:
            prediction_score_color = "yellow"
        elif prediction_score > 24:
            prediction_score_color = "red"

        row = [
            (patient_id, None),
            (age, None),
            (predicted, None),
            (prediction_score, prediction_score_color),
        ]
        explainers = []
        explainers_abs_values = []
        for cat_name in categories:
            sum_explainer = 0
            for feature_name in categories[cat_name]:
                feature = Feature.query.filter(
                    Feature.name == feature_name).first()
                case_val = all_case_values_query_for_patient.filter(
                    CaseValue.feature_id == feature.id).first()
                sum_explainer += case_val.explainer
            explainers += [sum_explainer]
            explainers_abs_values += [abs(sum_explainer)]
        # if not selected percentage
        cells = None

        if form.presentation_type == "Percents":
            hundred = sum(explainers_abs_values)
            values = list(
                map(lambda val: int(round(val * 100 / hundred, 0)),
                    explainers))
            max_val = max(values)
            colors = list(
                map(lambda val: ("red" if val == max_val else None), values))
            values = map(lambda val: f"{val}%", values)
            cells = list(zip(values, colors))
        else:
            values = list(map(lambda val: (round(val * 100, 2)), explainers))
            max_val = max(values)
            colors = list(
                map(lambda val: ("red" if val == max_val else None), values))
            cells = list(zip(values, colors))
        row += cells
        form.table_rows += [row]

    return render_template(
        "financial_explan_summary.html",
        form=form,
        range_groups_ages=range_groups_ages,
        len=len,
    )
Ejemplo n.º 8
0
def home():
    """
    The flask server renders a HTML page which can read
    in two queries, which are then used by this function
    to generate the rewritten queries, which will then
    be shown on the page.

    Prediction is offloaded to the GPU using two separate 
    threads.
    """
    form = FlaskForm()

    if form.is_submitted():
        query1 = request.form['query1']
        query2 = request.form['query2']

        processed_query1 = tx.translate_text(query1, "hi", "en",
                                             config["ProjectID"])
        processed_query2 = tx.translate_text(query2, "hi", "en",
                                             config["ProjectID"])

        file1 = open('inp_server.txt', 'wb')
        file1.write(" . \t {0} <::::> {1} \n".format(
            processed_query1.strip(), processed_query2.strip()).encode())
        file1.close()

        file2 = open('inp_server_hi.txt', 'wb')
        file2.write(" . \t {0} <::::> {1} \n".format(query1.strip(),
                                                     query2.strip()).encode())
        file2.close()

        thread1 = threading.Thread(
            target=os.system,
            args=
            ("bash ./../contextual-query-rewrites.sh enLT predict wikifuse 0 \
                    in_server.txt op_server.txt", ))
        thread2 = threading.Thread(
            target=os.system,
            args=
            ("bash ./../contextual-query-rewrites.sh hiLT predict wikifuse 0 \
                    in_server.txt op_server.txt", ))

        thread1.start()
        thread2.start()

        thread1.join()
        thread2.join()

        file1_op = open("op_server.txt", 'r')
        file2_op = open("op_server_hi.txt", 'r')

        processed_op_en = file1_op.readlines()[0].split('\t')[1]
        processed_op_hi = file2_op.readlines()[0].split('\t')[1]

        file1_op.close()
        file2_op.close()

        translated_text = tx.translate_text(processed_op_en, "en", "hi",
                                            config["ProjectID"])

        return render_template(
            'contextual_query_rewrites.html',
            label1="Lasertagger trained on english and BERT:{0}".format(
                translated_text),
            label2="Lasertagger trained on hindi and mBERT:{0}".format(
                processed_op_hi))

    return render_template('contextual_query_rewrites.html', label=None)
Ejemplo n.º 9
0
    form = FlaskForm()

    def default_response():
        form_args = {
            'form': form,
            'cancel_to': url_for('user.user_show', user_id=owner.id),
            'submit_text': 'Löschen',
            'actions_offset': 0
        }

        return render_template('generic_form.html',
                               page_title="Host löschen",
                               form_args=form_args,
                               form=form)

    if not form.is_submitted():
        return default_response()

    try:
        with handle_errors(session.session):
            lib_host.host_delete(host, current_user)
            session.session.commit()
    except PycroftException:
        return default_response()

    flash("Host erfolgreich gelöscht.", 'success')
    return redirect(
        url_for('user.user_show', user_id=owner.id, _anchor='hosts'))


@bp.route('/<int:host_id>/edit', methods=['GET', 'POST'])
Ejemplo n.º 10
0
def explanations_per_patient(case_id):
    form = FlaskForm(request.form)
    form.selected_features = session.get("selected_features", [])
    form.categories = json.loads(session.get("categories", "{}"))
    form.subdomain = Subdomain.query.get(session.get("subdomain", None))
    ranges_for_feature = session.get("ranges_for_feature", {})
    range_groups_ages = ranges_for_feature.get("Age", [])
    all_case_values_query = CaseValue.query.filter(
        CaseValue.user_data_id == session["user_data_id"])
    all_case_values_query_for_patient = all_case_values_query.filter(
        CaseValue.case_id == case_id)
    form.presentation_type = "Proportional to the Total Confidence Score"

    if form.validate_on_submit():
        form.presentation_type = request.form["presentation_type"]
    elif form.is_submitted():
        flash("Invalid data", "warning")

    form.table_heads = []
    sum_explainer = {}
    sum_explainer_abs = {}
    for cat_name in form.categories:
        sum_explainer[cat_name] = 0
        sum_explainer_abs[cat_name] = 0
        for feature_name in form.categories[cat_name]:
            feature = Feature.query.filter(
                Feature.name == feature_name).first()
            case_val = all_case_values_query_for_patient.filter(
                CaseValue.feature_id == feature.id).first()
            sum_explainer[cat_name] += case_val.explainer
            sum_explainer_abs[cat_name] += abs(case_val.explainer)
        form.table_heads += [[
            cat_name,
        ], "Feature Contribution"]
    form.table_rows = []
    num_of_rows = max([len(form.categories[k]) for k in form.categories])
    for cat_name in form.categories:
        row_index = 0
        for feature_name in form.categories[cat_name]:
            if len(form.table_rows) <= row_index:
                form.table_rows += [[]]
            feature = Feature.query.filter(
                Feature.name == feature_name).first()
            case_val = all_case_values_query_for_patient.filter(
                CaseValue.feature_id == feature.id).first()
            if form.presentation_type == "Proportional to the Total Confidence Score":
                one_square_val = sum(sum_explainer_abs.values()) / 12
                square_num = int(
                    round(abs(case_val.explainer) / one_square_val, 0))
                form.table_rows[row_index] += [[
                    feature_name, gen_squares_code(square_num)
                ]]
            else:
                each_category_squares = 12 / len(form.categories)
                value_of_square = int(round(100 / each_category_squares, 0))
                sum_explainer_category = sum_explainer_abs[cat_name]
                feature_explainer = int(
                    (case_val.explainer / sum_explainer_category) * 100)
                feature_squares = int(
                    round((feature_explainer / value_of_square), 0))
                form.table_rows[row_index] += [[
                    feature_name,
                    gen_squares_code(feature_squares)
                ]]
            row_index += 1
        for i in range(row_index, num_of_rows):
            if len(form.table_rows) <= i:
                form.table_rows += [[]]
            form.table_rows[i] += [["", ""]]
    explainers = sum((list(map(abs, sum_explainer.values()))))
    values = list(
        map(lambda val: int(round(val * 100 / explainers, 0)),
            sum_explainer.values()))
    form.value_percent = max(values)
    for i, percent in enumerate(values):
        form.table_heads[2 * i] += [percent]

    age_feature = Feature.query.filter(Feature.name == "Age").first()
    age_case_val = all_case_values_query_for_patient.filter(
        CaseValue.feature_id == age_feature.id).first()

    form.age = int(age_case_val.value)
    form.age = age_range_groups(range_groups_ages, form.age)
    form.case_id = case_id
    form.prediction_score = prediction_score(age_case_val.prediction)
    form.predicted = predicted(form.prediction_score)

    def check_is_list(val):
        return type(val) is list

    return render_template(
        "explanations_per_patient.html",
        form=form,
        check_is_list=check_is_list,
        enumerate=enumerate,
    )