Преглед изворни кода

remove all get_config at the global scope (#4965)

* remove all get_config at the global scope

* don't print value for default things
Khaleel Al-Adhami пре 2 месеци
родитељ
комит
8f313ad35e
4 измењених фајлова са 99 додато и 61 уклоњено
  1. 5 4
      reflex/config.py
  2. 23 25
      reflex/custom_components/custom_components.py
  3. 69 30
      reflex/reflex.py
  4. 2 2
      reflex/utils/export.py

+ 5 - 4
reflex/config.py

@@ -963,10 +963,11 @@ class Config(Base):
                 if key.upper() in _sensitive_env_vars:
                     env_var = "***"
 
-                console.info(
-                    f"Overriding config value {key} with env var {key.upper()}={env_var}",
-                    dedupe=True,
-                )
+                if value != getattr(self, key):
+                    console.info(
+                        f"Overriding config value {key} with env var {key.upper()}={env_var}",
+                        dedupe=True,
+                    )
 
         return updated_values
 

+ 23 - 25
reflex/custom_components/custom_components.py

@@ -20,16 +20,8 @@ from reflex.config import environment, get_config
 from reflex.constants import CustomComponents
 from reflex.utils import console
 
-config = get_config()
 custom_components_cli = typer.Typer()
 
-POST_CUSTOM_COMPONENTS_GALLERY_ENDPOINT = (
-    f"{config.cp_backend_url}/custom-components/gallery"
-)
-
-GET_CUSTOM_COMPONENTS_GALLERY_BY_NAME_ENDPOINT = (
-    f"{config.cp_backend_url}/custom-components/gallery"
-)
 
 POST_CUSTOM_COMPONENTS_GALLERY_TIMEOUT = 15
 
@@ -318,8 +310,8 @@ def init(
         True,
         help="Whether to install package from this local custom component in editable mode.",
     ),
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
 ):
     """Initialize a custom component.
@@ -334,7 +326,7 @@ def init(
     """
     from reflex.utils import exec, prerequisites
 
-    console.set_log_level(loglevel)
+    console.set_log_level(loglevel or get_config().loglevel)
 
     if CustomComponents.PYPROJECT_TOML.exists():
         console.error(f"A {CustomComponents.PYPROJECT_TOML} already exists. Aborting.")
@@ -460,8 +452,8 @@ def _run_build():
 
 @custom_components_cli.command(name="build")
 def build(
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
 ):
     """Build a custom component. Must be run from the project root directory where the pyproject.toml is.
@@ -469,7 +461,7 @@ def build(
     Args:
         loglevel: The log level to use.
     """
-    console.set_log_level(loglevel)
+    console.set_log_level(loglevel or get_config().loglevel)
     _run_build()
 
 
@@ -641,8 +633,8 @@ def publish(
         True,
         help="Whether to interactively validate the project information in the pyproject.toml file.",
     ),
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
 ):
     """Publish a custom component. Must be run from the project root directory where the pyproject.toml is.
@@ -660,7 +652,7 @@ def publish(
     Raises:
         Exit: If arguments provided are not correct or the publish fails.
     """
-    console.set_log_level(loglevel)
+    console.set_log_level(loglevel or get_config().loglevel)
 
     # Validate the repository name.
     repository = _validate_repository_name(repository)
@@ -853,6 +845,12 @@ def _collect_details_for_gallery():
     console.print(f"[ Custom component package name ] : {package_name}")
     params["package_name"] = package_name
 
+    config = get_config()
+
+    post_custom_components_gallery_endpoint = (
+        f"{config.cp_backend_url}/custom-components/gallery"
+    )
+
     # Check the backend services if the user is allowed to update information of this package is already shared.
     try:
         console.debug(
@@ -862,7 +860,7 @@ def _collect_details_for_gallery():
         # 1. Check if the package is already shared by the user. If not, the backend will return 403.
         # 2. If this package is not shared before, this request records the package name in the backend.
         response = httpx.post(
-            POST_CUSTOM_COMPONENTS_GALLERY_ENDPOINT,
+            post_custom_components_gallery_endpoint,
             headers={"Authorization": f"Bearer {access_token}"},
             data=params,
         )
@@ -899,7 +897,7 @@ def _collect_details_for_gallery():
     try:
         console.debug(f"Sending custom component data: {params}")
         response = httpx.post(
-            POST_CUSTOM_COMPONENTS_GALLERY_ENDPOINT,
+            post_custom_components_gallery_endpoint,
             headers={"Authorization": f"Bearer {access_token}"},
             data=params,
             files=files,
@@ -949,8 +947,8 @@ def _get_file_from_prompt_in_loop() -> tuple[bytes, str] | None:
 
 @custom_components_cli.command(name="share")
 def share_more_detail(
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
 ):
     """Collect more details on the published package for gallery.
@@ -958,15 +956,15 @@ def share_more_detail(
     Args:
         loglevel: The log level to use.
     """
-    console.set_log_level(loglevel)
+    console.set_log_level(loglevel or get_config().loglevel)
 
     _collect_details_for_gallery()
 
 
 @custom_components_cli.command()
 def install(
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
 ):
     """Install package from this local custom component in editable mode.
@@ -977,7 +975,7 @@ def install(
     Raises:
         Exit: If unable to install the current directory in editable mode.
     """
-    console.set_log_level(loglevel)
+    console.set_log_level(loglevel or get_config().loglevel)
 
     if _pip_install_on_demand(package_name=".", install_args=["-e"]):
         console.info("Package installed successfully!")

+ 69 - 30
reflex/reflex.py

@@ -22,10 +22,6 @@ typer.core.rich = None  # pyright: ignore [reportPrivateImportUsage]
 cli = typer.Typer(add_completion=False, pretty_exceptions_enable=False)
 
 
-# Get the config.
-config = get_config()
-
-
 def version(value: bool):
     """Get the Reflex version.
 
@@ -58,13 +54,19 @@ def main(
 def _init(
     name: str,
     template: str | None = None,
-    loglevel: constants.LogLevel = config.loglevel,
+    loglevel: constants.LogLevel | None = None,
     ai: bool = False,
 ):
     """Initialize a new Reflex app in the given directory."""
     from reflex.utils import exec, prerequisites
 
+    if loglevel is not None:
+        console.set_log_level(loglevel)
+
+    config = get_config()
+
     # Set the log level.
+    loglevel = loglevel or config.loglevel
     console.set_log_level(loglevel)
 
     # Show system info
@@ -109,8 +111,8 @@ def init(
         None,
         help="The template to initialize the app with.",
     ),
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
     ai: bool = typer.Option(
         False,
@@ -127,12 +129,20 @@ def _run(
     backend: bool = True,
     frontend_port: int | None = None,
     backend_port: int | None = None,
-    backend_host: str = config.backend_host,
-    loglevel: constants.LogLevel = config.loglevel,
+    backend_host: str | None = None,
+    loglevel: constants.LogLevel | None = None,
 ):
     """Run the app in the given directory."""
     from reflex.utils import build, exec, prerequisites, processes
 
+    if loglevel is not None:
+        console.set_log_level(loglevel)
+
+    config = get_config()
+
+    loglevel = loglevel or config.loglevel
+    backend_host = backend_host or config.backend_host
+
     # Set the log level.
     console.set_log_level(loglevel)
 
@@ -274,21 +284,19 @@ def run(
         help="Execute only backend.",
         envvar=environment.REFLEX_BACKEND_ONLY.name,
     ),
-    frontend_port: int = typer.Option(
-        config.frontend_port,
+    frontend_port: int | None = typer.Option(
+        None,
         help="Specify a different frontend port.",
         envvar=environment.REFLEX_FRONTEND_PORT.name,
     ),
-    backend_port: int = typer.Option(
-        config.backend_port,
+    backend_port: int | None = typer.Option(
+        None,
         help="Specify a different backend port.",
         envvar=environment.REFLEX_BACKEND_PORT.name,
     ),
-    backend_host: str = typer.Option(
-        config.backend_host, help="Specify the backend host."
-    ),
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    backend_host: str | None = typer.Option(None, help="Specify the backend host."),
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
 ):
     """Run the app in the current directory."""
@@ -296,6 +304,16 @@ def run(
         console.error("Cannot use both --frontend-only and --backend-only options.")
         raise typer.Exit(1)
 
+    if loglevel is not None:
+        console.set_log_level(loglevel)
+
+    config = get_config()
+
+    frontend_port = frontend_port or config.frontend_port
+    backend_port = backend_port or config.backend_port
+    backend_host = backend_host or config.backend_host
+    loglevel = loglevel or config.loglevel
+
     environment.REFLEX_COMPILE_CONTEXT.set(constants.CompileContext.RUN)
     environment.REFLEX_BACKEND_ONLY.set(backend)
     environment.REFLEX_FRONTEND_ONLY.set(frontend)
@@ -335,8 +353,8 @@ def export(
     env: constants.Env = typer.Option(
         constants.Env.PROD, help="The environment to export the app in."
     ),
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
 ):
     """Export the app to a zip file."""
@@ -347,8 +365,11 @@ def export(
 
     frontend, backend = prerequisites.check_running_mode(frontend, backend)
 
+    loglevel = loglevel or get_config().loglevel
+    console.set_log_level(loglevel)
+
     if prerequisites.needs_reinit(frontend=frontend or not backend):
-        _init(name=config.app_name, loglevel=loglevel)
+        _init(name=get_config().app_name, loglevel=loglevel)
 
     export_utils.export(
         zipping=zipping,
@@ -362,10 +383,14 @@ def export(
 
 
 @cli.command()
-def login(loglevel: constants.LogLevel = typer.Option(config.loglevel)):
+def login(loglevel: constants.LogLevel | None = typer.Option(None)):
     """Authenticate with experimental Reflex hosting service."""
     from reflex_cli.v2 import cli as hosting_cli
 
+    loglevel = loglevel or get_config().loglevel
+
+    console.set_log_level(loglevel)
+
     check_version()
 
     validated_info = hosting_cli.login()
@@ -376,8 +401,8 @@ def login(loglevel: constants.LogLevel = typer.Option(config.loglevel)):
 
 @cli.command()
 def logout(
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
 ):
     """Log out of access to Reflex hosting service."""
@@ -385,6 +410,8 @@ def logout(
 
     check_version()
 
+    loglevel = loglevel or get_config().loglevel
+
     logout(loglevel)  # pyright: ignore [reportArgumentType]
 
 
@@ -403,6 +430,8 @@ def db_init():
     from reflex import model
     from reflex.utils import prerequisites
 
+    config = get_config()
+
     # Check the database url.
     if config.db_url is None:
         console.error("db_url is not configured, cannot initialize.")
@@ -470,8 +499,8 @@ def makemigrations(
 
 @cli.command()
 def deploy(
-    app_name: str = typer.Option(
-        config.app_name,
+    app_name: str | None = typer.Option(
+        None,
         "--app-name",
         help="The name of the App to deploy under.",
     ),
@@ -510,8 +539,8 @@ def deploy(
         "--envfile",
         help="The path to an env file to use. Will override any envs set manually.",
     ),
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
     project: str | None = typer.Option(
         None,
@@ -542,6 +571,14 @@ def deploy(
     from reflex.utils import export as export_utils
     from reflex.utils import prerequisites
 
+    if loglevel is not None:
+        console.set_log_level(loglevel)
+
+    config = get_config()
+
+    loglevel = loglevel or config.loglevel
+    app_name = app_name or config.app_name
+
     check_version()
 
     environment.REFLEX_COMPILE_CONTEXT.set(constants.CompileContext.DEPLOY)
@@ -608,13 +645,15 @@ def deploy(
 @cli.command()
 def rename(
     new_name: str = typer.Argument(..., help="The new name for the app."),
-    loglevel: constants.LogLevel = typer.Option(
-        config.loglevel, help="The log level to use."
+    loglevel: constants.LogLevel | None = typer.Option(
+        None, help="The log level to use."
     ),
 ):
     """Rename the app in the current directory."""
     from reflex.utils import prerequisites
 
+    loglevel = loglevel or get_config().loglevel
+
     prerequisites.validate_app_name(new_name)
     prerequisites.rename_app(new_name, loglevel)
 

+ 2 - 2
reflex/utils/export.py

@@ -6,8 +6,6 @@ from reflex import constants
 from reflex.config import environment, get_config
 from reflex.utils import build, console, exec, prerequisites, telemetry
 
-config = get_config()
-
 
 def export(
     zipping: bool = True,
@@ -33,6 +31,8 @@ def export(
         env: The environment to use. Defaults to constants.Env.PROD.
         loglevel: The log level to use. Defaults to console._LOG_LEVEL.
     """
+    config = get_config()
+
     # Set the log level.
     console.set_log_level(loglevel)