示例#1
0
def parse_error(path):
    html = open(path).read(10000)
    soup = BeautifulSoup(html)

    h1 = web.htmlunquote(soup.body.h1.string or "")
    h2 = web.htmlunquote(soup.body.h2.string or "")
    message = h1.split("at")[0].strip() + ": " + (h2 and h2.splitlines()[0])

    code, url = [
        web.htmlunquote(td.string) for td in soup.body.table.findAll("td")
    ]

    # strip common prefixes
    code = web.re_compile(
        ".*/(?:staging|production)/(openlibrary|infogami|web)").sub(
            r"\1", code)

    m = web.re_compile(r"(\d\d)(\d\d)(\d\d)(\d{6})").match(
        web.numify(os.path.basename(path)))
    hh, mm, ss, microsec = m.groups()

    return web.storage(url=url,
                       message=message,
                       code=code,
                       time="%s:%s:%s" % (hh, mm, ss))
示例#2
0
 def get_atimes(block_number):
     atimes = {}
     d = self._dirname(block_number) # _dirname works even with block_number
     for f in os.listdir(d):
         id = int(web.numify(f))
         atime = os.stat(os.path.join(d, f)).st_atime
         atimes[id] = max(self.atimes.get(id, 0), atime)
     return atimes
示例#3
0
def save_user(i):
    pin = web.numify(i.pin)
    volunteer = 'volunteer' in i
    if 'donate' in i:
        donate_amt = int(i.donate_amt or '0')
    else:
        donate_amt = 0
    donate = 'donate' in i and int(i.donate_amt, 0)
    db.insert('users', name=i.name, email=i.email, phone=i.phone, pin=pin, want2volunteer=volunteer, want2donate=donate_amt)
示例#4
0
 def POST(self):
     i = dict((k, v) for k, v in web.input().items() if k.startswith("status-"))
     
     store = web.ctx.site.store
     for k, v in i.items():
         key = 'talks/' + web.numify(k)
         talk = store[key]
         if talk.get('status') != v:
             store[key] = dict(talk, status=v)
     
     raise web.seeother("/talks")
示例#5
0
def update_user_details(i, uid=None):
    if not uid:
        user = helpers.get_user_by_email(i.get('email'))
        uid = user and user.id
    i['phone'] = web.numify(i.get('phone'))
    details = ['prefix', 'lname', 'fname', 'addr1', 'addr2', 'city', 'zip5', 'zip4', 'phone', 'state']
    
    d = {}
    for (k, v) in i.items():
        if v and (k in details):
            d[k] = v
    db.update('users', where='id=$uid', vars=locals(), **d)
示例#6
0
def update_user_details(i):
    user = helpers.get_user_by_email(i.get("email"))
    userid = user and user.id
    i["zip5"] = i.get("zipcode")
    i["phone"] = web.numify(i.get("phone"))
    details = ["prefix", "lname", "fname", "addr1", "addr2", "city", "zip5", "zip4", "phone", "state"]

    d = {}
    for (k, v) in i.items():
        if v and (k in details):
            d[k] = v
    db.update("users", where="id=$userid", vars=locals(), **d)
示例#7
0
def get_sort_key(key):
    """Returns a sort key used to group urls in 10K batches.

    >>> get_sort_key("/authors/OL123456A")
    'authors_0012'
    """
    m = re_key.match(key)
    if not m:
        return
    prefix = m.group(1)
    num = int(web.numify(key)) / 10000
    return "%s_%04d" % (prefix, num)
示例#8
0
def get_sort_key(key):
    """Returns a sort key used to group urls in 10K batches.

    >>> get_sort_key("/authors/OL123456A")
    'authors_0012'
    """
    m = re_key.match(key)
    if not m:
        return
    prefix = m.group(1)
    num = int(web.numify(key)) / 10000
    return "%s_%04d" % (prefix, num)
