Explorar o código

move complex file check into separate function

Falko Schindler hai 1 ano
pai
achega
db598d4881
Modificáronse 4 ficheiros con 15 adicións e 4 borrados
  1. 2 1
      nicegui/elements/mixins/source_element.py
  2. 2 1
      nicegui/favicon.py
  3. 9 0
      nicegui/helpers.py
  4. 2 2
      nicegui/nicegui.py

+ 2 - 1
nicegui/elements/mixins/source_element.py

@@ -6,6 +6,7 @@ from typing_extensions import Self
 from ... import globals
 from ...binding import BindableProperty, bind, bind_from, bind_to
 from ...element import Element
+from ...helpers import is_file
 
 
 class SourceElement(Element):
@@ -13,7 +14,7 @@ class SourceElement(Element):
 
     def __init__(self, *, source: Union[str, Path], **kwargs: Any) -> None:
         super().__init__(**kwargs)
-        if not str(source).strip().startswith('data:') and Path(source).is_file():
+        if is_file(source):
             source = globals.app.add_static_file(local_file=source)
         self.source = source
         self._props['src'] = source

+ 2 - 1
nicegui/favicon.py

@@ -7,13 +7,14 @@ from typing import TYPE_CHECKING, Optional, Tuple, Union
 from fastapi.responses import FileResponse, Response, StreamingResponse
 
 from . import __version__, globals
+from .helpers import is_file
 
 if TYPE_CHECKING:
     from .page import page
 
 
 def create_favicon_route(path: str, favicon: Optional[Union[str, Path]]) -> None:
-    if favicon and not str(favicon).strip().startswith('data:') and Path(favicon).exists():
+    if is_file(favicon):
         globals.app.add_route(f'{path}/favicon.ico', lambda _: FileResponse(favicon))
 
 

+ 9 - 0
nicegui/helpers.py

@@ -38,6 +38,15 @@ def is_coroutine_function(object: Any) -> bool:
     return asyncio.iscoroutinefunction(object)
 
 
+def is_file(path: Optional[Union[str, Path]]) -> bool:
+    """Check if the path is a file that exists."""
+    if not path:
+        return False
+    elif isinstance(path, str) and path.strip().startswith('data:'):
+        return False  # NOTE: avoid passing data URLs to Path
+    return Path(path).is_file()
+
+
 def safe_invoke(func: Union[Callable[..., Any], Awaitable], client: Optional['Client'] = None) -> None:
     try:
         if isinstance(func, Awaitable):

+ 2 - 2
nicegui/nicegui.py

@@ -21,7 +21,7 @@ from .client import Client
 from .dependencies import js_components, js_dependencies
 from .element import Element
 from .error import error_content
-from .helpers import safe_invoke
+from .helpers import is_file, safe_invoke
 from .page import page
 
 globals.app = app = App(default_response_class=NiceGUIJSONResponse)
@@ -67,7 +67,7 @@ def handle_startup(with_welcome_message: bool = True) -> None:
                            '   if __name__ in {"__main__", "__mp_main__"}:\n'
                            'to allow for multiprocessing.')
     if globals.favicon:
-        if not str(globals.favicon).strip().startswith('data:') and Path(globals.favicon).exists():
+        if is_file(globals.favicon):
             globals.app.add_route('/favicon.ico', lambda _: FileResponse(globals.favicon))
         else:
             globals.app.add_route('/favicon.ico', lambda _: favicon.get_favicon_response())