Просмотр исходного кода

Closes #9896: Discontinue arbitrary use of OrderedDict

jeremystretch 3 лет назад
Родитель
Сommit
29a611c729

+ 1 - 2
netbox/dcim/api/views.py

@@ -1,5 +1,4 @@
 import socket
 import socket
-from collections import OrderedDict
 
 
 from django.http import Http404, HttpResponse, HttpResponseForbidden
 from django.http import Http404, HttpResponse, HttpResponseForbidden
 from django.shortcuts import get_object_or_404
 from django.shortcuts import get_object_or_404
@@ -484,7 +483,7 @@ class DeviceViewSet(ConfigContextQuerySetMixin, NetBoxModelViewSet):
             return HttpResponseForbidden()
             return HttpResponseForbidden()
 
 
         napalm_methods = request.GET.getlist('method')
         napalm_methods = request.GET.getlist('method')
-        response = OrderedDict([(m, None) for m in napalm_methods])
+        response = {m: None for m in napalm_methods}
 
 
         config = get_config()
         config = get_config()
         username = config.NAPALM_USERNAME
         username = config.NAPALM_USERNAME

+ 21 - 23
netbox/dcim/views.py

@@ -1,5 +1,3 @@
-from collections import OrderedDict
-
 from django.contrib import messages
 from django.contrib import messages
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from django.core.paginator import EmptyPage, PageNotAnInteger
 from django.core.paginator import EmptyPage, PageNotAnInteger
@@ -945,18 +943,18 @@ class DeviceTypeImportView(generic.ObjectImportView):
     ]
     ]
     queryset = DeviceType.objects.all()
     queryset = DeviceType.objects.all()
     model_form = forms.DeviceTypeImportForm
     model_form = forms.DeviceTypeImportForm
-    related_object_forms = OrderedDict((
-        ('console-ports', forms.ConsolePortTemplateImportForm),
-        ('console-server-ports', forms.ConsoleServerPortTemplateImportForm),
-        ('power-ports', forms.PowerPortTemplateImportForm),
-        ('power-outlets', forms.PowerOutletTemplateImportForm),
-        ('interfaces', forms.InterfaceTemplateImportForm),
-        ('rear-ports', forms.RearPortTemplateImportForm),
-        ('front-ports', forms.FrontPortTemplateImportForm),
-        ('module-bays', forms.ModuleBayTemplateImportForm),
-        ('device-bays', forms.DeviceBayTemplateImportForm),
-        ('inventory-items', forms.InventoryItemTemplateImportForm),
-    ))
+    related_object_forms = {
+        'console-ports': forms.ConsolePortTemplateImportForm,
+        'console-server-ports': forms.ConsoleServerPortTemplateImportForm,
+        'power-ports': forms.PowerPortTemplateImportForm,
+        'power-outlets': forms.PowerOutletTemplateImportForm,
+        'interfaces': forms.InterfaceTemplateImportForm,
+        'rear-ports': forms.RearPortTemplateImportForm,
+        'front-ports': forms.FrontPortTemplateImportForm,
+        'module-bays': forms.ModuleBayTemplateImportForm,
+        'device-bays': forms.DeviceBayTemplateImportForm,
+        'inventory-items': forms.InventoryItemTemplateImportForm,
+    }
 
 
     def prep_related_object_data(self, parent, data):
     def prep_related_object_data(self, parent, data):
         data.update({'device_type': parent})
         data.update({'device_type': parent})
@@ -1075,15 +1073,15 @@ class ModuleTypeImportView(generic.ObjectImportView):
     ]
     ]
     queryset = ModuleType.objects.all()
     queryset = ModuleType.objects.all()
     model_form = forms.ModuleTypeImportForm
     model_form = forms.ModuleTypeImportForm
