def GET(self, format=None): i = web.input(address=None) pzip5 = re.compile(r'\d{5}') pzip4 = re.compile(r'\d{5}-\d{4}') pdist = re.compile(r'[a-zA-Z]{2}\-\d{2}') dists = None if not i.get('q'): i.q = i.get('zip') if i.q: if pzip4.match(i.q): zip, plus4 = i.q.split('-') dists = [x.district_id for x in db.select('zip4', where='zip=$zip and plus4=$plus4', vars=locals())] elif pzip5.match(i.q): try: dists = zip2rep.zip2dist(i.q, i.address) except zip2rep.BadAddress: return render.find_badaddr(i.q, i.address) if dists: d_dists = list(schema.District.select(where=web.sqlors('name=', dists))) out = apipublish.publish(d_dists, format) if out: return out if len(dists) == 1: raise web.seeother('/us/%s' % dists[0].lower()) elif len(dists) == 0: return render.find_none(i.q) else: return render.find_multi(i.q, d_dists) if pdist.match(i.q): raise web.seeother('/us/%s' % i.q) results = se.query(i.q) reps = schema.Politician.select(where=web.sqlors('id=', results)) if len(reps) > 1: return render.find_multi_reps(reps, congress_ranges) else: try: rep = reps[0] web.seeother('/p/%s' % rep.id) except IndexError: raise web.notfound() else: index = list(schema.District.select(order='name asc')) for i in index: i.politician = list(db.select('curr_politician', where='district_id = $i.name', vars=locals())) out = apipublish.publish(index, format) if out: return out return render.districtlist(index)
def GET(self, polid, format=None): if polid != polid.lower(): raise web.seeother('/p/' + polid.lower()) i = web.input() idlookup = False for k in ['votesmartid', 'bioguideid', 'opensecretsid', 'govtrackid']: if i.get(k): idlookup = True ps = schema.Politician.where(**{k: i[k]}) if ps: raise web.seeother('/p/' + ps[0].id) if idlookup: # we were looking up by ID but nothing matched raise web.notfound() if polid == "" or polid == "index": polids = tuple(x.id for x in db.query('select id from curr_politician')) p = schema.Politician.select(where='id in $polids', order='district_id asc', vars=locals()) out = apipublish.publish(p, format) if out: return out return render.pollist(p) try: p = schema.Politician.where(id=polid)[0] except IndexError: raise web.notfound() #@@move into schema p.fec_ids = [ x.fec_id for x in db.select('politician_fec_ids', what='fec_id', where='politician_id=$polid', vars=locals()) ] p.related_groups = group_politician_similarity(polid) p.contributors = politician_contributors(polid, 5) p.contributor_employers = politician_contributor_employers(polid, 5) p.lob_contribs = politician_lob_contributions(polid, 0, 5) p.capitolwords = p.bioguideid and get_capitolwords(p.bioguideid) out = apipublish.publish([p], format) if out: return out return render.politician(p, sparkpos)
def GET(self, format=None): i = web.input(address=None) join = ['district' + ' LEFT OUTER JOIN politician ' 'ON (politician.district = district.name)'] if i.get('zip'): try: dists = zip2rep.zip2dist(i.zip, i.address) except zip2rep.BadAddress: return render.find_badaddr(i.zip, i.address) if len(dists) == 1: raise web.seeother('/us/%s' % dists[0].lower()) elif len(dists) == 0: return render.find_none(i.zip) else: dists = db.select(join, where=web.sqlors('name=', dists)) return render.find_multi(i.zip, dists) else: out = apipublish.publish([{ 'uri': 'http://watchdog.net/us/' + x.name.lower(), 'type': 'District', 'name': x.name, 'state': x.state, 'district': x.district, 'voting': x.voting, 'wikipedia': apipublish.URI(x.wikipedia) } for x in db.select('district')], format) if out is not False: return out dists = db.select(join, order='name asc') return render.districtlist(dists)
def GET(self, district, format=None): try: district = district.upper() d = db.select(['district', 'state', 'politician'], what=('district.*, ' 'state.name as state_name, ' 'politician.firstname as pol_firstname, ' 'politician.lastname as pol_lastname, ' 'politician.id as pol_id, ' 'politician.photo_path as pol_photo_path'), where=('district.name = $district AND ' 'district.state = state.code AND ' 'politician.district = district.name'), vars=locals())[0] except IndexError: raise web.notfound out = apipublish.publish({ 'uri': 'http://watchdog.net/us/' + district.lower(), 'type': 'District', 'state': apipublish.URI('http://watchdog.net/us/' + d.state.lower()), 'wikipedia almanac': apipublish.URI, 'name voting area_sqmi cook_index poverty_pct median_income ' 'est_population est_population_year outline center_lat ' 'center_lng zoom_level': apipublish.identity, }, [d], format) if out is not False: return out if d.district == 0: d.districtth = 'at-large' else: d.districtth = web.nthstr(d.district) return render.district(d)
def GET(self, polid, format=None): if polid != polid.lower(): raise web.seeother('/p/' + polid.lower()) if polid == "" or polid == "index": p = db.select(['politician'], order='district asc').list() out = apipublish.publish([{ 'uri': 'http://watchdog.net/p/' + x.id, 'type': 'Politician', 'district': apipublish.URI('http://watchdog.net/us/' + x.district.lower()), 'wikipedia': apipublish.URI(x.wikipedia) } for x in p], format) if out is not False: return out return render.pollist(p) try: p = db.select(['politician', 'district'], what="politician.*, district.center_lat as d0, district.center_lng as d1, district.zoom_level as d2", where='id=$polid AND district.name = politician.district', vars=locals())[0] except IndexError: raise web.notfound out = apipublish.publish([{ 'uri': 'http://watchdog.net/p/' + polid, 'type': 'Politician', 'district': apipublish.URI('http://watchdog.net/us/' + p.district.lower()), 'wikipedia': apipublish.URI(p.wikipedia), 'bioguideid': p.bioguideid, 'opensecretsid': p.opensecretsid, 'govtrackid': p.govtrackid, 'gender': p.gender, 'birthday': p.birthday, 'firstname': p.firstname, 'middlename': p.middlename, 'lastname': p.lastname, 'officeurl': p.officeurl, 'party': p.party, 'religion': p.religion, 'photo_path': p.photo_path, 'photo_credit_url': p.photo_credit_url, 'photo_credit_text': p.photo_credit_text, }], format) if out is not False: return out return render.politician(p)
def earmark_list(format, page=0, limit=50): earmarks = schema.Earmark.select(limit=limit, offset=page * limit, order='id') out = apipublish.publish(earmarks, format) if out: return out return render.earmark_list(earmarks, limit)
def bill_list(format, page=0, limit=50): bills = schema.Bill.select(limit=limit, offset=page*limit, order='session desc, introduced desc, number desc') out = apipublish.publish(bills, format) if out: return out #@@ add link to next page return render.bill_list(bills, limit)
def GET(self, state, format=None): try: state = schema.State.where(code=state.upper())[0] except IndexError: raise web.notfound out = apipublish.publish([state], format) if out: return out return render.state(state)
def GET(self, district, format=None): try: d = schema.District.where(name=district.upper())[0] except IndexError: raise web.notfound out = apipublish.publish([d], format) if out: return out return render.district(d, sparkpos)
def earmark_pol_list(pol_id, format, page=0, limit=50): earmarks = db.select(['earmark_sponsor', 'earmark'], what='earmark.*', where='politician_id = $pol_id AND earmark_id=earmark.id', order='final_amt desc', vars=locals()) if not earmarks: # @@TODO: something better here. raise web.notfound out = apipublish.publish(earmarks, format) if out: return out return render.earmark_list(earmarks, limit)
def bill_list(format, page=0, limit=50): bills = db.select('bill', limit=limit, offset=page*limit, order='session desc').list() out = apipublish.publish({ 'uri': apipublish.generic(lambda x: 'http://watchdog.net/b/' + x.id), 'type': 'Bill', 'title': apipublish.identity, }, bills, format) if out: return out return render.bill_list(bills, limit)
def GET(self, polid, format=None): if polid != polid.lower(): raise web.seeother('/p/' + polid.lower()) i = web.input() idlookup = False for k in ['votesmartid', 'bioguideid', 'opensecretsid', 'govtrackid']: if i.get(k): idlookup = True ps = schema.Politician.where(**{k: i[k]}) if ps: raise web.seeother('/p/' + ps[0].id) if idlookup: # we were looking up by ID but nothing matched raise web.notfound() if polid == "" or polid == "index": polids = tuple(x.id for x in db.query('select id from curr_politician')) p = schema.Politician.select(where='id in $polids', order='district_id asc', vars=locals()) out = apipublish.publish(p, format) if out: return out return render.pollist(p) try: p = schema.Politician.where(id=polid)[0] except IndexError: raise web.notfound() #@@move into schema p.fec_ids = [x.fec_id for x in db.select('politician_fec_ids', what='fec_id', where='politician_id=$polid', vars=locals())] p.related_groups = group_politician_similarity(polid) p.contributors = politician_contributors(polid, 5) p.contributor_employers = politician_contributor_employers(polid, 5) p.lob_contribs = politician_lob_contributions(polid, 0, 5) p.capitolwords = p.bioguideid and get_capitolwords(p.bioguideid) out = apipublish.publish([p], format) if out: return out return render.politician(p, sparkpos)
def GET(self, district, format=None): try: d = schema.District.where(name=district.upper())[0] d.politician = list(db.select('curr_politician', where='district_id = $d.name', vars=locals()))[0] except IndexError: raise web.notfound() out = apipublish.publish([d], format) if out: return out return render.district(d, sparkpos)
def GET(self, state, format=None): try: state = schema.State.where(code=state.upper())[0] state.senators = db.select('curr_politician', where='district_id = $state.code', vars=locals()) except IndexError: raise web.notfound() out = apipublish.publish([state], format) if out: return out return render.state(state)
def bill_list(format, page=0, limit=50): bills = schema.Bill.select( limit=limit, offset=page * limit, order='session desc, introduced desc, number desc') out = apipublish.publish(bills, format) if out: return out #@@ add link to next page return render.bill_list(bills, limit)
def earmark_pol_list(pol_id, format, page=0, limit=50): earmarks = db.select(['earmark_sponsor', 'earmark'], what='earmark.*', where='politician_id = $pol_id AND earmark_id=earmark.id', order='final_amt desc', vars=locals()).list() for e in earmarks: p = schema.Politician.where(id=pol_id)[0] e.sponsor_name = '%s %s' % (p.title, p.name) if not earmarks: # @@TODO: something better here. raise web.notfound() out = apipublish.publish(earmarks, format) if out: return out return render.earmark_list(earmarks, limit)
def GET(self, polid, format=None): if polid != polid.lower(): raise web.seeother('/p/' + polid.lower()) i = web.input() idlookup = False for k in ['votesmartid', 'bioguideid', 'opensecretsid', 'govtrackid']: if i.get(k): idlookup = True ps = schema.Politician.where(**{k: i[k]}) if ps: raise web.seeother('/p/' + ps[0].id) if idlookup: # we were looking up by ID but nothing matched raise web.notfound if polid == "" or polid == "index": p = schema.Politician.select(order='district_id asc') out = apipublish.publish(p, format) if out: return out return render.pollist(p) try: p = schema.Politician.where(id=polid)[0] except IndexError: raise web.notfound #@@move into schema p.fec_ids = [x.fec_id for x in db.select('politician_fec_ids', what='fec_id', where='politician_id=$polid', vars=locals())] p.related_groups = group_politician_similarity(polid) out = apipublish.publish([p], format) if out: return out return render.politician(p, sparkpos)
def GET(self, bill_id, format=None): if bill_id == "" or bill_id == "index": i = web.input(page=0) return bill_list(format, int(i.page)) try: b = schema.Bill.where(id=bill_id)[0] except IndexError: raise web.notfound out = apipublish.publish([b], format) if out: return out return render.bill(b)
def GET(self, district, format=None): try: d = schema.District.where(name=district.upper())[0] d.politician = list( db.select('curr_politician', where='district_id = $d.name', vars=locals()))[0] except IndexError: raise web.notfound() out = apipublish.publish([d], format) if out: return out return render.district(d, sparkpos)
def GET(self, bill_id, format=None): if bill_id == "" or bill_id == "index": i = web.input(page=0) return bill_list(format, int(i.page)) try: b = schema.Bill.where(id=bill_id)[0] except IndexError: raise web.notfound() out = apipublish.publish([b], format) if out: return out return render.bill(b)
def GET(self, roll_id, format=None): try: b = schema.Roll.where(id=roll_id)[0] votes = schema.Vote.where(roll_id=b.id) except IndexError: raise web.notfound out = apipublish.publish([b], format) if out: return out def votepct(pvotes): s = (float(pvotes.get(1, 0)) / sum(pvotes.values())) return str(s * 100)[:4].rstrip('.') + '%' return render.roll(b, votes, votepct)
def GET(self, roll_id, format=None): try: b = schema.Roll.where(id=roll_id)[0] votes = schema.Vote.where(roll_id=b.id) except IndexError: raise web.notfound() out = apipublish.publish([b], format) if out: return out def votepct(pvotes): s = (float(pvotes.get(1, 0)) / sum(pvotes.values())) return str(s * 100)[:4].rstrip('.') + '%' return render.roll(b, votes, votepct)
def earmark_pol_list(pol_id, format, page=0, limit=50): earmarks = db.select( ['earmark_sponsor', 'earmark'], what='earmark.*', where='politician_id = $pol_id AND earmark_id=earmark.id', order='final_amt desc', vars=locals()).list() for e in earmarks: p = schema.Politician.where(id=pol_id)[0] e.sponsor_name = '%s %s' % (p.title, p.name) if not earmarks: # @@TODO: something better here. raise web.notfound() out = apipublish.publish(earmarks, format) if out: return out return render.earmark_list(earmarks, limit)
def GET(self, state, format=None): state = state.upper() try: state = db.select('state', where='code=$state', vars=locals())[0] except IndexError: raise web.notfound out = apipublish.publish(publishify({ 'uri': 'http://watchdog.net/us/' + state.code.lower(), 'type': 'State', 'wikipedia': apipublish.URI, 'code fipscode name status': identity, }, [state]), format) if out is not False: return out districts = db.select('district', where='state=$state.code', order='district asc', vars=locals()) return render.state(state, districts.list())
def GET(self, bill_id, format=None): if bill_id == "" or bill_id == "index": i = web.input(page=0) return bill_list(format, int(i.page)) try: b = db.select('bill', where='id=$bill_id', vars=locals())[0] except IndexError: raise web.notfound b.sponsorname = polname_by_id(b.sponsor) b.interest_group_support = interest_group_support(bill_id) b.votes_by_party = votes_by_party(bill_id) out = apipublish.publish({ 'uri': 'http://watchdog.net/b/' + bill_id, 'type': 'Bill', 'session title summary sponsor' : apipublish.identity, 'interest_group_support': apipublish.table({ 'longname support': apipublish.identity}), }, [b], format) if out: return out return render.bill(b)
def GET(self, format=None): i = web.input(address=None) join = ['district' + ' LEFT OUTER JOIN politician ' 'ON (politician.district = district.name)'] pzip5 = re.compile(r'\d{5}') pzip4 = re.compile(r'\d{5}-\d{4}') pname = re.compile(r'[a-zA-Z\.]+') pdist = re.compile(r'[a-zA-Z]{2}\-\d{2}') dist_struct = { 'uri': apipublish.generic(lambda x: 'http://watchdog.net/us/' + x.name.lower()), 'type': 'District', 'name state district voting': apipublish.identity, 'wikipedia': apipublish.URI, } if i.get('zip'): if pzip4.match(i.zip): zip, plus4 = i.zip.split('-') dists = [x.district for x in db.select('zip4', where='zip=$zip and plus4=$plus4', vars=locals())] d_dists = db.select('district', where=web.sqlors('name=', dists)) out = apipublish.publish(dist_struct, d_dists, format) if out is not False: return out if len(dists) == 0: return render.find_none(i.zip) else: #@@ verify there aren't dupe districts raise web.seeother('/us/%s' % dists[0].lower()) if pzip5.match(i.zip): try: dists = zip2rep.zip2dist(i.zip, i.address) except zip2rep.BadAddress: return render.find_badaddr(i.zip, i.address) d_dists = db.select('district', where=web.sqlors('name=', dists)) out = apipublish.publish(dist_struct, d_dists, format) if out is not False: return out if len(dists) == 1: raise web.seeother('/us/%s' % dists[0].lower()) elif len(dists) == 0: return render.find_none(i.zip) else: dists = db.select(join, where=web.sqlors('name=', dists)) return render.find_multi(i.zip, dists) if pdist.match(i.zip): raise web.seeother('/us/%s' % i.zip) if pname.match(i.zip): in_name = i.zip.lower() name = in_name.replace(' ', '_') vars = {'name':'%%%s%%' % name} reps = db.select('politician', where="id like $name", vars=vars) if len(reps) == 0: vars = {'name':'%%%s%%' % in_name} reps = db.select('v_politician_name', where="name ilike $name", vars=vars) if len(reps) > 1: return render.find_multi_reps(reps) else: try: rep = reps[0] web.seeother('/p/%s' % rep.id) except IndexError: raise web.notfound else: out = apipublish.publish(dist_struct, db.select('district'), format) if out is not False: return out dists = db.select(join, order='name asc') return render.districtlist(dists)
def GET(self, polid, format=None): if polid != polid.lower(): raise web.seeother('/p/' + polid.lower()) if polid == "" or polid == "index": p = db.select(['politician'], order='district asc').list() out = apipublish.publish({ 'uri': apipublish.generic(lambda x: 'http://watchdog.net/p/' + x.id), 'type': 'Politician', 'district': lambda x: apipublish.URI('http://watchdog.net/us/' + x.lower()), 'wikipedia': apipublish.URI, }, p, format) if out is not False: return out return render.pollist(p) try: p = db.select(['politician', 'district'], what=("politician.*, " "district.center_lat as d0, " "district.center_lng as d1, " "district.zoom_level as d2"), where=('id=$polid AND ' 'district.name = politician.district'), vars=locals())[0] except IndexError: raise web.notfound p.fec_ids = [x.fec_id for x in db.select('politician_fec_ids', what='fec_id', where='politician_id=$polid', vars=locals())] p.interest_group_rating = interest_group_ratings(polid) p.interest_group_table = interest_group_table(p.interest_group_rating) p.related_groups = group_politician_similarity(polid) p.sponsored_bills = bills_sponsored(polid) out = apipublish.publish({ 'uri': 'http://watchdog.net/p/' + polid, 'type': 'Politician', 'district': apipublish.URI('http://watchdog.net/us/' + p.district.lower()), 'wikipedia photo_credit_url officeurl': apipublish.URI, 'interest_group_rating': apipublish.table({ 'year groupname longname rating': apipublish.identity}), 'related_groups' : apipublish.table({ 'longname': apipublish.identity, 'num_bills_agreed': apipublish.generic(lambda g: g.agreed), 'num_bills_voted': apipublish.generic(lambda g: g.total), 'agreement_percent': apipublish.generic(lambda g: int(g.agreement * 100)), 'group_politician_url': apipublish.generic(lambda g: 'http://watchdog.net/p/%s/%s' % (polid, g.id)) }), 'sponsored_bills': apipublish.table({ 'id': apipublish.generic(lambda b: '%s. %s' % (b.type.upper(), b.number)), 'session title introduced': apipublish.identity, 'url': apipublish.generic(lambda b: 'http://watchdog.net/b/%s' % (b.id)) }), 'bioguideid opensecretsid govtrackid gender birthday firstname ' 'middlename lastname party religion photo_path ' 'photo_credit_text ' 'amt_earmark_requested n_earmark_requested n_earmark_received ' 'amt_earmark_received ' 'n_bills_introduced n_bills_enacted n_bills_debated ' 'n_bills_cosponsored ' 'icpsrid nominate predictability ' 'n_speeches words_per_speech ' 'fec_ids money_raised pct_spent pct_self ' 'pct_indiv pct_pac': apipublish.identity, }, [p], format) if out: return out return render.politician(p)
def GET(self, format=None): i = web.input(address=None) pzip5 = re.compile(r'\d{5}') pzip4 = re.compile(r'\d{5}-\d{4}') pdist = re.compile(r'[a-zA-Z]{2}\-\d{2}') dists = None if not i.get('q'): i.q = i.get('zip') if i.q: if pzip4.match(i.q): zip, plus4 = i.q.split('-') dists = [ x.district_id for x in db.select('zip4', where='zip=$zip and plus4=$plus4', vars=locals()) ] elif pzip5.match(i.q): try: dists = zip2rep.zip2dist(i.q, i.address) except zip2rep.BadAddress: return render.find_badaddr(i.q, i.address) if dists: d_dists = list( schema.District.select(where=web.sqlors('name=', dists))) out = apipublish.publish(d_dists, format) if out: return out if len(dists) == 1: raise web.seeother('/us/%s' % dists[0].lower()) elif len(dists) == 0: return render.find_none(i.q) else: return render.find_multi(i.q, d_dists) if pdist.match(i.q): raise web.seeother('/us/%s' % i.q) results = se.query(i.q) reps = schema.Politician.select(where=web.sqlors('id=', results)) if len(reps) > 1: return render.find_multi_reps(reps, congress_ranges) else: try: rep = reps[0] web.seeother('/p/%s' % rep.id) except IndexError: raise web.notfound() else: index = list(schema.District.select(order='name asc')) for i in index: i.politician = list( db.select('curr_politician', where='district_id = $i.name', vars=locals())) out = apipublish.publish(index, format) if out: return out return render.districtlist(index)
def earmark_list(format, page=0, limit=50): earmarks = schema.Earmark.select(limit=limit, offset=page*limit, order='id') out = apipublish.publish(earmarks, format) if out: return out return render.earmark_list(earmarks, limit)