Skip to content

Commit

Permalink
added functionality to keep unsort the session dict (#1673)
Browse files Browse the repository at this point in the history
* added functionality to keep unsort the session dict

* Update tests/panels/test_request.py

Co-authored-by: Matthias Kestenholz <mk@feinheit.ch>

* Add mention of session sorting change to changes.rst.

Co-authored-by: Matthias Kestenholz <mk@feinheit.ch>
Co-authored-by: tschilling <schillingt@better-simple.com>
  • Loading branch information
3 people committed Sep 25, 2022
1 parent 5cbf357 commit 348e582
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 10 deletions.
19 changes: 9 additions & 10 deletions debug_toolbar/panels/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,12 @@ def generate_stats(self, request, response):
self.record_stats(view_info)

if hasattr(request, "session"):
self.record_stats(
{
"session": {
"list": [
(k, request.session.get(k))
for k in sorted(request.session.keys())
]
}
}
)
try:
session_list = [
(k, request.session.get(k)) for k in sorted(request.session.keys())
]
except TypeError:
session_list = [
(k, request.session.get(k)) for k in request.session.keys()
]
self.record_stats({"session": {"list": session_list}})
2 changes: 2 additions & 0 deletions docs/changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ Pending
``settings.BASE_DIR``.
* The toolbar's font stack now prefers system UI fonts. Tweaked paddings,
margins and alignments a bit in the CSS code.
* Only sort the session dictionary when the keys are all strings. Fixes a
bug that causes the toolbar to crash when non-strings are used as keys.

3.6.0 (2022-08-17)
------------------
Expand Down
29 changes: 29 additions & 0 deletions tests/panels/test_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,32 @@ def test_namespaced_url(self):
self.panel.generate_stats(self.request, response)
panel_stats = self.panel.get_stats()
self.assertEqual(panel_stats["view_urlname"], "admin:login")

def test_session_list_sorted_or_not(self):
"""
Verify the session is sorted when all keys are strings.
See https://github.com/jazzband/django-debug-toolbar/issues/1668
"""
self.request.session = {
1: "value",
"data": ["foo", "bar", 1],
(2, 3): "tuple_key",
}
data = {
"list": [(1, "value"), ("data", ["foo", "bar", 1]), ((2, 3), "tuple_key")]
}
response = self.panel.process_request(self.request)
self.panel.generate_stats(self.request, response)
panel_stats = self.panel.get_stats()
self.assertEqual(panel_stats["session"], data)

self.request.session = {
"b": "b-value",
"a": "a-value",
}
data = {"list": [("a", "a-value"), ("b", "b-value")]}
response = self.panel.process_request(self.request)
self.panel.generate_stats(self.request, response)
panel_stats = self.panel.get_stats()
self.assertEqual(panel_stats["session"], data)

0 comments on commit 348e582

Please sign in to comment.