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, 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, 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)