Coverage for frappe_manager / output_manager / context_managers.py: 100%
42 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-07-02 18:13 +0530
« prev ^ index » next coverage.py v7.13.5, created at 2026-07-02 18:13 +0530
1from contextlib import contextmanager
3from frappe_manager.output_manager.base import OutputHandler
6@contextmanager
7def spinner(output: OutputHandler, text: str, handle_keyboard_interrupt: bool = True):
8 output.start(text)
9 try:
10 yield output
11 except KeyboardInterrupt:
12 if handle_keyboard_interrupt:
13 output.stop()
14 output.print("Operation cancelled by user", emoji_code=":no_entry:")
15 raise
16 except Exception:
17 output.stop()
18 raise
19 else:
20 output.stop()
23@contextmanager
24def spinner_or_pass(output: OutputHandler, text: str, enabled: bool = True):
25 if enabled:
26 output.start(text)
27 try:
28 yield output
29 finally:
30 if enabled:
31 output.stop()
34@contextmanager
35def temporary_stop(output: OutputHandler):
36 was_active = output.is_spinner_active
37 current_text = output._current_text
39 if was_active:
40 output.stop()
42 try:
43 yield
44 finally:
45 if was_active and current_text:
46 output.start(current_text)
49@contextmanager
50def nested_spinner(output: OutputHandler, outer_text: str, inner_text: str):
51 output.stop()
52 output.start(inner_text)
53 try:
54 yield output
55 finally:
56 output.stop()
57 output.start(outer_text)