Skip to content

Commit 54307a4

Browse files
authored
Replaced OrderedDict with dict (#8964)
1 parent 1ce0853 commit 54307a4

16 files changed

+105
-124
lines changed

rest_framework/fields.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import inspect
77
import re
88
import uuid
9-
from collections import OrderedDict
109
from collections.abc import Mapping
1110

1211
from django.conf import settings
@@ -143,7 +142,7 @@ def to_choices_dict(choices):
143142
# choices = [1, 2, 3]
144143
# choices = [(1, 'First'), (2, 'Second'), (3, 'Third')]
145144
# choices = [('Category', ((1, 'First'), (2, 'Second'))), (3, 'Third')]
146-
ret = OrderedDict()
145+
ret = {}
147146
for choice in choices:
148147
if not isinstance(choice, (list, tuple)):
149148
# single choice
@@ -166,7 +165,7 @@ def flatten_choices_dict(choices):
166165
flatten_choices_dict({1: '1st', 2: '2nd'}) -> {1: '1st', 2: '2nd'}
167166
flatten_choices_dict({'Group': {1: '1st', 2: '2nd'}}) -> {1: '1st', 2: '2nd'}
168167
"""
169-
ret = OrderedDict()
168+
ret = {}
170169
for key, value in choices.items():
171170
if isinstance(value, dict):
172171
# grouped choices (category, sub choices)
@@ -1649,7 +1648,7 @@ def to_representation(self, data):
16491648

16501649
def run_child_validation(self, data):
16511650
result = []
1652-
errors = OrderedDict()
1651+
errors = {}
16531652

16541653
for idx, item in enumerate(data):
16551654
try:
@@ -1713,7 +1712,7 @@ def to_representation(self, value):
17131712

17141713
def run_child_validation(self, data):
17151714
result = {}
1716-
errors = OrderedDict()
1715+
errors = {}
17171716

17181717
for key, value in data.items():
17191718
key = str(key)

rest_framework/metadata.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
Future implementations might use JSON schema or other definitions in order
77
to return this information in a more standardized way.
88
"""
9-
from collections import OrderedDict
10-
119
from django.core.exceptions import PermissionDenied
1210
from django.http import Http404
1311
from django.utils.encoding import force_str
@@ -59,11 +57,12 @@ class SimpleMetadata(BaseMetadata):
5957
})
6058

6159
def determine_metadata(self, request, view):
62-
metadata = OrderedDict()
63-
metadata['name'] = view.get_view_name()
64-
metadata['description'] = view.get_view_description()
65-
metadata['renders'] = [renderer.media_type for renderer in view.renderer_classes]
66-
metadata['parses'] = [parser.media_type for parser in view.parser_classes]
60+
metadata = {
61+
"name": view.get_view_name(),
62+
"description": view.get_view_description(),
63+
"renders": [renderer.media_type for renderer in view.renderer_classes],
64+
"parses": [parser.media_type for parser in view.parser_classes],
65+
}
6766
if hasattr(view, 'get_serializer'):
6867
actions = self.determine_actions(request, view)
6968
if actions:
@@ -106,20 +105,21 @@ def get_serializer_info(self, serializer):
106105
# If this is a `ListSerializer` then we want to examine the
107106
# underlying child serializer instance instead.
108107
serializer = serializer.child
109-
return OrderedDict([
110-
(field_name, self.get_field_info(field))
108+
return {
109+
field_name: self.get_field_info(field)
111110
for field_name, field in serializer.fields.items()
112111
if not isinstance(field, serializers.HiddenField)
113-
])
112+
}
114113

115114
def get_field_info(self, field):
116115
"""
117116
Given an instance of a serializer field, return a dictionary
118117
of metadata about it.
119118
"""
120-
field_info = OrderedDict()
121-
field_info['type'] = self.label_lookup[field]
122-
field_info['required'] = getattr(field, 'required', False)
119+
field_info = {
120+
"type": self.label_lookup[field],
121+
"required": getattr(field, "required", False),
122+
}
123123

