log.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import urllib.parse
  2. from collections import deque
  3. from typing import Any, Optional
  4. from ..dependencies import register_component
  5. from ..element import Element
  6. register_component('log', __file__, 'log.js')
  7. class Log(Element):
  8. def __init__(self, max_lines: Optional[int] = None) -> None:
  9. """Log view
  10. Create a log view that allows to add new lines without re-transmitting the whole history to the client.
  11. :param max_lines: maximum number of lines before dropping oldest ones (default: `None`)
  12. """
  13. super().__init__('log')
  14. self._props['max_lines'] = max_lines
  15. self._props['lines'] = ''
  16. self._classes = ['nicegui-log']
  17. self.lines: deque[str] = deque(maxlen=max_lines)
  18. def push(self, line: Any) -> None:
  19. self.lines.extend(map(urllib.parse.quote, str(line).splitlines()))
  20. self._props['lines'] = '\n'.join(self.lines)
  21. self.run_method('push', urllib.parse.quote(str(line)))
  22. def clear(self) -> None:
  23. """Clear the log"""
  24. super().clear()
  25. self._props['lines'] = ''
  26. self.lines.clear()
  27. self.run_method('clear')