Prechádzať zdrojové kódy

parse_args_spec: resolve annotations with typing.get_type_hints (#2849)

* parse_args_spec: resolve annotations with typing.get_type_hints

Ensure that event trigger specs in modules with future annotations are resolved
correctly.

Fix #2848

* Fix arg spec for on_upload_progress event

Make py3.8 compatible with `get_type_hints`
Masen Furer 1 rok pred
rodič
commit
c9e87d70df
1 zmenil súbory, kde vykonal 4 pridanie a 2 odobranie
  1. 4 2
      reflex/event.py

+ 4 - 2
reflex/event.py

@@ -12,6 +12,7 @@ from typing import (
     Optional,
     Optional,
     Tuple,
     Tuple,
     Union,
     Union,
+    get_type_hints,
 )
 )
 
 
 from reflex import constants
 from reflex import constants
@@ -281,7 +282,7 @@ class FileUpload(Base):
     on_upload_progress: Optional[Union[EventHandler, Callable]] = None
     on_upload_progress: Optional[Union[EventHandler, Callable]] = None
 
 
     @staticmethod
     @staticmethod
-    def on_upload_progress_args_spec(_prog: dict[str, int | float | bool]):
+    def on_upload_progress_args_spec(_prog: Dict[str, Union[int, float, bool]]):
         """Args spec for on_upload_progress event handler.
         """Args spec for on_upload_progress event handler.
 
 
         Returns:
         Returns:
@@ -728,11 +729,12 @@ def parse_args_spec(arg_spec: ArgsSpec):
         The parsed args.
         The parsed args.
     """
     """
     spec = inspect.getfullargspec(arg_spec)
     spec = inspect.getfullargspec(arg_spec)
+    annotations = get_type_hints(arg_spec)
     return arg_spec(
     return arg_spec(
         *[
         *[
             BaseVar(
             BaseVar(
                 _var_name=f"_{l_arg}",
                 _var_name=f"_{l_arg}",
-                _var_type=spec.annotations.get(l_arg, FrontendEvent),
+                _var_type=annotations.get(l_arg, FrontendEvent),
                 _var_is_local=True,
                 _var_is_local=True,
             )
             )
             for l_arg in spec.args
             for l_arg in spec.args