Files
zulip/zerver/management/commands/explain_js_error.py
Tim Abbott e111a2f9a5 [manual] Rename Django app from zephyr to zerver.
This needs to be deployed to both staging and prod at the same
off-peak time (and the schema migration run).

At the time it is deployed, we need to make a few changes directly in
the database:

(1) UPDATE django_content_type set app_label='zerver' where app_label='zephyr';
(2) UPDATE south_migrationhistory set app_name='zerver' where app_name='zephyr';

(imported from commit eb3fd719571740189514ef0b884738cb30df1320)
2013-08-06 07:39:36 -04: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 zerver.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 directory>'
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 directory 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))