]> git.scottworley.com Git - paperdoorknob/blobdiff - args.py
Move per-thread processing stuff into Thread
[paperdoorknob] / args.py
diff --git a/args.py b/args.py
index 384e4487b76bfb918f7316dee8604276f92e1cc5..de6fc01f58d353c26cb245352640a0ad1970cc0b 100644 (file)
--- a/args.py
+++ b/args.py
@@ -8,6 +8,7 @@
 from argparse import ArgumentParser
 from contextlib import contextmanager
 import os.path
 from argparse import ArgumentParser
 from contextlib import contextmanager
 import os.path
+from sys import stderr
 
 from typing import Iterator
 
 
 from typing import Iterator
 
@@ -15,7 +16,7 @@ from xdg_base_dirs import xdg_cache_home
 
 from domfilter import ApplyDOMFilters, DOMFilters
 from fetch import CachingFetcher
 
 from domfilter import ApplyDOMFilters, DOMFilters
 from fetch import CachingFetcher
-from glowfic import BesideIconLayout, BelowIconLayout, Layout
+from glowfic import BesideIconLayout, BelowIconLayout
 from htmlfilter import ApplyHTMLFilters, HTMLFilters
 from texfilter import ApplyTexFilters, TexFilters
 from images import DiskImageStore
 from htmlfilter import ApplyHTMLFilters, HTMLFilters
 from texfilter import ApplyTexFilters, TexFilters
 from images import DiskImageStore
@@ -23,10 +24,14 @@ from spec import Spec
 from texify import PandocTexifier
 
 
 from texify import PandocTexifier
 
 
+def _print_status(msg: str) -> None:
+    print(msg, file=stderr, end='' if msg.endswith('\r') else '\n')
+
+
 def _command_line_parser() -> ArgumentParser:
     parser = ArgumentParser(prog='paperdoorknob', description='Print glowfic')
     parser.add_argument(
 def _command_line_parser() -> ArgumentParser:
     parser = ArgumentParser(prog='paperdoorknob', description='Print glowfic')
     parser.add_argument(
-        '--cache_path',
+        '--cache-path',
         metavar='PATH',
         help='Where to keep the http cache (instead of %(default)s)',
         default=os.path.join(xdg_cache_home(), "paperdoorknob"))
         metavar='PATH',
         help='Where to keep the http cache (instead of %(default)s)',
         default=os.path.join(xdg_cache_home(), "paperdoorknob"))
@@ -46,20 +51,24 @@ See https://faculty.bard.edu/bloch/geometry.pdf for details
         help='Which HTML filters to use (default: %(default)s)',
         default=','.join(f[0] for f in HTMLFilters))
     parser.add_argument(
         help='Which HTML filters to use (default: %(default)s)',
         default=','.join(f[0] for f in HTMLFilters))
     parser.add_argument(
-        '--image_size',
+        '--image-size',
         help='How large the icon images are, in mm',
         default=20)
     parser.add_argument(
         '--layout',
         help='How large the icon images are, in mm',
         default=20)
     parser.add_argument(
         '--layout',
-        default='below',
+        default='beside',
         help='Whether to put character and author information `beside` or `below` the icon ' +
         help='Whether to put character and author information `beside` or `below` the icon ' +
-             '(default: below)')
+             '(default: beside)')
     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(
         '--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(
+        '--quiet',
+        action='store_true',
+        help='Suppress progress messages')
     parser.add_argument(
         '--texfilters',
         help='Which TeX filters to use (default: %(default)s)',
     parser.add_argument(
         '--texfilters',
         help='Which TeX filters to use (default: %(default)s)',
@@ -78,14 +87,15 @@ See https://faculty.bard.edu/bloch/geometry.pdf for details
 def spec_from_commandline_args() -> Iterator[Spec]:
     args = _command_line_parser().parse_args()
     texifier = PandocTexifier(args.pandoc or 'pandoc')
 def spec_from_commandline_args() -> Iterator[Spec]:
     args = _command_line_parser().parse_args()
     texifier = PandocTexifier(args.pandoc or 'pandoc')
-    layout: Layout
+    layout: bytes
     if args.layout == 'below':
     if args.layout == 'below':
-        layout = BelowIconLayout(texifier, args.image_size)
+        layout = BelowIconLayout
     elif args.layout == 'beside':
     elif args.layout == 'beside':
-        layout = BesideIconLayout(texifier, args.image_size)
+        layout = BesideIconLayout
     else:
         raise ValueError(f'Unknown layout: {args.layout}')
     else:
         raise ValueError(f'Unknown layout: {args.layout}')
-    with CachingFetcher(args.cache_path, args.timeout) as fetcher:
+    log = (lambda _: None) if args.quiet else _print_status
+    with CachingFetcher(args.cache_path, args.timeout, log) as fetcher:
         with open(args.out + '.tex', 'wb') as texout:
             yield Spec(
                 args.url,
         with open(args.out + '.tex', 'wb') as texout:
             yield Spec(
                 args.url,
@@ -93,7 +103,10 @@ def spec_from_commandline_args() -> Iterator[Spec]:
                 DiskImageStore(args.out + '_images', fetcher),
                 lambda x: ApplyHTMLFilters(args.htmlfilters, x),
                 lambda x: ApplyDOMFilters(args.domfilters, x),
                 DiskImageStore(args.out + '_images', fetcher),
                 lambda x: ApplyHTMLFilters(args.htmlfilters, x),
                 lambda x: ApplyDOMFilters(args.domfilters, x),
+                texifier,
                 lambda x: ApplyTexFilters(args.texfilters, x),
                 lambda x: ApplyTexFilters(args.texfilters, x),
+                args.image_size,
                 layout,
                 args.geometry,
                 layout,
                 args.geometry,
-                texout)
+                texout,
+                log)