1
1
# -*- coding: utf-8 -*-
2
- from __future__ import unicode_literals , absolute_import
3
-
4
2
import itertools
5
3
import re
6
4
7
5
from inspect import isclass , getdoc
8
6
from collections import OrderedDict
9
7
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
16
9
17
10
from flask import current_app
18
11
22
15
from .utils import merge , not_none , not_none_sorted
23
16
from ._http import HTTPStatus
24
17
25
- try :
26
- from urllib .parse import quote
27
- except ImportError :
28
- from urllib import quote
18
+ from urllib .parse import quote
29
19
30
20
#: Maps Flask/Werkzeug rooting types to Swagger ones
31
21
PATH_TYPES = {
@@ -147,7 +137,7 @@ def _param_to_header(param):
147
137
148
138
149
139
def _clean_header (header ):
150
- if isinstance (header , string_types ):
140
+ if isinstance (header , str ):
151
141
header = {"description" : header }
152
142
typedef = header .get ("type" , "string" )
153
143
if isinstance (typedef , Hashable ) and typedef in PY_TYPES :
@@ -306,7 +296,7 @@ def as_dict(self):
306
296
"basePath" : basepath ,
307
297
"paths" : not_none_sorted (paths ),
308
298
"info" : infos ,
309
- "produces" : list (iterkeys ( self .api .representations )),
299
+ "produces" : list (self .api .representations . keys ( )),
310
300
"consumes" : ["application/json" ],
311
301
"securityDefinitions" : self .api .authorizations or None ,
312
302
"security" : self .security_requirements (self .api .security ) or None ,
@@ -327,7 +317,7 @@ def extract_tags(self, api):
327
317
tags = []
328
318
by_name = {}
329
319
for tag in api .tags :
330
- if isinstance (tag , string_types ):
320
+ if isinstance (tag , str ):
331
321
tag = {"name" : tag }
332
322
elif isinstance (tag , (list , tuple )):
333
323
tag = {"name" : tag [0 ], "description" : tag [1 ]}
@@ -389,7 +379,7 @@ def extract_resource_doc(self, resource, url, route_doc=None):
389
379
method_params = self .expected_params (method_doc )
390
380
method_params = merge (method_params , method_doc .get ("params" , {}))
391
381
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
393
383
)
394
384
method_doc ["params" ] = merge (inherited_params , method_params )
395
385
for name , param in method_doc ["params" ].items ():
@@ -469,7 +459,7 @@ def expected_params(self, doc):
469
459
470
460
def register_errors (self ):
471
461
responses = {}
472
- for exception , handler in iteritems ( self .api .error_handlers ):
462
+ for exception , handler in self .api .error_handlers . items ( ):
473
463
doc = parse_docstring (handler )
474
464
response = {"description" : doc ["summary" ]}
475
465
apidoc = getattr (handler , "__apidoc__" , {})
@@ -530,7 +520,7 @@ def vendor_fields(self, doc, method):
530
520
"""
531
521
return dict (
532
522
(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 ( )
534
524
)
535
525
536
526
def description_for (self , doc , method ):
@@ -555,7 +545,7 @@ def operation_id_for(self, doc, method):
555
545
556
546
def parameters_for (self , doc ):
557
547
params = []
558
- for name , param in iteritems ( doc ["params" ]):
548
+ for name , param in doc ["params" ]. items ( ):
559
549
param ["name" ] = name
560
550
if "type" not in param and "schema" not in param :
561
551
param ["type" ] = "string"
@@ -584,7 +574,7 @@ def parameters_for(self, doc):
584
574
"format" : "mask" ,
585
575
"description" : "An optional fields mask" ,
586
576
}
587
- if isinstance (mask , string_types ):
577
+ if isinstance (mask , str ):
588
578
param ["default" ] = mask
589
579
params .append (param )
590
580
@@ -596,9 +586,9 @@ def responses_for(self, doc, method):
596
586
597
587
for d in doc , doc [method ]:
598
588
if "responses" in d :
599
- for code , response in iteritems ( d ["responses" ]):
589
+ for code , response in d ["responses" ]. items ( ):
600
590
code = str (code )
601
- if isinstance (response , string_types ):
591
+ if isinstance (response , str ):
602
592
description = response
603
593
model = None
604
594
kwargs = {}
@@ -632,8 +622,8 @@ def responses_for(self, doc, method):
632
622
responses [code ]["schema" ] = self .serialize_schema (d ["model" ])
633
623
634
624
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 ( ):
637
627
error_responses = getattr (handler , "__apidoc__" , {}).get (
638
628
"responses" , {}
639
629
)
@@ -658,17 +648,16 @@ def process_headers(self, response, doc, method=None, headers=None):
658
648
response ["headers" ] = dict (
659
649
(k , _clean_header (v ))
660
650
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 ( ),
664
654
)
665
655
)
666
656
return response
667
657
668
658
def serialize_definitions (self ):
669
659
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 ()
672
661
)
673
662
674
663
def serialize_schema (self , model ):
@@ -683,7 +672,7 @@ def serialize_schema(self, model):
683
672
self .register_model (model )
684
673
return ref (model )
685
674
686
- elif isinstance (model , string_types ):
675
+ elif isinstance (model , str ):
687
676
self .register_model (model )
688
677
return ref (model )
689
678
@@ -710,13 +699,13 @@ def register_model(self, model):
710
699
for parent in specs .__parents__ :
711
700
self .register_model (parent )
712
701
if isinstance (specs , (Model , OrderedModel )):
713
- for field in itervalues ( specs ):
702
+ for field in specs . values ( ):
714
703
self .register_field (field )
715
704
return ref (model )
716
705
717
706
def register_field (self , field ):
718
707
if isinstance (field , fields .Polymorph ):
719
- for model in itervalues ( field .mapping ):
708
+ for model in field .mapping . values ( ):
720
709
self .register_model (model )
721
710
elif isinstance (field , fields .Nested ):
722
711
self .register_model (field .nested )
@@ -745,12 +734,12 @@ def security_requirements(self, value):
745
734
return []
746
735
747
736
def security_requirement (self , value ):
748
- if isinstance (value , (string_types )):
737
+ if isinstance (value , (str )):
749
738
return {value : []}
750
739
elif isinstance (value , dict ):
751
740
return dict (
752
741
(k , v if isinstance (v , (list , tuple )) else [v ])
753
- for k , v in iteritems ( value )
742
+ for k , v in value . items ( )
754
743
)
755
744
else :
756
745
return None
0 commit comments