示例#9
0
 def hash(self, key):
     """Returns an integer in the range [0..999] for each key.
     """
     if key.startswith("/authors/"):
         n = int(web.numify(key))
         return 100 + n / 1000000
     elif key.startswith("/books/"):
         n = int(web.numify(key))
         return 200 + n / 1000000
     elif key.startswith("person:"):
         return 400
     elif key.startswith("place:"):
         return 410
     elif key.startswith("subject:"):
         return 420
     elif key.startswith("time:"):
         return 430
     elif key.startswith("/works/"):
         n = int(web.numify(key))
         return 800 + n / 1000000
     else:
         return 900
示例#10
0
 def hash(self, key):
     """Returns an integer in the range [0..999] for each key.
     """
     if key.startswith("/authors/"):
         n = int(web.numify(key))
         return 100 + n / 1000000
     elif key.startswith("/books/"):
         n = int(web.numify(key))
         return 200 + n / 1000000
     elif key.startswith("person:"):
         return 400
     elif key.startswith("place:"):
         return 410
     elif key.startswith("subject:"):
         return 420
     elif key.startswith("time:"):
         return 430
     elif key.startswith("/works/"):
         n = int(web.numify(key))
         return 800 + n / 1000000
     else:
         return 900
def parse_ward(number):
    html = download_ward(number)
    soup = BeautifulSoup(html, "lxml")
    th = soup.find("th", {"colspan": "2"})
    title = th.get_text()
    print title
    table = th.parent.parent
    data = [[td.get_text() for td in tr.find_all("td")] for tr in table.find_all("tr")]

    d = {'Ward Name': title, 'Ward Number': web.numify(title)}
    for row in data:
        if len(row) == 2:
            d[row[0].strip(": ")] = row[1].strip()
    return d
示例#12
0
def update_user_details(i, uid=None):
    if not uid:
        user = helpers.get_user_by_email(i.get('email'))
        uid = user and user.id
    i['phone'] = web.numify(i.get('phone'))
    details = [
        'prefix', 'lname', 'fname', 'addr1', 'addr2', 'city', 'zip5', 'zip4',
        'phone', 'state'
    ]

    d = {}
    for (k, v) in i.items():
        if v and (k in details):
            d[k] = v
    db.update('users', where='id=$uid', vars=locals(), **d)
示例#13
0
def parse_error(path):
    html = open(path).read(10000)
    soup = BeautifulSoup(html)

    h1 = web.htmlunquote(soup.body.h1.string or "")
    h2 = web.htmlunquote(soup.body.h2.string or "")
    message = h1.split('at')[0].strip() + ': ' + (h2 and h2.splitlines()[0])

    code, url = [web.htmlunquote(td.string) for td in soup.body.table.findAll('td')]

    # strip common prefixes
    code = web.re_compile(".*/(?:staging|production)/(openlibrary|infogami|web)").sub(r'\1', code)

    m = web.re_compile('(\d\d)(\d\d)(\d\d)(\d{6})').match(web.numify(os.path.basename(path)))
    hh, mm, ss, microsec = m.groups()

    return web.storage(url=url, message=message, code=code, time="%s:%s:%s" % (hh, mm, ss))
示例#14
0
    def get_tarfile(self, name):
        id = web.numify(name)
        tarname = "covers_%s_%s.tar" % (id[:4], id[4:6])
                
        # for id-S.jpg, id-M.jpg, id-L.jpg
        if '-' in name: 
            size = name[len(id + '-'):][0].lower()
            tarname = size + "_" + tarname
        else:
            size = ""
        
        _tarname, _tarfile, _indexfile = self.tarfiles[size.upper()]
        if _tarname != tarname:
            _tarname and _tarfile.close()
            _tarfile, _indexfile = self.open_tarfile(tarname)
            self.tarfiles[size.upper()] = tarname, _tarfile, _indexfile
            log('writing', tarname)

        return _tarfile, _indexfile
示例#15
0
    def get_tarfile(self, name):
        id = web.numify(name)
        prefix = "covers_%s_%s" % (id[:4], id[4:6])

        if '-' in name:
            size = name.split('-')[1].split('.')[0]
            tarname = size.lower() + "_" + prefix + ".tar"
        else:
            size = ''
            tarname = prefix + ".tar"

        _tarname, _tarfile = self.tarfiles[size]
        if _tarname != tarname:
            _tarname and _tarfile.close()
            _tarfile = self.open_tarfile(tarname)
            self.tarfiles[size] = tarname, _tarfile
            log('writing', tarname)

        return _tarfile
