11# -*- coding: utf-8 -*-
2- from __future__ import unicode_literals , absolute_import
3-
42import itertools
53import re
64
75from inspect import isclass , getdoc
86from collections import OrderedDict
97
10- try :
11- from collections .abc import Hashable
12- except ImportError :
13- # TODO Remove this to drop Python2 support
14- from collections import Hashable
15- from six import string_types , itervalues , iteritems , iterkeys
8+ from collections .abc import Hashable
169
1710from flask import current_app
1811
2215from .utils import merge , not_none , not_none_sorted
2316from ._http import HTTPStatus
2417
25- try :
26- from urllib .parse import quote
27- except ImportError :
28- from urllib import quote
18+ from urllib .parse import quote
2919
3020#: Maps Flask/Werkzeug rooting types to Swagger ones
3121PATH_TYPES = {
@@ -147,7 +137,7 @@ def _param_to_header(param):
147137
148138
149139def _clean_header (header ):
150- if isinstance (header , string_types ):
140+ if isinstance (header , str ):
151141 header = {"description" : header }
152142 typedef = header .get ("type" , "string" )
153143 if isinstance (typedef , Hashable ) and typedef in PY_TYPES :
@@ -306,7 +296,7 @@ def as_dict(self):
306296 "basePath" : basepath ,
307297 "paths" : not_none_sorted (paths ),
308298 "info" : infos ,
309- "produces" : list (iterkeys ( self .api .representations )),
299+ "produces" : list (self .api .representations . keys ( )),
310300 "consumes" : ["application/json" ],
311301 "securityDefinitions" : self .api .authorizations or None ,
312302 "security" : self .security_requirements (self .api .security ) or None ,
@@ -327,7 +317,7 @@ def extract_tags(self, api):
327317 tags = []
328318 by_name = {}
329319 for tag in api .tags :
330- if isinstance (tag , string_types ):
320+ if isinstance (tag , str ):
331321 tag = {"name" : tag }
332322 elif isinstance (tag , (list , tuple )):
333323 tag = {"name" : tag [0 ], "description" : tag [1 ]}
@@ -389,7 +379,7 @@ def extract_resource_doc(self, resource, url, route_doc=None):
389379 method_params = self .expected_params (method_doc )
390380 method_params = merge (method_params , method_doc .get ("params" , {}))
391381 inherited_params = OrderedDict (
392- (k , v ) for k , v in iteritems ( params ) if k in method_params
382+ (k , v ) for k , v in params . items ( ) if k in method_params
393383 )
394384 method_doc ["params" ] = merge (inherited_params , method_params )
395385 for name , param in method_doc ["params" ].items ():
@@ -469,7 +459,7 @@ def expected_params(self, doc):
469459
470460 def register_errors (self ):
471461 responses = {}
472- for exception , handler in iteritems ( self .api .error_handlers ):
462+ for exception , handler in self .api .error_handlers . items ( ):
473463 doc = parse_docstring (handler )
474464 response = {"description" : doc ["summary" ]}
475465 apidoc = getattr (handler , "__apidoc__" , {})
@@ -530,7 +520,7 @@ def vendor_fields(self, doc, method):
530520 """
531521 return dict (
532522 (k if k .startswith ("x-" ) else "x-{0}" .format (k ), v )
533- for k , v in iteritems ( doc [method ].get ("vendor" , {}))
523+ for k , v in doc [method ].get ("vendor" , {}). items ( )
534524 )
535525
536526 def description_for (self , doc , method ):
@@ -555,7 +545,7 @@ def operation_id_for(self, doc, method):
555545
556546 def parameters_for (self , doc ):
557547 params = []
558- for name , param in iteritems ( doc ["params" ]):
548+ for name , param in doc ["params" ]. items ( ):
559549 param ["name" ] = name
560550 if "type" not in param and "schema" not in param :
561551 param ["type" ] = "string"
@@ -584,7 +574,7 @@ def parameters_for(self, doc):
584574 "format" : "mask" ,
585575 "description" : "An optional fields mask" ,
586576 }
587- if isinstance (mask , string_types ):
577+ if isinstance (mask , str ):
588578 param ["default" ] = mask
589579 params .append (param )
590580
@@ -596,9 +586,9 @@ def responses_for(self, doc, method):
596586
597587 for d in doc , doc [method ]:
598588 if "responses" in d :
599- for code , response in iteritems ( d ["responses" ]):
589+ for code , response in d ["responses" ]. items ( ):
600590 code = str (code )
601- if isinstance (response , string_types ):
591+ if isinstance (response , str ):
602592 description = response
603593 model = None
604594 kwargs = {}
@@ -632,8 +622,8 @@ def responses_for(self, doc, method):
632622 responses [code ]["schema" ] = self .serialize_schema (d ["model" ])
633623
634624 if "docstring" in d :
635- for name , description in iteritems ( d ["docstring" ]["raises" ]):
636- for exception , handler in iteritems ( self .api .error_handlers ):
625+ for name , description in d ["docstring" ]["raises" ]. items ( ):
626+ for exception , handler in self .api .error_handlers . items ( ):
637627 error_responses = getattr (handler , "__apidoc__" , {}).get (
638628 "responses" , {}
639629 )
@@ -658,17 +648,16 @@ def process_headers(self, response, doc, method=None, headers=None):
658648 response ["headers" ] = dict (
659649 (k , _clean_header (v ))
660650 for k , v in itertools .chain (
661- iteritems ( doc .get ("headers" , {})),
662- iteritems ( method_doc .get ("headers" , {})),
663- iteritems (headers or {}),
651+ doc .get ("headers" , {}). items ( ),
652+ method_doc .get ("headers" , {}). items ( ),
653+ (headers or {}). items ( ),
664654 )
665655 )
666656 return response
667657
668658 def serialize_definitions (self ):
669659 return dict (
670- (name , model .__schema__ )
671- for name , model in iteritems (self ._registered_models )
660+ (name , model .__schema__ ) for name , model in self ._registered_models .items ()
672661 )
673662
674663 def serialize_schema (self , model ):
@@ -683,7 +672,7 @@ def serialize_schema(self, model):
683672 self .register_model (model )
684673 return ref (model )
685674
686- elif isinstance (model , string_types ):
675+ elif isinstance (model , str ):
687676 self .register_model (model )
688677 return ref (model )
689678
@@ -710,13 +699,13 @@ def register_model(self, model):
710699 for parent in specs .__parents__ :
711700 self .register_model (parent )
712701 if isinstance (specs , (Model , OrderedModel )):
713- for field in itervalues ( specs ):
702+ for field in specs . values ( ):
714703 self .register_field (field )
715704 return ref (model )
716705
717706 def register_field (self , field ):
718707 if isinstance (field , fields .Polymorph ):
719- for model in itervalues ( field .mapping ):
708+ for model in field .mapping . values ( ):
720709 self .register_model (model )
721710 elif isinstance (field , fields .Nested ):
722711 self .register_model (field .nested )
@@ -745,12 +734,12 @@ def security_requirements(self, value):
745734 return []
746735
747736 def security_requirement (self , value ):
748- if isinstance (value , (string_types )):
737+ if isinstance (value , (str )):
749738 return {value : []}
750739 elif isinstance (value , dict ):
751740 return dict (
752741 (k , v if isinstance (v , (list , tuple )) else [v ])
753- for k , v in iteritems ( value )
742+ for k , v in value . items ( )
754743 )
755744 else :
756745 return None
0 commit comments