124124
attrs = [
125125
'read_only', 'label', 'help_text',

rest_framework/pagination.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import contextlib
77
from base64 import b64decode, b64encode
8-
from collections import OrderedDict, namedtuple
8+
from collections import namedtuple
99
from urllib import parse
1010

1111
from django.core.paginator import InvalidPage
@@ -225,12 +225,12 @@ def get_page_number(self, request, paginator):
225225
return page_number
226226

227227
def get_paginated_response(self, data):
228-
return Response(OrderedDict([
229-
('count', self.page.paginator.count),
230-
('next', self.get_next_link()),
231-
('previous', self.get_previous_link()),
232-
('results', data)
233-
]))
228+
return Response({
229+
'count': self.page.paginator.count,
230+
'next': self.get_next_link(),
231+
'previous': self.get_previous_link(),
232+
'results': data,
233+
})
234234

235235
def get_paginated_response_schema(self, schema):
236236
return {
@@ -395,12 +395,12 @@ def paginate_queryset(self, queryset, request, view=None):
395395
return list(queryset[self.offset:self.offset + self.limit])
396396

397397
def get_paginated_response(self, data):
398-
return Response(OrderedDict([
399-
('count', self.count),
400-
('next', self.get_next_link()),
401-
('previous', self.get_previous_link()),
402-
('results', data)
403-
]))
398+
return Response({
399+
'count': self.count,
400+
'next': self.get_next_link(),
401+
'previous': self.get_previous_link(),
402+
'results': data
403+
})
404404

405405
def get_paginated_response_schema(self, schema):
406406
return {
@@ -892,11 +892,11 @@ def _get_position_from_instance(self, instance, ordering):
892892
return None if attr is None else str(attr)
893893

894894
def get_paginated_response(self, data):
895-
return Response(OrderedDict([
896-
('next', self.get_next_link()),
897-
('previous', self.get_previous_link()),
898-
('results', data)
899-
]))
895+
return Response({
896+
'next': self.get_next_link(),
897+
'previous': self.get_previous_link(),
898+
'results': data,
899+
})
900900

901901
def get_paginated_response_schema(self, schema):
902902
return {

rest_framework/relations.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import contextlib
22
import sys
3-
from collections import OrderedDict
43
from operator import attrgetter
54
from urllib import parse
65

@@ -199,13 +198,9 @@ def get_choices(self, cutoff=None):
199198
if cutoff is not None:
200199
queryset = queryset[:cutoff]
201200

202-
return OrderedDict([
203-
(
204-
self.to_representation(item),
205-
self.display_value(item)
206-
)
207-
for item in queryset
208-
])
201+
return {
202+
self.to_representation(item): self.display_value(item) for item in queryset
203+
}
209204

210205
@property
211206
def choices(self):

rest_framework/renderers.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
import base64
1111
import contextlib
12-
from collections import OrderedDict
1312
from urllib import parse
1413

1514
from django import forms
@@ -653,7 +652,7 @@ def get_context(self, data, accepted_media_type, renderer_context):
653652
raw_data_patch_form = self.get_raw_data_form(data, view, 'PATCH', request)
654653
raw_data_put_or_patch_form = raw_data_put_form or raw_data_patch_form
655654

656-
response_headers = OrderedDict(sorted(response.items()))
655+
response_headers = dict(sorted(response.items()))
657656
renderer_content_type = ''
658657
if renderer:
659658
renderer_content_type = '%s' % renderer.media_type

rest_framework/routers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
urlpatterns = router.urls
1515
"""
1616
import itertools
17-
from collections import OrderedDict, namedtuple
17+
from collections import namedtuple
1818

1919
from django.core.exceptions import ImproperlyConfigured
2020
from django.urls import NoReverseMatch, path, re_path
@@ -321,7 +321,7 @@ class APIRootView(views.APIView):
321321

322322
def get(self, request, *args, **kwargs):
323323
# Return a plain {"name": "hyperlink"} response.
324-
ret = OrderedDict()
324+
ret = {}
325325
namespace = request.resolver_match.namespace
326326
for key, url_name in self.api_root_dict.items():
327327
if namespace:
@@ -365,7 +365,7 @@ def get_api_root_view(self, api_urls=None):
365365
"""
366366
Return a basic root view.
367367
"""
368-
api_root_dict = OrderedDict()
368+
api_root_dict = {}
369369
list_name = self.routes[0].name
370370
for prefix, viewset, basename in self.registry:
371371
api_root_dict[prefix] = list_name.format(basename=basename)

rest_framework/schemas/coreapi.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import warnings
2-
from collections import Counter, OrderedDict
2+
from collections import Counter
33
from urllib import parse
44

55
from django.db import models
@@ -54,7 +54,7 @@ def distribute_links(obj):
5454
"""
5555

5656

57-
class LinkNode(OrderedDict):
57+
class LinkNode(dict):
5858
def __init__(self):
5959
self.links = []
6060
self.methods_counter = Counter()
@@ -268,11 +268,11 @@ def field_to_schema(field):
268268
)
269269
elif isinstance(field, serializers.Serializer):
270270
return coreschema.Object(
271-
properties=OrderedDict([
272-
(key, field_to_schema(value))
271+
properties={
272+
key: field_to_schema(value)
273273
for key, value
274274
in field.fields.items()
275-
]),
275+
},
276276
title=title,
277277
description=description
278278
)
@@ -549,7 +549,7 @@ def update_fields(fields, update_with):
549549
if not update_with:
550550
return fields
551551

552-
by_name = OrderedDict((f.name, f) for f in fields)
552+
by_name = {f.name: f for f in fields}
553553
for f in update_with:
554554
by_name[f.name] = f
555555
fields = list(by_name.values())

rest_framework/schemas/openapi.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import re
22
import warnings
3-
from collections import OrderedDict
43
from decimal import Decimal
54
from operator import attrgetter
65
from urllib.parse import urljoin
@@ -340,7 +339,7 @@ def get_pagination_parameters(self, path, method):
340339
return paginator.get_schema_operation_parameters(view)
341340

342341
def map_choicefield(self, field):
343-
choices = list(OrderedDict.fromkeys(field.choices)) # preserve order and remove duplicates
342+
choices = list(dict.fromkeys(field.choices)) # preserve order and remove duplicates
344343
if all(isinstance(choice, bool) for choice in choices):
345344
type = 'boolean'
346345
elif all(isinstance(choice, int) for choice in choices):

rest_framework/serializers.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import copy
1616
import inspect
1717
import traceback
18-
from collections import OrderedDict, defaultdict
18+
from collections import defaultdict
1919
from collections.abc import Mapping
2020

2121
from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured
@@ -308,7 +308,7 @@ def visit(name):
308308
for name, f in base._declared_fields.items() if name not in known
309309
]
310310

311-
return OrderedDict(base_fields + fields)
311+
return dict(base_fields + fields)
312312

313313
def __new__(cls, name, bases, attrs):
314314
attrs['_declared_fields'] = cls._get_declared_fields(bases, attrs)
@@ -393,20 +393,20 @@ def get_initial(self):
393393
if hasattr(self, 'initial_data'):
394394
# initial_data may not be a valid type
395395
if not isinstance(self.initial_data, Mapping):
396-
return OrderedDict()
396+
return {}
397397

398-
return OrderedDict([
399-
(field_name, field.get_value(self.initial_data))
398+
return {
399+
field_name: field.get_value(self.initial_data)
400400
for field_name, field in self.fields.items()
401401
if (field.get_value(self.initial_data) is not empty) and
402402
not field.read_only
403-
])
403+
}
404404

405-
return OrderedDict([
406-
(field.field_name, field.get_initial())
405+
return {
406+
field.field_name: field.get_initial()
407407
for field in self.fields.values()
408408
if not field.read_only
409-
])
409+
}
410410

411411
def get_value(self, dictionary):
412412
# We override the default field access in order to support
@@ -441,7 +441,7 @@ def _read_only_defaults(self):
441441
if (field.read_only) and (field.default != empty) and (field.source != '*') and ('.' not in field.source)
442442
]
443443

444-
defaults = OrderedDict()
444+
defaults = {}
445445
for field in fields:
446446
try:
447447
default = field.get_default()
@@ -474,8 +474,8 @@ def to_internal_value(self, data):
474474
api_settings.NON_FIELD_ERRORS_KEY: [message]
475475
}, code='invalid')
476476

