Coverage for frappe_manager / commands / self / update.py: 37%
27 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
1import json
2from typing import Annotated
4import requests
5import typer
6from typer_examples import example
8from frappe_manager.output_manager import get_global_output_handler
9from frappe_manager.utils.helpers import get_current_fm_version, install_package
12@example(
13 "Update fm to the latest version available on pypi",
14 "",
15 detail="Checks PyPI for the latest frappe-manager release and installs it if available.",
16)
17@example(
18 "Update without confirmation prompt",
19 "--yes",
20 detail="Skips the interactive confirmation and updates immediately if a new version is found.",
21)
22def update(
23 ctx: typer.Context,
24 yes: Annotated[bool, typer.Option("--yes", "-y", help="Skip confirmation prompt and proceed with update")] = False,
25):
26 """Check for and install frappe-manager updates.
28 Updates the installed fm package using the package installer. Use --yes to skip prompts.
29 """
30 output = get_global_output_handler()
31 output.change_head("Checking for udpates")
32 url = "https://pypi.org/pypi/frappe-manager/json"
33 try:
34 update_info = requests.get(url, timeout=2)
35 update_info = json.loads(update_info.text)
36 fm_version = get_current_fm_version()
37 latest_version = update_info["info"]["version"]
38 if not fm_version == latest_version:
39 update_msg = (
40 f":arrows_counterclockwise: New update available [blue][bold]v{latest_version}[/bold][/blue]"
41 "\nDo you want to update ?"
42 )
43 continue_update = output.prompt_ask(
44 prompt=update_msg,
45 choices=["yes", "no"],
46 force_yes=yes,
47 required_flag="--yes",
48 )
50 if continue_update == "yes":
51 install_package("frappe-manager", latest_version)
52 except Exception as e:
53 output = get_global_output_handler()
54 output.error(f"Error occurred while updating the app: {e}", exception=e)
55 raise typer.Exit(1)