Skip to content

Commit 348e582

Browse files
ritiksoni00matthiasktim-schilling
authored
added functionality to keep unsort the session dict (#1673)
* added functionality to keep unsort the session dict * Update tests/panels/test_request.py Co-authored-by: Matthias Kestenholz <[email protected]> * Add mention of session sorting change to changes.rst. Co-authored-by: Matthias Kestenholz <[email protected]> Co-authored-by: tschilling <[email protected]>
1 parent 5cbf357 commit 348e582

File tree

3 files changed

+40
-10
lines changed

3 files changed

+40
-10
lines changed

debug_toolbar/panels/request.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,12 @@ def generate_stats(self, request, response):
5959
self.record_stats(view_info)
6060

6161
if hasattr(request, "session"):
62-
self.record_stats(
63-
{
64-
"session": {
65-
"list": [
66-
(k, request.session.get(k))
67-
for k in sorted(request.session.keys())
68-
]
69-
}
70-
}
71-
)
62+
try:
63+
session_list = [
64+
(k, request.session.get(k)) for k in sorted(request.session.keys())
65+
]
66+
except TypeError:
67+
session_list = [
68+
(k, request.session.get(k)) for k in request.session.keys()
69+
]
70+
self.record_stats({"session": {"list": session_list}})

docs/changes.rst

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ Pending
1616
``settings.BASE_DIR``.
1717
* The toolbar's font stack now prefers system UI fonts. Tweaked paddings,
1818
margins and alignments a bit in the CSS code.
19+
* Only sort the session dictionary when the keys are all strings. Fixes a
20+
bug that causes the toolbar to crash when non-strings are used as keys.
1921

2022
3.6.0 (2022-08-17)
2123
------------------

tests/panels/test_request.py

+29
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,32 @@ def test_namespaced_url(self):
104104
self.panel.generate_stats(self.request, response)
105105
panel_stats = self.panel.get_stats()
106106
self.assertEqual(panel_stats["view_urlname"], "admin:login")
107+
108+
def test_session_list_sorted_or_not(self):
109+
"""
110+
Verify the session is sorted when all keys are strings.
111+
112+
See https://github.com/jazzband/django-debug-toolbar/issues/1668
113+
"""
114+
self.request.session = {
115+
1: "value",
116+
"data": ["foo", "bar", 1],
117+
(2, 3): "tuple_key",
118+
}
119+
data = {
120+
"list": [(1, "value"), ("data", ["foo", "bar", 1]), ((2, 3), "tuple_key")]
121+
}
122+
response = self.panel.process_request(self.request)
123+
self.panel.generate_stats(self.request, response)
124+
panel_stats = self.panel.get_stats()
125+
self.assertEqual(panel_stats["session"], data)
126+
127+
self.request.session = {
128+
"b": "b-value",
129+
"a": "a-value",
130+
}
131+
data = {"list": [("a", "a-value"), ("b", "b-value")]}
132+
response = self.panel.process_request(self.request)
133+
self.panel.generate_stats(self.request, response)
134+
panel_stats = self.panel.get_stats()
135+
self.assertEqual(panel_stats["session"], data)

0 commit comments

Comments
 (0)