477-
ret = OrderedDict()
478-
errors = OrderedDict()
477+
ret = {}
478+
errors = {}
479479
fields = self._writable_fields
480480

481481
for field in fields:
@@ -503,7 +503,7 @@ def to_representation(self, instance):
503503
"""
504504
Object instance -> Dict of primitive datatypes.
505505
"""
506-
ret = OrderedDict()
506+
ret = {}
507507
fields = self._readable_fields
508508

509509
for field in fields:
@@ -1061,7 +1061,7 @@ def get_fields(self):
10611061
)
10621062

10631063
# Determine the fields that should be included on the serializer.
1064-
fields = OrderedDict()
1064+
fields = {}
10651065

10661066
for field_name in field_names:
10671067
# If the field is explicitly declared on the class then use that.
@@ -1546,16 +1546,16 @@ def get_unique_together_validators(self):
15461546
# which may map onto a model field. Any dotted field name lookups
15471547
# cannot map to a field, and must be a traversal, so we're not
15481548
# including those.
1549-
field_sources = OrderedDict(
1550-
(field.field_name, field.source) for field in self._writable_fields
1549+
field_sources = {
1550+
field.field_name: field.source for field in self._writable_fields
15511551
if (field.source != '*') and ('.' not in field.source)
1552-
)
1552+
}
15531553

15541554
# Special Case: Add read_only fields with defaults.
1555-
field_sources.update(OrderedDict(
1556-
(field.field_name, field.source) for field in self.fields.values()
1555+
field_sources.update({
1556+
field.field_name: field.source for field in self.fields.values()
15571557
if (field.read_only) and (field.default != empty) and (field.source != '*') and ('.' not in field.source)
1558-
))
1558+
})
15591559

15601560
# Invert so we can find the serializer field names that correspond to
15611561
# the model field names in the unique_together sets. This also allows

0 commit comments

Comments
 (0)