예제 #1
0
def show_events():
    data = dict()
    data['event'] = db_load('/event')
    data['initiative'] = db_load('/initiative')
    data['issue'] = db_load('/issue')
    data['suggestion'] = db_load('/suggestion')
    return render_template('events.html', data=data, helper=helper, ourl='index/index.html?tab=timeline&filter_unit=global')
예제 #2
0
def initiative_aggregated(initiative_id, session=None):
    result = db_load('/initiative', q={'initiative_id': initiative_id})['result'][0]

    # add drafts
    result['draft'] = db_load('/draft', q={'initiative_id': initiative_id})['result']

    # add suggestions
    result['suggestion'] = api_load('/suggestion', q={'initiative_id': initiative_id}, session=session)['result']

    # add initiator
    if 'session_key' in session:
        result['initiator'] = api_load('/initiator', q={'initiative_id': initiative_id}, session=session)['result']

    # add supporters
    if 'session_key' in session:
        result['supporter_snapshots'] = dict()
        result['supporter_members'] = dict()
        result['supporter_weights'] = dict()
        result['supporter_delegates'] = dict()
        for snapshot in ['latest', 'end_of_admission', 'half_freeze', 'full_freeze']:
            result['supporter_weights'][snapshot] = 0
            result['supporter_snapshots'][snapshot] = api_load('/supporter', q={'initiative_id': initiative_id, 'snapshot': snapshot}, session=session)['result']
            for p in result['supporter_snapshots'][snapshot]:
                result['supporter_weights'][snapshot] += p['weight']
            result['supporter_members'][snapshot] = len(result['supporter_snapshots'][snapshot])
            result['supporter_delegates'][snapshot] = result['supporter_weights'][snapshot] - result['supporter_members'][snapshot]

    # add opinion
    if 'session_key' in session:
        result['opinion'] = api_load('/opinion', q={'initiative_id': initiative_id}, session=session)['result']

    # add voter
    if 'session_key' in session:
        result['voter'] = api_load('/voter', q={'issue_id': result['issue_id'], 'rendered_content': 'html'}, session=session)['result']

    # add vote
    if 'session_key' in session:
        result['vote'] = api_load('/vote', q={'initiative_id': initiative_id}, session=session)['result']

    # add issue
    result['issue'] = db_load('/issue', q={'issue_id': result['issue_id']})['result'][0]

    # add the policy
    result['policy'] = db_load('/policy', q={'policy_id': result['issue']['policy_id']})['result'][0]

    # add battle
    if result['issue']['status_quo_schulze_rank'] != None:
        result['battle'] = api_load_all('/battle', q={'initiative_id': initiative_id})['result']
        result['battle_table'] = dict()
        for b in result['battle']:
            winner = b['winning_initiative_id'] if b['winning_initiative_id'] != None else 0
            loser = b['losing_initiative_id'] if b['losing_initiative_id'] != None else 0

            if not winner in result['battle_table']:
                result['battle_table'][winner] = dict()

            result['battle_table'][winner][loser] = b['count']

    return result
예제 #3
0
def quorum_filter(issue_id):
    """
    a filter to return the quorum of a given issue
    """
    issue = db_load('/issue', q={'issue_id': issue_id})['result'][0]
    policy = db_load('/policy', q={'policy_id': issue['policy_id']})['result'][0]

    return int(ceil((float(policy['initiative_quorum_num']) / float(policy['initiative_quorum_den'])) * issue['population']))
예제 #4
0
def show_unit(unit_id):
    data = dict()
    data['unit'] = db_load('/unit', q={'unit_id': unit_id})

    data['privilege'] = api_load('/privilege', q={'unit_id': unit_id}, session=session)

    return render_template('unit.html', data=data, helper=helper, ourl='unit/show/%d.html' % unit_id)
예제 #5
0
def suggestion_filter(suggestion_id, icon=True):
    # get name
    result = db_load('/suggestion', q={'suggestion_id': suggestion_id})['result'][0]['name']

    # add icon
    if icon:
        result = '<i class="icon-lightbulb"></i>&nbsp;' + result

    return result