-    related_object_forms = OrderedDict((
-        ('console-ports', forms.ConsolePortTemplateImportForm),
-        ('console-server-ports', forms.ConsoleServerPortTemplateImportForm),
-        ('power-ports', forms.PowerPortTemplateImportForm),
-        ('power-outlets', forms.PowerOutletTemplateImportForm),
-        ('interfaces', forms.InterfaceTemplateImportForm),
-        ('rear-ports', forms.RearPortTemplateImportForm),
-        ('front-ports', forms.FrontPortTemplateImportForm),
-    ))
+    related_object_forms = {
+        'console-ports': forms.ConsolePortTemplateImportForm,
+        'console-server-ports': forms.ConsoleServerPortTemplateImportForm,
+        'power-ports': forms.PowerPortTemplateImportForm,
+        'power-outlets': forms.PowerOutletTemplateImportForm,
+        'interfaces': forms.InterfaceTemplateImportForm,
+        'rear-ports': forms.RearPortTemplateImportForm,
+        'front-ports': forms.FrontPortTemplateImportForm,
+    }
 
 
     def prep_related_object_data(self, parent, data):
     def prep_related_object_data(self, parent, data):
         data.update({'module_type': parent})
         data.update({'module_type': parent})

+ 8 - 9
netbox/extras/reports.py

@@ -3,7 +3,6 @@ import inspect
 import logging
 import logging
 import pkgutil
 import pkgutil
 import traceback
 import traceback
-from collections import OrderedDict
 
 
 from django.conf import settings
 from django.conf import settings
 from django.utils import timezone
 from django.utils import timezone
@@ -114,7 +113,7 @@ class Report(object):
 
 
     def __init__(self):
     def __init__(self):
 
 
-        self._results = OrderedDict()
+        self._results = {}
         self.active_test = None
         self.active_test = None
         self.failed = False
         self.failed = False
 
 
@@ -125,13 +124,13 @@ class Report(object):
         for method in dir(self):
         for method in dir(self):
             if method.startswith('test_') and callable(getattr(self, method)):
             if method.startswith('test_') and callable(getattr(self, method)):
                 test_methods.append(method)
                 test_methods.append(method)
-                self._results[method] = OrderedDict([
-                    ('success', 0),
-                    ('info', 0),
-                    ('warning', 0),
-                    ('failure', 0),
-                    ('log', []),
-                ])
+                self._results[method] = {
+                    'success': 0,
+                    'info': 0,
+                    'warning': 0,
+                    'failure': 0,
+                    'log': [],
+                }
         if not test_methods:
         if not test_methods:
             raise Exception("A report must contain at least one test method.")
             raise Exception("A report must contain at least one test method.")
         self.test_methods = test_methods
         self.test_methods = test_methods

+ 2 - 3
netbox/extras/scripts.py

@@ -6,7 +6,6 @@ import pkgutil
 import sys
 import sys
 import traceback
 import traceback
 import threading
 import threading
-from collections import OrderedDict
 
 
 import yaml
 import yaml
 from django import forms
 from django import forms
@@ -496,7 +495,7 @@ def get_scripts(use_names=False):
     Return a dict of dicts mapping all scripts to their modules. Set use_names to True to use each module's human-
     Return a dict of dicts mapping all scripts to their modules. Set use_names to True to use each module's human-
     defined name in place of the actual module name.
     defined name in place of the actual module name.
     """
     """
-    scripts = OrderedDict()
+    scripts = {}
     # Iterate through all modules within the scripts path. These are the user-created files in which reports are
     # Iterate through all modules within the scripts path. These are the user-created files in which reports are
     # defined.
     # defined.
     for importer, module_name, _ in pkgutil.iter_modules([settings.SCRIPTS_ROOT]):
     for importer, module_name, _ in pkgutil.iter_modules([settings.SCRIPTS_ROOT]):
@@ -510,7 +509,7 @@ def get_scripts(use_names=False):
 
 
         if use_names and hasattr(module, 'name'):
         if use_names and hasattr(module, 'name'):
             module_name = module.name
             module_name = module.name
