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

1import json 

2from typing import Annotated 

3 

4import requests 

5import typer 

6from typer_examples import example 

7 

8from frappe_manager.output_manager import get_global_output_handler 

9from frappe_manager.utils.helpers import get_current_fm_version, install_package 

10 

11 

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. 

27 

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 ) 

49 

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)