Browse Source

replace msg['args'] with e.args

Falko Schindler 1 năm trước cách đây
mục cha
commit
9ae5d5f8c4

+ 1 - 1
examples/custom_vue_component/main.py

@@ -9,7 +9,7 @@ ui.markdown('''
 Click to increment its value.
 ''')
 with ui.card():
-    counter = Counter('Clicks', on_change=lambda msg: ui.notify(f'The value changed to {msg["args"]}.'))
+    counter = Counter('Clicks', on_change=lambda e: ui.notify(f'The value changed to {e.args}.'))
 
 
 ui.button('Reset', on_click=counter.reset).props('small outline')

+ 4 - 4
examples/local_file_picker/local_file_picker.py

@@ -1,8 +1,8 @@
 import platform
 from pathlib import Path
-from typing import Dict, Optional
+from typing import Optional
 
-from nicegui import ui
+from nicegui import events, ui
 
 
 class local_file_picker(ui.dialog):
@@ -70,8 +70,8 @@ class local_file_picker(ui.dialog):
             })
         self.grid.update()
 
-    def handle_double_click(self, msg: Dict) -> None:
-        self.path = Path(msg['args']['data']['path'])
+    def handle_double_click(self, msg: events.GenericEventArguments) -> None:
+        self.path = Path(msg.args['data']['path'])
         if self.path.is_dir():
             self.update_grid()
         else:

+ 1 - 1
examples/single_page_app/router.py

@@ -42,6 +42,6 @@ class Router():
 
     def frame(self) -> ui.element:
         self.content = ui.element('router_frame') \
-            .on('open', lambda msg: self.open(msg['args'])) \
+            .on('open', lambda e: self.open(e.args)) \
             .use_component('router_frame')
         return self.content

+ 4 - 5
nicegui/elements/color_picker.py

@@ -1,8 +1,7 @@
-from typing import Any, Callable, Dict
-
-from nicegui.events import ColorPickEventArguments, handle_event
+from typing import Any, Callable
 
 from ..element import Element
+from ..events import ColorPickEventArguments, GenericEventArguments, handle_event
 from .menu import Menu
 
 
