瀏覽代碼

remove IndexClient and ErrorClient

Falko Schindler 2 年之前
父節點
當前提交
1f168e3e06
共有 5 個文件被更改,包括 28 次插入41 次删除
  1. 1 31
      nicegui/client.py
  2. 16 0
      nicegui/error.py
  3. 0 1
      nicegui/globals.py
  4. 9 5
      nicegui/nicegui.py
  5. 2 4
      tests/conftest.py

+ 1 - 31
nicegui/client.py

@@ -7,7 +7,7 @@ from typing import TYPE_CHECKING, Any, Callable, Dict, Optional, Union
 
 from fastapi.responses import HTMLResponse
 
-from . import globals, ui, vue
+from . import globals, vue
 from .element import Element
 from .favicon import get_favicon_url
 from .task_logger import create_task
@@ -103,33 +103,3 @@ class Client:
     def open(self, target: Union[Callable, str]) -> None:
         path = target if isinstance(target, str) else globals.page_routes[target]
         create_task(globals.sio.emit('open', path, room=str(self.id)))
-
-
-class IndexClient(Client):
-
-    def __init__(self, page: 'page') -> None:
-        super().__init__(page, shared=True)
-
-
-class ErrorClient(Client):
-
-    def __init__(self, page: 'page') -> None:
-        super().__init__(page, shared=True)
-        with self:
-            with ui.column().classes('w-full py-20 items-center gap-0'):
-                ui.icon('☹').classes('text-8xl py-5') \
-                    .style('font-family: "Arial Unicode MS", "Times New Roman", Times, serif;')
-                self.status_code = ui.label().classes('text-6xl py-5')
-                self.title = ui.label().classes('text-xl py-5')
-                self.message = ui.label().classes('text-lg py-2 text-gray-500')
-
-    def build_response(self, status_code: int, message: str = '') -> HTMLResponse:
-        self.status_code.text = status_code
-        if 400 <= status_code <= 499:
-            self.title.text = "This page doesn't exist"
-        elif 500 <= status_code <= 599:
-            self.title.text = 'Server error'
-        else:
-            self.title.text = 'Unknown error'
-        self.message.text = message
-        return super().build_response()

+ 16 - 0
nicegui/error.py

@@ -0,0 +1,16 @@
+from nicegui import ui
+
+
+def error_content(status_code: int, message: str = '') -> None:
+    if 400 <= status_code <= 499:
+        title = "This page doesn't exist"
+    elif 500 <= status_code <= 599:
+        title = 'Server error'
+    else:
+        title = 'Unknown error'
+
+    with ui.column().classes('w-full py-20 items-center gap-0'):
+        ui.icon('☹').classes('text-8xl py-5').style('font-family: "Arial Unicode MS", "Times New Roman", Times, serif;')
+        ui.label(status_code).classes('text-6xl py-5')
+        ui.label(title).classes('text-xl py-5')
+        ui.label(message).classes('text-lg py-2 text-gray-500')

+ 0 - 1
nicegui/globals.py

@@ -39,7 +39,6 @@ slot_stacks: Dict[int, List['Slot']] = {}
 clients: Dict[int, 'Client'] = {}
 next_client_id: int = 0
 index_client: 'Client' = ...
-error_client: 'Client' = ...
 
 page_routes: Dict[Callable, str] = {}
 favicons: Dict[str, Optional[str]] = {}

+ 9 - 5
nicegui/nicegui.py

@@ -10,7 +10,8 @@ from fastapi.staticfiles import StaticFiles
 from fastapi_socketio import SocketManager
 
 from . import binding, globals, vue
-from .client import Client, ErrorClient, IndexClient
+from .client import Client
+from .error import error_content
 from .favicon import create_favicon_routes
 from .helpers import safe_invoke
 from .page import page
@@ -22,8 +23,7 @@ globals.sio = sio = SocketManager(app=app)._sio
 app.add_middleware(GZipMiddleware)
 app.mount("/static", StaticFiles(directory=Path(__file__).parent / 'static'), name='static')
 
-globals.error_client = ErrorClient(page(''))
-globals.index_client = IndexClient(page('/')).__enter__()
+globals.index_client = Client(page('/'), shared=True).__enter__()
 
 
 @app.get('/')
@@ -62,12 +62,16 @@ def shutdown() -> None:
 
 @app.exception_handler(404)
 async def exception_handler(_: Request, exc: Exception):
-    return globals.error_client.build_response(404, str(exc))
+    with Client(page('')) as client:
+        error_content(404, str(exc))
+    return client.build_response()
 
 
 @app.exception_handler(Exception)
 async def exception_handler(_: Request, exc: Exception):
-    return globals.error_client.build_response(500, str(exc))
+    with Client(page('')) as client:
+        error_content(500, str(exc))
+    return client.build_response()
 
 
 @sio.on('connect')

+ 2 - 4
tests/conftest.py

@@ -6,8 +6,7 @@ import icecream
 import pytest
 from selenium import webdriver
 
-from nicegui import globals
-from nicegui.client import ErrorClient, IndexClient
+from nicegui import Client, globals
 from nicegui.page import page
 
 from .screen import Screen
@@ -41,8 +40,7 @@ def reset_globals() -> Generator[None, None, None]:
     globals.app.routes[:] = [route for route in globals.app.routes
                              if route.path != '/' and route.path not in globals.page_routes.values()]
     importlib.reload(globals)
-    globals.error_client = ErrorClient(page(''))
-    globals.index_client = IndexClient(page('/')).__enter__()
+    globals.index_client = Client(page('/'), shared=True).__enter__()
     globals.app.get('/')(globals.index_client.build_response)