瀏覽代碼

consequently using task_logger

Rodja Trappe 3 年之前
父節點
當前提交
7fe97a2c1f
共有 6 個文件被更改,包括 16 次插入9 次删除
  1. 5 2
      nicegui/binding.py
  2. 3 2
      nicegui/elements/log.py
  3. 2 2
      nicegui/elements/notify.py
  4. 2 1
      nicegui/elements/scene_object3d.py
  5. 2 1
      nicegui/events.py
  6. 2 1
      nicegui/timer.py

+ 5 - 2
nicegui/binding.py

@@ -13,7 +13,7 @@ async def loop():
         invalidated_views = []
         for link in active_links:
             (source_obj, source_name, target_obj, target_name, transform) = link
-            value = transform(getattr(source_obj, source_name))
+            value = transform(get_raw_value(source_obj, source_name))
             if getattr(target_obj, target_name) != value:
                 setattr(target_obj, target_name, value)
                 propagate(target_obj, target_name, visited)
@@ -30,7 +30,7 @@ def propagate(source_obj, source_name, visited=None):
     for _, target_obj, target_name, transform in bindings[(id(source_obj), source_name)]:
         if (id(target_obj), target_name) in visited:
             continue
-        target_value = transform(getattr(source_obj, source_name))
+        target_value = transform(get_raw_value(source_obj, source_name))
         if getattr(target_obj, target_name) != target_value:
             setattr(target_obj, target_name, target_value)
             propagate(target_obj, target_name, visited)
@@ -47,6 +47,9 @@ def bind_from(self_obj, self_name, other_obj, other_name, backward):
         active_links.append((other_obj, other_name, self_obj, self_name, backward))
     propagate(other_obj, other_name)
 
+def get_raw_value(source_obj, source_name):
+    return source_obj[source_name] if type(source_obj) is dict else getattr(source_obj, source_name)
+
 class BindableProperty:
 
     def __set_name__(self, _, name):

+ 3 - 2
nicegui/elements/log.py

@@ -7,6 +7,7 @@ from collections import deque
 from justpy.htmlcomponents import WebPage
 from .custom_view import CustomView
 from .element import Element
+from ..task_logger import create_task
 
 class LogView(CustomView):
 
@@ -21,7 +22,7 @@ class LogView(CustomView):
             if self.lines:
                 content = '\n'.join(self.lines)
                 command = f'push("{urllib.parse.quote(content)}")'
-                asyncio.get_event_loop().create_task(self.run_method(command, msg.websocket))
+                create_task(self.run_method(command, msg.websocket), name=str(command))
         except:
             traceback.print_exc()
 
@@ -46,4 +47,4 @@ class Log(Element):
         ])
 
     def push(self, line: str):
-        asyncio.get_event_loop().create_task(self.push_async(line))
+        create_task(self.push_async(line), name=f'log.push line {line}')

+ 2 - 2
nicegui/elements/notify.py

@@ -1,6 +1,6 @@
 import justpy as jp
 from .element import Element
-import asyncio
+from ..task_logger import create_task
 
 
 class Notify(Element):
@@ -22,7 +22,7 @@ class Notify(Element):
         view = jp.QNotify(message=message, position=position, closeBtn=close_button)
 
         super().__init__(view)
-        asyncio.get_event_loop().create_task(self.notify_async())
+        create_task(self.notify_async(), name='notify_async')
 
     async def notify_async(self):
         self.view.notify = True

+ 2 - 1
nicegui/elements/scene_object3d.py

@@ -4,6 +4,7 @@ from typing import List, Optional
 import uuid
 import numpy as np
 from justpy.htmlcomponents import WebPage
+from ..task_logger import create_task
 
 class Object3D:
     stack: List[Object3D] = []
@@ -35,7 +36,7 @@ class Object3D:
     def run_command(self, command: str, socket=None):
         sockets = [socket] if socket else WebPage.sockets.get(self.page.page_id, {}).values()
         for socket in sockets:
-            asyncio.get_event_loop().create_task(self.view.run_method(command, socket))
+            create_task(self.view.run_method(command, socket), name=command)
 
     def send_to(self, socket):
         self.run_command(self._create_command, socket)

+ 2 - 1
nicegui/events.py

@@ -6,6 +6,7 @@ import traceback
 from typing import Any, Awaitable, Callable, List, Optional, Union
 
 from .elements.element import Element
+from .task_logger import create_task
 
 class EventArguments(BaseModel):
     class Config:
@@ -214,7 +215,7 @@ def handle_event(handler: Optional[Union[Callable, Awaitable]],
                         await update.update()
                 except Exception:
                     traceback.print_exc()
-            asyncio.get_event_loop().create_task(async_handler())
+            create_task(async_handler(), name=str(handler))
             return False
         else:
             return result

+ 2 - 1
nicegui/timer.py

@@ -6,6 +6,7 @@ from collections import namedtuple
 
 from .binding import BindableProperty
 from .globals import tasks, view_stack
+from .task_logger import create_task
 
 NamedCoroutine = namedtuple('NamedCoroutine', ['name', 'coro'])
 
@@ -65,4 +66,4 @@ class Timer:
         if not event_loop.is_running():
             self.prepared_coroutines.append(NamedCoroutine(str(callback), coroutine))
         else:
-            tasks.append(event_loop.create_task(coroutine, name=str(callback)))
+            tasks.append(create_task(coroutine, name=str(callback)))