1
0
Эх сурвалжийг харах

Began implementing ui.shutdown.
ui.run with reload=True still needs to be fixed.

Rodja Trappe 2 жил өмнө
parent
commit
ecf4841f5f
3 өөрчлөгдсөн 13 нэмэгдсэн , 1 устгасан
  1. 1 0
      nicegui/globals.py
  2. 4 1
      nicegui/run.py
  3. 8 0
      nicegui/ui.py

+ 1 - 0
nicegui/globals.py

@@ -13,6 +13,7 @@ if TYPE_CHECKING:
 
 app: 'Starlette'
 config: 'Config'
+server: 'uvicorn.Server'
 page_stack: List['Page'] = []
 view_stack: List['jp.HTMLBaseComponent'] = []
 tasks: List[asyncio.tasks.Task] = []

+ 4 - 1
nicegui/run.py

@@ -2,6 +2,7 @@ import inspect
 import logging
 import os
 import sys
+import typing
 import webbrowser
 from typing import List, Optional
 
@@ -18,7 +19,7 @@ def _start_server(config: Config) -> None:
     def split_args(args: str) -> List[str]:
         return args.split(',') if ',' in args else [args]
 
-    uvicorn.run(
+    config = uvicorn.Config(
         'nicegui:app' if config.reload else globals.app,
         host=config.host,
         port=config.port,
@@ -29,6 +30,8 @@ def _start_server(config: Config) -> None:
         reload_dirs=split_args(config.uvicorn_reload_dirs) if config.reload else None,
         log_level=config.uvicorn_logging_level,
     )
+    globals.server = uvicorn.Server(config=config)
+    globals.server.run()
 
 
 if globals.pre_evaluation_succeeded and globals.config.reload and not inspect.stack()[-2].filename.endswith('spawn.py'):

+ 8 - 0
nicegui/ui.py

@@ -1,5 +1,7 @@
 # isort:skip_file
 import os
+from . import globals
+import justpy as jp
 
 
 class Ui:
@@ -75,3 +77,9 @@ class Ui:
 
     if 'three' not in _excludes:
         from .elements.scene import Scene as scene
+
+    @staticmethod
+    async def shutdown():
+        for socket in [s for page in jp.WebPage.sockets.values() for s in page.values()]:
+            await socket.close()
+        globals.server.should_exit = True