예제 #6
0
def end_of_phase_filter(policy_id, phase):
    p = db_load('/policy', q={'policy_id': policy_id})['result'][0]
    thisdate=datetime.now(tz=pytz.timezone('Europe/Berlin'))

    end_of = dict()
    end_of['admission_time']    = future_date_filter(thisdate.isoformat(), p['admission_time'])
    end_of['discussion_time']   = future_date_filter(end_of['admission_time'], p['discussion_time'])
    end_of['verification_time'] = future_date_filter(end_of['discussion_time'], p['verification_time'])
    end_of['voting_time']       = future_date_filter(end_of['verification_time'], p['voting_time'])

    return end_of[phase]
예제 #7
0
def policy_time_filter(policy_id, phase):
    p = db_load('/policy', q={'policy_id': policy_id})['result'][0]

    if 'minutes' in p[phase]:
        return "%d Minuten" % p[phase]['minutes'] if p[phase]['minutes'] != 1 else "%d Minute" % p[phase]['minutes']
    if 'hours' in p[phase]:
        return "%d Stunden" % p[phase]['hours'] if p[phase]['hours'] != 1 else "%d Stunde" % p[phase]['hours']
    if 'days' in p[phase]:
        return "%d Tage" % p[phase]['days'] if p[phase]['days'] != 1 else "%d Tag" % p[phase]['days']
    if 'years' in p[phase]:
        return "%d Jahre" % p[phase]['years'] if p[phase]['years'] != 1 else "%d Jahr" % p[phase]['years']
예제 #8
0
def unit_filter(unit_id, link=False, icon=True):
    # get name
    result = db_load('/unit', q={'unit_id': unit_id})['result'][0]['name']

    # add link
    if link:
        result = '<a href="/gliederungen/' + str(unit_id) + '">' + result + '</a>'

    # add icon
    if icon:
        result = '<i class="icon-sitemap"></i>&nbsp;' + result

    return result
예제 #9
0
def policy_filter(policy_id, link=True, icon=True):
    # get name
    result = db_load('/policy', q={'policy_id': policy_id})['result'][0]['name']

    # add link
    if link:
        result = '<a href="/regelwerke/' + str(policy_id) + '">' + result + '</a>'

    # add icon
    if icon:
        result = '<i class="icon-book"></i>&nbsp;' + result

    return result
예제 #10
0
def area_filter(area_id, link=True, icon=True):
    # get name
    result = db_load('/area', q={'area_id': area_id})['result'][0]['name']

    # add link
    if link:
        result = '<a href="/themenbereiche/' + str(area_id) + '">' + result + '</a>'

    # add icon
    if icon:
        result = '<i class="icon-columns"></i>&nbsp;' + result

    return result
예제 #11
0
def initiative_filter(initiative_id, link=False, icon=True):
    # special case: status quo
    if initiative_id == None:
        return "Status Quo"
    
    # get name
    result = db_load('/initiative', q={'initiative_id': initiative_id})['result'][0]['name']

    # add link
    if link:
        result = '<a href="/initiative/' + str(initiative_id) + '">' + result + '</a>'

    # add icon
    if icon:
        result = '<i class="icon-file-alt"></i>&nbsp;' + result

    return result
예제 #12
0
def show_member(member_id):
    if 'current_access_level' not in session or session['current_access_level'] != 'member':
        abort(403)

    data = dict()
    data['event'] = db_load('/event')

    data['privilege'] = api_load('/privilege', q={'member_id': member_id}, session=session)
    data['membership'] = api_load('/membership', q={'member_id': member_id}, session=session)
    data['initiator'] = api_load('/initiator', q={'member_id': member_id}, session=session)
    data['delegation_in'] = api_load('/delegation', q={'member_id': member_id, 'direction': 'in'}, session=session)
    data['delegation_out'] = api_load('/delegation', q={'member_id': member_id, 'direction': 'out'}, session=session)
    data['delegating_voter'] = api_load('/delegating_voter', q={'member_id': member_id}, session=session)
    data['voter'] = api_load('/voter', q={'member_id': member_id, 'formatting_engine': 'html'}, session=session)
    data['vote'] = api_load('/vote', q={'member_id': member_id}, session=session)
    data['interest'] = api_load('/interest', q={'member_id': member_id, 'snapshot': 'latest'}, session=session)
    data['member'] = api_load('/member', q={'member_id': member_id, 'render_statement': 'html'}, session=session)
    data['member_image'] = api_load('/member_image', q={'member_id': member_id}, session=session)
    data['member_history'] = api_load('/member_history', q={'member_id': member_id}, session=session)

    return render_template('member.html', data=data, helper=helper, ourl='member/show/%d.html' % member_id)
