layout = BesideIconLayout(texifier, args.image_size)
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,
layout,
args.geometry,
texout,
- (lambda _: None) if args.quiet else _print_status)
+ log)
from abc import ABC, abstractmethod
from contextlib import contextmanager
from sys import stderr
-from typing import IO, Iterator
+from typing import Callable, Iterator
import requests
import requests_cache
@contextmanager
def CachingFetcher(
- cache_path: str,
- timeout: int,
- report_stream: IO[str] = stderr) -> Iterator[_CachingFetcher]:
+ cache_path: str,
+ timeout: int,
+ log: Callable[[str], None] = lambda x: print(x, file=stderr),
+) -> Iterator[_CachingFetcher]:
with requests_cache.CachedSession(cache_path, cache_control=True) as session:
fetcher = _CachingFetcher(session, timeout)
yield fetcher
if fetcher.request_count > 0:
percent = 100.0 * fetcher.cache_hit_count / fetcher.request_count
- print(
- f"Fetch cache hits: {fetcher.cache_hit_count} ({percent:.1f}%)",
- file=report_stream)
+ log(f"Fetch cache hits: {fetcher.cache_hit_count} ({percent:.1f}%)")
class FakeFetcher(Fetcher):
def testCacheHitRateReport(self) -> None:
buf = StringIO()
- with CachingFetcher("testcachehitratereportwithcl", TIMEOUT, buf) as f:
+
+ def log(msg: str) -> None:
+ print(msg, file=buf)
+ with CachingFetcher("testcachehitratereportwithcl", TIMEOUT, log) as f:
for _ in range(7):
f.fetch(f"http://localhost:{self._port}")
self.assertEqual("Fetch cache hits: 6 (85.7%)\n", buf.getvalue())