소스 검색

add typehint_issubclass for var_type in style (#4946)

Khaleel Al-Adhami 2 달 전
부모
커밋
32b10f2eed
2개의 변경된 파일10개의 추가작업 그리고 3개의 파일을 삭제
  1. 3 3
      reflex/style.py
  2. 7 0
      tests/units/test_style.py

+ 3 - 3
reflex/style.py

@@ -2,7 +2,7 @@
 
 
 from __future__ import annotations
 from __future__ import annotations
 
 
-from typing import Any, Literal, Type
+from typing import Any, Literal, Mapping, Type
 
 
 from reflex import constants
 from reflex import constants
 from reflex.components.core.breakpoints import Breakpoints, breakpoints_values
 from reflex.components.core.breakpoints import Breakpoints, breakpoints_values
@@ -10,7 +10,7 @@ from reflex.event import EventChain, EventHandler, EventSpec, run_script
 from reflex.utils import format
 from reflex.utils import format
 from reflex.utils.exceptions import ReflexError
 from reflex.utils.exceptions import ReflexError
 from reflex.utils.imports import ImportVar
 from reflex.utils.imports import ImportVar
-from reflex.utils.types import get_origin
+from reflex.utils.types import typehint_issubclass
 from reflex.vars import VarData
 from reflex.vars import VarData
 from reflex.vars.base import LiteralVar, Var
 from reflex.vars.base import LiteralVar, Var
 from reflex.vars.function import FunctionVar
 from reflex.vars.function import FunctionVar
@@ -189,7 +189,7 @@ def convert(
             or (isinstance(value, list) and all(not isinstance(v, dict) for v in value))
             or (isinstance(value, list) and all(not isinstance(v, dict) for v in value))
             or (
             or (
                 isinstance(value, ObjectVar)
                 isinstance(value, ObjectVar)
-                and not issubclass(get_origin(value._var_type) or value._var_type, dict)
+                and not typehint_issubclass(value._var_type, Mapping)
             )
             )
             else (key,)
             else (key,)
         )
         )

+ 7 - 0
tests/units/test_style.py

@@ -11,8 +11,15 @@ from reflex.style import Style
 from reflex.vars import VarData
 from reflex.vars import VarData
 from reflex.vars.base import LiteralVar, Var
 from reflex.vars.base import LiteralVar, Var
 
 
+style_var = rx.Var.create({"height": "42px"})
+
 test_style = [
 test_style = [
     ({"a": 1}, {"a": 1}),
     ({"a": 1}, {"a": 1}),
+    ({"&": style_var}, {"&": {"height": "42px"}}),
+    (
+        {"&": rx.cond(style_var, style_var, {})},
+        {"&": rx.cond(style_var, style_var, {})},
+    ),
     ({"a": LiteralVar.create("abc")}, {"a": "abc"}),
     ({"a": LiteralVar.create("abc")}, {"a": "abc"}),
     ({"test_case": 1}, {"testCase": 1}),
     ({"test_case": 1}, {"testCase": 1}),
     ({"test_case": {"a": 1}}, {"test_case": {"a": 1}}),
     ({"test_case": {"a": 1}}, {"test_case": {"a": 1}}),