From 44d6c997dd2f921bd865466e44f45e4651157786 Mon Sep 17 00:00:00 2001 From: Nikhil Rao Date: Thu, 4 Apr 2024 14:34:12 -0700 Subject: [PATCH] Reflex run automatically inits when needed (#3011) --- reflex/reflex.py | 10 ++++++++-- reflex/utils/export.py | 3 --- reflex/utils/prerequisites.py | 32 ++++++++++++++++---------------- 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/reflex/reflex.py b/reflex/reflex.py index 547bb9a25..e7496c2ea 100644 --- a/reflex/reflex.py +++ b/reflex/reflex.py @@ -165,7 +165,8 @@ def _run( _skip_compile() # Check that the app is initialized. - prerequisites.check_initialized(frontend=frontend) + if prerequisites.needs_reinit(frontend=frontend): + _init(name=config.app_name, loglevel=loglevel) # If something is running on the ports, ask the user if they want to kill or change it. if frontend and processes.is_process_on_port(frontend_port): @@ -294,6 +295,10 @@ def export( ): """Export the app to a zip file.""" from reflex.utils import export as export_utils + from reflex.utils import prerequisites + + if prerequisites.needs_reinit(frontend=True): + _init(name=config.app_name, loglevel=loglevel) export_utils.export( zipping=zipping, @@ -529,7 +534,8 @@ def deploy( dependency.check_requirements() # Check if we are set up. - prerequisites.check_initialized(frontend=True) + if prerequisites.needs_reinit(frontend=True): + _init(name=config.app_name, loglevel=loglevel) prerequisites.check_latest_package_version(constants.ReflexHostingCLI.MODULE_NAME) hosting_cli.deploy( diff --git a/reflex/utils/export.py b/reflex/utils/export.py index 12a6933fb..6deb77174 100644 --- a/reflex/utils/export.py +++ b/reflex/utils/export.py @@ -46,9 +46,6 @@ def export( # Show system info exec.output_system_info() - # Check that the app is initialized. - prerequisites.check_initialized(frontend=frontend) - # Compile the app in production mode and export it. console.rule("[bold]Compiling production app and preparing for export.") diff --git a/reflex/utils/prerequisites.py b/reflex/utils/prerequisites.py index 0502be609..0d73ea247 100644 --- a/reflex/utils/prerequisites.py +++ b/reflex/utils/prerequisites.py @@ -802,38 +802,38 @@ def install_frontend_packages(packages: set[str], config: Config): ) -def check_initialized(frontend: bool = True): - """Check that the app is initialized. +def needs_reinit(frontend: bool = True) -> bool: + """Check if an app needs to be reinitialized. Args: frontend: Whether to check if the frontend is initialized. + Returns: + Whether the app needs to be reinitialized. + Raises: Exit: If the app is not initialized. """ - has_config = os.path.exists(constants.Config.FILE) - has_reflex_dir = not frontend or os.path.exists(constants.Reflex.DIR) - has_web_dir = not frontend or os.path.exists(constants.Dirs.WEB) - - # Check if the app is initialized. - if not (has_config and has_reflex_dir and has_web_dir): + if not os.path.exists(constants.Config.FILE): console.error( - f"The app is not initialized. Run [bold]{constants.Reflex.MODULE_NAME} init[/bold] first." + f"{constants.Config.FILE} not found. Run [bold]{constants.Reflex.MODULE_NAME} init[/bold] first." ) raise typer.Exit(1) - # Check that the template is up to date. - if frontend and not is_latest_template(): - console.error( - "The base app template has updated. Run [bold]reflex init[/bold] again." - ) - raise typer.Exit(1) + # Make sure the .reflex directory exists. + if not os.path.exists(constants.Reflex.DIR): + return True + + # Make sure the .web directory exists in frontend mode. + if frontend and not os.path.exists(constants.Dirs.WEB): + return True - # Print a warning for Windows users. if constants.IS_WINDOWS: console.warn( """Windows Subsystem for Linux (WSL) is recommended for improving initial install times.""" ) + # No need to reinitialize if the app is already initialized. + return False def is_latest_template() -> bool: