22
33from __future__ import annotations
44
5+ import sys
56from collections .abc import Iterable , Sequence
67from datetime import datetime
78from inspect import getmodule
@@ -685,12 +686,13 @@ def into_component(component: Component | ComponentCallable) -> Component:
685686 """
686687 if (converted := _into_component_once (component )) is not None :
687688 return converted
689+ if not callable (component ):
690+ raise TypeError (
691+ f"Expected a Component or callable, got { component !r} of type { type (component )} "
692+ )
693+
688694 try :
689- if (
690- callable (component )
691- and (converted := _into_component_once (component ())) is not None
692- ):
693- return converted
695+ component_called = component ()
694696 except KeyError as e :
695697 if isinstance (e , ReflexError ):
696698 raise
@@ -727,7 +729,12 @@ def into_component(component: Component | ComponentCallable) -> Component:
727729 ).with_traceback (e .__traceback__ ) from None
728730 raise
729731
730- raise TypeError (f"Expected a Component, got { type (component )} " )
732+ if (converted := _into_component_once (component_called )) is not None :
733+ return converted
734+
735+ raise TypeError (
736+ f"Expected a Component, got { component_called !r} of type { type (component_called )} "
737+ )
731738
732739
733740def compile_unevaluated_page (
@@ -748,52 +755,61 @@ def compile_unevaluated_page(
748755
749756 Returns:
750757 The compiled component and whether state should be enabled.
758+
759+ Raises:
760+ Exception: If an error occurs while evaluating the page.
751761 """
752- # Generate the component if it is a callable.
753- component = into_component (page .component )
762+ try :
763+ # Generate the component if it is a callable.
764+ component = into_component (page .component )
754765
755- component ._add_style_recursive (style or {}, theme )
766+ component ._add_style_recursive (style or {}, theme )
756767
757- enable_state = False
758- # Ensure state is enabled if this page uses state.
759- if state is None :
760- if page .on_load or component ._has_stateful_event_triggers ():
761- enable_state = True
762- else :
763- for var in component ._get_vars (include_children = True ):
764- var_data = var ._get_all_var_data ()
765- if not var_data :
766- continue
767- if not var_data .state :
768- continue
768+ enable_state = False
769+ # Ensure state is enabled if this page uses state.
770+ if state is None :
771+ if page .on_load or component ._has_stateful_event_triggers ():
769772 enable_state = True
770- break
771-
772- from reflex .app import OverlayFragment
773- from reflex .utils .format import make_default_page_title
774-
775- component = OverlayFragment .create (component )
776-
777- meta_args = {
778- "title" : (
779- page .title
780- if page .title is not None
781- else make_default_page_title (get_config ().app_name , route )
782- ),
783- "image" : page .image ,
784- "meta" : page .meta ,
785- }
786-
787- if page .description is not None :
788- meta_args ["description" ] = page .description
789-
790- # Add meta information to the component.
791- utils .add_meta (
792- component ,
793- ** meta_args ,
794- )
773+ else :
774+ for var in component ._get_vars (include_children = True ):
775+ var_data = var ._get_all_var_data ()
776+ if not var_data :
777+ continue
778+ if not var_data .state :
779+ continue
780+ enable_state = True
781+ break
782+
783+ from reflex .app import OverlayFragment
784+ from reflex .utils .format import make_default_page_title
785+
786+ component = OverlayFragment .create (component )
787+
788+ meta_args = {
789+ "title" : (
790+ page .title
791+ if page .title is not None
792+ else make_default_page_title (get_config ().app_name , route )
793+ ),
794+ "image" : page .image ,
795+ "meta" : page .meta ,
796+ }
797+
798+ if page .description is not None :
799+ meta_args ["description" ] = page .description
800+
801+ # Add meta information to the component.
802+ utils .add_meta (
803+ component ,
804+ ** meta_args ,
805+ )
795806
796- return component , enable_state
807+ except Exception as e :
808+ if sys .version_info >= (3 , 11 ):
809+ e .add_note (f"Happened while evaluating page { route !r} " )
810+ raise
811+ else :
812+ return component , enable_state
797813
798814
799815class ExecutorSafeFunctions :
0 commit comments