소스 검색

update remaining register_vue_component calls

Falko Schindler 1 년 전
부모
커밋
96c2df71ac

+ 3 - 9
nicegui/dependencies.py

@@ -1,5 +1,4 @@
 import json
-import logging
 from pathlib import Path
 from typing import Any, Dict, List, Set, Tuple
 
@@ -13,18 +12,14 @@ js_components: Dict[str, Any] = {}
 libraries: Dict[str, Any] = {}
 
 
-def register_vue_component(location: Path,
-                           base_path: Path = Path(__file__).parent / 'elements', *, expose: bool = False
-                           ) -> str:
+def register_vue_component(location: Path, base_path: Path = Path(__file__).parent / 'elements') -> str:
     """Register a .vue or .js Vue component.
 
     :param location: the location to the library you want to register relative to the base_path. This is also used as the resource identifier and must therefore be url-safe.
     :param base_path: the base path where your libraries are located
     :return: the resource identifier library name to be used in element's `use_component`        
     """
-    if isinstance(location, str):
-        logging.warning('register_vue_component: location is a string, did you mean to use register_library?')
-        return
+    assert isinstance(location, Path)
     suffix = location.suffix.lower()
     assert suffix in {'.vue', '.js', '.mjs'}, 'Only VUE and JS components are supported.'
     name = location.stem
