app_config.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from dataclasses import dataclass, field
  2. from pathlib import Path
  3. from typing import Dict, List, Literal, Optional, Union
  4. from ..dataclasses import KWONLY_SLOTS
  5. from ..language import Language
  6. @dataclass(**KWONLY_SLOTS)
  7. class AppConfig:
  8. endpoint_documentation: Literal['none', 'internal', 'page', 'all'] = 'none'
  9. socket_io_js_query_params: Dict = field(default_factory=dict)
  10. socket_io_js_extra_headers: Dict = field(default_factory=dict)
  11. socket_io_js_transports: List[Literal['websocket', 'polling']] = \
  12. field(default_factory=lambda: ['websocket', 'polling']) # NOTE: we favor websocket
  13. quasar_config: Dict = \
  14. field(default_factory=lambda: {
  15. 'brand': {
  16. 'primary': '#5898d4',
  17. },
  18. 'loadingBar': {
  19. 'color': 'primary',
  20. 'skipHijack': False,
  21. },
  22. })
  23. reload: bool = field(init=False)
  24. title: str = field(init=False)
  25. viewport: str = field(init=False)
  26. favicon: Optional[Union[str, Path]] = field(init=False)
  27. dark: Optional[bool] = field(init=False)
  28. language: Language = field(init=False)
  29. binding_refresh_interval: float = field(init=False)
  30. reconnect_timeout: float = field(init=False)
  31. message_history_length: int = field(init=False)
  32. tailwind: bool = field(init=False)
  33. prod_js: bool = field(init=False)
  34. show_welcome_message: bool = field(init=False)
  35. _has_run_config: bool = False
  36. def add_run_config(self,
  37. *,
  38. reload: bool,
  39. title: str,
  40. viewport: str,
  41. favicon: Optional[Union[str, Path]],
  42. dark: Optional[bool],
  43. language: Language,
  44. binding_refresh_interval: float,
  45. reconnect_timeout: float,
  46. message_history_length: int,
  47. tailwind: bool,
  48. prod_js: bool,
  49. show_welcome_message: bool,
  50. ) -> None:
  51. """Add the run config to the app config."""
  52. self.reload = reload
  53. self.title = title
  54. self.viewport = viewport
  55. self.favicon = favicon
  56. self.dark = dark
  57. self.language = language
  58. self.binding_refresh_interval = binding_refresh_interval
  59. self.reconnect_timeout = reconnect_timeout
  60. self.message_history_length = message_history_length
  61. self.tailwind = tailwind
  62. self.prod_js = prod_js
  63. self.show_welcome_message = show_welcome_message
  64. self._has_run_config = True
  65. @property
  66. def has_run_config(self) -> bool:
  67. """Return whether the run config has been added."""
  68. return self._has_run_config