Files
zulip/zephyr/management/commands/explain_js_error.py
Luke Faraone 71a91197fa Enable absolute imports.
See PEP 328[1] for details. This feature was introduced in Python 2.5 and
will become mandatory in Python 3.

[1]: http://www.python.org/dev/peps/pep-0328

(imported from commit 7444eeba8a08d5f91b94c7921848f2274979bd76)
2013-04-23 09:51:17 -07:00

50 lines
1.4 KiB
Python

from __future__ import absolute_import
import os
import sys
import select
from django.core.management.base import BaseCommand, CommandError
from zephyr.lib.unminify import SourceMap
# Wait for the user to paste text, then time out quickly and
# return it. Disable echo so that we can re-echo the same
# lines with our annotations.
def get_full_paste():
try:
os.system('stty -echo raw isig')
data = ''
while True:
fd = sys.stdin.fileno()
can_read = select.select([fd], [], [], 0.1)[0]
if can_read:
data += os.read(fd, 1)
else:
if data:
return data
finally:
os.system('stty cooked echo')
class Command(BaseCommand):
args = '<source map file>'
help = '''Add source locations to a stack backtrace generated by minified code.
The currently checked out code should match the version that generated the error.'''
def handle(self, *args, **options):
if len(args) != 1:
raise CommandError('No source map file specified')
source_map = SourceMap(args[0])
if os.isatty(sys.stdin.fileno()):
sys.stdout.write('Paste stacktrace:\n\n')
sys.stdout.flush()
stacktrace = get_full_paste()
else:
stacktrace = sys.stdin.read()
sys.stdout.write(source_map.annotate_stacktrace(stacktrace))