1
+ from __future__ import absolute_import
1
2
from collections import OrderedDict
2
3
from inspect import getsource
3
4
4
5
from .base import Code , CodeGenerator
5
6
from .parser import schema_var_name
7
+ import six
6
8
7
9
8
10
class Schema (Code ):
@@ -74,7 +76,7 @@ def build_data(swagger):
74
76
responses = data .get ('responses' )
75
77
if responses :
76
78
filter = {}
77
- for status , res_data in responses .iteritems ():
79
+ for status , res_data in six .iteritems (responses ):
78
80
if isinstance (status , int ) or status .isdigit ():
79
81
filter [int (status )] = dict (
80
82
headers = res_data .get ('headers' ),
@@ -84,7 +86,7 @@ def build_data(swagger):
84
86
85
87
# scopes
86
88
for security in data .get ('security' , []):
87
- scopes [(endpoint , method )] = security .values ().pop ()
89
+ scopes [(endpoint , method )] = list ( security .values () ).pop ()
88
90
break
89
91
90
92
schemas = OrderedDict ([(schema_var_name (path ), swagger .get (path )) for path in swagger .definitions ])
@@ -106,7 +108,7 @@ def _process(self):
106
108
yield Schema (build_data (self .swagger ))
107
109
108
110
109
- def merge_default (schema , value ):
111
+ def merge_default (schema , value , get_first = True ):
110
112
# TODO: more types support
111
113
type_defaults = {
112
114
'integer' : 9573 ,
@@ -116,7 +118,10 @@ def merge_default(schema, value):
116
118
'boolean' : False
117
119
}
118
120
119
- return normalize (schema , value , type_defaults )[0 ]
121
+ results = normalize (schema , value , type_defaults )
122
+ if get_first :
123
+ return results [0 ]
124
+ return results
120
125
121
126
122
127
def build_default (schema ):
@@ -125,6 +130,8 @@ def build_default(schema):
125
130
126
131
def normalize (schema , data , required_defaults = None ):
127
132
133
+ import six
134
+
128
135
if required_defaults is None :
129
136
required_defaults = {}
130
137
errors = []
@@ -147,8 +154,8 @@ def has(self, key):
147
154
148
155
def keys (self ):
149
156
if isinstance (self .data , dict ):
150
- return self .data .keys ()
151
- return vars (self .data ).keys ()
157
+ return list ( self .data .keys () )
158
+ return list ( vars (self .data ).keys () )
152
159
153
160
def get_check (self , key , default = None ):
154
161
if isinstance (self .data , dict ):
@@ -169,13 +176,9 @@ def _normalize_dict(schema, data):
169
176
if not isinstance (data , DataWrapper ):
170
177
data = DataWrapper (data )
171
178
172
- for key , _schema in schema .get ('properties' , {}). iteritems ( ):
179
+ for key , _schema in six . iteritems ( schema .get ('properties' , {})):
173
180
# set default
174
181
type_ = _schema .get ('type' , 'object' )
175
- if ('default' not in _schema
176
- and key in schema .get ('required' , [])
177
- and type_ in required_defaults ):
178
- _schema ['default' ] = required_defaults [type_ ]
179
182
180
183
# get value
181
184
value , has_key = data .get_check (key )
@@ -184,8 +187,11 @@ def _normalize_dict(schema, data):
184
187
elif 'default' in _schema :
185
188
result [key ] = _schema ['default' ]
186
189
elif key in schema .get ('required' , []):
187
- errors .append (dict (name = 'property_missing' ,
188
- message = '`%s` is required' % key ))
190
+ if type_ in required_defaults :
191
+ result [key ] = required_defaults [type_ ]
192
+ else :
193
+ errors .append (dict (name = 'property_missing' ,
194
+ message = '`%s` is required' % key ))
189
195
190
196
for _schema in schema .get ('allOf' , []):
191
197
rs_component = _normalize (_schema , data )
0 commit comments