@@ -51,8 +46,7 @@ def register_library(location: Path,
     :param expose: if True, this will be exposed as an ESM module but NOT imported
     :return: the resource identifier library name to be used in element's `use_library`
     """
-    if isinstance(location, str):
-        return
+    assert isinstance(location, Path)
     assert location.suffix == '.js' or location.suffix == '.mjs', 'Only JS dependencies are supported.'
     name = str(location)
     assert name not in libraries, f'Duplicate js library name {name}'

+ 4 - 4
nicegui/elements/aggrid.py

@@ -7,8 +7,8 @@ from ..dependencies import register_library, register_vue_component
 from ..element import Element
 from ..functions.javascript import run_javascript
 
-register_vue_component('aggrid', Path(__file__).parent / 'aggrid.js')
-library_name = register_library(Path('aggrid') / 'ag-grid-community.min.js')
+component = register_vue_component(Path('aggrid.js'))
+library = register_library(Path('aggrid', 'ag-grid-community.min.js'))
 
 
 class AgGrid(Element):
@@ -28,8 +28,8 @@ class AgGrid(Element):
         self._props['options'] = options
         self._props['html_columns'] = html_columns
         self._classes = ['nicegui-aggrid', f'ag-theme-{theme}']
-        self.use_component('aggrid')
-        self.use_library(library_name)
+        self.use_component(component)
+        self.use_library(library)
 
     @staticmethod
     def from_pandas(df: 'pandas.DataFrame', *, theme: str = 'balham') -> AgGrid:

+ 2 - 2
nicegui/elements/audio.py

@@ -6,7 +6,7 @@ from .. import globals
 from ..dependencies import register_vue_component
 from ..element import Element
 
-register_vue_component('audio', Path(__file__).parent / 'audio.js')
+component = register_vue_component(Path('audio.js'))
 
 
 class Audio(Element):
@@ -37,7 +37,7 @@ class Audio(Element):
         self._props['autoplay'] = autoplay
         self._props['muted'] = muted
         self._props['loop'] = loop
-        self.use_component('audio')
+        self.use_component(component)
 
         if type:
             url = f'https://github.com/zauberzeug/nicegui/pull/624'

+ 2 - 2
nicegui/elements/chart.py

@@ -4,7 +4,7 @@ from typing import Dict, List
 from ..dependencies import register_library, register_vue_component
 from ..element import Element
 
-register_vue_component('chart', Path(__file__).parent / 'chart.js')
+component = register_vue_component(Path('chart.js'))
 
 core_dependencies: List[Path] = []
 base = Path(__file__).parent / 'lib'
@@ -34,7 +34,7 @@ class Chart(Element):
         self._props['type'] = type
         self._props['options'] = options
         self._props['extras'] = extras
-        self.use_component('chart')
+        self.use_component(component)
         for dependency in core_dependencies:
             self.use_library(dependency)
         for extra in extras:

+ 2 - 2
nicegui/elements/chat_message.py

@@ -5,7 +5,7 @@ from typing import List, Optional, Union
 from ..dependencies import register_vue_component
 from ..element import Element
 
-register_vue_component('chat_message', Path(__file__).parent / 'chat_message.js')
+component = register_vue_component(Path('chat_message.js'))
 
 
 class ChatMessage(Element):
@@ -32,7 +32,7 @@ class ChatMessage(Element):
         :param text_html: render text as HTML (default: False)
         """
         super().__init__('chat_message')
-        self.use_component('chat_message')
+        self.use_component(component)
 
         if isinstance(text, str):
             text = [text]

+ 2 - 2
nicegui/elements/colors.py

@@ -3,7 +3,7 @@ from pathlib import Path
 from ..dependencies import register_vue_component
 from ..element import Element
 
-register_vue_component('colors', Path(__file__).parent / 'colors.js')
+component = register_vue_component(Path('colors.js'))
 
 
 class Colors(Element):
@@ -22,7 +22,7 @@ class Colors(Element):
         Sets the main colors (primary, secondary, accent, ...) used by `Quasar <https://quasar.dev/>`_.
         """
         super().__init__('colors')
-        self.use_component('colors')
+        self.use_component(component)
         self._props['primary'] = primary
         self._props['secondary'] = secondary
         self._props['accent'] = accent

+ 2 - 2
nicegui/elements/dark_mode.py

@@ -4,7 +4,7 @@ from typing import Optional
 from ..dependencies import register_vue_component
 from .mixins.value_element import ValueElement
 
-register_vue_component('dark_mode', Path(__file__).parent / 'dark_mode.js')
+component = register_vue_component(Path('dark_mode.js'))
 
 
 class DarkMode(ValueElement):
@@ -21,7 +21,7 @@ class DarkMode(ValueElement):
         :param value: Whether dark mode is enabled. If None, dark mode is set to auto.
         """
         super().__init__(tag='dark_mode', value=value, on_value_change=None)
-        self.use_component('dark_mode')
+        self.use_component(component)
 
     def enable(self) -> None:
         """Enable dark mode."""

+ 2 - 2
nicegui/elements/image.py

@@ -5,7 +5,7 @@ from nicegui.dependencies import register_vue_component
 
 from .mixins.source_element import SourceElement
 
-register_vue_component('image', Path(__file__).parent / 'image.js')
+component = register_vue_component(Path('image.js'))
 
 
 class Image(SourceElement):
@@ -18,4 +18,4 @@ class Image(SourceElement):
         :param source: the source of the image; can be a URL, local file path or a base64 string
         """
         super().__init__(tag='image', source=source)
-        self.use_component('image')
+        self.use_component(component)

+ 2 - 2
nicegui/elements/input.py

@@ -6,7 +6,7 @@ from .icon import Icon
 from .mixins.disableable_element import DisableableElement
 from .mixins.validation_element import ValidationElement
 
-register_vue_component('nicegui-input', Path(__file__).parent / 'input.js')
+component = register_vue_component(Path('input.js'))
 
 
 class Input(ValidationElement, DisableableElement):
@@ -59,7 +59,7 @@ class Input(ValidationElement, DisableableElement):
 
         self._props['autocomplete'] = autocomplete or []
 
-        self.use_component('nicegui-input')
+        self.use_component(component)
 
     def set_autocomplete(self, autocomplete: Optional[List[str]]) -> None:
         """Set the autocomplete list."""

+ 2 - 2
nicegui/elements/interactive_image.py

@@ -8,7 +8,7 @@ from ..events import GenericEventArguments, MouseEventArguments, handle_event
 from .mixins.content_element import ContentElement
 from .mixins.source_element import SourceElement
 
-register_vue_component('interactive_image', Path(__file__).parent / 'interactive_image.js')
+component = register_vue_component(Path('interactive_image.js'))
 
 
 class InteractiveImage(SourceElement, ContentElement):
@@ -38,7 +38,7 @@ class InteractiveImage(SourceElement, ContentElement):
         super().__init__(tag='interactive_image', source=source, content=content)
         self._props['events'] = events
         self._props['cross'] = cross
-        self.use_component('interactive_image')
+        self.use_component(component)
 
         def handle_mouse(e: GenericEventArguments) -> None:
             if on_mouse is None:

+ 3 - 3
nicegui/elements/joystick.py

@@ -5,8 +5,8 @@ from ..dependencies import register_library, register_vue_component
 from ..element import Element
 from ..events import GenericEventArguments, JoystickEventArguments, handle_event
 
-register_vue_component('joystick', Path(__file__).parent / 'joystick.vue')
-library_name = register_library(Path('nipplejs') / 'nipplejs.js')
+component = register_vue_component(Path('joystick.vue'))
+library = register_library(Path('nipplejs', 'nipplejs.js'))
 
 
 class Joystick(Element):
@@ -28,7 +28,7 @@ class Joystick(Element):
         :param options: arguments like `color` which should be passed to the `underlying nipple.js library <https://github.com/yoannmoinet/nipplejs#options>`_
         """
         super().__init__('joystick')
-        self.use_library(library_name)
+        self.use_library(library)
         self._props['options'] = options
         self.active = False
 

+ 2 - 2
nicegui/elements/keyboard.py

@@ -9,7 +9,7 @@ from ..element import Element
 from ..events import (GenericEventArguments, KeyboardAction, KeyboardKey, KeyboardModifiers, KeyEventArguments,
                       handle_event)
 
-register_vue_component('keyboard', Path(__file__).parent / 'keyboard.js')
+component = register_vue_component(Path('keyboard.js'))
 
 
 class Keyboard(Element):
@@ -37,7 +37,7 @@ class Keyboard(Element):
         self._props['repeating'] = repeating
         self._props['ignore'] = ignore
         self.on('key', self.handle_key)
-        self.use_component('keyboard')
+        self.use_component(component)
 
     def handle_key(self, e: GenericEventArguments) -> None:
         if not self.active:

+ 2 - 2
nicegui/elements/link.py

@@ -6,7 +6,7 @@ from ..dependencies import register_vue_component
 from ..element import Element
 from .mixins.text_element import TextElement
 
-register_vue_component('link', Path(__file__).parent / 'link.js')
+component = register_vue_component(Path('link.js'))
 
 
 class Link(TextElement):
@@ -36,7 +36,7 @@ class Link(TextElement):
             self._props['href'] = globals.page_routes[target]
         self._props['target'] = '_blank' if new_tab else '_self'
         self._classes = ['nicegui-link']
-        self.use_component('link')
+        self.use_component(component)
 
 
 class LinkTarget(Element):

+ 2 - 2
nicegui/elements/log.py

@@ -6,7 +6,7 @@ from typing import Any, Optional
 from ..dependencies import register_vue_component
 from ..element import Element
 
-register_vue_component('log', Path(__file__).parent / 'log.js')
+component = register_vue_component(Path('log.js'))
 
 
 class Log(Element):
@@ -23,7 +23,7 @@ class Log(Element):
         self._props['lines'] = ''
         self._classes = ['nicegui-log']
         self.lines: deque[str] = deque(maxlen=max_lines)
-        self.use_component('log')
+        self.use_component(component)
         self.total_count: int = 0
 
     def push(self, line: Any) -> None:

+ 2 - 2
nicegui/elements/markdown.py

@@ -10,7 +10,7 @@ from pygments.formatters import HtmlFormatter
 from ..dependencies import register_vue_component
 from .mixins.content_element import ContentElement
 
-register_vue_component('markdown', Path(__file__).parent / 'markdown.js')
+component = register_vue_component(Path('markdown.js'))
 
 
 class Markdown(ContentElement):
@@ -27,7 +27,7 @@ class Markdown(ContentElement):
         super().__init__(tag='markdown', content=content)
         self._classes = ['nicegui-markdown']
         self._props['codehilite_css'] = HtmlFormatter(nobackground=True).get_style_defs('.codehilite')
-        self.use_component('markdown')
+        self.use_component(component)
         if 'mermaid' in extras:
             self._props['use_mermaid'] = True
             self.use_library('mermaid')

+ 4 - 4
nicegui/elements/mermaid.py

@@ -3,8 +3,8 @@ from pathlib import Path
 from ..dependencies import register_library, register_vue_component
 from .mixins.content_element import ContentElement
 
-component_name = register_vue_component(Path('mermaid.js'))
-library_name = register_library(Path('mermaid') / 'mermaid.esm.min.mjs', expose=True)
+component = register_vue_component(Path('mermaid.js'))
+library = register_library(Path('mermaid') / 'mermaid.esm.min.mjs', expose=True)
 extras_path = Path(__file__).parent / 'lib' / 'mermaid'
 for path in extras_path.glob('*.js'):
     register_library(path.relative_to(extras_path.parent))
@@ -22,8 +22,8 @@ class Mermaid(ContentElement):
         :param content: the Mermaid content to be displayed
         '''
         super().__init__(tag='mermaid', content=content)
-        self.use_component(component_name)
-        self.use_library(library_name)
+        self.use_component(component)
+        self.use_library(library)
 
     def on_content_change(self, content: str) -> None:
         self._props[self.CONTENT_PROP] = content.strip()

+ 3 - 3
nicegui/elements/plotly.py

@@ -6,8 +6,8 @@ import plotly.graph_objects as go
 from ..dependencies import register_library, register_vue_component
 from ..element import Element
 
-register_vue_component('plotly', Path(__file__).parent / 'plotly.vue')
-library_name = register_library(Path('plotly') / 'plotly.min.js')
+component = register_vue_component(Path('plotly.vue'))
+library = register_library(Path('plotly', 'plotly.min.js'))
 
 
 class Plotly(Element):
@@ -28,7 +28,7 @@ class Plotly(Element):
                        a `dict` object with keys `data`, `layout`, `config` (optional).
         """
         super().__init__('plotly')
-        self.use_library(library_name)
+        self.use_library(library)
 
         self.figure = figure
         self.update()

+ 2 - 2
nicegui/elements/query.py

@@ -7,7 +7,7 @@ from ..dependencies import register_vue_component
 from ..element import Element
 from ..globals import get_client
 
-register_vue_component('query', Path(__file__).parent / 'query.js')
+component = register_vue_component(Path('query.js'))
 
 
 class Query(Element):
@@ -18,7 +18,7 @@ class Query(Element):
         self._props['classes'] = []
         self._props['style'] = {}
         self._props['props'] = {}
-        self.use_component('query')
+        self.use_component(component)
 
     def classes(self, add: Optional[str] = None, *, remove: Optional[str] = None, replace: Optional[str] = None) \
             -> Self:

+ 5 - 5
nicegui/elements/scene.py

@@ -9,9 +9,9 @@ from ..events import GenericEventArguments, SceneClickEventArguments, SceneClick
 from ..helpers import KWONLY_SLOTS
 from .scene_object3d import Object3D
 
-register_vue_component('scene', Path(__file__).parent / 'scene.js')
+component = register_vue_component(Path('scene.js'))
 lib = Path('three')
-library_names = [
+libraries = [
     register_library(lib / 'three.module.js', expose=True),
     register_library(lib / 'modules' / 'CSS2DRenderer.js', expose=True),
     register_library(lib / 'modules' / 'CSS3DRenderer.js', expose=True),
@@ -85,9 +85,9 @@ class Scene(Element):
         self.is_initialized = False
         self.on('init', self.handle_init)
         self.on('click3d', self.handle_click)
-        self.use_component('scene')
-        for library_name in library_names:
-            self.use_library(library_name)
+        self.use_component(component)
+        for library in libraries:
+            self.use_library(library)
 
     def handle_init(self, e: GenericEventArguments) -> None:
         self.is_initialized = True

+ 2 - 2
nicegui/elements/select.py

@@ -8,7 +8,7 @@ from ..events import GenericEventArguments
 from .choice_element import ChoiceElement
 from .mixins.disableable_element import DisableableElement
 
-register_vue_component('select', Path(__file__).parent / 'select.js')
+component = register_vue_component(Path('select.js'))
 
 
 class Select(ChoiceElement, DisableableElement):
@@ -41,7 +41,7 @@ class Select(ChoiceElement, DisableableElement):
             elif not isinstance(value, list):
                 value = [value]
         super().__init__(tag='select', options=options, value=value, on_change=on_change)
-        self.use_component('select')
+        self.use_component(component)
         if label is not None:
             self._props['label'] = label
         if with_input:

+ 2 - 2
nicegui/elements/table.py

@@ -8,7 +8,7 @@ from ..element import Element
 from ..events import GenericEventArguments, TableSelectionEventArguments, handle_event
 from .mixins.filter_element import FilterElement
 
-register_vue_component('nicegui-table', Path(__file__).parent / 'table.js')
+component = register_vue_component(Path('table.js'))
 
 
 class Table(FilterElement):
@@ -63,7 +63,7 @@ class Table(FilterElement):
             handle_event(on_select, arguments)
         self.on('selection', handle_selection, ['added', 'rows', 'keys'])
 
-        self.use_component('nicegui-table')
+        self.use_component(component)
 
     def add_rows(self, *rows: Dict) -> None:
         """Add rows to the table."""

+ 2 - 2
nicegui/elements/upload.py

@@ -9,7 +9,7 @@ from ..events import EventArguments, UploadEventArguments, handle_event
 from ..nicegui import app
 from .mixins.disableable_element import DisableableElement
 
-register_vue_component('upload', Path(__file__).parent / 'upload.js')
+component = register_vue_component(Path('upload.js'))
 
 
 class Upload(DisableableElement):
@@ -38,7 +38,7 @@ class Upload(DisableableElement):
         :param auto_upload: automatically upload files when they are selected (default: `False`)
         """
         super().__init__(tag='upload')
-        self.use_component('upload')
+        self.use_component(component)
         self._props['multiple'] = multiple
         self._props['label'] = label
         self._props['auto-upload'] = auto_upload

+ 2 - 2
nicegui/elements/video.py

@@ -6,7 +6,7 @@ from .. import globals
 from ..dependencies import register_vue_component
 from ..element import Element
 
-register_vue_component('video', Path(__file__).parent / 'video.js')
+component = register_vue_component(Path('video.js'))
 
 
 class Video(Element):
@@ -37,7 +37,7 @@ class Video(Element):
         self._props['autoplay'] = autoplay
         self._props['muted'] = muted
         self._props['loop'] = loop
-        self.use_component('video')
+        self.use_component(component)
 
         if type:
             url = f'https://github.com/zauberzeug/nicegui/pull/624'

+ 2 - 2
nicegui/functions/refreshable.py

@@ -9,7 +9,7 @@ from ..dependencies import register_vue_component
 from ..element import Element
 from ..helpers import KWONLY_SLOTS, is_coroutine_function
 
-register_vue_component('refreshable', Path(__file__).parent / 'refreshable.js')
+component = register_vue_component(Path('refreshable.js'))
 
 
 @dataclass(**KWONLY_SLOTS)
@@ -56,7 +56,7 @@ class refreshable:
     def __call__(self, *args: Any, **kwargs: Any) -> Union[None, Awaitable]:
         self.prune()
         container = Element('refreshable')
-        container.use_component('refreshable')
+        container.use_component(component)
         target = RefreshableTarget(container=container, instance=self.instance, args=args, kwargs=kwargs)
         self.targets.append(target)
         return target.run(self.func)