Skip to content

Commit 1be8c45

Browse files
living180matthiask
authored andcommitted
Replace OrderedDict() usage when possible
Since Python 3.7, regular dicts preserve insertion order, meaning most usages of OrderedDict can be replaced with regular dicts. Add a comment for the one case that cannot in the DebugToolbar class.
1 parent 4d5df40 commit 1be8c45

File tree

7 files changed

+29
-42
lines changed

7 files changed

+29
-42
lines changed

debug_toolbar/panels/cache.py

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import inspect
22
import sys
33
import time
4-
from collections import OrderedDict
54

65
try:
76
from django.utils.connection import ConnectionProxy
@@ -168,25 +167,23 @@ def __init__(self, *args, **kwargs):
168167
self.hits = 0
169168
self.misses = 0
170169
self.calls = []
171-
self.counts = OrderedDict(
172-
(
173-
("add", 0),
174-
("get", 0),
175-
("set", 0),
176-
("get_or_set", 0),
177-
("touch", 0),
178-
("delete", 0),
179-
("clear", 0),
180-
("get_many", 0),
181-
("set_many", 0),
182-
("delete_many", 0),
183-
("has_key", 0),
184-
("incr", 0),
185-
("decr", 0),
186-
("incr_version", 0),
187-
("decr_version", 0),
188-
)
189-
)
170+
self.counts = {
171+
"add": 0,
172+
"get": 0,
173+
"set": 0,
174+
"get_or_set": 0,
175+
"touch": 0,
176+
"delete": 0,
177+
"clear": 0,
178+
"get_many": 0,
179+
"set_many": 0,
180+
"delete_many": 0,
181+
"has_key": 0,
182+
"incr": 0,
183+
"decr": 0,
184+
"incr_version": 0,
185+
"decr_version": 0,
186+
}
190187
cache_called.connect(self._store_call_info)
191188

192189
def _store_call_info(

debug_toolbar/panels/headers.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from collections import OrderedDict
2-
31
from django.utils.translation import gettext_lazy as _
42

53
from debug_toolbar.panels import Panel
@@ -36,21 +34,19 @@ class HeadersPanel(Panel):
3634

3735
def process_request(self, request):
3836
wsgi_env = list(sorted(request.META.items()))
39-
self.request_headers = OrderedDict(
40-
(unmangle(k), v) for (k, v) in wsgi_env if is_http_header(k)
41-
)
37+
self.request_headers = {
38+
unmangle(k): v for (k, v) in wsgi_env if is_http_header(k)
39+
}
4240
if "Cookie" in self.request_headers:
4341
self.request_headers["Cookie"] = "=> see Request panel"
44-
self.environ = OrderedDict(
45-
(k, v) for (k, v) in wsgi_env if k in self.ENVIRON_FILTER
46-
)
42+
self.environ = {k: v for (k, v) in wsgi_env if k in self.ENVIRON_FILTER}
4743
self.record_stats(
4844
{"request_headers": self.request_headers, "environ": self.environ}
4945
)
5046
return super().process_request(request)
5147

5248
def generate_stats(self, request, response):
53-
self.response_headers = OrderedDict(sorted(response.items()))
49+
self.response_headers = dict(sorted(response.items()))
5450
self.record_stats({"response_headers": self.response_headers})
5551

5652

debug_toolbar/panels/history/panel.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import json
2-
from collections import OrderedDict
32

43
from django.http.request import RawPostDataException
54
from django.template.loader import render_to_string
@@ -87,7 +86,7 @@ def content(self):
8786
8887
Fetch every store for the toolbar and include it in the template.
8988
"""
90-
stores = OrderedDict()
89+
stores = {}
9190
for id, toolbar in reversed(self.toolbar._store.items()):
9291
stores[id] = {
9392
"toolbar": toolbar,

debug_toolbar/panels/settings.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from collections import OrderedDict
2-
31
from django.conf import settings
42
from django.utils.translation import gettext_lazy as _
53
from django.views.debug import get_default_exception_reporter_filter
@@ -23,9 +21,5 @@ def title(self):
2321

2422
def generate_stats(self, request, response):
2523
self.record_stats(
26-
{
27-
"settings": OrderedDict(
28-
sorted(get_safe_settings().items(), key=lambda s: s[0])
29-
)
30-
}
24+
{"settings": dict(sorted(get_safe_settings().items(), key=lambda s: s[0]))}
3125
)

debug_toolbar/panels/staticfiles.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from collections import OrderedDict
21
from os.path import join, normpath
32

43
from django.conf import settings
@@ -137,7 +136,7 @@ def get_staticfiles_finders(self):
137136
of relative and file system paths which that finder was able
138137
to find.
139138
"""
140-
finders_mapping = OrderedDict()
139+
finders_mapping = {}
141140
for finder in finders.get_finders():
142141
try:
143142
for path, finder_storage in finder.list([]):

debug_toolbar/panels/templates/panel.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from collections import OrderedDict
21
from contextlib import contextmanager
32
from os.path import normpath
43
from pprint import pformat, saferepr
@@ -39,7 +38,7 @@ def _request_context_bind_template(self, template):
3938
self.template = template
4039
# Set context processors according to the template engine's settings.
4140
processors = template.engine.template_context_processors + self._processors
42-
self.context_processors = OrderedDict()
41+
self.context_processors = {}
4342
updates = {}
4443
for processor in processors:
4544
name = f"{processor.__module__}.{processor.__name__}"

debug_toolbar/toolbar.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ def __init__(self, request, get_response):
2828
if panel.enabled:
2929
get_response = panel.process_request
3030
self.process_request = get_response
31+
# Use OrderedDict for the _panels attribute so that items can be efficiently
32+
# removed using FIFO order in the DebugToolbar.store() method. The .popitem()
33+
# method of Python's built-in dict only supports LIFO removal.
3134
self._panels = OrderedDict()
3235
while panels:
3336
panel = panels.pop()

0 commit comments

Comments
 (0)