示例#16
0
    def get_tarfile(self, name):
        id = web.numify(name)
        prefix = "covers_%s_%s" % (id[:4], id[4:6])

        if '-' in name:
            size = name.split('-')[1].split('.')[0]
            tarname = size.lower() + "_" + prefix + ".tar"
        else:
            size = ''
            tarname = prefix + ".tar"

        _tarname, _tarfile = self.tarfiles[size]
        if _tarname != tarname:
            _tarname and _tarfile.close()
            _tarfile = self.open_tarfile(tarname)
            self.tarfiles[size] = tarname, _tarfile
            log('writing', tarname)

        return _tarfile
示例#17
0
    def get_tarfile(self, name):
        id = web.numify(name)
        tarname = "covers_%s_%s.tar" % (id[:4], id[4:6])

        # for id-S.jpg, id-M.jpg, id-L.jpg
        if '-' in name:
            size = name[len(id + '-'):][0].lower()
            tarname = size + "_" + tarname
        else:
            size = ""

        _tarname, _tarfile, _indexfile = self.tarfiles[size.upper()]
        if _tarname != tarname:
            _tarname and _tarfile.close()
            _tarfile, _indexfile = self.open_tarfile(tarname)
            self.tarfiles[size.upper()] = tarname, _tarfile, _indexfile
            log('writing', tarname)

        return _tarfile, _indexfile
示例#18
0
 def split(self, seq, dir, bucket_size):
     M = 1024*1024
     files = {}
     
     def get_file(index):
         if index not in files:
             files[index] = open(os.path.join(dir, "%04d.txt" % index), "w", 2*M)
         return files[index]
     
     for key, json in seq:
         try:
             index = int(web.numify(key)) / bucket_size
         except Exception:
             print >> sys.stderr, "bad key %s" % key
             continue
             
         get_file(index).write("%s\t%s\n" % (key, json))
     
     for f in files.values():
         f.close()
示例#19
0
 def split(self, seq, dir, bucket_size):
     M = 1024*1024
     files = {}
     
     def get_file(index):
         if index not in files:
             files[index] = open(os.path.join(dir, "%04d.txt" % index), "w", 2*M)
         return files[index]
     
     for key, json in seq:
         try:
             index = int(web.numify(key)) / bucket_size
         except Exception:
             print >> sys.stderr, "bad key %s" % key
             continue
             
         get_file(index).write("%s\t%s\n" % (key, json))
     
     for f in files.values():
         f.close()
示例#20
0
    def send_msg(self, i, wyrform, pform=None):
        pol = self.pol
        captcha_src = (not i.get('captcha')) and get_captcha_src(pol)
        if captcha_src:
            set_captcha(wyrform, captcha_src)
            msg = 'Please fill in the captcha verification below'
            helpers.set_msg(msg, msg_type='note')
            raise CaptchaException

        email = '*****@*****.**' % (self.msg_id)
        try:
            msg_sent = writerep(pol=pol,
                        prefix=i.prefix, lname=i.lname, fname=i.fname,
                        addr1=i.addr1, addr2=i.addr2, city=i.city,
                        zipcode=i.zipcode, zip4=i.zip4,
                        phone=web.numify(i.phone), email=email, subject=i.ptitle, msg=i.msg,
                        captcha=i.get('captcha', ''))
        except:
            msg_sent = False
                            
        if not pform: update_user_details(i)
        return msg_sent
示例#21
0
def key_int(rec):
    # extract the number from a key like /a/OL1234A
    return int(web.numify(rec['key']))
示例#22
0
def check_len(phone):
    return len(web.numify(phone)) <= 15
示例#23
0
def key_int(rec):
    return int(web.numify(rec['key']))
示例#24
0
def check_len(phone):
    return len(web.numify(phone)) <= 15
示例#25
0
def key_int(key):
    # extract the number from a key like /a/OL1234A
    return int(web.numify(key))
示例#26
0
def key_int(key):
    # extract the number from a key like /a/OL1234A
    return int(web.numify(key))
示例#27
0
def key_int(rec):
    return int(web.numify(rec['key']))