Coverage for frappe_manager / commands / code.py: 61%
23 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 import DEFAULT_EXTENSIONS
7from frappe_manager.commands import check_bench_migration_required
8from frappe_manager.output_manager import get_global_output_handler
9from frappe_manager.site_manager.site import Bench
10from frappe_manager.utils.callbacks import (
11 code_command_extensions_callback,
12 sitename_callback,
13 sites_autocompletion_callback,
14)
17@example(
18 "Open bench in VSCode",
19 "{benchname}",
20 detail="Opens the bench workspace in VSCode and attaches the recommended extensions and settings.",
21 benchname="mybench",
22)
23@example(
24 "Open bench with debugger config",
25 "{benchname} --debugger",
26 detail="Launches VSCode with debugger configuration prepared for the Frappe app.",
27 benchname="mybench",
28)
29@example(
30 "Force start bench before opening",
31 "{benchname} --force-start",
32 detail="Starts the bench containers before opening VSCode if they are not running.",
33 benchname="mybench",
34)
35@example(
36 "Add custom VSCode extension",
37 "{benchname} --extension vscodevim.vim",
38 detail="Installs or enables additional VSCode extensions inside the development container.",
39 benchname="mybench",
40)
41@example(
42 "Open with custom working directory",
43 "{benchname} --work-dir /workspace",
44 detail="Overrides the default working directory used within the VSCode container.",
45 benchname="mybench",
46)
47def code(
48 ctx: typer.Context,
49 benchname: Annotated[
50 str | None,
51 typer.Argument(
52 help="Name of the bench.",
53 autocompletion=sites_autocompletion_callback,
54 callback=sitename_callback,
55 ),
56 ] = None,
57 user: Annotated[str, typer.Option(help="User to connect as")] = "frappe",
58 extensions: Annotated[
59 list[str],
60 typer.Option(
61 "--extension",
62 "-e",
63 help="VSCode extensions to install (e.g., ms-python.python)",
64 callback=code_command_extensions_callback,
65 show_default=False,
66 ),
67 ] = DEFAULT_EXTENSIONS,
68 force_start: Annotated[bool, typer.Option("--force-start", "-f", help="Start bench before opening VSCode")] = False,
69 debugger: Annotated[bool, typer.Option("--debugger", "-d", help="Setup debugger config")] = False,
70 workdir: Annotated[
71 str,
72 typer.Option("--work-dir", "-w", help="Working directory in VSCode"),
73 ] = "/workspace/frappe-bench",
74):
75 """
76 Open bench in VSCode.
78 Attaches VSCode to the bench container with recommended extensions and optional debugger support.
79 """
81 check_bench_migration_required(benchname)
83 services_manager = ctx.obj["services"]
84 verbose = ctx.obj["verbose"]
86 output = get_global_output_handler()
87 logger = ctx.obj.get("logger")
88 bench = Bench.get_object(benchname, services_manager, logger=logger, output_handler=output)
90 if force_start:
91 bench.start()
93 bench.attach_to_bench(user=user, extensions=extensions, workdir=workdir, debugger=debugger)