diff --git a/solara/components/__init__.py b/solara/components/__init__.py index 086006059..59bf208e4 100644 --- a/solara/components/__init__.py +++ b/solara/components/__init__.py @@ -73,5 +73,4 @@ logger = logging.getLogger("solara.components") logger.warning(f"Default container {main.default_container} not found in solara.components. Defaulting to Column.") -# TODO: When Solara 2.0 releases Column should be replaced with Fragment -reacton.core._default_container = _container or Column # noqa: F405 +reacton.core._default_container = _container or Fragment # noqa: F405 diff --git a/solara/settings.py b/solara/settings.py index 674fd752b..a2d8be495 100644 --- a/solara/settings.py +++ b/solara/settings.py @@ -54,9 +54,8 @@ class Config: class MainSettings(BaseSettings): check_hooks: str = "warn" - allow_reactive_boolean: bool = True - # TODO: also change default_container in solara/components/__init__.py - default_container: Optional[str] = "Column" + allow_reactive_boolean: bool = False + default_container: Optional[str] = "Fragment" class Config: env_prefix = "solara_" diff --git a/solara/toestand.py b/solara/toestand.py index 835b52d03..ca527dc88 100644 --- a/solara/toestand.py +++ b/solara/toestand.py @@ -32,6 +32,7 @@ import solara import solara.settings +import solara.server.settings from solara import _using_solara_server T = TypeVar("T") @@ -355,7 +356,9 @@ def __init__(self, default_value: S, key=None, equals: Callable[[Any, Any], bool self.default_value = default_value self._unwrap = unwrap self.equals = equals - self._mutation_detection = solara.settings.storage.mutation_detection + self._mutation_detection = solara.settings.storage.mutation_detection is True or ( + solara.settings.storage.mutation_detection is None and not solara.server.settings.main.mode == "production" + ) if self._mutation_detection: frame = _find_outside_solara_frame() if frame is not None: @@ -452,9 +455,11 @@ def mutation_detection_storage(default_value: S, key=None, equals=None) -> Value def default_storage(default_value: S, key=None, equals=None) -> ValueBase[S]: - # in solara v2 we will also do this when mutation_detection is None - # and we do not run on production mode - if solara.settings.storage.mutation_detection is True: + # We use mutation detection if it is explicitly enabled, or if it is not explicitly disabled and + # We aren't running in production mode + if solara.settings.storage.mutation_detection is True or ( + solara.settings.storage.mutation_detection is None and not solara.server.settings.main.mode == "production" + ): return mutation_detection_storage(default_value, key=key, equals=equals) else: return KernelStoreValue[S](default_value, key=key, equals=equals or equals_extra) diff --git a/tests/unit/toestand_test.py b/tests/unit/toestand_test.py index ff7b41767..c19382681 100644 --- a/tests/unit/toestand_test.py +++ b/tests/unit/toestand_test.py @@ -759,13 +759,13 @@ def Test(): box, rc = solara.render(Test(), handle_error=False) - if solara.settings.storage.mutation_detection: + if solara.settings.storage.mutation_detection is not False: # a copy is made, so get a reference to the actual used object df = get_storage(store).value.public assert rc.find(v.Alert).widget.children[0] == repr(id(df)) df2 = df2.copy() store.set(df2) - if solara.settings.storage.mutation_detection: + if solara.settings.storage.mutation_detection is not False: df2 = get_storage(store).value.public assert rc.find(v.Alert).widget.children[0] == repr(id(df2))