-        module_scripts = OrderedDict()
+        module_scripts = {}
         script_order = getattr(module, "script_order", ())
         script_order = getattr(module, "script_order", ())
         ordered_scripts = [cls for cls in script_order if is_script(cls)]
         ordered_scripts = [cls for cls in script_order if is_script(cls)]
         unordered_scripts = [cls for _, cls in inspect.getmembers(module, is_script) if cls not in script_order]
         unordered_scripts = [cls for _, cls in inspect.getmembers(module, is_script) if cls not in script_order]

+ 1 - 3
netbox/extras/templatetags/custom_links.py

@@ -1,5 +1,3 @@
-from collections import OrderedDict
-
 from django import template
 from django import template
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from django.utils.safestring import mark_safe
 from django.utils.safestring import mark_safe
@@ -50,7 +48,7 @@ def custom_links(context, obj):
         'perms': context['perms'],  # django.contrib.auth.context_processors.auth
         'perms': context['perms'],  # django.contrib.auth.context_processors.auth
     }
     }
     template_code = ''
     template_code = ''
-    group_names = OrderedDict()
+    group_names = {}
 
 
     for cl in custom_links:
     for cl in custom_links:
 
 

+ 15 - 17
netbox/ipam/api/serializers.py

@@ -1,5 +1,3 @@
-from collections import OrderedDict
-
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
 from drf_yasg.utils import swagger_serializer_method
 from drf_yasg.utils import swagger_serializer_method
 from rest_framework import serializers
 from rest_framework import serializers
@@ -227,13 +225,13 @@ class AvailableVLANSerializer(serializers.Serializer):
     group = NestedVLANGroupSerializer(read_only=True)
     group = NestedVLANGroupSerializer(read_only=True)
 
 
     def to_representation(self, instance):
     def to_representation(self, instance):
-        return OrderedDict([
-            ('vid', instance),
-            ('group', NestedVLANGroupSerializer(
+        return {
+            'vid': instance,
+            'group': NestedVLANGroupSerializer(
                 self.context['group'],
                 self.context['group'],
                 context={'request': self.context['request']}
                 context={'request': self.context['request']}
-            ).data),
-        ])
+            ).data,
+        }
 
 
 
 
 class CreateAvailableVLANSerializer(NetBoxModelSerializer):
 class CreateAvailableVLANSerializer(NetBoxModelSerializer):
@@ -318,11 +316,11 @@ class AvailablePrefixSerializer(serializers.Serializer):
             vrf = NestedVRFSerializer(self.context['vrf'], context={'request': self.context['request']}).data
             vrf = NestedVRFSerializer(self.context['vrf'], context={'request': self.context['request']}).data
         else:
         else:
             vrf = None
             vrf = None
-        return OrderedDict([
-            ('family', instance.version),
-            ('prefix', str(instance)),
-            ('vrf', vrf),
-        ])
+        return {
+            'family': instance.version,
+            'prefix': str(instance),
+            'vrf': vrf,
+        }
 
 
 
 
 #
 #
@@ -397,11 +395,11 @@ class AvailableIPSerializer(serializers.Serializer):
             vrf = NestedVRFSerializer(self.context['vrf'], context={'request': self.context['request']}).data
             vrf = NestedVRFSerializer(self.context['vrf'], context={'request': self.context['request']}).data
         else:
         else:
             vrf = None
             vrf = None
-        return OrderedDict([
-            ('family', self.context['parent'].family),
-            ('address', f"{instance}/{self.context['parent'].mask_length}"),
-            ('vrf', vrf),
-        ])
+        return {
+            'family': self.context['parent'].family,
+            'address': f"{instance}/{self.context['parent'].mask_length}",
+            'vrf': vrf,
+        }
 
 
 
 
 #
 #

+ 4 - 6
netbox/netbox/api/fields.py

