Beispiel #1
0
 def POST(self):
     i = web.input()
     form = forms.writerep()
     if form.validates(i):
         print i
         try:
             dists = zip2rep.zip2dist(i.zipcode, i.addr1+i.addr2)
         except zip2rep.BadAddress:
             dists = []
         #print dists
         
         if len(dists) != 1:
             form = add_zip4(form)
             return self.GET(form)
         
         dist = dists[0]    
         captcha = ('captcha' not in i) and writerep.get_captcha_src(dist)
         if captcha: 
             form = add_captcha(form, captcha)
             return self.GET(form) 
             
         msg_sent = writerep.writerep(district=dist, **i)
         if msg_sent: helpers.set_msg('Your message has been sent.')
         raise web.seeother('/writerep')
     else:
         return self.GET(form)        
Beispiel #2
0
 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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)