Source code for playwright_trace_browser.app
import sys
from pathlib import Path
from textual.app import App, ComposeResult
from textual.containers import Container
from textual.widgets import DirectoryTree, Footer, Header
from playwright_trace_browser._folder import create_restructured_temp_dir_for_viewing
from playwright_trace_browser._image import open_image
from playwright_trace_browser._viewer import open_trace_viewer
placeholder_image_path = Path(__file__).parent / "placeholder.jpg"
[docs]class PlaywrightTraceBrowser(App):
"""Textual Playwright trace browser app."""
CSS_PATH = "app.tcss"
BINDINGS = [
("q", "quit", "Quit"),
]
[docs] def __init__(self) -> None:
super().__init__()
path = "./" if len(sys.argv) < 2 else sys.argv[1]
self.path = create_restructured_temp_dir_for_viewing(Path(path))
[docs] def compose(self) -> ComposeResult:
"""Compose our UI."""
yield Header()
with Container():
yield DirectoryTree(self.path, id="tree-view")
yield Footer()
[docs] def on_mount(self) -> None:
self.query_one(DirectoryTree).focus()
[docs] async def on_directory_tree_file_selected(
self, event: DirectoryTree.FileSelected
) -> None:
"""Called when the user click a file in the directory tree."""
event.stop()
if event.path.suffix == ".zip":
self.run_worker(self.open_trace_viewer(event.path))
else:
self.run_worker(self.open_image(event.path))
[docs] async def open_trace_viewer(self, path: Path) -> None:
await open_trace_viewer(path)
[docs] async def open_image(self, path: Path) -> None:
await open_image(path)
if __name__ == "__main__":
PlaywrightTraceBrowser().run()