Guest User

Untitled

a guest
Feb 21st, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.41 KB | None | 0 0
  1. # encoding: utf-8
  2. import logging
  3. import re
  4. import sys
  5. import os
  6. from traceback import *
  7. from root import DEVELOPMENT_PROJECT_ROOT
  8.  
  9. # generate nice traceback with optional textmate links
  10. def format_nice_traceback(traceback):
  11. tb = "<table>"
  12. lines = traceback.splitlines(1)
  13. lines.reverse()
  14. for line in lines[1:len(lines)-2]:
  15. filename = re.findall('File "(.+)",', line)
  16. linenumber = re.findall(', line\s(\d+)', line)
  17. modulename = re.findall(', in ([A-Za-z0-9_]+)', line)
  18. if filename and linenumber and not re.match("<(.+)>",filename[0]):
  19. file_name = filename[0]
  20. # tohle je preklad cesty z google masiny na lokalni vyvojovy stroj
  21. m = re.match(r"^/base/data/home/.*/[0-9]*-[0-9a-f]*\.[0-9]*/(.*)$", file_name)
  22. if m:
  23. file_name = DEVELOPMENT_PROJECT_ROOT+m.group(1)
  24. else:
  25. m = re.match(r"^.*?\.zip/(.*)$", file_name)
  26. if m: file_name = DEVELOPMENT_PROJECT_ROOT+m.group(1)
  27. module_name = 'in <span class="module">%s</span>' % modulename[0] if modulename else ""
  28. base_name = os.path.basename(file_name)
  29. line = linenumber[0]
  30. html = '<tr><td><a class="file" href="txmt://open/?url=file://%s&line=%s">%s:%s</a></td><td>%s</td></tr>\n' % (file_name,line,base_name,line,module_name)
  31. tb += html
  32. tb += '</table>'
  33. return tb
  34.  
  35. def show_error(handler, code, log_msg = ''):
  36. handler.error(code)
  37. handler.response.out.write('<html><body>')
  38. if sys.exc_info()[0]:
  39. if not isinstance(sys.exc_info()[0], str):
  40. exception_name = sys.exc_info()[0].__name__
  41. exception_details = str(sys.exc_info()[1])
  42. else:
  43. exception_name = 'Exception'
  44. exception_details = str(sys.exc_info())
  45. exception_traceback = ''.join(format_exception(*sys.exc_info()))
  46.  
  47. # logging.error(exception_name)
  48. # logging.error(exception_details)
  49. # logging.error(log_msg)
  50. # logging.error(exception_traceback)
  51.  
  52. tb=format_nice_traceback(exception_traceback)
  53. handler.response.out.write('<html><body><head><title>'+exception_details+'</title>\n')
  54. handler.response.out.write('<style>\n')
  55. handler.response.out.write('html {font-family: arial}\n')
  56. handler.response.out.write('h1 { padding:5px; color: white; background-color:red; font-weight:bold;}\n')
  57. handler.response.out.write('h2 { padding-bottom: 0px; margin-bottom: 0px; }\n')
  58. handler.response.out.write('.file { font-family: courier; font-size: 12px; }\n')
  59. handler.response.out.write('.module { color: darkGreen; }\n')
  60. handler.response.out.write('</style></head>\n')
  61. handler.response.out.write('<h1>%s: %s</h1>\n' % (exception_name, exception_details))
  62. handler.response.out.write('<h2>Traceback:</h2>\n')
  63. handler.response.out.write('%s' % tb)
  64. else:
  65. handler.response.out.write('<h1>%s</h1>\n' % log_msg)
  66. handler.response.out.write('<script>var a = document.getElementsByTagName("a")[0]; if (a) window.open(a.href, "_self");</script>')
  67. handler.response.out.write('</body></html>')
  68.  
  69. # toto je dekorator
  70. def nice_traceback(f):
  71. def inner(self, *args, **kvargs):
  72. try:
  73. f(self, *args, **kvargs)
  74. except:
  75. show_error(self, 500)
  76. return inner
Add Comment
Please, Sign In to add comment