From 52599ddbe968aa9626bbb1d3cacba0ce2011a0e0 Mon Sep 17 00:00:00 2001 From: toofar Date: Tue, 30 Jan 2024 19:51:18 +1300 Subject: make `reconstruct_tree_data()` public So that we can use it from test functions. And add a docstring as a result. --- qutebrowser/misc/sessions.py | 50 ++++++++++++++++++++++++++++---------- tests/end2end/features/conftest.py | 6 ++--- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/qutebrowser/misc/sessions.py b/qutebrowser/misc/sessions.py index dac43d238..fe8e7ba24 100644 --- a/qutebrowser/misc/sessions.py +++ b/qutebrowser/misc/sessions.py @@ -121,6 +121,42 @@ class TabHistoryItem: last_visited=self.last_visited) +def reconstruct_tree_data(window_data): + """Return a dict usable as a tree from a window. + + Returns a dict like: + { + 1: {'children': [2]}, + 2: { + ...tab, + "treetab_node_data": { + "children": [], + "collapsed": False, + "parent": 1, + "uid": 2, + } + } + } + + Which you can traverse by starting at the node with no "treetab_node_data" + attribute (the root) and pulling successive levels of children from the + dict using their `uid`s as keys. + + The ...tab part represents the usual attributes for a tab when saved in a + session. + """ + tree_data = {} + root = window_data['treetab_root'] + tree_data[root['uid']] = { + 'children': root['children'], + 'tab': {}, + 'collapsed': False + } + for tab in window_data['tabs']: + tree_data[tab['treetab_node_data']['uid']] = tab + return tree_data + + class SessionManager(QObject): """Manager for sessions. @@ -474,18 +510,6 @@ class SessionManager(QObject): except ValueError as e: raise SessionError(e) - def _reconstruct_tree_data(self, window_data): - tree_data = {} - root = window_data['treetab_root'] - tree_data[root['uid']] = { - 'children': root['children'], - 'tab': {}, - 'collapsed': False - } - for tab in window_data['tabs']: - tree_data[tab['treetab_node_data']['uid']] = tab - return tree_data - def _load_tree(self, tabbed_browser, tree_data): tree_keys = list(tree_data.keys()) if not tree_keys: @@ -540,7 +564,7 @@ class SessionManager(QObject): load_tree_tabs = 'treetab_root' in win.keys() and \ tabbed_browser.is_treetabbedbrowser if load_tree_tabs: - tree_data = self._reconstruct_tree_data(win) + tree_data = reconstruct_tree_data(win) self._load_tree(tabbed_browser, tree_data) else: for i, tab in enumerate(tabs): diff --git a/tests/end2end/features/conftest.py b/tests/end2end/features/conftest.py index 0d3eb69fb..08e51b273 100644 --- a/tests/end2end/features/conftest.py +++ b/tests/end2end/features/conftest.py @@ -20,6 +20,7 @@ import pytest import pytest_bdd as bdd import qutebrowser +from qutebrowser.misc import sessions from qutebrowser.utils import log, utils, docutils, version from qutebrowser.browser import pdfjs from end2end.fixtures import testprocess @@ -670,10 +671,7 @@ def check_open_tabs(quteproc, request, expected_tabs): is_tree_tab_window = "treetab_root" in window if is_tree_tab_window: - # TODO: make this public - from qutebrowser.misc import sessions - tree_data = sessions.SessionManager._reconstruct_tree_data(None, window) - + tree_data = sessions.reconstruct_tree_data(window) root = [node for node in tree_data.values() if "treetab_node_data" not in node][0] actual = list(tree_to_str(root, tree_data)) else: -- cgit v1.2.3-54-g00ecf