diff --git a/reflex/app.py b/reflex/app.py index bc84f6a788d..eb94e9a1bb2 100644 --- a/reflex/app.py +++ b/reflex/app.py @@ -1443,7 +1443,7 @@ def _submit_work(fn: Callable[..., tuple[str, str]], *args, **kwargs): custom_components_output, custom_components_result, custom_components_imports, - ) = compiler.compile_components(set(CUSTOM_COMPONENTS.values())) + ) = compiler.compile_components(dict.fromkeys(CUSTOM_COMPONENTS.values())) compile_results.append((custom_components_output, custom_components_result)) all_imports.update(custom_components_imports) diff --git a/reflex/compiler/compiler.py b/reflex/compiler/compiler.py index cf574933514..74b4fa877f2 100644 --- a/reflex/compiler/compiler.py +++ b/reflex/compiler/compiler.py @@ -326,7 +326,7 @@ def _compile_component(component: Component | StatefulComponent) -> str: def _compile_components( - components: set[CustomComponent], + components: Iterable[CustomComponent], ) -> tuple[str, dict[str, list[ImportVar]]]: """Compile the components. @@ -572,7 +572,7 @@ def compile_page( def compile_components( - components: set[CustomComponent], + components: Iterable[CustomComponent], ) -> tuple[str, str, dict[str, list[ImportVar]]]: """Compile the custom components. diff --git a/reflex/compiler/utils.py b/reflex/compiler/utils.py index 0bdb55ca4da..4bb6304cf2f 100644 --- a/reflex/compiler/utils.py +++ b/reflex/compiler/utils.py @@ -66,7 +66,7 @@ def compile_import_statement(fields: list[ImportVar]) -> tuple[str, list[str]]: default = next(iter({field.name for field in defaults}), "") rest = {field.name for field in fields_set - defaults} - return default, list(rest) + return default, sorted(rest) def validate_imports(import_dict: ParsedImportDict): diff --git a/reflex/components/component.py b/reflex/components/component.py index 4b2c49c1721..4ba24d82c56 100644 --- a/reflex/components/component.py +++ b/reflex/components/component.py @@ -2261,7 +2261,9 @@ def _get_hook_deps(hook: str) -> list[str]: return [var_name] @staticmethod - def _get_deps_from_event_trigger(event: EventChain | EventSpec | Var) -> set[str]: + def _get_deps_from_event_trigger( + event: EventChain | EventSpec | Var, + ) -> dict[str, None]: """Get the dependencies accessed by event triggers. Args: @@ -2271,7 +2273,7 @@ def _get_deps_from_event_trigger(event: EventChain | EventSpec | Var) -> set[str The dependencies accessed by the event triggers. """ events: list = [event] - deps = set() + deps = {} if isinstance(event, EventChain): events.extend(event.events) @@ -2282,7 +2284,7 @@ def _get_deps_from_event_trigger(event: EventChain | EventSpec | Var) -> set[str for a in arg: var_datas = VarData.merge(a._get_all_var_data()) if var_datas and var_datas.deps is not None: - deps |= {str(dep) for dep in var_datas.deps} + deps |= {str(dep): None for dep in var_datas.deps} return deps @classmethod @@ -2499,27 +2501,23 @@ def empty_component() -> Component: return Bare.create("") -def render_dict_to_var(tag: dict | Component | str, imported_names: set[str]) -> Var: +def render_dict_to_var(tag: dict | Component | str) -> Var: """Convert a render dict to a Var. Args: tag: The render dict. - imported_names: The names of the imported components. Returns: The Var. """ if not isinstance(tag, dict): if isinstance(tag, Component): - return render_dict_to_var(tag.render(), imported_names) + return render_dict_to_var(tag.render()) return Var.create(tag) if "iterable" in tag: function_return = LiteralArrayVar.create( - [ - render_dict_to_var(child.render(), imported_names) - for child in tag["children"] - ] + [render_dict_to_var(child.render()) for child in tag["children"]] ) func = ArgsFunctionOperation.create( @@ -2537,7 +2535,7 @@ def render_dict_to_var(tag: dict | Component | str, imported_names: set[str]) -> if tag["name"] == "match": element = tag["cond"] - conditionals = render_dict_to_var(tag["default"], imported_names) + conditionals = render_dict_to_var(tag["default"]) for case in tag["match_cases"][::-1]: condition = case[0].to_string() == element.to_string() @@ -2546,7 +2544,7 @@ def render_dict_to_var(tag: dict | Component | str, imported_names: set[str]) -> conditionals = ternary_operation( condition, - render_dict_to_var(case[-1], imported_names), + render_dict_to_var(case[-1]), conditionals, ) @@ -2555,8 +2553,8 @@ def render_dict_to_var(tag: dict | Component | str, imported_names: set[str]) -> if "cond" in tag: return ternary_operation( tag["cond"], - render_dict_to_var(tag["true_value"], imported_names), - render_dict_to_var(tag["false_value"], imported_names) + render_dict_to_var(tag["true_value"]), + render_dict_to_var(tag["false_value"]) if tag["false_value"] is not None else LiteralNoneVar.create(), ) @@ -2574,7 +2572,7 @@ def render_dict_to_var(tag: dict | Component | str, imported_names: set[str]) -> tag_name, props, *([Var(contents)] if contents is not None else []), - *[render_dict_to_var(child, imported_names) for child in tag["children"]], + *[render_dict_to_var(child) for child in tag["children"]], ) @@ -2595,13 +2593,7 @@ def _cached_var_name(self) -> str: Returns: The name of the var. """ - var_data = self._get_all_var_data() - if var_data is not None: - # flatten imports - imported_names = {j.alias or j.name for i in var_data.imports for j in i[1]} - else: - imported_names = set() - return str(render_dict_to_var(self._var_value.render(), imported_names)) + return str(render_dict_to_var(self._var_value.render())) @cached_property_no_lock def _cached_get_all_var_data(self) -> VarData | None: diff --git a/reflex/utils/prerequisites.py b/reflex/utils/prerequisites.py index a89f262dd44..9a4ae8b9d3d 100644 --- a/reflex/utils/prerequisites.py +++ b/reflex/utils/prerequisites.py @@ -1120,7 +1120,7 @@ def _update_next_config( if transpile_packages: next_config["transpilePackages"] = list( - {format_library_name(p) for p in transpile_packages} + dict.fromkeys([format_library_name(p) for p in transpile_packages]) ) if export: next_config["output"] = "export" diff --git a/reflex/vars/base.py b/reflex/vars/base.py index 284d6ac3de8..624da6afacf 100644 --- a/reflex/vars/base.py +++ b/reflex/vars/base.py @@ -233,11 +233,11 @@ def merge(*all: VarData | None) -> VarData | None: deps = [dep for var_data in all_var_datas for dep in var_data.deps] positions = list( - { + dict.fromkeys( var_data.position for var_data in all_var_datas if var_data.position is not None - } + ) ) if positions: if len(positions) > 1: