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'])})
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)
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)
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})
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) })
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})
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) })
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)
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) })
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})
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})
def leg_title(role): if role["type"] == "member": return metadata(role["state"])["%s_title" % role["chamber"]] return ""
def chamber(role): if role["type"] == "member": return metadata(role["state"])["%s_chamber_name" % role["chamber"]] return ""
def state_name(abbrev): return metadata(abbrev)["state_name"]