def errors():
 import operator
 import os
 import hashlib
 app = get_app()
 if is_gae:
  method = ('dbold' if ('old' in (request.args(1) or '')) else 'dbnew')
 else:
  method = (request.args(1) or 'new')
 db_ready = {}
 db_ready['status'] = get_ticket_storage(app)
 db_ready['errmessage'] = T('No ticket_storage.txt found under /private folder')
 db_ready['errlink'] = 'http://web2py.com/books/default/chapter/29/13#Collecting-tickets'
 if (method == 'new'):
  errors_path = apath(('%s/errors' % app), r=request)
  delete_hashes = []
  for item in request.vars:
   if (item[:7] == 'delete_'):
    delete_hashes.append(item[7:])
  hash2error = dict()
  for fn in listdir(errors_path, '^[a-fA-F0-9.\\-]+$'):
   fullpath = os.path.join(errors_path, fn)
   if (not os.path.isfile(fullpath)):
    continue
   try:
    fullpath_file = safe_open(fullpath, 'rb')
    try:
     error = pickle.load(fullpath_file)
    finally:
     fullpath_file.close()
   except IOError:
    continue
   except EOFError:
    continue
   hash = hashlib.md5(to_bytes(error['traceback'])).hexdigest()
   if (hash in delete_hashes):
    os.unlink(fullpath)
   else:
    try:
     hash2error[hash]['count'] += 1
    except KeyError:
     error_lines = error['traceback'].split('\n')
     last_line = (error_lines[(-2)] if (len(error_lines) > 1) else 'unknown')
     error_causer = os.path.split(error['layer'])[1]
     hash2error[hash] = dict(count=1, pickel=error, causer=error_causer, last_line=last_line, hash=hash, ticket=fn)
  decorated = [(x['count'], x) for x in hash2error.values()]
  decorated.sort(key=operator.itemgetter(0), reverse=True)
  return dict(errors=[x[1] for x in decorated], app=app, method=method, db_ready=db_ready)
 elif (method == 'dbnew'):
  errors_path = apath(('%s/errors' % app), r=request)
  (tk_db, tk_table) = get_ticket_storage(app)
  delete_hashes = []
  for item in request.vars:
   if (item[:7] == 'delete_'):
    delete_hashes.append(item[7:])
  hash2error = dict()
  for fn in tk_db((tk_table.id > 0)).select():
   try:
    error = pickle.loads(fn.ticket_data)
    hash = hashlib.md5(error['traceback']).hexdigest()
    if (hash in delete_hashes):
     tk_db((tk_table.id == fn.id)).delete()
     tk_db.commit()
    else:
     try:
      hash2error[hash]['count'] += 1
     except KeyError:
      error_lines = error['traceback'].split('\n')
      last_line = error_lines[(-2)]
      error_causer = os.path.split(error['layer'])[1]
      hash2error[hash] = dict(count=1, pickel=error, causer=error_causer, last_line=last_line, hash=hash, ticket=fn.ticket_id)
   except AttributeError as e:
    tk_db((tk_table.id == fn.id)).delete()
    tk_db.commit()
  decorated = [(x['count'], x) for x in hash2error.values()]
  decorated.sort(key=operator.itemgetter(0), reverse=True)
  return dict(errors=[x[1] for x in decorated], app=app, method=method, db_ready=db_ready)
 elif (method == 'dbold'):
  (tk_db, tk_table) = get_ticket_storage(app)
  for item in request.vars:
   if (item[:7] == 'delete_'):
    tk_db((tk_table.ticket_id == item[7:])).delete()
    tk_db.commit()
  tickets_ = tk_db((tk_table.id > 0)).select(tk_table.ticket_id, tk_table.created_datetime, orderby=(~ tk_table.created_datetime))
  tickets = [row.ticket_id for row in tickets_]
  times = dict([(row.ticket_id, row.created_datetime) for row in tickets_])
  return dict(app=app, tickets=tickets, method=method, times=times, db_ready=db_ready)
 else:
  for item in request.vars:
   if ((item[:7] == 'delete_') and (not (item == 'delete_all}'))):
    os.unlink(apath(('%s/errors/%s' % (app, item[7:])), r=request))
  func = (lambda p: os.stat(apath(('%s/errors/%s' % (app, p)), r=request)).st_mtime)
  tickets = sorted(listdir(apath(('%s/errors/' % app), r=request), '^\\w.*'), key=func, reverse=True)
  return dict(app=app, tickets=tickets, method=method, db_ready=db_ready)