@@ -16,8 +15,8 @@ class ColorPicker(Menu):
         """
         super().__init__(value=value)
         with self:
-            def handle_change(msg: Dict):
-                handle_event(on_pick, ColorPickEventArguments(sender=self, client=self.client, color=msg['args']))
+            def handle_change(e: GenericEventArguments):
+                handle_event(on_pick, ColorPickEventArguments(sender=self, client=self.client, color=e.args))
             self.q_color = Element('q-color').on('change', handle_change)
 
     def set_color(self, color: str) -> None:

+ 12 - 12
nicegui/elements/interactive_image.py

@@ -1,10 +1,10 @@
 from __future__ import annotations
 
 from pathlib import Path
-from typing import Any, Callable, Dict, List, Optional, Union
+from typing import Any, Callable, List, Optional, Union
 
 from ..dependencies import register_vue_component
-from ..events import MouseEventArguments, handle_event
+from ..events import GenericEventArguments, MouseEventArguments, handle_event
 from .mixins.content_element import ContentElement
 from .mixins.source_element import SourceElement
 
@@ -40,21 +40,21 @@ class InteractiveImage(SourceElement, ContentElement):
         self._props['cross'] = cross
         self.use_component('interactive_image')
 
-        def handle_mouse(msg: Dict) -> None:
+        def handle_mouse(e: GenericEventArguments) -> None:
             if on_mouse is None:
                 return
             arguments = MouseEventArguments(
                 sender=self,
                 client=self.client,
-                type=msg['args'].get('mouse_event_type'),
-                image_x=msg['args'].get('image_x'),
-                image_y=msg['args'].get('image_y'),
-                button=msg['args'].get('button', 0),
-                buttons=msg['args'].get('buttons', 0),
-                alt=msg['args'].get('alt', False),
-                ctrl=msg['args'].get('ctrl', False),
-                meta=msg['args'].get('meta', False),
-                shift=msg['args'].get('shift', False),
+                type=e.args.get('mouse_event_type'),
+                image_x=e.args.get('image_x'),
+                image_y=e.args.get('image_y'),
+                button=e.args.get('button', 0),
+                buttons=e.args.get('buttons', 0),
+                alt=e.args.get('alt', False),
+                ctrl=e.args.get('ctrl', False),
+                meta=e.args.get('meta', False),
+                shift=e.args.get('shift', False),
             )
             return handle_event(on_mouse, arguments)
         self.on('mouse', handle_mouse)

+ 5 - 5
nicegui/elements/joystick.py

@@ -1,9 +1,9 @@
 from pathlib import Path
-from typing import Any, Callable, Dict, Optional
+from typing import Any, Callable, Optional
 
 from ..dependencies import register_library, register_vue_component
 from ..element import Element
-from ..events import JoystickEventArguments, handle_event
+from ..events import GenericEventArguments, JoystickEventArguments, handle_event
 
 register_vue_component('joystick', Path(__file__).parent / 'joystick.vue')
 register_library('nipplejs', Path(__file__).parent / 'lib' / 'nipplejs' / 'nipplejs.js')
@@ -38,13 +38,13 @@ class Joystick(Element):
                                                           client=self.client,
                                                           action='start'))
 
-        def handle_move(msg: Dict) -> None:
+        def handle_move(e: GenericEventArguments) -> None:
             if self.active:
                 handle_event(on_move, JoystickEventArguments(sender=self,
                                                              client=self.client,
                                                              action='move',
-                                                             x=float(msg['args']['data']['vector']['x']),
-                                                             y=float(msg['args']['data']['vector']['y'])))
+                                                             x=float(e.args['data']['vector']['x']),
+                                                             y=float(e.args['data']['vector']['y'])))
 
         def handle_end() -> None:
             self.active = False

+ 14 - 13
nicegui/elements/keyboard.py

@@ -1,12 +1,13 @@
 from pathlib import Path
-from typing import Any, Callable, Dict, List
+from typing import Any, Callable, List
 
 from typing_extensions import Literal
 
 from ..binding import BindableProperty
 from ..dependencies import register_vue_component
 from ..element import Element
-from ..events import KeyboardAction, KeyboardKey, KeyboardModifiers, KeyEventArguments, handle_event
+from ..events import (GenericEventArguments, KeyboardAction, KeyboardKey, KeyboardModifiers, KeyEventArguments,
+                      handle_event)
 
 register_vue_component('keyboard', Path(__file__).parent / 'keyboard.js')
 
@@ -38,25 +39,25 @@ class Keyboard(Element):
         self.on('key', self.handle_key)
         self.use_component('keyboard')
 
-    def handle_key(self, msg: Dict) -> None:
+    def handle_key(self, e: GenericEventArguments) -> None:
         if not self.active:
             return
 
         action = KeyboardAction(
-            keydown=msg['args']['action'] == 'keydown',
-            keyup=msg['args']['action'] == 'keyup',
-            repeat=msg['args']['repeat'],
+            keydown=e.args['action'] == 'keydown',
+            keyup=e.args['action'] == 'keyup',
+            repeat=e.args['repeat'],
         )
         modifiers = KeyboardModifiers(
-            alt=msg['args']['altKey'],
-            ctrl=msg['args']['ctrlKey'],
-            meta=msg['args']['metaKey'],
-            shift=msg['args']['shiftKey'],
+            alt=e.args['altKey'],
+            ctrl=e.args['ctrlKey'],
+            meta=e.args['metaKey'],
+            shift=e.args['shiftKey'],
         )
         key = KeyboardKey(
-            name=msg['args']['key'],
-            code=msg['args']['code'],
-            location=msg['args']['location'],
+            name=e.args['key'],
+            code=e.args['code'],
+            location=e.args['location'],
         )
         arguments = KeyEventArguments(
             sender=self,

+ 3 - 3
nicegui/elements/mixins/value_element.py

@@ -4,7 +4,7 @@ from typing_extensions import Self
 
 from ...binding import BindableProperty, bind, bind_from, bind_to
 from ...element import Element
-from ...events import ValueChangeEventArguments, handle_event
+from ...events import GenericEventArguments, ValueChangeEventArguments, handle_event
 
 
 class ValueElement(Element):
@@ -100,8 +100,8 @@ class ValueElement(Element):
         args = ValueChangeEventArguments(sender=self, client=self.client, value=self._value_to_event_value(value))
         handle_event(self.change_handler, args)
 
-    def _msg_to_value(self, msg: Dict) -> Any:
-        return msg['args']
+    def _msg_to_value(self, e: GenericEventArguments) -> Any:
+        return e.args
 
     def _value_to_model_value(self, value: Any) -> Any:
         return value

+ 3 - 2
nicegui/elements/number.py

@@ -1,5 +1,6 @@
 from typing import Any, Callable, Dict, Optional
 
+from ..events import GenericEventArguments
 from .mixins.disableable_element import DisableableElement
 from .mixins.validation_element import ValidationElement
 
@@ -89,8 +90,8 @@ class Number(ValidationElement, DisableableElement):
         value = min(value, self.max)
         self.set_value(float(self.format % value) if self.format else value)
 
-    def _msg_to_value(self, msg: Dict) -> Any:
-        return float(msg['args']) if msg['args'] else None
+    def _msg_to_value(self, e: GenericEventArguments) -> Any:
+        return float(e.args) if e.args is not None else None
 
     def _value_to_model_value(self, value: Any) -> Any:
         if value is None:

+ 3 - 2
nicegui/elements/radio.py

@@ -1,5 +1,6 @@
 from typing import Any, Callable, Dict, List, Optional, Union
 
+from ..events import GenericEventArguments
 from .choice_element import ChoiceElement
 from .mixins.disableable_element import DisableableElement
 
@@ -22,8 +23,8 @@ class Radio(ChoiceElement, DisableableElement):
         """
         super().__init__(tag='q-option-group', options=options, value=value, on_change=on_change)
 
