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
« prev ^ index » next coverage.py v7.13.5, created at 2026-07-02 18:13 +0530
1from typing import Annotated
3import typer
4from typer_examples import example
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
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.
37 Stops all containers for the given bench. No data is removed; containers can be started again with 'fm start'.
38 """
40 check_bench_migration_required(benchname)
42 services_manager = ctx.obj["services"]
43 verbose = ctx.obj["verbose"]
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)
49 with spinner(output, f"Stopping {benchname}"):
50 bench.stop()