put things somewhere else

This commit is contained in:
Khaleel Al-Adhami 2024-10-16 18:53:01 -07:00
parent 4d2a85b441
commit 71033413a1
7 changed files with 95 additions and 57 deletions

View File

@ -2,7 +2,6 @@
from __future__ import annotations from __future__ import annotations
import os
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from typing import Dict, Iterable, Optional, Type, Union from typing import Dict, Iterable, Optional, Type, Union
@ -16,7 +15,7 @@ from reflex.components.component import (
CustomComponent, CustomComponent,
StatefulComponent, StatefulComponent,
) )
from reflex.config import get_config from reflex.config import environment, get_config
from reflex.state import BaseState from reflex.state import BaseState
from reflex.style import SYSTEM_COLOR_MODE from reflex.style import SYSTEM_COLOR_MODE
from reflex.utils.exec import is_prod_mode from reflex.utils.exec import is_prod_mode
@ -527,7 +526,7 @@ def remove_tailwind_from_postcss() -> tuple[str, str]:
def purge_web_pages_dir(): def purge_web_pages_dir():
"""Empty out .web/pages directory.""" """Empty out .web/pages directory."""
if not is_prod_mode() and os.environ.get("REFLEX_PERSIST_WEB_DIR"): if not is_prod_mode() and environment.REFLEX_PERSIST_WEB_DIR:
# Skip purging the web directory in dev mode if REFLEX_PERSIST_WEB_DIR is set. # Skip purging the web directory in dev mode if REFLEX_PERSIST_WEB_DIR is set.
return return

View File

@ -286,6 +286,21 @@ class EnvironmentVariables:
# The directory to store reflex dependencies. # The directory to store reflex dependencies.
REFLEX_DIR: Path = Path(constants.Reflex.DIR) REFLEX_DIR: Path = Path(constants.Reflex.DIR)
# Whether to print the SQL queries if the log level is INFO or lower.
SQLALCHEMY_ECHO: bool = False
# Whether to ignore the redis config error. Some redis servers only allow out-of-band configuration.
REFLEX_IGNORE_REDIS_CONFIG_ERROR: bool = False
# Whether to skip purging the web directory in dev mode.
REFLEX_PERSIST_WEB_DIR: bool = False
# The reflex.build frontend host.
REFLEX_BUILD_FRONTEND: str = constants.Templates.REFLEX_BUILD_FRONTEND
# The reflex.build backend host.
REFLEX_BUILD_BACKEND: str = constants.Templates.REFLEX_BUILD_BACKEND
def __init__(self): def __init__(self):
"""Initialize the environment variables.""" """Initialize the environment variables."""
type_hints = get_type_hints(type(self)) type_hints = get_type_hints(type(self))

View File

@ -2,7 +2,6 @@
from __future__ import annotations from __future__ import annotations
import os
import platform import platform
from enum import Enum from enum import Enum
from importlib import metadata from importlib import metadata
@ -11,6 +10,8 @@ from types import SimpleNamespace
from platformdirs import PlatformDirs from platformdirs import PlatformDirs
from .utils import classproperty
IS_WINDOWS = platform.system() == "Windows" IS_WINDOWS = platform.system() == "Windows"
@ -95,26 +96,50 @@ class Templates(SimpleNamespace):
DEFAULT = "blank" DEFAULT = "blank"
# The reflex.build frontend host # The reflex.build frontend host
REFLEX_BUILD_FRONTEND = os.environ.get( REFLEX_BUILD_FRONTEND = "https://flexgen.reflex.run"
"REFLEX_BUILD_FRONTEND", "https://flexgen.reflex.run"
)
# The reflex.build backend host # The reflex.build backend host
REFLEX_BUILD_BACKEND = os.environ.get( REFLEX_BUILD_BACKEND = "https://flexgen-prod-flexgen.fly.dev"
"REFLEX_BUILD_BACKEND", "https://flexgen-prod-flexgen.fly.dev"
@classproperty
@classmethod
def REFLEX_BUILD_URL(cls):
"""The URL to redirect to reflex.build.
Returns:
The URL to redirect to reflex.build.
"""
from reflex.config import environment
return (
environment.REFLEX_BUILD_FRONTEND
+ "/gen?reflex_init_token={reflex_init_token}"
) )
# The URL to redirect to reflex.build @classproperty
REFLEX_BUILD_URL = ( @classmethod
REFLEX_BUILD_FRONTEND + "/gen?reflex_init_token={reflex_init_token}" def REFLEX_BUILD_POLL_URL(cls):
) """The URL to poll waiting for the user to select a generation.
# The URL to poll waiting for the user to select a generation. Returns:
REFLEX_BUILD_POLL_URL = REFLEX_BUILD_BACKEND + "/api/init/{reflex_init_token}" The URL to poll waiting for the user to select a generation.
"""
from reflex.config import environment
# The URL to fetch the generation's reflex code return environment.REFLEX_BUILD_BACKEND + "/api/init/{reflex_init_token}"
REFLEX_BUILD_CODE_URL = (
REFLEX_BUILD_BACKEND + "/api/gen/{generation_hash}/refactored" @classproperty
@classmethod
def REFLEX_BUILD_CODE_URL(cls):
"""The URL to fetch the generation's reflex code.
Returns:
The URL to fetch the generation's reflex code.
"""
from reflex.config import environment
return (
environment.REFLEX_BUILD_BACKEND + "/api/gen/{generation_hash}/refactored"
) )
class Dirs(SimpleNamespace): class Dirs(SimpleNamespace):