-    def _msg_to_value(self, msg: Dict) -> Any:
-        return self._values[msg['args']]
+    def _msg_to_value(self, e: GenericEventArguments) -> Any:
+        return self._values[e.args]
 
     def _value_to_model_value(self, value: Any) -> Any:
         return self._values.index(value) if value in self._values else None

+ 11 - 11
nicegui/elements/scene.py

@@ -5,7 +5,7 @@ from typing import Any, Callable, Dict, List, Optional, Union
 from .. import binding, globals
 from ..dependencies import register_library, register_vue_component
 from ..element import Element
-from ..events import SceneClickEventArguments, SceneClickHit, handle_event
+from ..events import GenericEventArguments, SceneClickEventArguments, SceneClickHit, handle_event
 from ..helpers import KWONLY_SLOTS
 from .scene_object3d import Object3D
 
@@ -90,9 +90,9 @@ class Scene(Element):
         self.use_library('STLLoader')
         self.use_library('tween')
 
-    def handle_init(self, msg: Dict) -> None:
+    def handle_init(self, e: GenericEventArguments) -> None:
         self.is_initialized = True
-        with globals.socket_id(msg['args']):
+        with globals.socket_id(e.args):
             self.move_camera(duration=0)
             for object in self.objects.values():
                 object.send()
@@ -102,23 +102,23 @@ class Scene(Element):
             return
         super().run_method(name, *args)
 
-    def handle_click(self, msg: Dict) -> None:
+    def handle_click(self, e: GenericEventArguments) -> None:
         arguments = SceneClickEventArguments(
             sender=self,
             client=self.client,
-            click_type=msg['args']['click_type'],
-            button=msg['args']['button'],
-            alt=msg['args']['alt_key'],
-            ctrl=msg['args']['ctrl_key'],
-            meta=msg['args']['meta_key'],
-            shift=msg['args']['shift_key'],
+            click_type=e.args['click_type'],
+            button=e.args['button'],
+            alt=e.args['alt_key'],
+            ctrl=e.args['ctrl_key'],
+            meta=e.args['meta_key'],
+            shift=e.args['shift_key'],
             hits=[SceneClickHit(
                 object_id=hit['object_id'],
                 object_name=hit['object_name'],
                 x=hit['point']['x'],
                 y=hit['point']['y'],
                 z=hit['point']['z'],
-            ) for hit in msg['args']['hits']],
+            ) for hit in e.args['hits']],
         )
         handle_event(self.on_click, arguments)
 

+ 9 - 9
nicegui/elements/select.py

@@ -3,8 +3,8 @@ from copy import deepcopy
 from pathlib import Path
 from typing import Any, Callable, Dict, List, Optional, Union
 
-from nicegui.dependencies import register_vue_component
-
+from ..dependencies import register_vue_component
+from ..events import GenericEventArguments
 from .choice_element import ChoiceElement
 from .mixins.disableable_element import DisableableElement
 
@@ -54,25 +54,25 @@ class Select(ChoiceElement, DisableableElement):
         self._props['multiple'] = multiple
         self._props['clearable'] = clearable
 
-    def on_filter(self, event: Dict) -> None:
+    def on_filter(self, e: GenericEventArguments) -> None:
         self.options = [
             option
             for option in self.original_options
-            if not event['args'] or re.search(event['args'], option, re.IGNORECASE)
+            if not e.args or re.search(e.args, option, re.IGNORECASE)
         ]
         self.update()
 
-    def _msg_to_value(self, msg: Dict) -> Any:
+    def _msg_to_value(self, e: GenericEventArguments) -> Any:
         if self.multiple:
