+# paperdoorknob: Print glowfic
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, version 3.
+
+
+from argparse import ArgumentParser
+from contextlib import contextmanager
+import os.path
+
+from typing import Iterator
+
+from xdg_base_dirs import xdg_cache_home
+
+from fetch import CachingFetcher
+from spec import Spec
+from texify import PandocTexifier
+
+
+def _command_line_parser() -> ArgumentParser:
+ parser = ArgumentParser(prog='paperdoorknob', description='Print glowfic')
+ parser.add_argument(
+ '--cache_path',
+ metavar='PATH',
+ help='Where to keep the http cache (instead of %(default)s)',
+ default=os.path.join(xdg_cache_home(), "paperdoorknob"))
+ parser.add_argument(
+ '--out',
+ help='The filename stem at which to write output ' +
+ '(eg: "%(default)s" produces %(default)s.tex, %(default)s.pdf, etc.)',
+ default='book')
+ parser.add_argument('--pandoc', help='Location of the pandoc executable')
+ parser.add_argument(
+ '--timeout',
+ help='How long to wait for HTTP requests, in seconds',
+ default=30)
+ parser.add_argument('url', help='URL to retrieve')
+ return parser
+
+
+@contextmanager
+def spec_from_commandline_args() -> Iterator[Spec]:
+ args = _command_line_parser().parse_args()
+ with CachingFetcher(args.cache_path, args.timeout) as fetcher:
+ with open(args.out + '.tex', 'wb') as texout:
+ yield Spec(args.url, fetcher, PandocTexifier(args.pandoc or 'pandoc'), texout)