예제 #13
0
def show_area(area_id):
    data = dict()
    data['area'] = db_load('/area', q={'area_id': area_id})
    data['allowed_policy'] = api_load('/allowed_policy', q={'area_id': area_id})
    return render_template('area.html', data=data, helper=helper, ourl='area/show/%d.html' % area_id)
예제 #14
0
def issue_aggregated(issue_id, session=None):
    result = db_load('/issue', q={'issue_id': issue_id})['result'][0]

    # add prospected ends of the timestamps
    result['accepted_deadline'] = result['accepted'] if result['accepted'] != None else future_date_filter(result['created'], result['admission_time'])
    result['half_frozen_deadline'] = result['half_frozen'] if result['half_frozen'] != None else future_date_filter(result['accepted_deadline'], result['discussion_time'])
    result['fully_frozen_deadline'] = result['fully_frozen'] if result['fully_frozen'] != None else future_date_filter(result['half_frozen_deadline'], result['verification_time'])
    result['closed_deadline'] = result['closed'] if result['closed'] != None else future_date_filter(result['fully_frozen_deadline'], result['voting_time'])

    # calculate voter percentage
    result['voter_percentage'] = round(100.0 * float(result['voter_count']) / float(result['population']), 2) if result['voter_count'] != None else None

    # add the area
    result['area'] = db_load('/area', q={'area_id': result['area_id']})['result'][0]

    # add the unit
    result['unit'] = db_load('/unit', q={'unit_id': result['area']['unit_id']})['result'][0]

    # add the policy
    result['policy'] = db_load('/policy', q={'policy_id': result['policy_id']})['result'][0]
    result['policy']['issue_quorum_percentage'] = round(100.0 * float(result['policy']['issue_quorum_num']) / float(result['policy']['issue_quorum_den']), 2) if result['policy']['issue_quorum_num'] != 0 else 0
    result['policy']['initiative_quorum_percentage'] = round(100.0 * float(result['policy']['initiative_quorum_num']) / float(result['policy']['initiative_quorum_den']), 2) if result['policy']['initiative_quorum_num'] != 0 else 0

    # add absolute numbers for the quorums
    result['issue_quorum'] = int(ceil((float(result['policy']['issue_quorum_num']) / float(result['policy']['issue_quorum_den'])) * result['population']))
    result['initiative_quorum'] = int(ceil((float(result['policy']['initiative_quorum_num']) / float(result['policy']['initiative_quorum_den'])) * result['population']))

    # add bars
    bars = policy_bars(result['policy'])
    result['policy'] = dict(result['policy'].items() + bars.items())

    # add all initiatives of the issue
    result['initiatives'] = db_load('/initiative', q={'issue_id': issue_id})['result']
    for i in result['initiatives']:
        # store information on the supporters and the used quorum
        if result['state'] in ['admission', 'canceled_revoked_before_accepted', 'canceled_issue_not_accepted']:
            if result['issue_quorum'] > 0:
                i['supporter_percentage'] = round(100.0 * float(i['supporter_count']) / float(result['issue_quorum']), 2)
                i['supporter_missing'] = result['issue_quorum'] - i['supporter_count'] if i['supporter_percentage'] < 100 else 0
            else:
                i['supporter_percentage'] = 100
                i['supporter_missing'] = 0
            i['quorum_type'] = 'issue'
        else:
            if result['initiative_quorum'] > 0:
                i['supporter_percentage'] = round(100.0 * float(i['supporter_count']) / float(result['initiative_quorum']), 2)
                i['supporter_missing'] = result['initiative_quorum'] - i['supporter_count'] if i['supporter_percentage'] < 100 else 0
            else:
                i['supporter_percentage'] = 100
                i['supporter_missing'] = 0
            i['quorum_type'] = 'initiative'

        if i['negative_votes'] != None:
            i['absention_votes'] = result['voter_count'] - i['positive_votes'] - i['negative_votes']
            # distribution of positive_votes/negative_votes
            votes = i['positive_votes'] + i['negative_votes']
            if votes != 0:
                positive_votes_percentage = round(100.0 * float(i['positive_votes']) / float(votes), 2)
                negative_votes_pecentage = round(100.0 - positive_votes_percentage, 2)
                i['vote_distribution2'] = [positive_votes_percentage, negative_votes_pecentage]
            else:
                i['vote_distribution2'] = [0.0, 0.0]

            # distribution of all votes
            votes = result['voter_count']
            positive_votes_percentage = round(100.0 * float(i['positive_votes']) / float(votes), 2)
            negative_votes_pecentage = round(100.0 * float(i['negative_votes']) / float(votes), 2)
            absention_votes_pecentage = round(100.0 - positive_votes_percentage - negative_votes_pecentage, 2)
            i['vote_distribution3'] = [positive_votes_percentage, absention_votes_pecentage, negative_votes_pecentage]

    # add interested members (needs a session)
    if 'session_key' in session:
        result['interest_snapshots'] = dict()
        result['interest_members'] = dict()
        result['interest_weights'] = dict()
        result['interest_delegates'] = dict()
        for snapshot in ['latest', 'end_of_admission', 'half_freeze', 'full_freeze']:
            result['interest_weights'][snapshot] = 0
            result['interest_snapshots'][snapshot] = api_load('/interest', q={'issue_id': issue_id, 'snapshot': snapshot}, session=session)['result']
            for p in result['interest_snapshots'][snapshot]:
                result['interest_weights'][snapshot] += p['weight']
            result['interest_members'][snapshot] = len(result['interest_snapshots'][snapshot])
            result['interest_delegates'][snapshot] = result['interest_weights'][snapshot] - result['interest_members'][snapshot]

    # add population of the issue
    if 'session_key' in session:
        result['population_snapshots'] = dict()
        result['population_members'] = dict()
        result['population_weights'] = dict()
        result['population_delegates'] = dict()
        for snapshot in ['latest', 'end_of_admission', 'half_freeze', 'full_freeze']:
            result['population_weights'][snapshot] = 0
            result['population_snapshots'][snapshot] = api_load('/population', q={'issue_id': issue_id, 'snapshot': snapshot}, session=session)['result']
            for p in result['population_snapshots'][snapshot]:
                result['population_weights'][snapshot] += p['weight']
            result['population_members'][snapshot] = len(result['population_snapshots'][snapshot])
            result['population_delegates'][snapshot] = result['population_weights'][snapshot] - result['population_members'][snapshot]

    # add progress
    progress = issue_progress(issue=result, policy=result['policy'])
    result = dict(result.items() + progress.items())

    # add battle
    if result['status_quo_schulze_rank'] != None:
        result['battle'] = api_load_all('/battle', q={'issue_id': issue_id})['result']
        result['battle_table'] = dict()
        for b in result['battle']:
            winner = b['winning_initiative_id'] if b['winning_initiative_id'] != None else 0
            loser = b['losing_initiative_id'] if b['losing_initiative_id'] != None else 0

            if not winner in result['battle_table']:
                result['battle_table'][winner] = dict()

            result['battle_table'][winner][loser] = b['count']

    return result
