示例#1
0
def legislator(request, id):
    leg = db.legislators.find_one({'_all_ids': id})
    print id
    if not leg:
        raise Http404
    return render_to_response('legislator.html', {'leg': leg,
                                              'metadata': metadata(leg['state'])})
示例#2
0
def state_index(request, state):
    meta = metadata(state)
    if not meta:
        raise Http404

    context = {}
    context['metadata'] = SortedDict(sorted(meta.items()))

    # counts
    context['upper_bill_count'] = db.bills.find({'state':state,
                                                 'chamber': 'upper'}).count()
    context['lower_bill_count'] = db.bills.find({'state':state,
                                                 'chamber': 'lower'}).count()
    context['bill_count'] = context['upper_bill_count'] + context['lower_bill_count']
    context['ns_bill_count'] = db.bills.find({'state': state,
                                           'sources': {'$size': 0}}).count()

    # types
    types = defaultdict(int)
    action_types = defaultdict(int)

    for bill in db.bills.find({'state': state}, {'type':1, 'actions.type': 1}):
        for t in bill['type']:
            types[t] += 1
        for a in bill['actions']:
            for at in a['type']:
                action_types[at] += 1
    context['types'] = dict(types)
    context['action_types'] = dict(action_types)

    # legislators
    context['upper_leg_count'] = db.legislators.find({'state':state,
                                                  'chamber':'upper'}).count()
    context['lower_leg_count'] = db.legislators.find({'state':state,
                                                  'chamber':'lower'}).count()
    context['leg_count'] = context['upper_leg_count'] + context['lower_leg_count']
    context['ns_leg_count'] = db.legislators.find({'state': state,
                             'sources': {'$size': 0}}).count()
    context['missing_pvs'] = db.legislators.find({'state': state,
                             'votesmart_id': {'$exists':False}}).count()
    context['missing_nimsp'] = db.legislators.find({'state': state,
                             'nimsp_candidate_id': {'$exists':False}}).count()

    # committees
    context['upper_com_count'] = db.committees.find({'state':state,
                                                  'chamber':'upper'}).count()
    context['lower_com_count'] = db.committees.find({'state':state,
                                                  'chamber':'lower'}).count()
    context['joint_com_count'] = db.committees.find({'state':state,
                                                  'chamber':'joint'}).count()
    context['com_count'] = (context['upper_com_count'] +
                            context['lower_com_count'] +
                            context['joint_com_count'])
    context['ns_com_count'] = db.committees.find({'state': state,
                             'sources': {'$size': 0}}).count()

    return render_to_response('state_index.html', context)
示例#3
0
def state_index(request, state):
    meta = metadata(state)
    if not meta:
        raise Http404

    context = {}
    context['metadata'] = SortedDict(sorted(meta.items()))

    # types
    latest_session = meta['terms'][-1]['sessions'][-1]
    context['session'] = latest_session

    context.update(_bill_stats_for_session(state, latest_session))

    # legislators
    context['upper_leg_count'] = db.legislators.find({'state':state,
                                                      'active': True,
                                                  'chamber':'upper'}).count()
    context['lower_leg_count'] = db.legislators.find({'state':state,
                                                      'active': True,
                                                  'chamber':'lower'}).count()
    context['lower_leg_count'] = db.legislators.find({'state':state,
                                                      'active': True,
                                                  'chamber':'lower'}).count()
    context['leg_count'] = context['upper_leg_count'] + context['lower_leg_count']
    context['inactive_leg_count'] = db.legislators.find({'state': state,
                                                         'active': False}).count()
    context['ns_leg_count'] = db.legislators.find({'state': state,
                             'active': True,
                             'sources': {'$size': 0}}).count()
    context['missing_pvs'] = db.legislators.find({'state': state,
                             'active': True,
                             'votesmart_id': {'$exists':False}}).count()
    context['missing_nimsp'] = db.legislators.find({'state': state,
                             'active': True,
                             'nimsp_id': {'$exists':False}}).count()
    context['missing_tdata'] = db.legislators.find({'state': state,
                             'active': True,
                             'transparencydata_id': {'$exists':False}}).count()

    # committees
    context['upper_com_count'] = db.committees.find({'state':state,
                                                  'chamber':'upper'}).count()
    context['lower_com_count'] = db.committees.find({'state':state,
                                                  'chamber':'lower'}).count()
    context['joint_com_count'] = db.committees.find({'state':state,
                                                  'chamber':'joint'}).count()
    context['com_count'] = (context['upper_com_count'] +
                            context['lower_com_count'] +
                            context['joint_com_count'])
    context['ns_com_count'] = db.committees.find({'state': state,
                             'sources': {'$size': 0}}).count()

    return render_to_response('state_index.html', context)
示例#4
0
def random_bill(request, state):
    meta = metadata(state)
    if not meta:
        raise Http404
    latest_session = meta['terms'][-1]['sessions'][-1]

    spec = {'state':state.lower(), 'session':latest_session} 

    count = db.bills.find(spec).count()
    bill = db.bills.find(spec)[random.randint(0, count - 1)]

    return render_to_response('bill.html', {'bill': bill})
