Module jumpscale.packages.polls.bottle.polls_bottle

Expand source code
from bottle import Bottle

from jumpscale.loader import j
from jumpscale.packages.auth.bottle.auth import admin_only, login_required
from jumpscale.packages.polls.chats.threefold import VOTES
from jumpscale.sals.chatflows.polls import all_users

app = Bottle()


def _map_vote_results(user_votes, votes_questions):
    votes_data = {}
    for question_name, answers in user_votes.items():
        for question in votes_questions.values():
            if question["title"] == question_name:
                answer = answers.index(1)
                votes_data[question_name] = question["options"][answer]
    return votes_data


@app.route("/api/results")
@login_required
@admin_only
def results():
    votes_data = {}
    for voter_name in all_users.list_all():
        voter = all_users.get(voter_name)
        votes_data[j.data.text.removeprefix(voter_name, "threefold_")] = _map_vote_results(voter.vote_data, VOTES)

    votes_data["-Number of voters"] = all_users.count
    return votes_data


@app.route("/api/names")
@login_required
@admin_only
def names():
    data = {"names": []}
    for voter_name in all_users.list_all():
        voter = all_users.get(voter_name)
        tname = j.data.text.removeprefix(voter_name, "threefold_")
        data["names"].append(voter.extra_data.get("full_name", tname))
    data["-Number of voters"] = all_users.count
    return data