コード例 #1
0
ファイル: server.py プロジェクト: nlohmann/lqfb_viewer
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)
コード例 #2
0
ファイル: ical.py プロジェクト: nlohmann/lqfb_viewer
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()
コード例 #3
0
ファイル: aggregators.py プロジェクト: nlohmann/lqfb_viewer
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
コード例 #4
0
ファイル: aggregators.py プロジェクト: nlohmann/lqfb_viewer
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
コード例 #5
0
ファイル: server.py プロジェクト: nlohmann/lqfb_viewer
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)