From 421be5748bec7a91b2e8a3e540079c1a4eafd462 Mon Sep 17 00:00:00 2001 From: Alek Petuskey Date: Fri, 8 Dec 2023 21:21:12 -0800 Subject: [PATCH] Warning if newer reflex/reflex-hosting-cli available (#2271) * Check to see if there are new reflex version avaliable if so throw a warning * precommit * request -> httpx * Fix pr comments * Forgot import * Generalize check_latest_package_version --------- Co-authored-by: Alek Petuskey Co-authored-by: Alek Petuskey --- reflex/constants/__init__.py | 1 + reflex/constants/base.py | 7 +++++++ reflex/reflex.py | 5 +++++ reflex/utils/prerequisites.py | 21 +++++++++++++++++++++ 4 files changed, 34 insertions(+) diff --git a/reflex/constants/__init__.py b/reflex/constants/__init__.py index d2307eb4a..c05f62fe5 100644 --- a/reflex/constants/__init__.py +++ b/reflex/constants/__init__.py @@ -15,6 +15,7 @@ from .base import ( Next, Ping, Reflex, + ReflexHostingCLI, Templates, ) from .compiler import ( diff --git a/reflex/constants/base.py b/reflex/constants/base.py index 82cb39da8..67bd77ec2 100644 --- a/reflex/constants/base.py +++ b/reflex/constants/base.py @@ -72,6 +72,13 @@ class Reflex(SimpleNamespace): ) +class ReflexHostingCLI(SimpleNamespace): + """Base constants concerning Reflex Hosting CLI.""" + + # The name of the Reflex Hosting CLI package. + MODULE_NAME = "reflex-hosting-cli" + + class Templates(SimpleNamespace): """Constants related to Templates.""" diff --git a/reflex/reflex.py b/reflex/reflex.py index 36358761a..5c185eb04 100644 --- a/reflex/reflex.py +++ b/reflex/reflex.py @@ -78,6 +78,8 @@ def _init( app_name = prerequisites.get_default_app_name() if name is None else name console.rule(f"[bold]Initializing {app_name}") + prerequisites.check_latest_package_version(constants.Reflex.MODULE_NAME) + # Set up the web project. prerequisites.initialize_frontend_dependencies() @@ -171,6 +173,8 @@ def _run( console.rule("[bold]Starting Reflex App") + prerequisites.check_latest_package_version(constants.Reflex.MODULE_NAME) + if frontend: prerequisites.update_next_config() # Get the app module. @@ -489,6 +493,7 @@ def deploy( # Check if we are set up. prerequisites.check_initialized(frontend=True) + prerequisites.check_latest_package_version(constants.ReflexHostingCLI.MODULE_NAME) hosting_cli.deploy( app_name=app_name, diff --git a/reflex/utils/prerequisites.py b/reflex/utils/prerequisites.py index dee7c8688..1379a2d73 100644 --- a/reflex/utils/prerequisites.py +++ b/reflex/utils/prerequisites.py @@ -18,6 +18,7 @@ from pathlib import Path from types import ModuleType import httpx +import pkg_resources import typer from alembic.util.exc import CommandError from packaging import version @@ -29,6 +30,26 @@ from reflex.config import get_config from reflex.utils import console, path_ops, processes +def check_latest_package_version(package_name: str): + """Check if the latest version of the package is installed. + + Args: + package_name: The name of the package. + """ + try: + # Get the latest version from PyPI + current_version = pkg_resources.get_distribution(package_name).version + url = f"https://pypi.org/pypi/{package_name}/json" + response = httpx.get(url) + latest_version = response.json()["info"]["version"] + if version.parse(current_version) < version.parse(latest_version): + console.warn( + f"Your version ({current_version}) of {package_name} is out of date. Upgrade to {latest_version} with 'pip install {package_name} --upgrade'" + ) + except Exception: + pass + + def check_node_version() -> bool: """Check the version of Node.js.