2
2
import re
3
3
4
4
from 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
11
6
12
7
from flask import current_app
13
8
from werkzeug .routing import parse_rule
18
13
from .utils import merge , not_none , not_none_sorted
19
14
from ._http import HTTPStatus
20
15
21
- try :
22
- from urllib .parse import quote
23
- except ImportError :
24
- from urllib import quote
16
+ from urllib .parse import quote
25
17
26
18
#: Maps Flask/Werkzeug rooting types to Swagger ones
27
19
PATH_TYPES = {
@@ -98,7 +90,7 @@ def _param_to_header(param):
98
90
99
91
100
92
def _clean_header (header ):
101
- if isinstance (header , string_types ):
93
+ if isinstance (header , str ):
102
94
header = {'description' : header }
103
95
typedef = header .get ('type' , 'string' )
104
96
if isinstance (typedef , Hashable ) and typedef in PY_TYPES :
@@ -212,7 +204,7 @@ def as_dict(self):
212
204
'basePath' : basepath ,
213
205
'paths' : not_none_sorted (paths ),
214
206
'info' : infos ,
215
- 'produces' : list (iterkeys ( self .api .representations )),
207
+ 'produces' : list (self .api .representations . keys ( )),
216
208
'consumes' : ['application/json' ],
217
209
'securityDefinitions' : self .api .authorizations or None ,
218
210
'security' : self .security_requirements (self .api .security ) or None ,
@@ -233,7 +225,7 @@ def extract_tags(self, api):
233
225
tags = []
234
226
by_name = {}
235
227
for tag in api .tags :
236
- if isinstance (tag , string_types ):
228
+ if isinstance (tag , str ):
237
229
tag = {'name' : tag }
238
230
elif isinstance (tag , (list , tuple )):
239
231
tag = {'name' : tag [0 ], 'description' : tag [1 ]}
@@ -296,7 +288,7 @@ def extract_resource_doc(self, resource, url, route_doc=None):
296
288
method_doc ['docstring' ] = parse_docstring (method_impl )
297
289
method_params = self .expected_params (method_doc )
298
290
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 )
300
292
method_doc ['params' ] = merge (inherited_params , method_params )
301
293
for name , param in method_doc ['params' ].items ():
302
294
key = (name , param .get ('in' , 'query' ))
@@ -361,7 +353,7 @@ def expected_params(self, doc):
361
353
362
354
def register_errors (self ):
363
355
responses = {}
364
- for exception , handler in iteritems ( self .api .error_handlers ):
356
+ for exception , handler in self .api .error_handlers . items ( ):
365
357
doc = parse_docstring (handler )
366
358
response = {
367
359
'description' : doc ['summary' ]
@@ -423,7 +415,7 @@ def vendor_fields(self, doc, method):
423
415
'''
424
416
return dict (
425
417
(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 ( )
427
419
)
428
420
429
421
def description_for (self , doc , method ):
@@ -444,7 +436,7 @@ def operation_id_for(self, doc, method):
444
436
445
437
def parameters_for (self , doc ):
446
438
params = []
447
- for name , param in iteritems ( doc ['params' ]):
439
+ for name , param in doc ['params' ]. items ( ):
448
440
param ['name' ] = name
449
441
if 'type' not in param and 'schema' not in param :
450
442
param ['type' ] = 'string'
@@ -473,7 +465,7 @@ def parameters_for(self, doc):
473
465
'format' : 'mask' ,
474
466
'description' : 'An optional fields mask' ,
475
467
}
476
- if isinstance (mask , string_types ):
468
+ if isinstance (mask , str ):
477
469
param ['default' ] = mask
478
470
params .append (param )
479
471
@@ -485,9 +477,9 @@ def responses_for(self, doc, method):
485
477
486
478
for d in doc , doc [method ]:
487
479
if 'responses' in d :
488
- for code , response in iteritems ( d ['responses' ]):
480
+ for code , response in d ['responses' ]. items ( ):
489
481
code = str (code )
490
- if isinstance (response , string_types ):
482
+ if isinstance (response , str ):
491
483
description = response
492
484
model = None
493
485
kwargs = {}
@@ -517,8 +509,8 @@ def responses_for(self, doc, method):
517
509
responses [code ]['schema' ] = self .serialize_schema (d ['model' ])
518
510
519
511
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 ( ):
522
514
error_responses = getattr (handler , '__apidoc__' , {}).get ('responses' , {})
523
515
code = str (list (error_responses .keys ())[0 ]) if error_responses else None
524
516
if code and exception .__name__ == name :
@@ -535,17 +527,17 @@ def process_headers(self, response, doc, method=None, headers=None):
535
527
response ['headers' ] = dict (
536
528
(k , _clean_header (v )) for k , v
537
529
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 ( )
541
533
)
542
534
)
543
535
return response
544
536
545
537
def serialize_definitions (self ):
546
538
return dict (
547
539
(name , model .__schema__ )
548
- for name , model in iteritems ( self ._registered_models )
540
+ for name , model in self ._registered_models . items ( )
549
541
)
550
542
551
543
def serialize_schema (self , model ):
@@ -560,7 +552,7 @@ def serialize_schema(self, model):
560
552
self .register_model (model )
561
553
return ref (model )
562
554
563
- elif isinstance (model , string_types ):
555
+ elif isinstance (model , str ):
564
556
self .register_model (model )
565
557
return ref (model )
566
558
@@ -585,13 +577,13 @@ def register_model(self, model):
585
577
for parent in specs .__parents__ :
586
578
self .register_model (parent )
587
579
if isinstance (specs , Model ):
588
- for field in itervalues ( specs ):
580
+ for field in specs . values ( ):
589
581
self .register_field (field )
590
582
return ref (model )
591
583
592
584
def register_field (self , field ):
593
585
if isinstance (field , fields .Polymorph ):
594
- for model in itervalues ( field .mapping ):
586
+ for model in field .mapping . values ( ):
595
587
self .register_model (model )
596
588
elif isinstance (field , fields .Nested ):
597
589
self .register_model (field .nested )
@@ -620,12 +612,12 @@ def security_requirements(self, value):
620
612
return []
621
613
622
614
def security_requirement (self , value ):
623
- if isinstance (value , (string_types )):
615
+ if isinstance (value , (str )):
624
616
return {value : []}
625
617
elif isinstance (value , dict ):
626
618
return dict (
627
619
(k , v if isinstance (v , (list , tuple )) else [v ])
628
- for k , v in iteritems ( value )
620
+ for k , v in value . items ( )
629
621
)
630
622
else :
631
623
return None
0 commit comments