示例#5
0
def legislators(request, state):
    upper_legs = db.legislators.find({'state': state.lower(),
                                      'chamber': 'upper'})
    lower_legs = db.legislators.find({'state': state.lower(),
                                      'chamber': 'lower'})
    upper_legs = sorted(upper_legs, key=keyfunc)
    lower_legs = sorted(lower_legs, key=keyfunc)

    return render_to_response('legislators.html', {
        'upper_legs': upper_legs,
        'lower_legs': lower_legs,
        'metadata': metadata(state)
    })
示例#6
0
def bills(request, state):
    meta = metadata(state)
    if not meta:
        raise Http404

    sessions = []
    for term in meta['terms']:
        for session in term['sessions']:
            stats = _bill_stats_for_session(state, session)
            stats['session'] = session
            sessions.append(stats)

    return render_to_response('bills.html', {'sessions': sessions,
                                             'metadata': meta})
示例#7
0
def committees(request, state):
    upper_coms = db.committees.find({'state': state.lower(),
                                      'chamber': 'upper'})
    lower_coms = db.committees.find({'state': state.lower(),
                                      'chamber': 'lower'})
    joint_coms = db.committees.find({'state': state.lower(),
                                      'chamber': 'joint'})
    upper_coms = sorted(upper_coms)
    lower_coms = sorted(lower_coms)
    joint_coms = sorted(joint_coms)

    return render_to_response('committees.html', {
        'upper_coms': upper_coms,
        'lower_coms': lower_coms,
        'joint_coms': joint_coms,
        'metadata': metadata(state)
    })
示例#8
0
def categorize_subjects(state, data_dir, process_all):
    categorizer = defaultdict(set)
    categories_per_bill = defaultdict(int)
    uncategorized = defaultdict(int)

    reader = csv.reader(open(os.path.join(data_dir, state+'.csv')))

    # build category mapping
    for row in reader:
        for subj in row[1:]:
            if subj:
                if subj not in SUBJECTS:
                    raise Exception('invalid subject %s (%s)' % (subj, row[0]))
                categorizer[row[0]].add(subj)


    spec = {'state':state}
    if not process_all:
        sessions = metadata(state)['terms'][-1]['sessions']
        spec['session'] = {'$in': sessions}

    for bill in db.bills.find(spec):
        subjects = set()
        for ss in bill.get('scraped_subjects', []):
            categories = categorizer[ss]
            if not categories:
                uncategorized[ss] += 1
            subjects.update(categories)
        bill['subjects'] = list(subjects)

        # increment # of bills with # of subjects
        categories_per_bill[len(subjects)] += 1

        db.bills.save(bill)

    print 'Categories per bill'
    print '-------------------'
    for ncats, total in sorted(categories_per_bill.items()):
        print '%s categories: %s bills' % (ncats, total)

    print 'Uncategorized'
    print '-------------'
    subjects_i = sorted([(v,k) for k,v in uncategorized.items()], reverse=True)
    for n, category in subjects_i:
        print '%s,%s' % (n, category)
示例#9
0
def legislators(request, state):
    upper_legs = db.legislators.find({'state': state.lower(),
                                      'active': True,
                                      'chamber': 'upper'})
    lower_legs = db.legislators.find({'state': state.lower(),
                                      'active': True,
                                      'chamber': 'lower'})
    inactive_legs = db.legislators.find({'state': state.lower(),
                                         'active': False})
    upper_legs = sorted(upper_legs, key=keyfunc)
    lower_legs = sorted(lower_legs, key=keyfunc)
    inactive_legs = sorted(inactive_legs, key=lambda x: x['last_name'])

    return render_to_response('legislators.html', {
        'upper_legs': upper_legs,
        'lower_legs': lower_legs,
        'inactive_legs': inactive_legs,
        'metadata': metadata(state)
    })
示例#10
0
def state_index(request, state):
    meta = metadata(state)
    if not meta:
        raise Http404

    recent_bills = db.bills.find({'state': state.lower()}).sort(
        'created_at', pymongo.DESCENDING).limit(20)

    current_term = meta['terms'][-1]

    upper = db.legislators.find({
            'roles': {'$elemMatch':
                          {'state': state,
                           'term': current_term,
                           'chamber': 'upper',
                           'type': 'member',
                           'district': {'$ne': '22'}}}}).sort('last_name')

    upper = list(upper)
    for leg in upper:
        leg['url'] = '/browse/people/%s/' % leg['_id']

    lower = db.legislators.find({
            'roles': {'$elemMatch':
                          {'state': state,
                           'term': current_term,
                           'chamber': 'lower',
                           'type': 'member'}}}).sort('last_name')

    lower = list(lower)
    for leg in lower:
        leg['url'] = '/browse/people/%s/' % leg['_id']

    return render_to_response('state_index.html',
                              {'recent_bills': recent_bills,
                               'upper': list(upper),
                               'lower': list(lower),
                               'metadata': meta})
示例#11
0
def random_bill(request, state):
    # latest session
    session = metadata(state)['terms'][-1]['sessions'][-1]
    bills = list(db.bills.find({'state':state.lower(), 'session': session}))
    bill = random.choice(bills)
    return render_to_response('bill.html', {'bill': bill})
示例#12
0
def leg_title(role):
    if role["type"] == "member":
        return metadata(role["state"])["%s_title" % role["chamber"]]
    return ""
示例#13
0
def chamber(role):
    if role["type"] == "member":
        return metadata(role["state"])["%s_chamber_name" % role["chamber"]]
    return ""
示例#14
0
def state_name(abbrev):
    return metadata(abbrev)["state_name"]