예제 #15
0
def show_issues():
    data = db_load('/issue')
    return render_template('issues.html', data=data, helper=helper)
예제 #16
0
def policy_time_bars_filter(policy_id, phase):
    p = db_load('/policy', q={'policy_id': policy_id})['result'][0]
    result = dict()

    result['admission_time'] = 0
    if 'minutes' in p['admission_time']:
        result['admission_time'] += p['admission_time']['minutes']
    if 'hours' in p['admission_time']:
        result['admission_time'] += p['admission_time']['hours'] * 60
    if 'days' in p['admission_time']:
        result['admission_time'] += p['admission_time']['days'] * 60 * 24
    if 'years' in p['admission_time']:
        result['admission_time'] += p['admission_time']['years'] * 60 * 24 * 365

    result['discussion_time'] = 0
    if 'minutes' in p['discussion_time']:
        result['discussion_time'] += p['discussion_time']['minutes']
    if 'hours' in p['discussion_time']:
        result['discussion_time'] += p['discussion_time']['hours'] * 60
    if 'days' in p['discussion_time']:
        result['discussion_time'] += p['discussion_time']['days'] * 60 * 24
    if 'years' in p['discussion_time']:
        result['discussion_time'] += p['discussion_time']['years'] * 60 * 24 * 365

    result['verification_time'] = 0
    if 'minutes' in p['verification_time']:
        result['verification_time'] += p['verification_time']['minutes']
    if 'hours' in p['verification_time']:
        result['verification_time'] += p['verification_time']['hours'] * 60
    if 'days' in p['verification_time']:
        result['verification_time'] += p['verification_time']['days'] * 60 * 24
    if 'years' in p['verification_time']:
        result['verification_time'] += p['verification_time']['years'] * 60 * 24 * 365

    result['voting_time'] = 0
    if 'minutes' in p['voting_time']:
        result['voting_time'] += p['voting_time']['minutes']
    if 'hours' in p['voting_time']:
        result['voting_time'] += p['voting_time']['hours'] * 60
    if 'days' in p['voting_time']:
        result['voting_time'] += p['voting_time']['days'] * 60 * 24
    if 'years' in p['voting_time']:
        result['voting_time'] += p['voting_time']['years'] * 60 * 24 * 365

    # make sure no bar is way larger than all the others
    final = result

    factor = float(result['admission_time']) / float(result['discussion_time'] + result['verification_time'] + result['voting_time'])
    if factor > 20:
        final['admission_time'] = float(result['admission_time']) / (factor * 0.75)
        
    factor = float(result['discussion_time']) / float(result['admission_time'] + result['verification_time'] + result['voting_time'])
    if factor > 20:
        final['discussion_time'] = float(result['discussion_time']) / (factor * 0.75)

    factor =  float(result['verification_time']) / float(result['admission_time'] + result['discussion_time'] + result['voting_time'])
    if factor > 20:
        final['verification_time'] = float(result['verification_time']) / (factor * 0.75)

    factor =  float(result['voting_time']) / float(result['admission_time'] + result['discussion_time'] + result['verification_time'])
    if factor > 20:
        final['voting_time'] = float(result['voting_time']) / (factor * 0.75)

    total_time = final['admission_time'] + final['discussion_time'] + final['verification_time'] + final['voting_time']

    return (final[phase] / float(total_time)) * 100.0
예제 #17
0
def show_units():
    data = db_load('/unit')
    return render_template('units.html', data=data, helper=helper, ourl='index/index.html?filter_unit=global')
예제 #18
0
def show_policy(policy_id):
    data = db_load('/policy', q={'policy_id': policy_id})
    return render_template('policy.html', data=data, helper=helper, ourl='policy/show/%d.html' % policy_id)
예제 #19
0
def show_policies():
    data = db_load('/policy')
    return render_template('policies.html', data=data, helper=helper, ourl='policy/list.html')
예제 #20
0
def show_statistiken():
    data = dict()
    data['issue'] = api_load_all('/issue', q={'unit_id': 1})
    data['unit'] = db_load('/unit')
    return render_template('stats.html', data=data, helper=helper)
예제 #21
0
def show_areas():
    data = db_load('/area')
    return render_template('areas.html', data=data, helper=helper)