-            if msg['args'] is None:
+            if e.args is None:
                 return []
             else:
-                return [self._values[arg['value']] for arg in msg['args']]
+                return [self._values[arg['value']] for arg in e.args]
         else:
-            if msg['args'] is None:
+            if e.args is None:
                 return None
             else:
-                return self._values[msg['args']['value']]
+                return self._values[e.args['value']]
 
     def _value_to_model_value(self, value: Any) -> Any:
         if self.multiple:

+ 5 - 5
nicegui/elements/table.py

@@ -5,7 +5,7 @@ from typing_extensions import Literal
 
 from ..dependencies import register_vue_component
 from ..element import Element
-from ..events import TableSelectionEventArguments, handle_event
+from ..events import GenericEventArguments, TableSelectionEventArguments, handle_event
 from .mixins.filter_element import FilterElement
 
 register_vue_component('nicegui-table', Path(__file__).parent / 'table.js')
@@ -51,13 +51,13 @@ class Table(FilterElement):
         self._props['selection'] = selection or 'none'
         self._props['selected'] = self.selected
 
-        def handle_selection(msg: Dict) -> None:
-            if msg['args']['added']:
+        def handle_selection(e: GenericEventArguments) -> None:
+            if e.args['added']:
                 if selection == 'single':
                     self.selected.clear()
-                self.selected.extend(msg['args']['rows'])
+                self.selected.extend(e.args['rows'])
             else:
-                self.selected[:] = [row for row in self.selected if row[row_key] not in msg['args']['keys']]
+                self.selected[:] = [row for row in self.selected if row[row_key] not in e.args['keys']]
             self.update()
             arguments = TableSelectionEventArguments(sender=self, client=self.client, selection=self.selected)
             handle_event(on_select, arguments)

+ 3 - 2
nicegui/elements/toggle.py

@@ -1,5 +1,6 @@
 from typing import Any, Callable, Dict, List, Optional, Union
 
+from ..events import GenericEventArguments
 from .choice_element import ChoiceElement
 from .mixins.disableable_element import DisableableElement
 
