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')
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
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']))
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)
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> ' + result return result
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]
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']
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> ' + result return result
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> ' + result return result
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> ' + result return result
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> ' + result return result
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)
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)
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
def show_issues(): data = db_load('/issue') return render_template('issues.html', data=data, helper=helper)
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
def show_units(): data = db_load('/unit') return render_template('units.html', data=data, helper=helper, ourl='index/index.html?filter_unit=global')
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)
def show_policies(): data = db_load('/policy') return render_template('policies.html', data=data, helper=helper, ourl='policy/list.html')
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)
def show_areas(): data = db_load('/area') return render_template('areas.html', data=data, helper=helper)