1
0

globals.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from __future__ import annotations
  2. import asyncio
  3. import logging
  4. from enum import Enum
  5. from typing import TYPE_CHECKING, Awaitable, Callable, Dict, List, Optional, Union
  6. from starlette.applications import Starlette
  7. from uvicorn import Server
  8. from .config import Config
  9. if TYPE_CHECKING:
  10. import justpy as jp
  11. from .page_builder import PageBuilder
  12. class State(Enum):
  13. STOPPED = 0
  14. STARTING = 1
  15. STARTED = 2
  16. STOPPING = 3
  17. app: Starlette
  18. config: Optional[Config] = None
  19. server: Optional[Server] = None
  20. state: State = State.STOPPED
  21. loop: Optional[asyncio.AbstractEventLoop] = None
  22. page_builders: Dict[str, 'PageBuilder'] = {}
  23. view_stacks: Dict[int, List['jp.HTMLBaseComponent']] = {}
  24. tasks: List[asyncio.tasks.Task] = []
  25. log: logging.Logger = logging.getLogger('nicegui')
  26. connect_handlers: List[Union[Callable, Awaitable]] = []
  27. disconnect_handlers: List[Union[Callable, Awaitable]] = []
  28. startup_handlers: List[Union[Callable, Awaitable]] = []
  29. shutdown_handlers: List[Union[Callable, Awaitable]] = []
  30. def find_route(function: Callable) -> str:
  31. routes = [route for route, page_builder in page_builders.items() if page_builder.function == function]
  32. if not routes:
  33. raise ValueError(f'Invalid page function {function}')
  34. return routes[0]