summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoofar <toofar@spalge.com>2024-01-30 19:51:18 +1300
committerpylbrecht <pylbrecht@mailbox.org>2024-02-07 20:22:21 +0100
commit52599ddbe968aa9626bbb1d3cacba0ce2011a0e0 (patch)
tree539300ccaeccba643fff4a3c987168ec0aafded2
parent2ece2fc8c3054f3079b92c5c8c4533b9126b651d (diff)
downloadqutebrowser-52599ddbe968aa9626bbb1d3cacba0ce2011a0e0.tar.gz
qutebrowser-52599ddbe968aa9626bbb1d3cacba0ce2011a0e0.zip
make `reconstruct_tree_data()` public
So that we can use it from test functions. And add a docstring as a result.
-rw-r--r--qutebrowser/misc/sessions.py50
-rw-r--r--tests/end2end/features/conftest.py6
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: