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,
)
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.

View File

@ -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"

View File

@ -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():

View File

@ -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(