globals.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. from __future__ import annotations
  2. import asyncio
  3. import logging
  4. from typing import TYPE_CHECKING, Awaitable, Callable, Dict, List, Union
  5. from uvicorn import Server
  6. if TYPE_CHECKING:
  7. import justpy as jp
  8. from starlette.applications import Starlette
  9. from .config import Config
  10. from .elements.page import PageBuilder
  11. app: 'Starlette'
  12. config: 'Config'
  13. server: Server
  14. page_builders: Dict[str, 'PageBuilder'] = {}
  15. view_stack: List['jp.HTMLBaseComponent'] = []
  16. tasks: List[asyncio.tasks.Task] = []
  17. log: logging.Logger = logging.getLogger('nicegui')
  18. connect_handlers: List[Union[Callable, Awaitable]] = []
  19. disconnect_handlers: List[Union[Callable, Awaitable]] = []
  20. startup_handlers: List[Union[Callable, Awaitable]] = []
  21. shutdown_handlers: List[Union[Callable, Awaitable]] = []
  22. pre_evaluation_succeeded: bool = False
  23. def find_route(function: Callable) -> str:
  24. routes = [route for route, page_builder in page_builders.items() if page_builder.function == function]
  25. if not routes:
  26. raise ValueError(f'Invalid page function {function}')
  27. return routes[0]