Compare commits
3 Commits
main
...
masenf/bac
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e1f631649f | ||
![]() |
b6cfa110af | ||
![]() |
2ffe4e0d78 |
@ -4,6 +4,7 @@ Only the app attribute is explicitly exposed.
|
|||||||
from concurrent.futures import ThreadPoolExecutor
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
|
|
||||||
from reflex import constants
|
from reflex import constants
|
||||||
|
from reflex.utils.exec import is_prod_mode
|
||||||
from reflex.utils.prerequisites import get_app, get_compiled_app
|
from reflex.utils.prerequisites import get_app, get_compiled_app
|
||||||
|
|
||||||
if "app" != constants.CompileVars.APP:
|
if "app" != constants.CompileVars.APP:
|
||||||
@ -11,14 +12,33 @@ if "app" != constants.CompileVars.APP:
|
|||||||
|
|
||||||
app_module = get_app(reload=False)
|
app_module = get_app(reload=False)
|
||||||
app = getattr(app_module, constants.CompileVars.APP)
|
app = getattr(app_module, constants.CompileVars.APP)
|
||||||
# Force background compile errors to print eagerly
|
_executor = ThreadPoolExecutor(max_workers=1)
|
||||||
ThreadPoolExecutor(max_workers=1).submit(app.compile_).add_done_callback(
|
|
||||||
lambda f: f.result()
|
|
||||||
)
|
def _done(executor: ThreadPoolExecutor):
|
||||||
|
def _cb(f):
|
||||||
|
# Do not leak file handles from the executor itself
|
||||||
|
executor.shutdown(wait=False)
|
||||||
|
# Force background compile errors to print eagerly
|
||||||
|
print("compile done", f.result(), executor)
|
||||||
|
|
||||||
|
return _cb
|
||||||
|
|
||||||
|
|
||||||
|
compile_future = _executor.submit(app.compile_)
|
||||||
|
compile_future.add_done_callback(_done(_executor))
|
||||||
|
|
||||||
|
# Wait for the compile to finish in prod mode to ensure all optional endpoints are mounted.
|
||||||
|
if is_prod_mode():
|
||||||
|
compile_future.result()
|
||||||
|
|
||||||
# ensure only "app" is exposed.
|
# ensure only "app" is exposed.
|
||||||
del app_module
|
del app_module
|
||||||
|
del compile_future
|
||||||
|
del _done
|
||||||
|
del _executor
|
||||||
del get_app
|
del get_app
|
||||||
del get_compiled_app
|
del get_compiled_app
|
||||||
|
del is_prod_mode
|
||||||
del constants
|
del constants
|
||||||
del ThreadPoolExecutor
|
del ThreadPoolExecutor
|
||||||
|
@ -18,6 +18,7 @@ from reflex.components.component import (
|
|||||||
from reflex.config import get_config
|
from reflex.config import get_config
|
||||||
from reflex.state import BaseState
|
from reflex.state import BaseState
|
||||||
from reflex.style import LIGHT_COLOR_MODE
|
from reflex.style import LIGHT_COLOR_MODE
|
||||||
|
from reflex.utils.exec import is_prod_mode
|
||||||
from reflex.utils.imports import ImportVar
|
from reflex.utils.imports import ImportVar
|
||||||
|
|
||||||
|
|
||||||
@ -66,7 +67,7 @@ def _compile_theme(theme: dict) -> str:
|
|||||||
|
|
||||||
|
|
||||||
def _is_dev_mode() -> bool:
|
def _is_dev_mode() -> bool:
|
||||||
return os.environ.get("REFLEX_ENV_MODE", "dev") == "dev"
|
return not is_prod_mode()
|
||||||
|
|
||||||
|
|
||||||
def _compile_contexts(state: Optional[Type[BaseState]], theme: Component) -> str:
|
def _compile_contexts(state: Optional[Type[BaseState]], theme: Component) -> str:
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
from .base import (
|
from .base import (
|
||||||
COOKIES,
|
COOKIES,
|
||||||
|
ENV_MODE_ENV_VAR,
|
||||||
IS_WINDOWS,
|
IS_WINDOWS,
|
||||||
LOCAL_STORAGE,
|
LOCAL_STORAGE,
|
||||||
POLLING_MAX_HTTP_BUFFER_SIZE,
|
POLLING_MAX_HTTP_BUFFER_SIZE,
|
||||||
|
@ -183,6 +183,9 @@ LOCAL_STORAGE = "local_storage"
|
|||||||
# If this env var is set to "yes", App.compile will be a no-op
|
# If this env var is set to "yes", App.compile will be a no-op
|
||||||
SKIP_COMPILE_ENV_VAR = "__REFLEX_SKIP_COMPILE"
|
SKIP_COMPILE_ENV_VAR = "__REFLEX_SKIP_COMPILE"
|
||||||
|
|
||||||
|
# This env var stores the execution mode of the app
|
||||||
|
ENV_MODE_ENV_VAR = "REFLEX_ENV_MODE"
|
||||||
|
|
||||||
# Testing variables.
|
# Testing variables.
|
||||||
# Testing os env set by pytest when running a test case.
|
# Testing os env set by pytest when running a test case.
|
||||||
PYTEST_CURRENT_TEST = "PYTEST_CURRENT_TEST"
|
PYTEST_CURRENT_TEST = "PYTEST_CURRENT_TEST"
|
||||||
|
@ -151,7 +151,7 @@ def _run(
|
|||||||
console.set_log_level(loglevel)
|
console.set_log_level(loglevel)
|
||||||
|
|
||||||
# Set env mode in the environment
|
# Set env mode in the environment
|
||||||
os.environ["REFLEX_ENV_MODE"] = env.value
|
os.environ[constants.ENV_MODE_ENV_VAR] = env.value
|
||||||
|
|
||||||
# Show system info
|
# Show system info
|
||||||
exec.output_system_info()
|
exec.output_system_info()
|
||||||
|
@ -294,3 +294,16 @@ def is_testing_env() -> bool:
|
|||||||
True if the app is running in under pytest.
|
True if the app is running in under pytest.
|
||||||
"""
|
"""
|
||||||
return constants.PYTEST_CURRENT_TEST in os.environ
|
return constants.PYTEST_CURRENT_TEST in os.environ
|
||||||
|
|
||||||
|
|
||||||
|
def is_prod_mode() -> bool:
|
||||||
|
"""Check if the app is running in production mode.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if the app is running in production mode or False if running in dev mode.
|
||||||
|
"""
|
||||||
|
current_mode = os.environ.get(
|
||||||
|
constants.ENV_MODE_ENV_VAR,
|
||||||
|
constants.Env.DEV.value,
|
||||||
|
)
|
||||||
|
return current_mode == constants.Env.PROD.value
|
||||||
|
Loading…
Reference in New Issue
Block a user