소스 검색

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 <alekpetuskey@aleks-mbp.lan>
Co-authored-by: Alek Petuskey <alekpetuskey@Aleks-MBP.attlocal.net>
Alek Petuskey 1 년 전
부모
커밋
421be5748b
4개의 변경된 파일34개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      reflex/constants/__init__.py
  2. 7 0
      reflex/constants/base.py
  3. 5 0
      reflex/reflex.py
  4. 21 0
      reflex/utils/prerequisites.py

+ 1 - 0
reflex/constants/__init__.py

@@ -15,6 +15,7 @@ from .base import (
     Next,
     Ping,
     Reflex,
+    ReflexHostingCLI,
     Templates,
 )
 from .compiler import (

+ 7 - 0
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."""
 

+ 5 - 0
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,

+ 21 - 0
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.