瀏覽代碼

crack down on sets for uniqueness (#5316)

* crack down on sets for uniqueness

* remove extra set

Co-authored-by: Masen Furer <m_github@0x26.net>

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
Khaleel Al-Adhami 1 天之前
父節點
當前提交
69eae3fda7
共有 6 個文件被更改,包括 21 次插入29 次删除
  1. 1 1
      reflex/app.py
  2. 2 2
      reflex/compiler/compiler.py
  3. 1 1
      reflex/compiler/utils.py
  4. 14 22
      reflex/components/component.py
  5. 1 1
      reflex/utils/prerequisites.py
  6. 2 2
      reflex/vars/base.py

+ 1 - 1
reflex/app.py

@@ -1443,7 +1443,7 @@ class App(MiddlewareMixin, LifespanMixin):
             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)
 

+ 2 - 2
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.
 

+ 1 - 1
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):

+ 14 - 22
reflex/components/component.py

@@ -2547,7 +2547,9 @@ class StatefulComponent(BaseComponent):
         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:
@@ -2557,7 +2559,7 @@ class StatefulComponent(BaseComponent):
             The dependencies accessed by the event triggers.
         """
         events: list = [event]
-        deps = set()
+        deps = {}
 
         if isinstance(event, EventChain):
             events.extend(event.events)
@@ -2568,7 +2570,7 @@ class StatefulComponent(BaseComponent):
                     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
@@ -2785,27 +2787,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(
@@ -2823,7 +2821,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()
@@ -2832,7 +2830,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,
             )
 
@@ -2841,8 +2839,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(),
         )
@@ -2860,7 +2858,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"]],
     )
 
 
@@ -2881,13 +2879,7 @@ class LiteralComponentVar(CachedVarOperation, LiteralVar, ComponentVar):
         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:

+ 1 - 1
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"

+ 2 - 2
reflex/vars/base.py

@@ -239,11 +239,11 @@ class VarData:
         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: