소스 검색

When __REFLEX_SKIP_COMPILE == "yes" allow telemetry to fail (#2881)

* When __REFLEX_SKIP_COMPILE == "yes" allow telemetry to fail

Allow running `--backend-only` without a .web directory

* When re-initializing a pre-project_hash project, do not blow up on KeyError
Masen Furer 1 년 전
부모
커밋
7debd3dbb9
4개의 변경된 파일30개의 추가작업 그리고 4개의 파일을 삭제
  1. 2 2
      reflex/app.py
  2. 9 0
      reflex/utils/exec.py
  3. 1 1
      reflex/utils/prerequisites.py
  4. 18 1
      reflex/utils/telemetry.py

+ 2 - 2
reflex/app.py

@@ -77,7 +77,7 @@ from reflex.state import (
     code_uses_state_contexts,
 )
 from reflex.utils import console, exceptions, format, prerequisites, types
-from reflex.utils.exec import is_testing_env
+from reflex.utils.exec import is_testing_env, should_skip_compile
 from reflex.utils.imports import ImportVar
 
 # Define custom types.
@@ -672,7 +672,7 @@ class App(Base):
             Whether the app should be compiled.
         """
         # Check the environment variable.
-        if os.environ.get(constants.SKIP_COMPILE_ENV_VAR) == "yes":
+        if should_skip_compile():
             return False
 
         # Check the nocompile file.

+ 9 - 0
reflex/utils/exec.py

@@ -307,3 +307,12 @@ def is_prod_mode() -> bool:
         constants.Env.DEV.value,
     )
     return current_mode == constants.Env.PROD.value
+
+
+def should_skip_compile() -> bool:
+    """Whether the app should skip compile.
+
+    Returns:
+        True if the app should skip compile.
+    """
+    return os.environ.get(constants.SKIP_COMPILE_ENV_VAR) == "yes"

+ 1 - 1
reflex/utils/prerequisites.py

@@ -448,7 +448,7 @@ def get_project_hash(raise_on_fail: bool = False) -> int | None:
     # Open and read the file
     with open(constants.Reflex.JSON, "r") as file:
         data = json.load(file)
-        return data["project_hash"]
+        return data.get("project_hash")
 
 
 def initialize_web_directory():

+ 18 - 1
reflex/utils/telemetry.py

@@ -11,6 +11,7 @@ import psutil
 
 from reflex import constants
 from reflex.utils import console
+from reflex.utils.exec import should_skip_compile
 from reflex.utils.prerequisites import ensure_reflex_installation_id, get_project_hash
 
 POSTHOG_API_URL: str = "https://app.posthog.com/capture/"
@@ -64,6 +65,22 @@ def get_memory() -> int:
         return 0
 
 
+def _raise_on_missing_project_hash() -> bool:
+    """Check if an error should be raised when project hash is missing.
+
+    When running reflex with --backend-only, or doing database migration
+    operations, there is no requirement for a .web directory, so the reflex.json
+    file may not exist, and this should not be considered an error.
+
+    Returns:
+        False when compilation should be skipped (i.e. no .web directory is required).
+        Otherwise return True.
+    """
+    if should_skip_compile():
+        return False
+    return True
+
+
 def _prepare_event(event: str) -> dict:
     """Prepare the event to be sent to the PostHog server.
 
@@ -74,7 +91,7 @@ def _prepare_event(event: str) -> dict:
         The event data.
     """
     installation_id = ensure_reflex_installation_id()
-    project_hash = get_project_hash(raise_on_fail=True)
+    project_hash = get_project_hash(raise_on_fail=_raise_on_missing_project_hash())
 
     if installation_id is None or project_hash is None:
         console.debug(