@@ -1,5 +1,3 @@
-from collections import OrderedDict
-
 from django.core.exceptions import ObjectDoesNotExist
 from django.core.exceptions import ObjectDoesNotExist
 from netaddr import IPNetwork
 from netaddr import IPNetwork
 from rest_framework import serializers
 from rest_framework import serializers
@@ -48,10 +46,10 @@ class ChoiceField(serializers.Field):
     def to_representation(self, obj):
     def to_representation(self, obj):
         if obj == '':
         if obj == '':
             return None
             return None
-        return OrderedDict([
-            ('value', obj),
-            ('label', self._choices[obj])
-        ])
+        return {
+            'value': obj,
+            'label': self._choices[obj],
+        }
 
 
     def to_internal_value(self, data):
     def to_internal_value(self, data):
         if data == '':
         if data == '':

+ 12 - 13
netbox/netbox/api/views.py

@@ -1,5 +1,4 @@
 import platform
 import platform
-from collections import OrderedDict
 
 
 from django import __version__ as DJANGO_VERSION
 from django import __version__ as DJANGO_VERSION
 from django.apps import apps
 from django.apps import apps
@@ -26,18 +25,18 @@ class APIRootView(APIView):
 
 
     def get(self, request, format=None):
     def get(self, request, format=None):
 
 
-        return Response(OrderedDict((
-            ('circuits', reverse('circuits-api:api-root', request=request, format=format)),
-            ('dcim', reverse('dcim-api:api-root', request=request, format=format)),
-            ('extras', reverse('extras-api:api-root', request=request, format=format)),
-            ('ipam', reverse('ipam-api:api-root', request=request, format=format)),
-            ('plugins', reverse('plugins-api:api-root', request=request, format=format)),
-            ('status', reverse('api-status', request=request, format=format)),
-            ('tenancy', reverse('tenancy-api:api-root', request=request, format=format)),
-            ('users', reverse('users-api:api-root', request=request, format=format)),
-            ('virtualization', reverse('virtualization-api:api-root', request=request, format=format)),
-            ('wireless', reverse('wireless-api:api-root', request=request, format=format)),
-        )))
+        return Response({
+            'circuits': reverse('circuits-api:api-root', request=request, format=format),
+            'dcim': reverse('dcim-api:api-root', request=request, format=format),
+            'extras': reverse('extras-api:api-root', request=request, format=format),
+            'ipam': reverse('ipam-api:api-root', request=request, format=format),
+            'plugins': reverse('plugins-api:api-root', request=request, format=format),
+            'status': reverse('api-status', request=request, format=format),
+            'tenancy': reverse('tenancy-api:api-root', request=request, format=format),
+            'users': reverse('users-api:api-root', request=request, format=format),
+            'virtualization': reverse('virtualization-api:api-root', request=request, format=format),
+            'wireless': reverse('wireless-api:api-root', request=request, format=format),
+        })
 
 
 
 
 class StatusView(APIView):
 class StatusView(APIView):

+ 1 - 2
netbox/utilities/utils.py

@@ -1,7 +1,6 @@
 import datetime
 import datetime
 import decimal
 import decimal
 import json
 import json
-from collections import OrderedDict
 from decimal import Decimal
 from decimal import Decimal
 from itertools import count, groupby
 from itertools import count, groupby
 
 
@@ -218,7 +217,7 @@ def deepmerge(original, new):
     """
     """
     Deep merge two dictionaries (new into original) and return a new dict
     Deep merge two dictionaries (new into original) and return a new dict
     """
     """
-    merged = OrderedDict(original)
+    merged = dict(original)
     for key, val in new.items():
     for key, val in new.items():
         if key in original and isinstance(original[key], dict) and val and isinstance(val, dict):
         if key in original and isinstance(original[key], dict) and val and isinstance(val, dict):
             merged[key] = deepmerge(original[key], val)
             merged[key] = deepmerge(original[key], val)