Skip to content

Commit 26ffc87

Browse files
committed
Simplify; stick to argparse for because with click's framework, this
use case seems convoluted :-S
1 parent c294b60 commit 26ffc87

File tree

5 files changed

+73
-55
lines changed

5 files changed

+73
-55
lines changed

examples/debug.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,21 @@
33
import json
44

55
from qutescript import qutescript
6+
from qutescript.cli import parser
7+
8+
9+
class KaboomError(Exception):
10+
pass
11+
12+
13+
parser.add_argument('--kaboom', action='store_true', help='Make things explode.')
614

715

816
@qutescript
917
def dump_to_log(request):
18+
args = parser.parse_args()
19+
if args.kaboom:
20+
raise KaboomError('Oh noes!')
1021
with open('qutescript.debug.log', 'a') as logfile:
1122
line = json.dumps(request.dump())
1223
logfile.writelines([line])

src/__init__.py

Whitespace-only changes.

src/qutescript/cli.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,42 @@
1515
Also see (1) from http://click.pocoo.org/5/setuptools/#setuptools-integration
1616
"""
1717
import sys
18+
import argparse
1819

19-
import click
2020
import os
2121

22-
2322
# ---
2423

25-
# script_cli_parser = argparse.ArgumentParser(description='Qutebrowser userscript.')
26-
# script_cli_parser.add_argument('--install', action='store_true', help='Setup permissions and show install
27-
# instructions.')
24+
parser = argparse.ArgumentParser(description='Qutebrowser userscript.')
25+
parser.add_argument('--install', action='store_true',
26+
help='Setup permissions and show install instructions.')
27+
2828

2929
class NoSubCommands(Exception):
3030
pass
3131

3232

33-
@click.group(invoke_without_command=True)
34-
@click.pass_context
35-
def userscript(ctx):
33+
def main_cli():
3634
"""
3735
Qutebrowser Userscript
3836
"""
39-
if ctx.invoked_subcommand is None:
40-
raise NoSubCommands()
37+
args = parser.parse_args()
38+
if not args.install:
39+
return
40+
main_install()
4141

4242

43-
@userscript.command(name='install')
44-
def userscript_install():
43+
def main_install():
4544
from .installer import install
4645
userscript_path = os.path.abspath(sys.argv[0])
4746
path = os.path.abspath(userscript_path)
4847
name = os.path.basename(userscript_path)
49-
click.echo_via_pager(install(path, name=name))
48+
print(install(path, name=name))
5049
sys.exit(0)
50+
51+
52+
def userscript_cli(func):
53+
def wrapper(request):
54+
return func(request)
55+
56+
return wrapper

src/qutescript/decorator.py

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,75 +3,43 @@
33
import sys
44
import traceback
55

6-
import tempfile
7-
import os
6+
from qutescript.utils import send_messages_to_browser
87

9-
from .cli import NoSubCommands, userscript
8+
from .cli import main_cli, userscript_cli
109
from .request import build_request
1110

12-
log_file_path = './qutescript.log'
13-
14-
15-
def write_log(message, file_path=None):
16-
print('***', message)
17-
file_path = file_path or log_file_path
18-
file_path = os.path.abspath(os.path.expanduser(file_path))
19-
record = ['***' + message, '\n', '\n']
20-
with open(file_path, 'a') as logfile:
21-
logfile.writelines(record)
22-
23-
24-
def send_traceback_to_browser(trace, *messages):
25-
"""
26-
Write trace and messages to a temporary file,
27-
Attempt to open the file through FIFO in the browser.
28-
"""
29-
write_log(trace)
30-
[write_log(msg) for msg in messages]
31-
fifo = os.getenv('QUTE_FIFO')
32-
out_lines = ['<html><body><pre>', trace] + ['<p>{}</p>'.format(m or '&nbsp;') for m in messages]
33-
if not fifo:
34-
return
35-
with tempfile.NamedTemporaryFile(mode='w', suffix='.html', delete=False) as trace_file:
36-
trace_file.writelines(out_lines)
37-
print('***', trace_file.name)
38-
with open(fifo, 'w') as fifo_file:
39-
fifo_file.write('open -t file://{}'.format(
40-
os.path.abspath(trace_file.name)))
41-
4211

4312
def qutescript(func):
4413
def wrapper():
4514
try:
46-
userscript()
47-
except NoSubCommands as e:
48-
pass
15+
main_cli()
4916
except Exception as e:
50-
send_traceback_to_browser(traceback.format_exc(), 'Cannot execute cli handler')
17+
send_messages_to_browser(traceback.format_exc(), 'Cannot execute cli handler')
5118
sys.exit(1)
5219
try:
5320
request = build_request()
5421
except Exception as e:
55-
send_traceback_to_browser(traceback.format_exc(), 'Cannot build request.')
22+
send_messages_to_browser(traceback.format_exc(), 'Cannot build request.')
5623
sys.exit(5)
5724
try:
58-
command = func(request)
25+
func_ = userscript_cli(func)
26+
command = func_(request)
5927
if not command:
6028
return
6129
except Exception as e:
62-
send_traceback_to_browser(traceback.format_exc(), 'Userscript error.')
30+
send_messages_to_browser(traceback.format_exc(), 'Userscript error.')
6331
sys.exit(10)
6432
if not request.fifo:
6533
message = ('ERROR: userscript returned command: {}, '
6634
'but QUTE_FIFO was not found in passed environment.\n'
6735
'Try: :spawn --userscript /path/to/script ?')
68-
send_traceback_to_browser(traceback.format_exc(), message)
36+
send_messages_to_browser(traceback.format_exc(), message)
6937
sys.exit(20)
7038
try:
7139
with open(request.fifo, 'w') as fifo:
7240
fifo.write('{}\n'.format(command))
7341
except Exception as e:
74-
send_traceback_to_browser(
42+
send_messages_to_browser(
7543
traceback.format_exc(),
7644
'Cannot write to FIFO: {!r}'.format(request.fifo))
7745
sys.exit(30)

src/qutescript/utils.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/usr/bin/env python
2+
# coding=utf-8
3+
import os
4+
import tempfile
5+
6+
log_file_path = './qutescript.log'
7+
8+
9+
def write_log(message, file_path=None):
10+
print('***', message)
11+
file_path = file_path or log_file_path
12+
file_path = os.path.abspath(os.path.expanduser(file_path))
13+
record = ['***' + message, '\n', '\n']
14+
with open(file_path, 'a') as logfile:
15+
logfile.writelines(record)
16+
17+
18+
def send_messages_to_browser(*messages):
19+
"""
20+
Write messages to a temporary file,
21+
Attempt to open the file through FIFO in the browser.
22+
"""
23+
[write_log(msg) for msg in messages]
24+
fifo = os.getenv('QUTE_FIFO')
25+
if not fifo:
26+
return
27+
out_lines = ['<html><body><pre>'] + ['<p>{}</p>'.format(m or '&nbsp;') for m in messages]
28+
with tempfile.NamedTemporaryFile(mode='w', suffix='.html', delete=False) as trace_file:
29+
trace_file.writelines(out_lines)
30+
print('***', trace_file.name)
31+
with open(fifo, 'w') as fifo_file:
32+
fifo_file.write('open -t file://{}'.format(
33+
os.path.abspath(trace_file.name)))

0 commit comments

Comments
 (0)