You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.7 KiB
Python

# coding=utf-8
import sys
import traceback
import os
from qutescript.utils import send_messages_to_browser
from .cli import main_cli, userscript_cli
from .request import build_request
def userscript(func):
def wrapper():
userscript_name = os.path.basename(sys.argv[0])
try:
main_cli()
except Exception as e:
send_messages_to_browser(traceback.format_exc(), 'Cannot execute cli handler', script_name=userscript_name)
sys.exit(1)
try:
request = build_request()
except Exception as e:
send_messages_to_browser(traceback.format_exc(), 'Cannot build request.', script_name=userscript_name)
sys.exit(5)
try:
func_ = userscript_cli(func)
command = func_(request)
if not command:
return
except Exception as e:
send_messages_to_browser(traceback.format_exc(), 'Userscript error.', script_name=userscript_name)
sys.exit(10)
if not request.fifo:
message = ('ERROR: userscript returned command: {}, '
'but QUTE_FIFO was not found in passed environment.\n'
'Try: :spawn --userscript /path/to/script ?')
send_messages_to_browser(traceback.format_exc(), message, script_name=userscript_name)
sys.exit(20)
try:
with open(request.fifo, 'w') as fifo:
fifo.write('{}\n'.format(command))
except Exception as e:
send_messages_to_browser(
traceback.format_exc(),
'Cannot write to FIFO: {!r}'.format(request.fifo), script_name=userscript_name)
sys.exit(30)
return wrapper