def errors ( ) : import operator import os import hashlib app = get_app ( ) if is_gae : method = ( 'dbold' if ( 'old' in ( request . args ( 1 ) or '' ) ) else 'dbnew' ) else : method = ( request . args ( 1 ) or 'new' ) db_ready = { } db_ready [ 'status' ] = get_ticket_storage ( app ) db_ready [ 'errmessage' ] = T ( 'No ticket_storage.txt found under /private folder' ) db_ready [ 'errlink' ] = 'http://web2py.com/books/default/chapter/29/13#Collecting-tickets' if ( method == 'new' ) : errors_path = apath ( ( '%s/errors' % app ) , r = request ) delete_hashes = [ ] for item in request . vars : if ( item [ : 7 ] == 'delete_' ) : delete_hashes . append ( item [ 7 : ] ) hash2error = dict ( ) for fn in listdir ( errors_path , '^[a-fA-F0-9.\\-]+$' ) : fullpath = os . path . join ( errors_path , fn ) if ( not os . path . isfile ( fullpath ) ) : continue try : fullpath_file = safe_open ( fullpath , 'rb' ) try : error = pickle . load ( fullpath_file ) finally : fullpath_file . close ( ) except IOError : continue except EOFError : continue hash = hashlib . md5 ( to_bytes ( error [ 'traceback' ] ) ) . hexdigest ( ) if ( hash in delete_hashes ) : os . unlink ( fullpath ) else : try : hash2error [ hash ] [ 'count' ] += 1 except KeyError : error_lines = error [ 'traceback' ] . split ( '\n' ) last_line = ( error_lines [ ( - 2 ) ] if ( len ( error_lines ) > 1 ) else 'unknown' ) error_causer = os . path . split ( error [ 'layer' ] ) [ 1 ] hash2error [ hash ] = dict ( count = 1 , pickel = error , causer = error_causer , last_line = last_line , hash = hash , ticket = fn ) decorated = [ ( x [ 'count' ] , x ) for x in hash2error . values ( ) ] decorated . sort ( key = operator . itemgetter ( 0 ) , reverse = True ) return dict ( errors = [ x [ 1 ] for x in decorated ] , app = app , method = method , db_ready = db_ready ) elif ( method == 'dbnew' ) : errors_path = apath ( ( '%s/errors' % app ) , r = request ) ( tk_db , tk_table ) = get_ticket_storage ( app ) delete_hashes = [ ] for item in request . vars : if ( item [ : 7 ] == 'delete_' ) : delete_hashes . append ( item [ 7 : ] ) hash2error = dict ( ) for fn in tk_db ( ( tk_table . id > 0 ) ) . select ( ) : try : error = pickle . loads ( fn . ticket_data ) hash = hashlib . md5 ( error [ 'traceback' ] ) . hexdigest ( ) if ( hash in delete_hashes ) : tk_db ( ( tk_table . id == fn . id ) ) . delete ( ) tk_db . commit ( ) else : try : hash2error [ hash ] [ 'count' ] += 1 except KeyError : error_lines = error [ 'traceback' ] . split ( '\n' ) last_line = error_lines [ ( - 2 ) ] error_causer = os . path . split ( error [ 'layer' ] ) [ 1 ] hash2error [ hash ] = dict ( count = 1 , pickel = error , causer = error_causer , last_line = last_line , hash = hash , ticket = fn . ticket_id ) except AttributeError as e : tk_db ( ( tk_table . id == fn . id ) ) . delete ( ) tk_db . commit ( ) decorated = [ ( x [ 'count' ] , x ) for x in hash2error . values ( ) ] decorated . sort ( key = operator . itemgetter ( 0 ) , reverse = True ) return dict ( errors = [ x [ 1 ] for x in decorated ] , app = app , method = method , db_ready = db_ready ) elif ( method == 'dbold' ) : ( tk_db , tk_table ) = get_ticket_storage ( app ) for item in request . vars : if ( item [ : 7 ] == 'delete_' ) : tk_db ( ( tk_table . ticket_id == item [ 7 : ] ) ) . delete ( ) tk_db . commit ( ) tickets_ = tk_db ( ( tk_table . id > 0 ) ) . select ( tk_table . ticket_id , tk_table . created_datetime , orderby = ( ~ tk_table . created_datetime ) ) tickets = [ row . ticket_id for row in tickets_ ] times = dict ( [ ( row . ticket_id , row . created_datetime ) for row in tickets_ ] ) return dict ( app = app , tickets = tickets , method = method , times = times , db_ready = db_ready ) else : for item in request . vars : if ( ( item [ : 7 ] == 'delete_' ) and ( not ( item == 'delete_all}' ) ) ) : os . unlink ( apath ( ( '%s/errors/%s' % ( app , item [ 7 : ] ) ) , r = request ) ) func = ( lambda p : os . stat ( apath ( ( '%s/errors/%s' % ( app , p ) ) , r = request ) ) . st_mtime ) tickets = sorted ( listdir ( apath ( ( '%s/errors/' % app ) , r = request ) , '^\\w.*' ) , key = func , reverse = True ) return dict ( app = app , tickets = tickets , method = method , db_ready = db_ready )
error handler .