]> git.scottworley.com Git - paperdoorknob/blob - args.py
1931d4271f242dc918287d28a7bedf2e4ee71f81
[paperdoorknob] / args.py
1 # paperdoorknob: Print glowfic
2 #
3 # This program is free software: you can redistribute it and/or modify it
4 # under the terms of the GNU General Public License as published by the
5 # Free Software Foundation, version 3.
6
7
8 from argparse import ArgumentParser
9 from contextlib import contextmanager
10 import os.path
11
12 from typing import Iterator
13
14 from xdg_base_dirs import xdg_cache_home
15
16 from fetch import CachingFetcher
17 from htmlfilter import ApplyHTMLFilters, HTMLFilters
18 from spec import Spec
19 from texify import PandocTexifier
20
21
22 def _command_line_parser() -> ArgumentParser:
23 parser = ArgumentParser(prog='paperdoorknob', description='Print glowfic')
24 parser.add_argument(
25 '--cache_path',
26 metavar='PATH',
27 help='Where to keep the http cache (instead of %(default)s)',
28 default=os.path.join(xdg_cache_home(), "paperdoorknob"))
29 parser.add_argument(
30 '--htmlfilters',
31 help='Which HTML filters to use (default: %(default)s)',
32 default=','.join(f[0] for f in HTMLFilters))
33 parser.add_argument(
34 '--out',
35 help='The filename stem at which to write output ' +
36 '(eg: "%(default)s" produces %(default)s.tex, %(default)s.pdf, etc.)',
37 default='book')
38 parser.add_argument('--pandoc', help='Location of the pandoc executable')
39 parser.add_argument(
40 '--timeout',
41 help='How long to wait for HTTP requests, in seconds',
42 default=30)
43 parser.add_argument('url', help='URL to retrieve')
44 return parser
45
46
47 @contextmanager
48 def spec_from_commandline_args() -> Iterator[Spec]:
49 args = _command_line_parser().parse_args()
50 with CachingFetcher(args.cache_path, args.timeout) as fetcher:
51 with open(args.out + '.tex', 'wb') as texout:
52 yield Spec(
53 args.url,
54 fetcher,
55 lambda x: ApplyHTMLFilters(args.htmlfilters, x),
56 PandocTexifier(args.pandoc or 'pandoc'),
57 texout)