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
This commit is contained in:
Masen Furer 2024-03-19 14:30:55 -07:00 committed by GitHub
parent f446d063fb
commit 7debd3dbb9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 30 additions and 4 deletions

View File

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

View File

@ -307,3 +307,12 @@ def is_prod_mode() -> bool:
constants.Env.DEV.value, constants.Env.DEV.value,
) )
return current_mode == constants.Env.PROD.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"

View File

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

View File

@ -11,6 +11,7 @@ import psutil
from reflex import constants from reflex import constants
from reflex.utils import console 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 from reflex.utils.prerequisites import ensure_reflex_installation_id, get_project_hash
POSTHOG_API_URL: str = "https://app.posthog.com/capture/" POSTHOG_API_URL: str = "https://app.posthog.com/capture/"
@ -64,6 +65,22 @@ def get_memory() -> int:
return 0 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: def _prepare_event(event: str) -> dict:
"""Prepare the event to be sent to the PostHog server. """Prepare the event to be sent to the PostHog server.
@ -74,7 +91,7 @@ def _prepare_event(event: str) -> dict:
The event data. The event data.
""" """
installation_id = ensure_reflex_installation_id() 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: if installation_id is None or project_hash is None:
console.debug( console.debug(