From 92c103c0cc9d32c19328b7aa133557d7fecf6a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 06:02:11 -0300 Subject: [PATCH 01/20] refactor terminal into four types: tty, non_tty, jupyter and void --- alive_progress/utils/terminal.py | 46 ----------------------- alive_progress/utils/terminal/__init__.py | 39 +++++++++++++++++++ alive_progress/utils/terminal/jupyter.py | 20 ++++++++++ alive_progress/utils/terminal/non_tty.py | 11 ++++++ alive_progress/utils/terminal/tty.py | 35 +++++++++++++++++ alive_progress/utils/terminal/void.py | 27 +++++++++++++ 6 files changed, 132 insertions(+), 46 deletions(-) delete mode 100644 alive_progress/utils/terminal.py create mode 100644 alive_progress/utils/terminal/__init__.py create mode 100644 alive_progress/utils/terminal/jupyter.py create mode 100644 alive_progress/utils/terminal/non_tty.py create mode 100644 alive_progress/utils/terminal/tty.py create mode 100644 alive_progress/utils/terminal/void.py diff --git a/alive_progress/utils/terminal.py b/alive_progress/utils/terminal.py deleted file mode 100644 index f987293..0000000 --- a/alive_progress/utils/terminal.py +++ /dev/null @@ -1,46 +0,0 @@ -import os -import sys -from functools import partial - -if sys.stdout.isatty(): - def _send(sequence): # pragma: no cover - def inner(): - sys.__stdout__.write(sequence) - - return inner - - - def terminal_cols(): # pragma: no cover - return os.get_terminal_size()[0] - - - carriage_return = '\r' -else: - def _send(_sequence): # pragma: no cover - def __noop(): - return 0 - - return __noop - - - def terminal_cols(): # pragma: no cover - return sys.maxsize # do not truncate if there's no tty. - - - carriage_return = '' - - -def _send_ansi_escape(sequence, param=''): # pragma: no cover - return _send(f'\x1b[{param}{sequence}') - - -clear_line = _send_ansi_escape('2K\r') # clears the entire line: CSI n K -> with n=2. -clear_end = _send_ansi_escape('K') # clears line from cursor: CSI K. -hide_cursor = _send_ansi_escape('?25l') # hides the cursor: CSI ? 25 l. -show_cursor = _send_ansi_escape('?25h') # shows the cursor: CSI ? 25 h. -factory_cursor_up = partial(_send_ansi_escape, 'A') # sends cursor up: CSI {x}A. -cursor_up_1 = factory_cursor_up(1) - -# work around a bug on Windows OS command prompt, where ANSI escape codes are disabled by default. -if sys.platform == 'win32': - os.system('') diff --git a/alive_progress/utils/terminal/__init__.py b/alive_progress/utils/terminal/__init__.py new file mode 100644 index 0000000..8b820ce --- /dev/null +++ b/alive_progress/utils/terminal/__init__.py @@ -0,0 +1,39 @@ +import sys +from types import SimpleNamespace + +from . import jupyter, non_tty, tty, void + +# work around a bug on Windows' command prompt, where ANSI escape codes are disabled by default. +if sys.platform == 'win32': + import os + + os.system('') + + +def _create(mod): + def emit(text): + mod.write(text) + mod.flush() + + terminal = SimpleNamespace( + emit=emit, + cursor_up_1=mod.factory_cursor_up(1), + + # from mod terminal impl. + write=mod.write, + flush=mod.flush, + cols=mod.cols, + cr=mod.carriage_return, + clear_line=mod.clear_line, + clear_end=mod.clear_end, + hide_cursor=mod.hide_cursor, + show_cursor=mod.show_cursor, + factory_cursor_up=mod.factory_cursor_up, + ) + return terminal + + +TTY = _create(tty) +JUPYTER = _create(jupyter) +NON_TTY = _create(non_tty) +VOID = _create(void) diff --git a/alive_progress/utils/terminal/jupyter.py b/alive_progress/utils/terminal/jupyter.py new file mode 100644 index 0000000..d2fbb8a --- /dev/null +++ b/alive_progress/utils/terminal/jupyter.py @@ -0,0 +1,20 @@ +from .tty import carriage_return, cols, flush, write # noqa +from .void import factory_cursor_up, hide_cursor, show_cursor # noqa + +_last_cols, _clear_line = -1, '' + + +def clear_line(): + c = cols() + global _last_cols, _clear_line + if _last_cols != c: + _clear_line = f'\r{" " * cols()}\r' + _last_cols = c + write(_clear_line) + flush() + + +def clear_end(available): + for _ in range(available): + write(' ') + flush() diff --git a/alive_progress/utils/terminal/non_tty.py b/alive_progress/utils/terminal/non_tty.py new file mode 100644 index 0000000..b0717e6 --- /dev/null +++ b/alive_progress/utils/terminal/non_tty.py @@ -0,0 +1,11 @@ +import sys + +from .tty import flush, write # noqa +from .void import clear_end, clear_line, factory_cursor_up, hide_cursor, show_cursor # noqa + + +def cols(): + return sys.maxsize # do not truncate when there's no tty. + + +carriage_return = '' diff --git a/alive_progress/utils/terminal/tty.py b/alive_progress/utils/terminal/tty.py new file mode 100644 index 0000000..dd3d250 --- /dev/null +++ b/alive_progress/utils/terminal/tty.py @@ -0,0 +1,35 @@ +import os +import sys + +_original_stdout = sys.stdout # support for jupyter notebooks. + + +def write(text): + return _original_stdout.write(text) + + +def flush(): + _original_stdout.flush() + + +def _emit_ansi_escape(sequence, param=''): + def inner(_=None): + write(text) + flush() + + text = f'\x1b[{param}{sequence}' + return inner + + +clear_line = _emit_ansi_escape('2K\r') # clears the entire line: CSI n K -> with n=2. +clear_end = _emit_ansi_escape('K') # clears line from cursor: CSI K. +hide_cursor = _emit_ansi_escape('?25l') # hides the cursor: CSI ? 25 l. +show_cursor = _emit_ansi_escape('?25h') # shows the cursor: CSI ? 25 h. +factory_cursor_up = lambda num: _emit_ansi_escape('A', num) # sends cursor up: CSI {x}A. + + +def cols(): + return os.get_terminal_size()[0] + + +carriage_return = '\r' diff --git a/alive_progress/utils/terminal/void.py b/alive_progress/utils/terminal/void.py new file mode 100644 index 0000000..d7c0a94 --- /dev/null +++ b/alive_progress/utils/terminal/void.py @@ -0,0 +1,27 @@ +def write(_text): + return 0 + + +def flush(): + pass + + +def _emit_ansi_escape(_=''): + def inner(_=None): + pass + + return inner + + +clear_line = _emit_ansi_escape() +clear_end = _emit_ansi_escape() +hide_cursor = _emit_ansi_escape() +show_cursor = _emit_ansi_escape() +factory_cursor_up = lambda _: _emit_ansi_escape() + + +def cols(): + return 0 # more details in `alive_progress.tools.sampling#overhead`. + + +carriage_return = '' From a029511b21ece7d7e97d9c30331a774287fb102e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 06:04:03 -0300 Subject: [PATCH 02/20] hard-code animation targets in check tools and exhibit --- alive_progress/animations/bars.py | 10 +++++----- alive_progress/animations/spinner_compiler.py | 10 +++++----- alive_progress/styles/exhibit.py | 12 ++++++------ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/alive_progress/animations/bars.py b/alive_progress/animations/bars.py index 6fb8931..e812472 100644 --- a/alive_progress/animations/bars.py +++ b/alive_progress/animations/bars.py @@ -7,7 +7,7 @@ from ..utils.cells import VS_15, combine_cells, fix_cells, has_wide, is_wide, join_cells, \ mark_graphemes, split_graphemes, strip_marks, to_cells from ..utils.colors import BLUE, BLUE_BOLD, CYAN, DIM, GREEN, ORANGE, ORANGE_BOLD, RED, YELLOW_BOLD -from ..utils.terminal import clear_end, cursor_up_1, hide_cursor, show_cursor +from ..utils.terminal import TTY def bar_factory(chars=None, *, tip=None, background=None, borders=None, errors=None): @@ -222,16 +222,16 @@ def animate(bar): # pragma: no cover print(f'\n{SECTION("Animation")}') from ..styles.exhibit import exhibit_bar bar_gen = exhibit_bar(bar, 15) - hide_cursor() + TTY.hide_cursor() try: while True: rendition, percent = next(bar_gen) print(f'\r{join_cells(rendition)}', CYAN(percent, "6.1%")) print(DIM('(press CTRL+C to stop)'), end='') - clear_end() + TTY.clear_end() time.sleep(1 / 15) - cursor_up_1() + TTY.cursor_up_1() except KeyboardInterrupt: pass finally: - show_cursor() + TTY.show_cursor() diff --git a/alive_progress/animations/spinner_compiler.py b/alive_progress/animations/spinner_compiler.py index 4ab00f7..08d85cc 100644 --- a/alive_progress/animations/spinner_compiler.py +++ b/alive_progress/animations/spinner_compiler.py @@ -10,7 +10,7 @@ from .utils import fix_signature from ..utils.cells import fix_cells, is_wide, join_cells, strip_marks, to_cells from ..utils.colors import BLUE, BLUE_BOLD, CYAN, DIM, GREEN, ORANGE, ORANGE_BOLD, RED, YELLOW_BOLD -from ..utils.terminal import clear_end, cursor_up_1, hide_cursor, show_cursor +from ..utils.terminal import TTY def spinner_controller(*, natural, skip_compiler=False): @@ -335,7 +335,7 @@ def animate(spec): # pragma: no cover cf, lf, tf = (f'>{len(str(x))}' for x in (spec.cycles, max(spec.frames), spec.total_frames)) from itertools import cycle cycles, frames = cycle(range(1, spec.cycles + 1)), cycle(range(1, spec.total_frames + 1)) - hide_cursor() + TTY.hide_cursor() try: while True: c = next(cycles) @@ -343,10 +343,10 @@ def animate(spec): # pragma: no cover n = next(frames) print(f'\r{CYAN(c, cf)}:{CYAN(i, lf)} -->{join_cells(f)}<-- {CYAN(n, tf)} ') print(DIM('(press CTRL+C to stop)'), end='') - clear_end() + TTY.clear_end() time.sleep(1 / 15) - cursor_up_1() + TTY.cursor_up_1() except KeyboardInterrupt: pass finally: - show_cursor() + TTY.show_cursor() diff --git a/alive_progress/styles/exhibit.py b/alive_progress/styles/exhibit.py index 0a0ad88..be035f7 100644 --- a/alive_progress/styles/exhibit.py +++ b/alive_progress/styles/exhibit.py @@ -11,7 +11,7 @@ from ..animations.utils import spinner_player from ..core.configuration import config_handler from ..utils.cells import combine_cells, print_cells -from ..utils.terminal import clear_end, hide_cursor, show_cursor +from ..utils.terminal import TTY Show = Enum('Show', 'SPINNERS BARS THEMES') @@ -160,19 +160,19 @@ def _showtime_gen(fps, gens, info, length): start, sleep, frame, line_num = time.perf_counter(), 1. / fps, 0, 0 start, current = start - sleep, start # simulates the first frame took exactly "sleep" ms. - hide_cursor() + TTY.hide_cursor() try: while True: cols, lines = os.get_terminal_size() title = 'Welcome to alive-progress!', next(logo) print_cells(title, cols) # line 1. - clear_end() + TTY.clear_end() print() info = fps_monitor.format(frame / (current - start)), next(info_player) print_cells(info, cols) # line 2. - clear_end() + TTY.clear_end() content = [next(gen) for gen in gens] # always consume gens, to maintain them in sync. for line_num, fragments in enumerate(content, 3): @@ -180,7 +180,7 @@ def _showtime_gen(fps, gens, info, length): break print() print_cells(fragments, cols) - clear_end() + TTY.clear_end() frame += 1 current = time.perf_counter() @@ -189,7 +189,7 @@ def _showtime_gen(fps, gens, info, length): except KeyboardInterrupt: pass finally: - show_cursor() + TTY.show_cursor() def _spinner_gen(name, spinner_factory, max_natural): From c32868751b486c47906b62db40c8ab3e95c8b692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 20:46:28 -0300 Subject: [PATCH 03/20] make configuration take care of the desired terminal type --- alive_progress/core/configuration.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/alive_progress/core/configuration.py b/alive_progress/core/configuration.py index 9ec9081..17a8b8d 100644 --- a/alive_progress/core/configuration.py +++ b/alive_progress/core/configuration.py @@ -1,7 +1,10 @@ import os +import sys from collections import namedtuple from types import FunctionType +from ..utils.terminal import NON_TTY, TTY + ERROR = object() # represents a config value not accepted. @@ -63,10 +66,15 @@ def _input(x): return _input -def _tristate_input_factory(): +def _force_tty_input_factory(): def _input(x): - return None if x is None else bool(x) + return table.get(x, ERROR) + table = { + None: TTY if sys.stdout.isatty() else NON_TTY, + False: NON_TTY, + True: TTY, + } return _input @@ -149,7 +157,7 @@ def lazy_init(): spinner=_spinner_input_factory(None), # accept empty. bar=_bar_input_factory(), unknown=_spinner_input_factory(ERROR), # do not accept empty. - force_tty=_tristate_input_factory(), + force_tty=_force_tty_input_factory(), manual=_bool_input_factory(), enrich_print=_bool_input_factory(), receipt_text=_bool_input_factory(), From 91ebd8b4012d5fc8403e4e8a61d7768085b13a09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 20:49:57 -0300 Subject: [PATCH 04/20] refactor the core progress to use the new terminal abstraction --- alive_progress/core/progress.py | 35 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/alive_progress/core/progress.py b/alive_progress/core/progress.py index aad1edb..984f007 100644 --- a/alive_progress/core/progress.py +++ b/alive_progress/core/progress.py @@ -1,5 +1,4 @@ import math -import sys import threading import time from contextlib import contextmanager @@ -8,7 +7,7 @@ from .configuration import config_handler from .hook_manager import buffered_hook_manager from ..utils.cells import combine_cells, fix_cells, print_cells, to_cells -from ..utils.terminal import hide_cursor, show_cursor, terminal_cols +from ..utils.terminal import VOID from ..utils.timing import elapsed_text, eta_text, gen_simple_exponential_smoothing_eta @@ -75,7 +74,12 @@ def alive_bar(total=None, *, calibrate=None, **options): accepts a predefined spinner name, or a custom spinner factory (cannot be None) theme (str): a set of matching spinner, bar and unknown accepts a predefined theme name - force_tty (Optional[bool]): forces animations to be on, off, or according to the tty + force_tty (Optional[int|bool]): forces a specific kind of terminal: + False -> disables animations; enables print hooks and the final receipt + True -> enables animations, print hooks and the final receipt + auto-detects Jupyter Notebooks! + None (default) -> auto select, according to the terminal's tty state + disabled (bool): if True, completely disable all output manual (bool): set to manually control the bar position enrich_print (bool): enriches print() and logging messages with the bar position receipt_text (bool): set to repeat the last text message in the final receipt @@ -93,8 +97,7 @@ def alive_bar(total=None, *, calibrate=None, **options): @contextmanager def __alive_bar(config, total=None, *, calibrate=None, - _write=sys.__stdout__.write, _flush=sys.__stdout__.flush, _cond=threading.Condition, - _term_cols=terminal_cols, _hook_manager=buffered_hook_manager, _sampler=None): + _cond=threading.Condition, _hooks=buffered_hook_manager, _sampler=None): """Actual alive_bar handler, that exposes internal functions for configuration of both normal operation and overhead estimation.""" @@ -119,10 +122,10 @@ def alive_repr(spin=None): elapsed(), stats(), run.text) with cond_refresh: - run.last_len = print_cells(fragments, _term_cols(), run.last_len, _write=_write) - _flush() + run.last_len = print_cells(fragments, term.cols(), run.last_len, _term=term) + term.flush() - if _sampler is not None: # used for sampling estimation. + if _sampler is not None: # used for sampling overhead estimation. _sampler._alive_repr = alive_repr def set_text(message): @@ -140,26 +143,27 @@ def bar_handle(count=1): # for counting progress modes. update_hook() def start_monitoring(offset=0.): - hide_cursor() + term.hide_cursor() hook_manager.install() bar._handle, bar.text = bar_handle, set_text run.init = time.perf_counter() - offset event_renderer.set() def stop_monitoring(): - show_cursor() + term.show_cursor() hook_manager.uninstall() bar._handle, bar.text = __noop, __noop return time.perf_counter() - run.init - bar, thread, event_renderer, cond_refresh = __AliveBarHandle(), None, threading.Event(), _cond() - if sys.stdout.isatty() if config.force_tty is None else config.force_tty: + bar, term = __AliveBarHandle(), VOID if config.disable else config.force_tty + thread, event_renderer, cond_refresh = None, threading.Event(), _cond() + if term.interactive: @contextmanager def pause_monitoring(): event_renderer.clear() offset = stop_monitoring() alive_repr() - _write('\n') + term.emit('\n') try: yield finally: @@ -243,7 +247,7 @@ def monitor(): title = _render_title(config) fps = calibrated_fps(calibrate or factor) - hook_manager = _hook_manager(header if config.enrich_print else '', current, cond_refresh) + hook_manager = _hooks(header if config.enrich_print else '', current, cond_refresh, term) start_monitoring() try: yield bar @@ -259,8 +263,7 @@ def monitor(): if not config.receipt_text: run.text = '' alive_repr() - _write('\n') - _flush() + term.emit('\n') class __AliveBarHandle: From c3d6d1a4070f87181945459f7c1fef3c2c5eb209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 20:51:54 -0300 Subject: [PATCH 05/20] auto-detect jupyter notebooks (experimental, best effort) --- alive_progress/utils/terminal/__init__.py | 27 ++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/alive_progress/utils/terminal/__init__.py b/alive_progress/utils/terminal/__init__.py index 8b820ce..5bf150e 100644 --- a/alive_progress/utils/terminal/__init__.py +++ b/alive_progress/utils/terminal/__init__.py @@ -10,13 +10,14 @@ os.system('') -def _create(mod): +def _create(mod, interactive): def emit(text): mod.write(text) mod.flush() terminal = SimpleNamespace( emit=emit, + interactive=interactive, cursor_up_1=mod.factory_cursor_up(1), # from mod terminal impl. @@ -33,7 +34,23 @@ def emit(text): return terminal -TTY = _create(tty) -JUPYTER = _create(jupyter) -NON_TTY = _create(non_tty) -VOID = _create(void) +def _is_notebook(): + """This detection is tricky, because by design there's no way to tell which kind + of frontend is connected, there may even be more than one with different types! + Also, there may be other types I'm not aware of... + So, I've chosen what I thought it was the safest method, with a negative logic: + if it _isn't_ None or TerminalInteractiveShell, it should be the "jupyter" type. + The jupyter type does not emit any ANSI Escape Codes. + """ + if 'IPython' not in sys.modules: + # if IPython hasn't been imported, there's nothing to check. + return False + + from IPython import get_ipython + class_ = get_ipython().__class__.__name__ + return class_ != 'TerminalInteractiveShell' + + +TTY = _create(jupyter if _is_notebook() else tty, True) +NON_TTY = _create(non_tty, False) +VOID = _create(void, False) From 8c3d77b8173fc9c32d3038c9c7aec4641a411f8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 20:52:27 -0300 Subject: [PATCH 06/20] remove old code --- setup.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/setup.py b/setup.py index 8e628a0..81a1f70 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,3 @@ -# coding=utf-8 -from __future__ import absolute_import, division, print_function, unicode_literals - from distutils.core import setup from setuptools import find_packages From 1a582c5d1718047a540edf05de3f7be357104060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 20:54:12 -0300 Subject: [PATCH 07/20] refactor print_cells to use the new terminal abstraction --- alive_progress/utils/cells.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/alive_progress/utils/cells.py b/alive_progress/utils/cells.py index d7c784c..8a6ddee 100644 --- a/alive_progress/utils/cells.py +++ b/alive_progress/utils/cells.py @@ -49,18 +49,17 @@ """ import re -import sys import unicodedata from itertools import chain, islice, repeat -from .terminal import carriage_return, clear_end +from . import terminal PATTERN_SANITIZE = re.compile(r'[\r\n]') SPACES = repeat(' ') VS_15 = '\ufe0e' -def print_cells(fragments, cols, last_line_len=0, _write=sys.__stdout__.write): # noqa +def print_cells(fragments, cols, last_line_len=0, _term=terminal.TTY): """Print a tuple of fragments of tuples of cells on the terminal, until a given number of cols is achieved, slicing over cells when needed. @@ -70,6 +69,7 @@ def print_cells(fragments, cols, last_line_len=0, _write=sys.__stdout__.write): cols (int): maximum columns to use last_line_len (int): if the size of these fragments are smaller than this, the line is cleared before printing anything + _term: the terminal to be used Returns: the number of actually used cols. @@ -77,20 +77,20 @@ def print_cells(fragments, cols, last_line_len=0, _write=sys.__stdout__.write): """ line = islice(chain.from_iterable(zip(SPACES, filter(None, fragments))), 1, None) available = cols - _write(carriage_return) # should be noop in both non-interactive tty and sampling. + _term.write(_term.cr) for fragment in line: length = len(fragment) - if length > available: - available, fragment = 0, fix_cells(fragment[:available]) - else: + if length <= available: available -= length + else: + available, fragment = 0, fix_cells(fragment[:available]) - _write(join_cells(fragment)) - if not available: + _term.write(join_cells(fragment)) + if available == 0: break else: if last_line_len and sum(len(fragment) for fragment in line) < last_line_len: - clear_end() + _term.clear_end(available) return cols - available From 8c3d6ed39b04e9033facbac39f963e348df0879d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 21:11:51 -0300 Subject: [PATCH 08/20] include support for disabling alive-progress --- alive_progress/core/configuration.py | 10 ++++++---- alive_progress/tools/sampling.py | 15 +++++---------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/alive_progress/core/configuration.py b/alive_progress/core/configuration.py index 17a8b8d..36d7056 100644 --- a/alive_progress/core/configuration.py +++ b/alive_progress/core/configuration.py @@ -85,8 +85,9 @@ def _input(x): return _input -Config = namedtuple('Config', 'title length spinner bar unknown force_tty manual enrich_print ' - ' receipt_text monitor stats elapsed title_length spinner_length') +Config = namedtuple('Config', 'title length spinner bar unknown force_tty disable manual ' + 'enrich_print receipt_text monitor stats elapsed title_length ' + 'spinner_length') def create_config(): @@ -97,6 +98,7 @@ def reset(): length=40, theme='smooth', # includes spinner, bar and unknown. force_tty=None, + disable=False, manual=False, enrich_print=True, receipt_text=False, @@ -121,8 +123,7 @@ def create_context(theme=None, **options): """Create an immutable copy of the current configuration, with optional customization.""" lazy_init() local_config = {**global_config, **_parse(theme, options)} - # noinspection PyArgumentList - return Config(**{k: local_config[k] for k in Config._fields}) + return Config(**local_config) def _parse(theme, options): """Validate and convert some configuration options.""" @@ -158,6 +159,7 @@ def lazy_init(): bar=_bar_input_factory(), unknown=_spinner_input_factory(ERROR), # do not accept empty. force_tty=_force_tty_input_factory(), + disable=_bool_input_factory(), manual=_bool_input_factory(), enrich_print=_bool_input_factory(), receipt_text=_bool_input_factory(), diff --git a/alive_progress/tools/sampling.py b/alive_progress/tools/sampling.py index 7659d88..274ad35 100644 --- a/alive_progress/tools/sampling.py +++ b/alive_progress/tools/sampling.py @@ -12,13 +12,12 @@ def overhead(total=None, *, calibrate=None, **options): repeat = 300 # timeit how many times to repeat the whole test. import timeit - config, sampler = config_handler(force_tty=False, **options), SimpleNamespace() - with __alive_bar(config, total, calibrate=calibrate, _write=__noop_p, _flush=__noop, - _cond=__lock, _term_cols=__noop_z, _hook_manager=__hook_manager, - _sampler=sampler) as bar: + config, sampler = config_handler(disable=True, **options), SimpleNamespace() + with __alive_bar(config, total, calibrate=calibrate, + _cond=__lock, _hooks=__hook_manager, _sampler=sampler) as bar: sampler.__dict__.update(bar.__dict__) # the timing of the print_cells function increases proportionately with the - # number of columns in the terminal, so I want a baseline here with `_term_cols=0`. + # number of columns in the terminal, so I want a baseline here `VOID.cols == 0`. res = timeit.repeat('_alive_repr()', repeat=repeat, number=number, globals=sampler.__dict__) return duration_human(min(res) / number).replace('us', 'Β΅s') @@ -68,10 +67,6 @@ def __noop_p(_ignore): return 0 -def __noop_z(): - return 0 - - class __lock: def __enter__(self): pass @@ -80,7 +75,7 @@ def __exit__(self, _type, value, traceback): pass -def __hook_manager(_=None, __=None, ___=None): +def __hook_manager(_1=None, _2=None, _3=None, _4=None): __hook_manager.flush_buffers = __noop __hook_manager.install = __noop __hook_manager.uninstall = __noop From c45dfa050ded22cfc72c81e693e89623fd75a666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 22:00:07 -0300 Subject: [PATCH 09/20] refactor hook_manager to use the new terminal abstraction --- alive_progress/core/hook_manager.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/alive_progress/core/hook_manager.py b/alive_progress/core/hook_manager.py index 904c775..f5b713b 100644 --- a/alive_progress/core/hook_manager.py +++ b/alive_progress/core/hook_manager.py @@ -6,10 +6,8 @@ from logging import StreamHandler from types import SimpleNamespace -from ..utils.terminal import clear_line - -def buffered_hook_manager(header_template, get_pos, cond_refresh): +def buffered_hook_manager(header_template, get_pos, cond_refresh, _term): """Create and maintain a buffered hook manager, used for instrumenting print statements and logging. @@ -17,6 +15,7 @@ def buffered_hook_manager(header_template, get_pos, cond_refresh): header_template (): the template for enriching output get_pos (Callable[..., Any]): the container to retrieve the current position cond_refresh: Condition object to force a refresh when printing + _term: the current terminal Returns: a closure with several functions @@ -43,12 +42,15 @@ def write(stream, part): header = get_header() with cond_refresh: nested = ''.join(line or ' ' * len(header) for line in buffer) + text = f'{header}{nested.strip()}\n' if stream in base: - # this avoids potential flickering, since now the stream can also be - # files from logging, and thus not needing to clear the screen... - clear_line() - stream.write(f'{header}{nested.strip()}\n') - stream.flush() + # use the current terminal abstraction. + _term.clear_line() + _term.emit(text) + else: + # handle other streams from logging. + stream.write(text) + stream.flush() cond_refresh.notify() buffer[:] = [] From 9fc5cd7953be05cd2449d07b0374b9bcbc990f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 22:08:35 -0300 Subject: [PATCH 10/20] streamline progress bar startup, with a pass-through hook manager --- alive_progress/core/hook_manager.py | 11 ++++++++ alive_progress/core/progress.py | 39 ++++++++++++++++------------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/alive_progress/core/hook_manager.py b/alive_progress/core/hook_manager.py index f5b713b..14d147b 100644 --- a/alive_progress/core/hook_manager.py +++ b/alive_progress/core/hook_manager.py @@ -93,6 +93,17 @@ def uninstall(): return hook_manager +def passthrough_hook_manager(): + passthrough_hook_manager.flush_buffers = __noop + passthrough_hook_manager.install = __noop + passthrough_hook_manager.uninstall = __noop + return passthrough_hook_manager + + +def __noop(): + pass + + if sys.version_info >= (3, 7): # pragma: no cover def _set_stream(handler, stream): return handler.setStream(stream) diff --git a/alive_progress/core/progress.py b/alive_progress/core/progress.py index 984f007..7035b45 100644 --- a/alive_progress/core/progress.py +++ b/alive_progress/core/progress.py @@ -5,7 +5,7 @@ from .calibration import calibrated_fps from .configuration import config_handler -from .hook_manager import buffered_hook_manager +from .hook_manager import buffered_hook_manager, passthrough_hook_manager from ..utils.cells import combine_cells, fix_cells, print_cells, to_cells from ..utils.terminal import VOID from ..utils.timing import elapsed_text, eta_text, gen_simple_exponential_smoothing_eta @@ -96,8 +96,7 @@ def alive_bar(total=None, *, calibrate=None, **options): @contextmanager -def __alive_bar(config, total=None, *, calibrate=None, - _cond=threading.Condition, _hooks=buffered_hook_manager, _sampler=None): +def __alive_bar(config, total=None, *, calibrate=None, _cond=threading.Condition, _sampler=None): """Actual alive_bar handler, that exposes internal functions for configuration of both normal operation and overhead estimation.""" @@ -155,8 +154,26 @@ def stop_monitoring(): bar._handle, bar.text = __noop, __noop return time.perf_counter() - run.init - bar, term = __AliveBarHandle(), VOID if config.disable else config.force_tty + if total or not config.manual: # we can count items. + logic_total, current = total, lambda: run.count + rate_spec, factor, header = 'f', 1.e6, 'on {:d}: ' + else: # there's only a manual percentage. + logic_total, current = 1., lambda: run.percent + rate_spec, factor, header = '%', 1., 'on {:.1%}: ' + + title, fps = _render_title(config), calibrated_fps(calibrate or factor) + bar, bar_repr = __AliveBarHandle(), _create_bars(config) + bar.current, run.text, run.last_len, run.elapsed = current, '', 0, 0. + run.count, run.percent, run.rate, run.init = 0, 0., 0., 0. thread, event_renderer, cond_refresh = None, threading.Event(), _cond() + + if config.disable: + term, hook_manager = VOID, passthrough_hook_manager() + else: + term = config.force_tty + hook_manager = buffered_hook_manager( + header if config.enrich_print else '', current, cond_refresh, term) + if term.interactive: @contextmanager def pause_monitoring(): @@ -174,14 +191,6 @@ def pause_monitoring(): thread.daemon = True thread.start() - if total or not config.manual: # we can count items. - logic_total, current = total, lambda: run.count - rate_spec, factor, header = 'f', 1.e6, 'on {:d}: ' - else: # there's only a manual percentage. - logic_total, current = 1., lambda: run.percent - rate_spec, factor, header = '%', 1., 'on {:.1%}: ' - bar.current, bar_repr = current, _create_bars(config) - if total or config.manual: # we can track progress and therefore eta. gen_eta = gen_simple_exponential_smoothing_eta(.5, logic_total) gen_eta.send(None) @@ -204,9 +213,6 @@ def elapsed(): def elapsed_end(): return f'in {elapsed_text(run.elapsed, True)}' - run.text, run.last_len, run.elapsed = '', 0, 0. - run.count, run.percent, run.rate, run.init = 0, 0., 0., 0. - if total: if config.manual: def update_hook(): @@ -245,9 +251,6 @@ def monitor(): if not config.elapsed: elapsed = elapsed_end = __noop - title = _render_title(config) - fps = calibrated_fps(calibrate or factor) - hook_manager = _hooks(header if config.enrich_print else '', current, cond_refresh, term) start_monitoring() try: yield bar From 36e94b5a103ac71b191e1a7f86858da81b255096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 22:06:57 -0300 Subject: [PATCH 11/20] simplify sampling --- alive_progress/core/progress.py | 5 ++--- alive_progress/tools/sampling.py | 23 +++++------------------ 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/alive_progress/core/progress.py b/alive_progress/core/progress.py index 7035b45..f52d1a7 100644 --- a/alive_progress/core/progress.py +++ b/alive_progress/core/progress.py @@ -96,7 +96,7 @@ def alive_bar(total=None, *, calibrate=None, **options): @contextmanager -def __alive_bar(config, total=None, *, calibrate=None, _cond=threading.Condition, _sampler=None): +def __alive_bar(config, total=None, *, calibrate=None, _cond=threading.Condition): """Actual alive_bar handler, that exposes internal functions for configuration of both normal operation and overhead estimation.""" @@ -124,8 +124,7 @@ def alive_repr(spin=None): run.last_len = print_cells(fragments, term.cols(), run.last_len, _term=term) term.flush() - if _sampler is not None: # used for sampling overhead estimation. - _sampler._alive_repr = alive_repr + __alive_bar._alive_repr = alive_repr def set_text(message): run.text = to_cells(message) diff --git a/alive_progress/tools/sampling.py b/alive_progress/tools/sampling.py index 274ad35..84e4f17 100644 --- a/alive_progress/tools/sampling.py +++ b/alive_progress/tools/sampling.py @@ -1,4 +1,4 @@ -from types import SimpleNamespace +import timeit from about_time import duration_human @@ -11,14 +11,12 @@ def overhead(total=None, *, calibrate=None, **options): number = 400 # timeit number of runs inside each repetition. repeat = 300 # timeit how many times to repeat the whole test. - import timeit - config, sampler = config_handler(disable=True, **options), SimpleNamespace() - with __alive_bar(config, total, calibrate=calibrate, - _cond=__lock, _hooks=__hook_manager, _sampler=sampler) as bar: - sampler.__dict__.update(bar.__dict__) + config = config_handler(disable=True, **options) + with __alive_bar(config, total, calibrate=calibrate, _cond=__lock): # the timing of the print_cells function increases proportionately with the # number of columns in the terminal, so I want a baseline here `VOID.cols == 0`. - res = timeit.repeat('_alive_repr()', repeat=repeat, number=number, globals=sampler.__dict__) + res = timeit.repeat('_alive_repr()', repeat=repeat, number=number, + globals=__alive_bar.__dict__) return duration_human(min(res) / number).replace('us', 'Β΅s') @@ -59,10 +57,6 @@ def overhead_sampling(): print('|') -def __noop(): - pass - - def __noop_p(_ignore): return 0 @@ -75,13 +69,6 @@ def __exit__(self, _type, value, traceback): pass -def __hook_manager(_1=None, _2=None, _3=None, _4=None): - __hook_manager.flush_buffers = __noop - __hook_manager.install = __noop - __hook_manager.uninstall = __noop - return __hook_manager - - if __name__ == '__main__': parser, run = toolkit('Estimates the alive_progress overhead per cycle on your system.') From 27f99ba0d230c9e42690e83f3ddb33ed512a5df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 22:07:43 -0300 Subject: [PATCH 12/20] cooler it clown --- alive_progress/styles/internal.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/alive_progress/styles/internal.py b/alive_progress/styles/internal.py index cb9d1f5..5352d7b 100644 --- a/alive_progress/styles/internal.py +++ b/alive_progress/styles/internal.py @@ -33,10 +33,10 @@ def __create_spinners(): dots_waves2 = delayed_spinner_factory(dots, 5, 2) _balloon = bouncing_spinner_factory('🎈', 12, background='β β ˆβ β  β’€β‘€β „β ‚', overlay=True) - pennywise = sequential_spinner_factory( # do not use block mode, so that they doesn't grow. + it = sequential_spinner_factory( # do not use block mode, so that they doesn't grow. _balloon, _balloon, # makes the balloon twice as common. - bouncing_spinner_factory('🀑', background='β β ˆβ β  β’€β‘€β „β ‚', overlay=True), + bouncing_spinner_factory('🀑', background='β β ˆβ β  β’€β‘€β „β ‚', overlay=False), intermix=False ).randomize() @@ -100,8 +100,8 @@ def __create_spinners(): return _wrap_ordered( locals(), 'classic stars twirl twirls horizontal vertical waves waves2 waves3 dots dots_waves' - ' dots_waves2 pennywise ball_belt balls_belt triangles brackets bubbles flowers elements' - ' loving notes notes2 arrow arrows arrows2 arrows_in arrows_out radioactive boat fish fish2' + ' dots_waves2 it ball_belt balls_belt triangles brackets bubbles flowers elements loving' + ' notes notes2 arrow arrows arrows2 arrows_in arrows_out radioactive boat fish fish2' ' fishes crab frank wait wait2 wait3 pulse' ) From 3e4d33606f204368a439aa8921499102387ef519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 22:09:44 -0300 Subject: [PATCH 13/20] ignore terminal submodule coverage --- .coveragerc | 1 + 1 file changed, 1 insertion(+) diff --git a/.coveragerc b/.coveragerc index b75828b..3bbf7b8 100644 --- a/.coveragerc +++ b/.coveragerc @@ -4,6 +4,7 @@ branch = True omit = alive_progress/styles/* alive_progress/tools/* + alive_progress/utils/terminal/* [report] ignore_errors = True From 75673464eabdbc09c4677f0567b25487b4fa5240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 23:12:53 -0300 Subject: [PATCH 14/20] fix stream not receiving data --- alive_progress/core/hook_manager.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/alive_progress/core/hook_manager.py b/alive_progress/core/hook_manager.py index 14d147b..afdf790 100644 --- a/alive_progress/core/hook_manager.py +++ b/alive_progress/core/hook_manager.py @@ -7,7 +7,7 @@ from types import SimpleNamespace -def buffered_hook_manager(header_template, get_pos, cond_refresh, _term): +def buffered_hook_manager(header_template, get_pos, cond_refresh, term): """Create and maintain a buffered hook manager, used for instrumenting print statements and logging. @@ -15,7 +15,7 @@ def buffered_hook_manager(header_template, get_pos, cond_refresh, _term): header_template (): the template for enriching output get_pos (Callable[..., Any]): the container to retrieve the current position cond_refresh: Condition object to force a refresh when printing - _term: the current terminal + term: the current terminal Returns: a closure with several functions @@ -43,14 +43,12 @@ def write(stream, part): with cond_refresh: nested = ''.join(line or ' ' * len(header) for line in buffer) text = f'{header}{nested.strip()}\n' - if stream in base: - # use the current terminal abstraction. - _term.clear_line() - _term.emit(text) - else: - # handle other streams from logging. - stream.write(text) - stream.flush() + if stream in base: # pragma: no cover + # use the current terminal abstraction for preparing the screen. + term.clear_line() + # handle all streams, both screen and logging. + stream.write(text) + stream.flush() cond_refresh.notify() buffer[:] = [] @@ -59,7 +57,7 @@ def get_hook_for(handler): handler.stream.flush() return SimpleNamespace(write=partial(write, handler.stream), flush=partial(flush, handler.stream), - isatty=sys.__stdout__.isatty) + isatty=sys.stdout.isatty) def install(): root = logging.root From fb5c656b6c0fe306000f586498e98ae7dc59b74e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 23:13:28 -0300 Subject: [PATCH 15/20] avoid lambda --- alive_progress/core/hook_manager.py | 17 ++++++++++++++--- alive_progress/core/progress.py | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/alive_progress/core/hook_manager.py b/alive_progress/core/hook_manager.py index afdf790..6f5576b 100644 --- a/alive_progress/core/hook_manager.py +++ b/alive_progress/core/hook_manager.py @@ -77,7 +77,7 @@ def uninstall(): # internal data. buffers = defaultdict(list) - get_header = (lambda: header_template.format(get_pos())) if header_template else lambda: '' + get_header = gen_header(header_template, get_pos) if header_template else null_header base = sys.stdout, sys.stderr # needed for tests. before_handlers = {} @@ -91,17 +91,28 @@ def uninstall(): return hook_manager -def passthrough_hook_manager(): +def passthrough_hook_manager(): # pragma: no cover passthrough_hook_manager.flush_buffers = __noop passthrough_hook_manager.install = __noop passthrough_hook_manager.uninstall = __noop return passthrough_hook_manager -def __noop(): +def __noop(): # pragma: no cover pass +def gen_header(header_template, get_pos): # pragma: no cover + def inner(): + return header_template.format(get_pos()) + + return inner + + +def null_header(): # pragma: no cover + return '' + + if sys.version_info >= (3, 7): # pragma: no cover def _set_stream(handler, stream): return handler.setStream(stream) diff --git a/alive_progress/core/progress.py b/alive_progress/core/progress.py index f52d1a7..2f4fe6e 100644 --- a/alive_progress/core/progress.py +++ b/alive_progress/core/progress.py @@ -278,7 +278,7 @@ def __call__(self, *args, **kwargs): def _create_bars(local_config): bar = local_config.bar if bar is None: - obj = lambda p: None + obj = __noop obj.unknown, obj.end = obj, obj return obj return bar(local_config.length, local_config.unknown) From 79ade4dc2a72a56d266124fde387d9dbd12cf9f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 23:14:00 -0300 Subject: [PATCH 16/20] fix tests --- tests/core/test_configuration.py | 5 +++-- tests/core/test_hook_manager.py | 27 +++++++++++++++------------ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/tests/core/test_configuration.py b/tests/core/test_configuration.py index 18a408d..1abcd15 100644 --- a/tests/core/test_configuration.py +++ b/tests/core/test_configuration.py @@ -6,6 +6,7 @@ from alive_progress.core.configuration import Config, ERROR, __style_input_factory, \ _bool_input_factory, _int_input_factory, create_config from alive_progress.styles.internal import BARS, SPINNERS, THEMES +from alive_progress.utils.terminal import NON_TTY, TTY @pytest.mark.parametrize('lower, upper, num, expected', [ @@ -90,11 +91,11 @@ def test_config_creation(handler): (dict(spinner=SPINNERS['pulse']), {}), (dict(bar='solid'), dict(bar=BARS['solid'])), (dict(bar=BARS['solid']), {}), - (dict(force_tty=True), {}), + (dict(force_tty=False), dict(force_tty=NON_TTY)), (dict(manual=True), {}), (dict(enrich_print=False), {}), (dict(title_length=20), {}), - (dict(force_tty=True, manual=True, enrich_print=False, title_length=10), {}), + (dict(force_tty=True, manual=True, enrich_print=False, title_length=10), dict(force_tty=TTY)), (dict(spinner=None, manual=None), dict(manual=False)), ]) def config_params(request): diff --git a/tests/core/test_hook_manager.py b/tests/core/test_hook_manager.py index a84916e..5ea0cf6 100644 --- a/tests/core/test_hook_manager.py +++ b/tests/core/test_hook_manager.py @@ -7,6 +7,7 @@ import pytest from alive_progress.core.hook_manager import buffered_hook_manager +from alive_progress.utils.terminal import TTY, VOID @contextmanager @@ -17,7 +18,7 @@ def hook(hook_manager): def test_hook_manager_captures_stdout(capsys): - hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition()) + hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition(), TTY) with hook(hook_manager): print('ok') assert capsys.readouterr().out == 'nice 35! ok\n' @@ -30,28 +31,28 @@ def _hook_manager_captures_logging(capsys): logging.basicConfig(stream=sys.stderr) logger = logging.getLogger('?name?') - hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition()) + hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition(), TTY) with hook(hook_manager): logger.error('oops') assert capsys.readouterr().err == 'nice 35! ERROR:?name?:oops\n' def test_hook_manager_captures_multiple_lines(capsys): - hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition()) + hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition(), TTY) with hook(hook_manager): print('ok1\nok2') assert capsys.readouterr().out == 'nice 35! ok1\n ok2\n' def test_hook_manager_can_be_disabled(capsys): - hook_manager = buffered_hook_manager('', None, Condition()) + hook_manager = buffered_hook_manager('', None, Condition(), TTY) with hook(hook_manager): print('ok') assert capsys.readouterr().out == 'ok\n' def test_hook_manager_flush(capsys): - hook_manager = buffered_hook_manager('', None, Condition()) + hook_manager = buffered_hook_manager('', None, Condition(), TTY) with hook(hook_manager): print('ok', end='') assert capsys.readouterr().out == '' @@ -64,18 +65,20 @@ def test_hook_manager_flush(capsys): def test_hook_manager_do_clear_line_on_stdout(): - hook_manager = buffered_hook_manager('', None, Condition()) - with hook(hook_manager), mock.patch('alive_progress.core.hook_manager.clear_line') as m_clear: + hook_manager = buffered_hook_manager('', None, Condition(), VOID) + m_clear = mock.Mock() + with hook(hook_manager), mock.patch.dict(VOID.__dict__, clear_line=m_clear): print('some') m_clear.assert_called() -def test_hook_manager_do_not_flicker_screen_when_logging(capsys): +def test_hook_manager_do_not_flicker_screen_when_logging(): logging.basicConfig() logger = logging.getLogger() - hook_manager = buffered_hook_manager('', None, Condition()) - with hook(hook_manager), mock.patch('alive_progress.core.hook_manager.clear_line') as m_clear: + hook_manager = buffered_hook_manager('', None, Condition(), VOID) + m_clear = mock.Mock() + with hook(hook_manager), mock.patch.dict(VOID.__dict__, clear_line=m_clear): logger.error('oops') m_clear.assert_not_called() @@ -91,14 +94,14 @@ def handlers(): def test_install(handlers): - hook_manager = buffered_hook_manager('', None, Condition()) + hook_manager = buffered_hook_manager('', None, Condition(), TTY) with mock.patch('alive_progress.core.hook_manager._set_stream') as mock_set_stream: hook_manager.install() mock_set_stream.assert_has_calls(tuple(mock.call(h, mock.ANY) for h in handlers)) def test_uninstall(handlers): - hook_manager = buffered_hook_manager('', None, Condition()) + hook_manager = buffered_hook_manager('', None, Condition(), TTY) with mock.patch('alive_progress.core.hook_manager._set_stream') as mock_set_stream: hook_manager.install() hook_manager.uninstall() From 7a065110f79b6805676d1693e5b9f746c841edbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Sun, 17 Oct 2021 23:29:47 -0300 Subject: [PATCH 17/20] tweak demo --- alive_progress/styles/internal.py | 4 ++-- alive_progress/tools/demo.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/alive_progress/styles/internal.py b/alive_progress/styles/internal.py index 5352d7b..795e926 100644 --- a/alive_progress/styles/internal.py +++ b/alive_progress/styles/internal.py @@ -114,9 +114,9 @@ def __create_bars(): blocks = bar_factory('β–β–Žβ–β–Œβ–‹β–Šβ–‰') bubbles = bar_factory('βˆ™β—‹β¦Ώβ—', borders='<>') solid = bar_factory('βˆ™β–‘β˜β– ', borders='<>') + checks = bar_factory('βœ“') circles = bar_factory('●', background='β—‹', borders='<>') squares = bar_factory('β– ', background='β–‘', borders='<>') - checks = bar_factory('βœ“') halloween = bar_factory('πŸŽƒ', background=' πŸ‘» πŸ’€', errors=('😱', 'πŸ—‘πŸ—‘πŸ—‘πŸ—‘')) filling = bar_factory('β–β–‚β–ƒβ–„β–…β–†β–‡β–ˆ') notes = bar_factory('β™©β™ͺ♫♬', errors='β™­β™―') @@ -127,7 +127,7 @@ def __create_bars(): return _wrap_ordered( locals(), - 'smooth classic classic2 brackets blocks bubbles solid circles squares checks halloween' + 'smooth classic classic2 brackets blocks bubbles solid checks circles squares halloween' ' filling notes ruler ruler2 fish scuba' ) diff --git a/alive_progress/tools/demo.py b/alive_progress/tools/demo.py index 9467f13..4e1aa89 100644 --- a/alive_progress/tools/demo.py +++ b/alive_progress/tools/demo.py @@ -29,13 +29,13 @@ def title(text): Case('Overflow+total', 1200, dict(total=800)), Case('Unknown', 1000, dict(total=0)), - Case(title='Manual mode'), + Case(title='Manual modes'), Case('Normal+total+manual', 1000, dict(total=1000, manual=True)), Case('Underflow+total+manual', 800, dict(total=1200, manual=True)), Case('Overflow+total+manual', 1200, dict(total=800, manual=True)), Case('Unknown+manual', 1000, dict(total=0, manual=True)), - Case(title='Logging hooks'), + Case(title='Print and Logging hooks'), Case('Simultaneous', 1000, dict(total=1000), hooks=True), # title('Quantifying mode') # soon, quantifying mode... @@ -47,7 +47,7 @@ def title(text): ] features = [dict(total=1000, bar=bar, spinner='loving') for bar in BARS] cases += [Case(name.capitalize(), 1000, {**features[i % len(BARS)], **config}, done=True) - for i, (name, config) in enumerate(OVERHEAD_SAMPLING, 2)] + for i, (name, config) in enumerate(OVERHEAD_SAMPLING, 1)] def demo(sleep=None): From a42a93ba818a4f75266c9582f96dc896e642770d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Mon, 18 Oct 2021 00:11:24 -0300 Subject: [PATCH 18/20] update version --- alive_progress/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alive_progress/__init__.py b/alive_progress/__init__.py index e3d02aa..75d31fe 100644 --- a/alive_progress/__init__.py +++ b/alive_progress/__init__.py @@ -1,7 +1,7 @@ from .core.configuration import config_handler from .core.progress import alive_bar, alive_it -VERSION = (2, 0, 0) +VERSION = (2, 1, 0) __author__ = 'RogΓ©rio Sampaio de Almeida' __email__ = 'rsalmei@gmail.com' From ee1eead9cb152144ab9d0f10d44d491a465c06c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Mon, 18 Oct 2021 00:41:13 -0300 Subject: [PATCH 19/20] update readme --- CHANGELOG.md | 5 ++++ README.md | 47 ++++++++++++++++++++++++-------- alive_progress/core/progress.py | 9 +++--- img/alive-jupyter.gif | Bin 0 -> 230735 bytes 4 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 img/alive-jupyter.gif diff --git a/CHANGELOG.md b/CHANGELOG.md index c1a649e..797ea97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 2.1.0 - Oct 18, 2021 +- Jupyter notebook support (experimental), Jupyter auto-detection, disable feature and configuration +- four internal terminal abstractions, to support TTY, JUPYTER, NON_TTY and VOID + + ## 2.0.0 - Aug 25, 2021 This is a major breakthrough in `alive-progress`! - now there's complete support for Emojis 🀩 and exotic Unicode chars in general, which required MAJOR refactoring deep within the project, giving rise to what I called **Cells Architecture** => now all internal components use and generate streams of cells instead of chars, and correctly interprets grapheme clusters β€” it has enabled to render complex multi-chars symbols as if they were one, thus making them work on any spinners, bars, texts, borders, backgrounds, everything!!! there's even support for wide chars, which are represented with any number of chars, including one, but take two spaces on screen!! pretty advanced stuff πŸ€“ diff --git a/README.md b/README.md index 87bdca2..ac34e56 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,19 @@ I like to think of it as a new kind of progress bar for Python, since it has amo - it is **customizable**, with a growing smorgasbord of different bar and spinner styles, as well as several factories to easily generate yours! Now (πŸ“Œ new in 2.0) we even have super powerful and cool `.check()` tools in both bars and spinners, to help you design your animations! You can see all the frames and cycles exploded on screen, with several verbosity levels, even including an **alive** rendition! 😜 +## πŸ“Œ NEW 2.1 series! + +YES! Now `alive-progres` has support for Jupyter Notebooks, and also includes a Disabled state! Both were highly sought after, and have finally landed! +
And better, I've implemented an auto-detection mechanism for jupyter notebooks, so it just works, out of the box, without any changes in your code!! + +See for yourself: + +![alive-progress demo](img/alive-jupyter.gif) + +It seems to work very well, but at this moment it should be considered **Experimental**. +
There were instances in which some visual glitches did appear to me, but it's something I think I can't possibly workaround. It seems Jupyter sometimes refresh the screen at odd times, which makes the screen loses some updates... + + ## πŸ“Œ NEW 2.0 series! This is a major breakthrough in `alive-progress`! @@ -130,7 +143,8 @@ So, in short: retrieve the items as usual, enter the `alive_bar` context manager While inside an `alive_bar` context, you can effortlessly display messages with: - the usual Python `print()` statement, where `alive_bar` nicely cleans up the line, prints your message alongside the current bar position at the time, and continues the bar right below it; - the standard Python `logging` framework, including file outputs, are also enriched exactly like the previous one; -- the cool `bar.text('message')`, which sets a situational message right within the bar, where you can display something about the current item, or the phase the processing is in! +- the cool `bar.text('message')`, which sets a situational message right within the bar, where you can display something about the current item, or the phase the processing is in; +- and all of this works just the same in an actual terminal or in a Jupyter notebook! ![alive-progress printing messages](img/print-hook.gif) @@ -297,7 +311,8 @@ These are the options - default values in brackets:
↳ accepts a predefined spinner name, or a custom spinner factory (cannot be None) - `theme`: [`'smooth'`] a set of matching spinner, bar and unknown
↳ accepts a predefined theme name -- `force_tty`: [`None`] forces animations to be on, off, or according to the tty (more details [here](#advanced)) +- `force_tty`: [`None`] forces animations to be on, off, or according to the tty (more details [here](#forcing-animations-on-non-interactive-consoles)) +- `disable`: [`False`] if True, completely disables all output, do not install hooks - `manual`: [`False`] set to manually control the bar position - `enrich_print`: [`True`] enriches print() and logging messages with the bar position - `receipt_text`: [`False`] set to repeat the last text message in the final receipt @@ -309,7 +324,7 @@ These are the options - default values in brackets: - `spinner_length`: [`0`] forces the spinner length, or `0` for its natural one And there's also one that can only be set locally in an `alive_bar` context: -- `calibrate`: maximum theoretical throughput to calibrate animation speed (more details [here](#advanced)) +- `calibrate`: maximum theoretical throughput to calibrate animation speed (more details [here](#fps-calibration)) To set them locally, just send them as keyword arguments to `alive_bar`: @@ -432,10 +447,10 @@ If you've appreciated my work and would like me to continue improving it, please ## Advanced -### Static loop-less use +### Loop-less use So, you need to monitor a fixed operation, without any loops? -
It'll work for sure! Here is an example (although a naive approach, we'll do better): +
It'll work for sure! Here is a naive example (we'll do better in a moment): ```python with alive_bar(4) as bar: @@ -449,9 +464,9 @@ with alive_bar(4) as bar: bar() # we're done! four bar calls with `total=4` ``` -It's naive because it considers all steps are equal, but actually each one may take a very different time to complete. Think a `read_file` and a `tokenize` steps being extremely fast, making the percentage skyrocket to 50%, then stopping for a long time in the `process` step. You get the point, it can ruin the user experience and create a very misleading ETA. +It's naive because it assumes all steps take the same amount of time, but actually each one may take very different times to complete. Think `read_file` and `tokenize` may be extremely fast, which makes the percentage skyrocket to 50%, then stopping for a long time in the `process` step... You get the point, it can ruin the user experience and create a very misleading ETA. -What you need to do is distribute the steps accordingly! Since you told `alive_bar` there were four steps, when the first one completed it understood 1/4 or 25% of the whole processing was complete, which as we've seen may not be the case. Thus, you need to measure how long your steps do take, and use the **manual mode** to increase the bar percentage by different amounts at each step! +To improve upon that you need to distribute the steps' percentages accordingly! Since you told `alive_bar` there were four steps, when the first one completed it understood 1/4 or 25% of the whole processing was complete. Thus, you need to measure how long your steps actually take, and use the **manual mode** to increase the bar percentage by different amounts at each step! You can use my other open source project [about-time](https://github.com/rsalmei/about-time) to easily measure these durations! Just try to simulate with some representative inputs, to get better results. Something like: @@ -560,9 +575,11 @@ In [21]: next(gen, None) Those astonishing animations refuse to display? -There are ttys that do not report themselves as "interactive", which are valid for example in shell pipelines "|" or headless consoles. But there are some that do that for no good reason, like Pycharm's python console for instance. And if a console is not interactive, `alive_bar` disables all animations and refreshes, only printing the final receipt. This is made to avoid spamming a log file or messing up a pipe output with hundreds of refreshes. +There are terminals that occasionally do not report themselves as "interactive", for example in shell pipeline commands "|" or background processes. And there are some that never reports themselves as interactive, like Pycharm's python console and Jupyter Notebooks for instance. -So if you are in an interactive environment, like the aforementioned Pycharm console, you can see `alive_bar` in all its glory! Just use the `force_tty` argument! +When a console is not interactive, `alive-progress` disables all kinds of animations, only printing the final receipt. This is made to avoid spamming a log file or messing up a pipe output with thousands of progress bar updates. + +So, when you know it's safe, you can in fact see `alive-progress` in all its glory! Just use the `force_tty` argument! ```python with alive_bar(1000, force_tty=True) as bar: @@ -571,11 +588,16 @@ with alive_bar(1000, force_tty=True) as bar: bar() ``` -You can also set it system-wide using the `config_handler`, then you won't need to pass it manually anymore. +The values accepted are: +- `force_tty=True` -> enables animations, and auto-detects Jupyter Notebooks! +- `force_tty=False` -> disables animations, keeping only the final receipt +- `force_tty=None` (default) -> auto select, according to the terminal's tty state + +You can also set it system-wide using the `config_handler`, then you won't need to pass that manually in all `alive_bar` calls. -Do note that Pycharm's console is heavily instrumented and thus has more overhead, so the outcome may not be as fluid as one would expect. To see `alive_bar` animations perfectly, always prefer a full-fledged terminal. +Do note that Pycharm's console and Jupyter notebooks are heavily instrumented and thus have more overhead, so the outcome may not be as fluid as you would expect; and on top of that Jupyter notebooks do not support ANSI Escape Codes, so I had to develop some workarounds, to emulate functions like "clear the line" and "clear from cursor". -> (πŸ“Œ new) Now `force_tty` also supports `False`, which will disable animations even on interactive displays. +> To see `alive_bar` animations as I intended, always prefer a full-fledged terminal. ## Interesting facts @@ -631,6 +653,7 @@ The `alive_progress` framework starting from version 2.0 does not support Python ## Changelog highlights (complete [here](CHANGELOG.md)): +- 2.1.0: Jupyter notebook support (experimental), Jupyter auto-detection, disable feature and configuration - 2.0.0: new system-wide Cell Architecture with grapheme clusters support; super cool spinner compiler and runner; `.check()` tools in both spinners and bars; bars and spinners engines revamp; new animation modes in alongside and sequential spinners; new builtin spinners, bars and themes; dynamic showtime with themes, scroll protection and filter patterns; improved logging for files; several new configuration options for customizing appearance; new iterator adapter `alive_it`; uses `time.perf_counter()` high resolution clock; requires python 3.6+ (and officially supports python 3.9 and 3.10) - 1.6.2: new `bar.current()` method; newlines get printed on vanilla Python REPL; bar is truncated to 80 chars on Windows. - 1.6.1: fix logging support for python 3.6 and lower; support logging for file; support for wide unicode chars, which use 2 columns but have length 1 diff --git a/alive_progress/core/progress.py b/alive_progress/core/progress.py index 2f4fe6e..8941688 100644 --- a/alive_progress/core/progress.py +++ b/alive_progress/core/progress.py @@ -75,11 +75,10 @@ def alive_bar(total=None, *, calibrate=None, **options): theme (str): a set of matching spinner, bar and unknown accepts a predefined theme name force_tty (Optional[int|bool]): forces a specific kind of terminal: - False -> disables animations; enables print hooks and the final receipt - True -> enables animations, print hooks and the final receipt - auto-detects Jupyter Notebooks! - None (default) -> auto select, according to the terminal's tty state - disabled (bool): if True, completely disable all output + False -> disables animations, keeping only the the final receipt + True -> enables animations, and auto-detects Jupyter Notebooks! + None (default) -> auto select, according to the terminal/Jupyter + disable (bool): if True, completely disables all output, do not install hooks manual (bool): set to manually control the bar position enrich_print (bool): enriches print() and logging messages with the bar position receipt_text (bool): set to repeat the last text message in the final receipt diff --git a/img/alive-jupyter.gif b/img/alive-jupyter.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d4e90a616d61b3ad494a4f23ccbb8d1e7450e30 GIT binary patch literal 230735 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

=EAvSd6=={rk(d3k_OWP5T-?JAsGrEeZw)} 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

*Zb#}|_A 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 P(`~u!*4u9_4FUi=EM4{0 literal 0 HcmV?d00001 From d7b45321d8a94a9a3deb366fbfce42dfd49ea1ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Sampaio?= Date: Mon, 18 Oct 2021 22:22:05 -0300 Subject: [PATCH 20/20] clearer terminal name, FULL can be a tty or a jupyter, with all --- alive_progress/animations/bars.py | 10 +++++----- alive_progress/animations/spinner_compiler.py | 10 +++++----- alive_progress/core/configuration.py | 6 +++--- alive_progress/styles/exhibit.py | 12 ++++++------ alive_progress/utils/cells.py | 2 +- alive_progress/utils/terminal/__init__.py | 2 +- tests/core/test_configuration.py | 4 ++-- tests/core/test_hook_manager.py | 16 ++++++++-------- 8 files changed, 31 insertions(+), 31 deletions(-) diff --git a/alive_progress/animations/bars.py b/alive_progress/animations/bars.py index e812472..b9defd9 100644 --- a/alive_progress/animations/bars.py +++ b/alive_progress/animations/bars.py @@ -7,7 +7,7 @@ from ..utils.cells import VS_15, combine_cells, fix_cells, has_wide, is_wide, join_cells, \ mark_graphemes, split_graphemes, strip_marks, to_cells from ..utils.colors import BLUE, BLUE_BOLD, CYAN, DIM, GREEN, ORANGE, ORANGE_BOLD, RED, YELLOW_BOLD -from ..utils.terminal import TTY +from ..utils.terminal import FULL def bar_factory(chars=None, *, tip=None, background=None, borders=None, errors=None): @@ -222,16 +222,16 @@ def animate(bar): # pragma: no cover print(f'\n{SECTION("Animation")}') from ..styles.exhibit import exhibit_bar bar_gen = exhibit_bar(bar, 15) - TTY.hide_cursor() + FULL.hide_cursor() try: while True: rendition, percent = next(bar_gen) print(f'\r{join_cells(rendition)}', CYAN(percent, "6.1%")) print(DIM('(press CTRL+C to stop)'), end='') - TTY.clear_end() + FULL.clear_end() time.sleep(1 / 15) - TTY.cursor_up_1() + FULL.cursor_up_1() except KeyboardInterrupt: pass finally: - TTY.show_cursor() + FULL.show_cursor() diff --git a/alive_progress/animations/spinner_compiler.py b/alive_progress/animations/spinner_compiler.py index 08d85cc..889996a 100644 --- a/alive_progress/animations/spinner_compiler.py +++ b/alive_progress/animations/spinner_compiler.py @@ -10,7 +10,7 @@ from .utils import fix_signature from ..utils.cells import fix_cells, is_wide, join_cells, strip_marks, to_cells from ..utils.colors import BLUE, BLUE_BOLD, CYAN, DIM, GREEN, ORANGE, ORANGE_BOLD, RED, YELLOW_BOLD -from ..utils.terminal import TTY +from ..utils.terminal import FULL def spinner_controller(*, natural, skip_compiler=False): @@ -335,7 +335,7 @@ def animate(spec): # pragma: no cover cf, lf, tf = (f'>{len(str(x))}' for x in (spec.cycles, max(spec.frames), spec.total_frames)) from itertools import cycle cycles, frames = cycle(range(1, spec.cycles + 1)), cycle(range(1, spec.total_frames + 1)) - TTY.hide_cursor() + FULL.hide_cursor() try: while True: c = next(cycles) @@ -343,10 +343,10 @@ def animate(spec): # pragma: no cover n = next(frames) print(f'\r{CYAN(c, cf)}:{CYAN(i, lf)} -->{join_cells(f)}<-- {CYAN(n, tf)} ') print(DIM('(press CTRL+C to stop)'), end='') - TTY.clear_end() + FULL.clear_end() time.sleep(1 / 15) - TTY.cursor_up_1() + FULL.cursor_up_1() except KeyboardInterrupt: pass finally: - TTY.show_cursor() + FULL.show_cursor() diff --git a/alive_progress/core/configuration.py b/alive_progress/core/configuration.py index 36d7056..c2b1f3e 100644 --- a/alive_progress/core/configuration.py +++ b/alive_progress/core/configuration.py @@ -3,7 +3,7 @@ from collections import namedtuple from types import FunctionType -from ..utils.terminal import NON_TTY, TTY +from ..utils.terminal import NON_TTY, FULL ERROR = object() # represents a config value not accepted. @@ -71,9 +71,9 @@ def _input(x): return table.get(x, ERROR) table = { - None: TTY if sys.stdout.isatty() else NON_TTY, + None: FULL if sys.stdout.isatty() else NON_TTY, False: NON_TTY, - True: TTY, + True: FULL, } return _input diff --git a/alive_progress/styles/exhibit.py b/alive_progress/styles/exhibit.py index be035f7..869db79 100644 --- a/alive_progress/styles/exhibit.py +++ b/alive_progress/styles/exhibit.py @@ -11,7 +11,7 @@ from ..animations.utils import spinner_player from ..core.configuration import config_handler from ..utils.cells import combine_cells, print_cells -from ..utils.terminal import TTY +from ..utils.terminal import FULL Show = Enum('Show', 'SPINNERS BARS THEMES') @@ -160,19 +160,19 @@ def _showtime_gen(fps, gens, info, length): start, sleep, frame, line_num = time.perf_counter(), 1. / fps, 0, 0 start, current = start - sleep, start # simulates the first frame took exactly "sleep" ms. - TTY.hide_cursor() + FULL.hide_cursor() try: while True: cols, lines = os.get_terminal_size() title = 'Welcome to alive-progress!', next(logo) print_cells(title, cols) # line 1. - TTY.clear_end() + FULL.clear_end() print() info = fps_monitor.format(frame / (current - start)), next(info_player) print_cells(info, cols) # line 2. - TTY.clear_end() + FULL.clear_end() content = [next(gen) for gen in gens] # always consume gens, to maintain them in sync. for line_num, fragments in enumerate(content, 3): @@ -180,7 +180,7 @@ def _showtime_gen(fps, gens, info, length): break print() print_cells(fragments, cols) - TTY.clear_end() + FULL.clear_end() frame += 1 current = time.perf_counter() @@ -189,7 +189,7 @@ def _showtime_gen(fps, gens, info, length): except KeyboardInterrupt: pass finally: - TTY.show_cursor() + FULL.show_cursor() def _spinner_gen(name, spinner_factory, max_natural): diff --git a/alive_progress/utils/cells.py b/alive_progress/utils/cells.py index 8a6ddee..76f6d98 100644 --- a/alive_progress/utils/cells.py +++ b/alive_progress/utils/cells.py @@ -59,7 +59,7 @@ VS_15 = '\ufe0e' -def print_cells(fragments, cols, last_line_len=0, _term=terminal.TTY): +def print_cells(fragments, cols, last_line_len=0, _term=terminal.FULL): """Print a tuple of fragments of tuples of cells on the terminal, until a given number of cols is achieved, slicing over cells when needed. diff --git a/alive_progress/utils/terminal/__init__.py b/alive_progress/utils/terminal/__init__.py index 5bf150e..7aff552 100644 --- a/alive_progress/utils/terminal/__init__.py +++ b/alive_progress/utils/terminal/__init__.py @@ -51,6 +51,6 @@ def _is_notebook(): return class_ != 'TerminalInteractiveShell' -TTY = _create(jupyter if _is_notebook() else tty, True) +FULL = _create(jupyter if _is_notebook() else tty, True) NON_TTY = _create(non_tty, False) VOID = _create(void, False) diff --git a/tests/core/test_configuration.py b/tests/core/test_configuration.py index 1abcd15..520fc0b 100644 --- a/tests/core/test_configuration.py +++ b/tests/core/test_configuration.py @@ -6,7 +6,7 @@ from alive_progress.core.configuration import Config, ERROR, __style_input_factory, \ _bool_input_factory, _int_input_factory, create_config from alive_progress.styles.internal import BARS, SPINNERS, THEMES -from alive_progress.utils.terminal import NON_TTY, TTY +from alive_progress.utils.terminal import NON_TTY, FULL @pytest.mark.parametrize('lower, upper, num, expected', [ @@ -95,7 +95,7 @@ def test_config_creation(handler): (dict(manual=True), {}), (dict(enrich_print=False), {}), (dict(title_length=20), {}), - (dict(force_tty=True, manual=True, enrich_print=False, title_length=10), dict(force_tty=TTY)), + (dict(force_tty=True, manual=True, enrich_print=False, title_length=10), dict(force_tty=FULL)), (dict(spinner=None, manual=None), dict(manual=False)), ]) def config_params(request): diff --git a/tests/core/test_hook_manager.py b/tests/core/test_hook_manager.py index 5ea0cf6..4eb195b 100644 --- a/tests/core/test_hook_manager.py +++ b/tests/core/test_hook_manager.py @@ -7,7 +7,7 @@ import pytest from alive_progress.core.hook_manager import buffered_hook_manager -from alive_progress.utils.terminal import TTY, VOID +from alive_progress.utils.terminal import FULL, VOID @contextmanager @@ -18,7 +18,7 @@ def hook(hook_manager): def test_hook_manager_captures_stdout(capsys): - hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition(), TTY) + hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition(), FULL) with hook(hook_manager): print('ok') assert capsys.readouterr().out == 'nice 35! ok\n' @@ -31,28 +31,28 @@ def _hook_manager_captures_logging(capsys): logging.basicConfig(stream=sys.stderr) logger = logging.getLogger('?name?') - hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition(), TTY) + hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition(), FULL) with hook(hook_manager): logger.error('oops') assert capsys.readouterr().err == 'nice 35! ERROR:?name?:oops\n' def test_hook_manager_captures_multiple_lines(capsys): - hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition(), TTY) + hook_manager = buffered_hook_manager('nice {}! ', lambda: 35, Condition(), FULL) with hook(hook_manager): print('ok1\nok2') assert capsys.readouterr().out == 'nice 35! ok1\n ok2\n' def test_hook_manager_can_be_disabled(capsys): - hook_manager = buffered_hook_manager('', None, Condition(), TTY) + hook_manager = buffered_hook_manager('', None, Condition(), FULL) with hook(hook_manager): print('ok') assert capsys.readouterr().out == 'ok\n' def test_hook_manager_flush(capsys): - hook_manager = buffered_hook_manager('', None, Condition(), TTY) + hook_manager = buffered_hook_manager('', None, Condition(), FULL) with hook(hook_manager): print('ok', end='') assert capsys.readouterr().out == '' @@ -94,14 +94,14 @@ def handlers(): def test_install(handlers): - hook_manager = buffered_hook_manager('', None, Condition(), TTY) + hook_manager = buffered_hook_manager('', None, Condition(), FULL) with mock.patch('alive_progress.core.hook_manager._set_stream') as mock_set_stream: hook_manager.install() mock_set_stream.assert_has_calls(tuple(mock.call(h, mock.ANY) for h in handlers)) def test_uninstall(handlers): - hook_manager = buffered_hook_manager('', None, Condition(), TTY) + hook_manager = buffered_hook_manager('', None, Condition(), FULL) with mock.patch('alive_progress.core.hook_manager._set_stream') as mock_set_stream: hook_manager.install() hook_manager.uninstall()