import logging import tempfile from contextlib import contextmanager from itertools import takewhile, starmap, islice, repeat from operator import truth from image_prediction.config import CONFIG from redai.utils import export @contextmanager def temporary_pdf_file(pdf: bytes): with tempfile.NamedTemporaryFile() as f: f.write(pdf) yield f.name def make_logger_getter(): logger = logging.getLogger("imclf") logger.propagate = False handler = logging.StreamHandler() handler.setLevel(CONFIG.service.logging_level) log_format = "[%(levelname)s]: %(message)s" formatter = logging.Formatter(log_format) handler.setFormatter(formatter) logger.addHandler(handler) def get_logger(): return logger return get_logger get_logger = make_logger_getter() def show_banner(): banner = ''' ..... . ... .. .d88888Neu. 'L xH88"`~ .x8X x .d88" oec : F""""*8888888F .. . : :8888 .f"8888Hf 5888R @88888 * `"*88*" .888: x888 x888. :8888> X8L ^""` '888R 8"*88% -.... ue=:. ~`8888~'888X`?888f` X8888 X888h 888R 8b. :88N ` X888 888X '888> 88888 !88888. 888R u888888> 9888L X888 888X '888> 88888 %88888 888R 8888R uzu. `8888L X888 888X '888> 88888 '> `8888> 888R 8888P ,""888i ?8888 X888 888X '888> `8888L % ?888 ! 888R *888> 4 9888L %888> "*88%""*88" '888!` `8888 `-*"" / .888B . 4888 ' '8888 '88% `~ " `"` "888. :" ^*888% '888 "*8Nu.z*" `""***~"` "% 88R 88> 48 '8 ''' logger = logging.getLogger(__name__) logger.propagate = False handler = logging.StreamHandler() handler.setLevel(logging.INFO) formatter = logging.Formatter("") handler.setFormatter(formatter) logger.addHandler(handler) logger.info(banner) @export def chunk_iterable(iterable, chunk_size): return takewhile(truth, map(tuple, starmap(islice, repeat((iter(iterable), chunk_size)))))