Fix security definitions ordering consistency

master
Cristi Vîjdea 2018-12-21 02:04:15 +02:00
parent 5418415300
commit a9ec14620c
2 changed files with 10 additions and 6 deletions

View File

@ -16,7 +16,7 @@ from . import openapi
from .app_settings import swagger_settings from .app_settings import swagger_settings
from .errors import SwaggerGenerationError from .errors import SwaggerGenerationError
from .inspectors.field import get_basic_type_info, get_queryset_field, get_queryset_from_view from .inspectors.field import get_basic_type_info, get_queryset_field, get_queryset_from_view
from .openapi import ReferenceResolver from .openapi import ReferenceResolver, SwaggerDict
from .utils import force_real_str, get_consumes, get_produces from .utils import force_real_str, get_consumes, get_produces
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -216,14 +216,14 @@ class OpenAPISchemaGenerator(object):
security_definitions = swagger_settings.SECURITY_DEFINITIONS security_definitions = swagger_settings.SECURITY_DEFINITIONS
if security_definitions is not None: if security_definitions is not None:
security_definitions = OrderedDict(sorted([(key, OrderedDict(sorted(sd.items()))) security_definitions = SwaggerDict._as_odict(security_definitions, {})
for key, sd in swagger_settings.SECURITY_DEFINITIONS.items()]))
security_requirements = swagger_settings.SECURITY_REQUIREMENTS security_requirements = swagger_settings.SECURITY_REQUIREMENTS
if security_requirements is None: if security_requirements is None:
security_requirements = [{security_scheme: []} for security_scheme in swagger_settings.SECURITY_DEFINITIONS] security_requirements = [{security_scheme: []} for security_scheme in swagger_settings.SECURITY_DEFINITIONS]
security_requirements = sorted(security_requirements, key=lambda od: list(sorted(od))) security_requirements = [SwaggerDict._as_odict(sr, {}) for sr in security_requirements]
security_requirements = [OrderedDict(sorted(sr.items())) for sr in security_requirements] security_requirements = sorted(security_requirements, key=list)
url = self.url url = self.url
if url is None and request is not None: if url is None and request is not None:

View File

@ -3,6 +3,7 @@ import six
import collections import collections
import logging import logging
import re import re
import sys
from collections import OrderedDict from collections import OrderedDict
from coreapi.compat import urlparse from coreapi.compat import urlparse
@ -139,7 +140,10 @@ class SwaggerDict(OrderedDict):
if isinstance(obj, collections.Mapping): if isinstance(obj, collections.Mapping):
result = OrderedDict() result = OrderedDict()
memo[id(obj)] = result memo[id(obj)] = result
for attr, val in obj.items(): items = obj.items()
if not isinstance(obj, OrderedDict):
items = sorted(items)
for attr, val in items:
result[attr] = SwaggerDict._as_odict(val, memo) result[attr] = SwaggerDict._as_odict(val, memo)
return result return result
elif isinstance(obj, six.string_types): elif isinstance(obj, six.string_types):