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

1from contextlib import contextmanager 

2 

3from frappe_manager.output_manager.base import OutputHandler 

4 

5 

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() 

21 

22 

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() 

32 

33 

34@contextmanager 

35def temporary_stop(output: OutputHandler): 

36 was_active = output.is_spinner_active 

37 current_text = output._current_text 

38 

39 if was_active: 

40 output.stop() 

41 

42 try: 

43 yield 

44 finally: 

45 if was_active and current_text: 

46 output.start(current_text) 

47 

48 

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)