Ver código fonte

let SourceElement work with Any source type to fix mypy issues with ui.image and ui.interactive_image

Falko Schindler 1 ano atrás
pai
commit
1bce2bad36

+ 3 - 0
nicegui/elements/audio.py

@@ -32,6 +32,9 @@ class Audio(SourceElement, component='audio.js'):
         self._props['muted'] = muted
         self._props['loop'] = loop
 
+    def set_source(self, source: Union[str, Path]) -> None:
+        return super().set_source(source)
+
     def seek(self, seconds: float) -> None:
         """Seek to a specific position in the audio.
 

+ 3 - 0
nicegui/elements/image.py

@@ -27,6 +27,9 @@ class Image(SourceElement, component='image.js'):
         """
         super().__init__(source=source)
 
+    def set_source(self, source: Union[str, Path, 'PIL_Image']) -> None:
+        return super().set_source(source)
+
     def _set_props(self, source: Union[str, Path, 'PIL_Image']) -> None:
         if optional_features.has('pillow') and isinstance(source, PIL_Image):
             source = pil_to_base64(source, self.PIL_CONVERT_FORMAT)

+ 3 - 0
nicegui/elements/interactive_image.py

@@ -65,6 +65,9 @@ class InteractiveImage(SourceElement, ContentElement, component='interactive_ima
         if on_mouse:
             self.on_mouse(on_mouse)
 
+    def set_source(self, source: Union[str, Path, 'PIL_Image']) -> None:  # noqa: UP037
+        return super().set_source(source)
+
     def on_mouse(self, on_mouse: Callable[..., Any]) -> Self:
         """Add a callback to be invoked when a mouse event occurs."""
         def handle_mouse(e: GenericEventArguments) -> None:

+ 5 - 6
nicegui/elements/mixins/source_element.py

@@ -1,5 +1,4 @@
-from pathlib import Path
-from typing import Any, Callable, Optional, Union, cast
+from typing import Any, Callable, Optional, cast
 
 from typing_extensions import Self
 
@@ -15,7 +14,7 @@ class SourceElement(Element):
 
     SOURCE_IS_MEDIA_FILE: bool = False
 
-    def __init__(self, *, source: Union[str, Path], **kwargs: Any) -> None:
+    def __init__(self, *, source: Any, **kwargs: Any) -> None:
         super().__init__(**kwargs)
         self.auto_route: Optional[str] = None
         self.source = source
@@ -75,14 +74,14 @@ class SourceElement(Element):
         bind(self, 'source', target_object, target_name, forward=forward, backward=backward)
         return self
 
-    def set_source(self, source: Union[str, Path]) -> None:
+    def set_source(self, source: Any) -> None:
         """Set the source of this element.
 
         :param source: The new source.
         """
         self.source = source
 
-    def _handle_source_change(self, source: Union[str, Path]) -> None:
+    def _handle_source_change(self, source: Any) -> None:
         """Called when the source of this element changes.
 
         :param source: The new source.
@@ -90,7 +89,7 @@ class SourceElement(Element):
         self._set_props(source)
         self.update()
 
-    def _set_props(self, source: Union[str, Path]) -> None:
+    def _set_props(self, source: Any) -> None:
         if is_file(source):
             if self.auto_route:
                 core.app.remove_route(self.auto_route)

+ 3 - 0
nicegui/elements/video.py

@@ -32,6 +32,9 @@ class Video(SourceElement, component='video.js'):
         self._props['muted'] = muted
         self._props['loop'] = loop
 
+    def set_source(self, source: Union[str, Path]) -> None:
+        return super().set_source(source)
+
     def seek(self, seconds: float) -> None:
         """Seek to a specific position in the video.