22import re
33
44from inspect import isclass , getdoc
5- try :
6- from collections .abc import OrderedDict , Hashable
7- except ImportError :
8- # TODO Remove this to drop Python2 support
9- from collections import OrderedDict , Hashable
10- from six import string_types , itervalues , iteritems , iterkeys
5+ from collections import OrderedDict , Hashable
116
127from flask import current_app
138from werkzeug .routing import parse_rule
1813from .utils import merge , not_none , not_none_sorted
1914from ._http import HTTPStatus
2015
21- try :
22- from urllib .parse import quote
23- except ImportError :
24- from urllib import quote
16+ from urllib .parse import quote
2517
2618#: Maps Flask/Werkzeug rooting types to Swagger ones
2719PATH_TYPES = {
@@ -98,7 +90,7 @@ def _param_to_header(param):
9890
9991
10092def _clean_header (header ):
101- if isinstance (header , string_types ):
93+ if isinstance (header , str ):
10294 header = {'description' : header }
10395 typedef = header .get ('type' , 'string' )
10496 if isinstance (typedef , Hashable ) and typedef in PY_TYPES :
@@ -212,7 +204,7 @@ def as_dict(self):
212204 'basePath' : basepath ,
213205 'paths' : not_none_sorted (paths ),
214206 'info' : infos ,
215- 'produces' : list (iterkeys ( self .api .representations )),
207+ 'produces' : list (self .api .representations . keys ( )),
216208 'consumes' : ['application/json' ],
217209 'securityDefinitions' : self .api .authorizations or None ,
218210 'security' : self .security_requirements (self .api .security ) or None ,
@@ -233,7 +225,7 @@ def extract_tags(self, api):
233225 tags = []
234226 by_name = {}
235227 for tag in api .tags :
236- if isinstance (tag , string_types ):
228+ if isinstance (tag , str ):
237229 tag = {'name' : tag }
238230 elif isinstance (tag , (list , tuple )):
239231 tag = {'name' : tag [0 ], 'description' : tag [1 ]}
@@ -296,7 +288,7 @@ def extract_resource_doc(self, resource, url, route_doc=None):
296288 method_doc ['docstring' ] = parse_docstring (method_impl )
297289 method_params = self .expected_params (method_doc )
298290 method_params = merge (method_params , method_doc .get ('params' , {}))
299- inherited_params = OrderedDict ((k , v ) for k , v in iteritems ( params ) if k in method_params )
291+ inherited_params = OrderedDict ((k , v ) for k , v in params . items ( ) if k in method_params )
300292 method_doc ['params' ] = merge (inherited_params , method_params )
301293 for name , param in method_doc ['params' ].items ():
302294 key = (name , param .get ('in' , 'query' ))
@@ -361,7 +353,7 @@ def expected_params(self, doc):
361353
362354 def register_errors (self ):
363355 responses = {}
364- for exception , handler in iteritems ( self .api .error_handlers ):
356+ for exception , handler in self .api .error_handlers . items ( ):
365357 doc = parse_docstring (handler )
366358 response = {
367359 'description' : doc ['summary' ]
@@ -423,7 +415,7 @@ def vendor_fields(self, doc, method):
423415 '''
424416 return dict (
425417 (k if k .startswith ('x-' ) else 'x-{0}' .format (k ), v )
426- for k , v in iteritems ( doc [method ].get ('vendor' , {}))
418+ for k , v in doc [method ].get ('vendor' , {}). items ( )
427419 )
428420
429421 def description_for (self , doc , method ):
@@ -444,7 +436,7 @@ def operation_id_for(self, doc, method):
444436
445437 def parameters_for (self , doc ):
446438 params = []
447- for name , param in iteritems ( doc ['params' ]):
439+ for name , param in doc ['params' ]. items ( ):
448440 param ['name' ] = name
449441 if 'type' not in param and 'schema' not in param :
450442 param ['type' ] = 'string'
@@ -473,7 +465,7 @@ def parameters_for(self, doc):
473465 'format' : 'mask' ,
474466 'description' : 'An optional fields mask' ,
475467 }
476- if isinstance (mask , string_types ):
468+ if isinstance (mask , str ):
477469 param ['default' ] = mask
478470 params .append (param )
479471
@@ -485,9 +477,9 @@ def responses_for(self, doc, method):
485477
486478 for d in doc , doc [method ]:
487479 if 'responses' in d :
488- for code , response in iteritems ( d ['responses' ]):
480+ for code , response in d ['responses' ]. items ( ):
489481 code = str (code )
490- if isinstance (response , string_types ):
482+ if isinstance (response , str ):
491483 description = response
492484 model = None
493485 kwargs = {}
@@ -517,8 +509,8 @@ def responses_for(self, doc, method):
517509 responses [code ]['schema' ] = self .serialize_schema (d ['model' ])
518510
519511 if 'docstring' in d :
520- for name , description in iteritems ( d ['docstring' ]['raises' ]):
521- for exception , handler in iteritems ( self .api .error_handlers ):
512+ for name , description in d ['docstring' ]['raises' ]. items ( ):
513+ for exception , handler in self .api .error_handlers . items ( ):
522514 error_responses = getattr (handler , '__apidoc__' , {}).get ('responses' , {})
523515 code = str (list (error_responses .keys ())[0 ]) if error_responses else None
524516 if code and exception .__name__ == name :
@@ -535,17 +527,17 @@ def process_headers(self, response, doc, method=None, headers=None):
535527 response ['headers' ] = dict (
536528 (k , _clean_header (v )) for k , v
537529 in itertools .chain (
538- iteritems ( doc .get ('headers' , {})),
539- iteritems ( method_doc .get ('headers' , {})),
540- iteritems ( headers or {} )
530+ doc .get ('headers' , {}). items ( ),
531+ method_doc .get ('headers' , {}). items ( ),
532+ headers . items () if headers else dict (). items ( )
541533 )
542534 )
543535 return response
544536
545537 def serialize_definitions (self ):
546538 return dict (
547539 (name , model .__schema__ )
548- for name , model in iteritems ( self ._registered_models )
540+ for name , model in self ._registered_models . items ( )
549541 )
550542
551543 def serialize_schema (self , model ):
@@ -560,7 +552,7 @@ def serialize_schema(self, model):
560552 self .register_model (model )
561553 return ref (model )
562554
563- elif isinstance (model , string_types ):
555+ elif isinstance (model , str ):
564556 self .register_model (model )
565557 return ref (model )
566558
@@ -585,13 +577,13 @@ def register_model(self, model):
585577 for parent in specs .__parents__ :
586578 self .register_model (parent )
587579 if isinstance (specs , Model ):
588- for field in itervalues ( specs ):
580+ for field in specs . values ( ):
589581 self .register_field (field )
590582 return ref (model )
591583
592584 def register_field (self , field ):
593585 if isinstance (field , fields .Polymorph ):
594- for model in itervalues ( field .mapping ):
586+ for model in field .mapping . values ( ):
595587 self .register_model (model )
596588 elif isinstance (field , fields .Nested ):
597589 self .register_model (field .nested )
@@ -620,12 +612,12 @@ def security_requirements(self, value):
620612 return []
621613
622614 def security_requirement (self , value ):
623- if isinstance (value , (string_types )):
615+ if isinstance (value , (str )):
624616 return {value : []}
625617 elif isinstance (value , dict ):
626618 return dict (
627619 (k , v if isinstance (v , (list , tuple )) else [v ])
628- for k , v in iteritems ( value )
620+ for k , v in value . items ( )
629621 )
630622 else :
631623 return None
0 commit comments