View File

@ -5,9 +5,9 @@ from __future__ import annotations
import platform import platform
from pathlib import Path from pathlib import Path
from types import SimpleNamespace from types import SimpleNamespace
from typing import Any, Callable, Generic, Type, TypeVar
from .base import IS_WINDOWS from .base import IS_WINDOWS
from .utils import classproperty
def get_fnm_name() -> str | None: def get_fnm_name() -> str | None:
@ -32,34 +32,6 @@ def get_fnm_name() -> str | None:
return None return None
T = TypeVar("T")
V = TypeVar("V")
class classproperty(Generic[T, V]):
"""A class property decorator."""
def __init__(self, getter: Callable[[Type[T]], V]) -> None:
"""Initialize the class property.
Args:
getter: The getter function.
"""
self.getter = getattr(getter, "__func__", getter)
def __get__(self, instance: Any, owner: Type[T]) -> V:
"""Get the value of the class property.
Args:
instance: The instance of the class.
owner: The class itself.
Returns:
The value of the class property.
"""
return self.getter(owner)
# Bun config. # Bun config.
class Bun(SimpleNamespace): class Bun(SimpleNamespace):
"""Bun constants.""" """Bun constants."""

32
reflex/constants/utils.py Normal file
View File

@ -0,0 +1,32 @@
"""Utility functions for constants."""
from typing import Any, Callable, Generic, Type
from typing_extensions import TypeVar
T = TypeVar("T")
V = TypeVar("V")
class classproperty(Generic[T, V]):
"""A class property decorator."""
def __init__(self, getter: Callable[[Type[T]], V]) -> None:
"""Initialize the class property.
Args:
getter: The getter function.
"""
self.getter = getattr(getter, "__func__", getter)
def __get__(self, instance: Any, owner: Type[T]) -> V:
"""Get the value of the class property.
Args:
instance: The instance of the class.
owner: The class itself.
Returns:
The value of the class property.
"""
return self.getter(owner)

View File

@ -2,7 +2,6 @@
from __future__ import annotations from __future__ import annotations
import os
from collections import defaultdict from collections import defaultdict
from typing import Any, ClassVar, Optional, Type, Union from typing import Any, ClassVar, Optional, Type, Union
@ -44,7 +43,7 @@ def get_engine(url: str | None = None) -> sqlalchemy.engine.Engine:
"Database is not initialized, run [bold]reflex db init[/bold] first." "Database is not initialized, run [bold]reflex db init[/bold] first."
) )
# Print the SQL queries if the log level is INFO or lower. # Print the SQL queries if the log level is INFO or lower.
echo_db_query = os.environ.get("SQLALCHEMY_ECHO") == "True" echo_db_query = environment.SQLALCHEMY_ECHO
# Needed for the admin dash on sqlite. # Needed for the admin dash on sqlite.
connect_args = {"check_same_thread": False} if url.startswith("sqlite") else {} connect_args = {"check_same_thread": False} if url.startswith("sqlite") else {}
return sqlmodel.create_engine(url, echo=echo_db_query, connect_args=connect_args) return sqlmodel.create_engine(url, echo=echo_db_query, connect_args=connect_args)

View File

@ -8,7 +8,6 @@ import copy
import dataclasses import dataclasses
import functools import functools
import inspect import inspect
import os
import pickle import pickle
import sys import sys
import uuid import uuid
@ -64,6 +63,7 @@ from redis.exceptions import ResponseError
import reflex.istate.dynamic import reflex.istate.dynamic
from reflex import constants from reflex import constants
from reflex.base import Base from reflex.base import Base
from reflex.config import environment
from reflex.event import ( from reflex.event import (
BACKGROUND_TASK_MARKER, BACKGROUND_TASK_MARKER,
Event, Event,
@ -3272,11 +3272,7 @@ class StateManagerRedis(StateManager):
) )
except ResponseError: except ResponseError:
# Some redis servers only allow out-of-band configuration, so ignore errors here. # Some redis servers only allow out-of-band configuration, so ignore errors here.
ignore_config_error = os.environ.get( if not environment.REFLEX_IGNORE_REDIS_CONFIG_ERROR:
"REFLEX_IGNORE_REDIS_CONFIG_ERROR",
None,
)
if not ignore_config_error:
raise raise
async with self.redis.pubsub() as pubsub: async with self.redis.pubsub() as pubsub:
await pubsub.psubscribe(lock_key_channel) await pubsub.psubscribe(lock_key_channel)