def show_wochenschau(): week_ago = datetime.now()-timedelta(days=7) data = dict() data['monday'] = week_ago.isoformat() data['week_number'] = week_ago.isocalendar()[1] + 1 data['closed'] = api_load_all('/issue', q={'issue_closed_after': week_ago.isoformat()}) data['created'] = api_load_all('/issue', q={'issue_created_after': week_ago.isoformat()}) data['frozen'] = api_load_all('/issue', q={'issue_half_frozen_after': week_ago.isoformat()}) data['voting'] = api_load_all('/issue', q={'issue_state': 'voting'}) return render_template('wochenschau.html', data=data, helper=helper)
def create_ical(): data = dict() data['voting'] = api_load_all('/issue', q={'issue_state': 'voting'}) tz = pytz.timezone('Europe/Berlin') cal = Calendar() cal.add('prodid', '-//Niels Lohmann//LiquidFeedback Viewer//DE') cal.add('version', '2.0') for issue in data['voting']['result']: start_time = iso8601.parse_date(issue['fully_frozen']).astimezone(pytz.timezone('Europe/Berlin')) end_time = iso8601.parse_date(future_date_filter(issue['fully_frozen'], issue['voting_time'])).astimezone(pytz.timezone('Europe/Berlin')) event = Event() event.add('summary', u'Abstimmung %s %d' % (policy_filter(issue['policy_id'], False, False), issue['id'])) event.add('description', u'Abstimmung über Thema %d im Themenbereich "%s" mit Regelwerk %s.' % (issue['id'], area_filter(issue['area_id'], False, False), policy_filter(issue['policy_id'], False, False) )) event.add('location', u'%s' % (area_filter(issue['area_id'], False, False))) event.add('url', '%s/issue/show/%d.html' % (app.config['LQFB_URL'], issue['id'])) event.add('dtstart', start_time) event.add('dtend', end_time) event.add('dtstamp', datetime.now(tz=tz)) event['uid'] = '%s/issue/show/%d.html' % (app.config['LQFB_URL'], issue['id']) event.add('priority', 5) cal.add_component(event) return cal.to_ical()
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 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_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)