@@ -22,8 +23,8 @@ class Toggle(ChoiceElement, DisableableElement):
         """
         super().__init__(tag='q-btn-toggle', options=options, value=value, on_change=on_change)
 
-    def _msg_to_value(self, msg: Dict) -> Any:
-        return self._values[msg['args']]
+    def _msg_to_value(self, e: GenericEventArguments) -> Any:
+        return self._values[e.args]
 
     def _value_to_model_value(self, value: Any) -> Any:
         return self._values.index(value) if value in self._values else None

+ 11 - 12
nicegui/elements/tree.py

@@ -1,8 +1,7 @@
-from typing import Any, Callable, Dict, List, Optional
-
-from nicegui.events import ValueChangeEventArguments, handle_event
+from typing import Any, Callable, List, Optional
 
 from ..element import Element
+from ..events import GenericEventArguments, ValueChangeEventArguments, handle_event
 
 
 class Tree(Element):
@@ -43,17 +42,17 @@ class Tree(Element):
                 self._props[name] = value
                 self.update()
 
-        def handle_selected(msg: Dict) -> None:
-            update_prop('selected', msg['args'])
-            handle_event(on_select, ValueChangeEventArguments(sender=self, client=self.client, value=msg['args']))
+        def handle_selected(e: GenericEventArguments) -> None:
+            update_prop('selected', e.args)
+            handle_event(on_select, ValueChangeEventArguments(sender=self, client=self.client, value=e.args))
         self.on('update:selected', handle_selected)
 
-        def handle_expanded(msg: Dict) -> None:
-            update_prop('expanded', msg['args'])
-            handle_event(on_expand, ValueChangeEventArguments(sender=self, client=self.client, value=msg['args']))
+        def handle_expanded(e: GenericEventArguments) -> None:
+            update_prop('expanded', e.args)
+            handle_event(on_expand, ValueChangeEventArguments(sender=self, client=self.client, value=e.args))
         self.on('update:expanded', handle_expanded)
 
-        def handle_ticked(msg: Dict) -> None:
-            update_prop('ticked', msg['args'])
-            handle_event(on_tick, ValueChangeEventArguments(sender=self, client=self.client, value=msg['args']))
+        def handle_ticked(e: GenericEventArguments) -> None:
+            update_prop('ticked', e.args)
+            handle_event(on_tick, ValueChangeEventArguments(sender=self, client=self.client, value=e.args))
         self.on('update:ticked', handle_ticked)

+ 3 - 4
nicegui/events.py

@@ -3,7 +3,7 @@ from inspect import Parameter, signature
 from typing import TYPE_CHECKING, Any, Awaitable, BinaryIO, Callable, Dict, List, Optional
 
 from . import background_tasks, globals
-from .helpers import KWONLY_SLOTS, is_pytest
+from .helpers import KWONLY_SLOTS
 
 if TYPE_CHECKING:
     from .client import Client
@@ -22,9 +22,8 @@ class GenericEventArguments(EventArguments):
 
     def __getitem__(self, key: str) -> Any:
         if key == 'args':
-            if not is_pytest():  # TODO: remove this check after updating all demos and examples
-                globals.log.warning('msg["args"] is deprecated, use e.args instead '
-                                    '(see https://github.com/zauberzeug/nicegui/pull/1095)')
+            globals.log.warning('msg["args"] is deprecated, use e.args instead '
+                                '(see https://github.com/zauberzeug/nicegui/pull/1095)')
             return self.args
         raise KeyError(key)
 

+ 1 - 1
tests/test_aggrid.py

@@ -52,7 +52,7 @@ def test_click_cell(screen: Screen):
         'columnDefs': [{'field': 'name'}, {'field': 'age'}],
         'rowData': [{'name': 'Alice', 'age': 18}],
     })
-    grid.on('cellClicked', lambda msg: ui.label(f'{msg["args"]["data"]["name"]} has been clicked!'))
+    grid.on('cellClicked', lambda e: ui.label(f'{e.args["data"]["name"]} has been clicked!'))
 
     screen.open('/')
     screen.click('Alice')

+ 3 - 5
website/more_documentation/line_plot_documentation.py

@@ -1,6 +1,4 @@
-from typing import Dict
-
-from nicegui import ui
+from nicegui import events, ui
 
 
 def main_demo() -> None:
@@ -22,11 +20,11 @@ def main_demo() -> None:
     line_checkbox = ui.checkbox('active').bind_value(line_updates, 'active')
 
     # END OF DEMO
-    def handle_change(msg: Dict) -> None:
+    def handle_change(e: events.GenericEventArguments) -> None:
         def turn_off() -> None:
             line_checkbox.set_value(False)
             ui.notify('Turning off that line plot to save resources on our live demo server. 😎')
-        line_checkbox.value = msg['args']
+        line_checkbox.value = e.args
         if line_checkbox.value:
             ui.timer(10.0, turn_off, once=True)
     line_checkbox.on('update:model-value', handle_change)

+ 3 - 3
website/more_documentation/slider_documentation.py

@@ -23,17 +23,17 @@ def more() -> None:
     def throttle_events_with_leading_and_trailing_options():
         ui.label('default')
         ui.slider(min=0, max=10, step=0.1, value=5).props('label-always') \
-            .on('update:model-value', lambda msg: ui.notify(f'{msg["args"]}'),
+            .on('update:model-value', lambda e: ui.notify(e.args),
                 throttle=1.0)
 
         ui.label('leading events only')
         ui.slider(min=0, max=10, step=0.1, value=5).props('label-always') \
-            .on('update:model-value', lambda msg: ui.notify(f'{msg["args"]}'),
+            .on('update:model-value', lambda e: ui.notify(e.args),
                 throttle=1.0, trailing_events=False)
 
         ui.label('trailing events only')
         ui.slider(min=0, max=10, step=0.1, value=5).props('label-always') \
-            .on('update:model-value', lambda msg: ui.notify(f'{msg["args"]}'),
+            .on('update:model-value', lambda e: ui.notify(e.args),
                 throttle=1.0, leading_events=False)
 
     @text_demo('Disable slider', '''

+ 4 - 4
website/more_documentation/table_documentation.py

@@ -91,7 +91,7 @@ def more() -> None:
         After emitting a `rename` event from the scoped slot, the `rename` function updates the table rows.
     ''')
     def table_with_drop_down_selection():
-        from typing import Dict
+        from nicegui import events
 
         columns = [
             {'name': 'name', 'label': 'Name', 'field': 'name'},
@@ -104,10 +104,10 @@ def more() -> None:
         ]
         name_options = ['Alice', 'Bob', 'Carol']
 
-        def rename(msg: Dict) -> None:
+        def rename(e: events.GenericEventArguments) -> None:
             for row in rows:
-                if row['id'] == msg['args']['id']:
-                    row['name'] = msg['args']['name']
+                if row['id'] == e.args['id']:
+                    row['name'] = e.args['name']
             ui.notify(f'Table.rows is now: {table.rows}')
 
         table = ui.table(columns=columns, rows=rows, row_key='name').classes('w-full')