Coverage for frappe_manager / commands / stop.py: 56%

18 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-07-02 18:13 +0530

1from typing import Annotated 

2 

3import typer 

4from typer_examples import example 

5 

6from frappe_manager.commands import check_bench_migration_required 

7from frappe_manager.output_manager import get_global_output_handler, spinner 

8from frappe_manager.site_manager.site import Bench 

9from frappe_manager.utils.callbacks import sitename_callback, sites_autocompletion_callback 

10 

11 

12@example( 

13 "Stop bench containers", 

14 "{benchname}", 

15 detail="Stops all running containers for the specified bench without removing any data. Use to shut down a bench safely.", 

16 benchname="mybench", 

17) 

18@example( 

19 "Stop multiple benches", 

20 "mybench && fm stop another-bench", 

21 detail="Chain multiple stop commands to shut down several benches at once.", 

22) 

23def stop( 

24 ctx: typer.Context, 

25 benchname: Annotated[ 

26 str | None, 

27 typer.Argument( 

28 help="Name of the bench.", 

29 autocompletion=sites_autocompletion_callback, 

30 callback=sitename_callback, 

31 ), 

32 ] = None, 

33): 

34 """ 

35 Stop a bench. 

36 

37 Stops all containers for the given bench. No data is removed; containers can be started again with 'fm start'. 

38 """ 

39 

40 check_bench_migration_required(benchname) 

41 

42 services_manager = ctx.obj["services"] 

43 verbose = ctx.obj["verbose"] 

44 

45 output = get_global_output_handler() 

46 logger = ctx.obj.get("logger") 

47 bench = Bench.get_object(benchname, services_manager, logger=logger, output_handler=output) 

48 

49 with spinner(output, f"Stopping {benchname}"): 

50 bench.stop()