Skip to content

Commit a4223fd

Browse files
Pooglesziirish
authored andcommitted
Partial: Remove six.
1 parent e7e669f commit a4223fd

File tree

16 files changed

+83
-117
lines changed

16 files changed

+83
-117
lines changed

flask_restplus/postman.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
from time import time
22
from uuid import uuid5, NAMESPACE_URL
33

4-
from six import iteritems
5-
from six.moves.urllib.parse import urlencode
4+
from urllib.parse import urlencode
65

76

87
def clean(data):
98
'''Remove all keys where value is None'''
10-
return dict((k, v) for k, v in iteritems(data) if v is not None)
9+
return dict((k, v) for k, v in data.items() if v is not None)
1110

1211

1312
DEFAULT_VARS = {
@@ -52,15 +51,15 @@ def headers(self):
5251

5352
# Add security headers if needed (global then local)
5453
for security in self.collection.api.__schema__.get('security', []):
55-
for key, header in iteritems(self.collection.apikeys):
54+
for key, header in self.collection.apikeys.items():
5655
if key in security:
5756
headers[header] = ''
5857
for security in self.operation.get('security', []):
59-
for key, header in iteritems(self.collection.apikeys):
58+
for key, header in self.collection.apikeys.items():
6059
if key in security:
6160
headers[header] = ''
6261

63-
lines = [':'.join(line) for line in iteritems(headers)]
62+
lines = [':'.join(line) for line in headers.items()]
6463
return '\n'.join(lines)
6564

6665
@property
@@ -95,7 +94,7 @@ def process_url(self, urlvars=False):
9594
params.update(dict((p['name'], p) for p in self.operation.get('parameters', [])))
9695
if not params:
9796
return url, None
98-
for name, param in iteritems(params):
97+
for name, param in params.items():
9998
if param['in'] == 'path':
10099
url = url.replace('{%s}' % name, ':%s' % name)
101100
path_vars[name] = DEFAULT_VARS.get(param['type'], '')
@@ -157,10 +156,10 @@ def requests(self):
157156
'summary': 'The API Swagger specifications as JSON',
158157
})
159158
# Then iter over API paths and methods
160-
for path, operations in iteritems(self.api.__schema__['paths']):
159+
for path, operations in self.api.__schema__['paths'].items():
161160
path_params = operations.get('parameters', [])
162161

163-
for method, operation in iteritems(operations):
162+
for method, operation in operations.items():
164163
if method != 'parameters':
165164
yield Request(self, path, path_params, method, operation)
166165

@@ -173,7 +172,7 @@ def folders(self):
173172
def apikeys(self):
174173
return dict(
175174
(name, secdef['name'])
176-
for name, secdef in iteritems(self.api.__schema__.get('securityDefinitions'))
175+
for name, secdef in self.api.__schema__.get('securityDefinitions').items()
177176
if secdef.get('in') == 'header' and secdef.get('type') == 'apiKey'
178177
)
179178

flask_restplus/swagger.py

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,7 @@
22
import re
33

44
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
116

127
from flask import current_app
138
from werkzeug.routing import parse_rule
@@ -18,10 +13,7 @@
1813
from .utils import merge, not_none, not_none_sorted
1914
from ._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
2719
PATH_TYPES = {
@@ -98,7 +90,7 @@ def _param_to_header(param):
9890

9991

10092
def _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

flask_restx/api.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import logging
55
import operator
66
import re
7-
import six
87
import sys
98

109
from collections import OrderedDict
@@ -475,7 +474,7 @@ def add_namespace(self, ns, path=None):
475474
urls = self.ns_urls(ns, r.urls)
476475
self.register_resource(ns, r.resource, *urls, **r.kwargs)
477476
# Register models
478-
for name, definition in six.iteritems(ns.models):
477+
for name, definition in ns.models.items():
479478
self.models[name] = definition
480479
if not self.blueprint and self.app is not None:
481480
self._configure_namespace_logger(self.app, ns)
@@ -547,7 +546,7 @@ def _own_and_child_error_handlers(self):
547546
rv = {}
548547
rv.update(self.error_handlers)
549548
for ns in self.namespaces:
550-
for exception, handler in six.iteritems(ns.error_handlers):
549+
for exception, handler in ns.error_handlers.items():
551550
rv[exception] = handler
552551
return rv
553552

@@ -667,7 +666,7 @@ def handle_error(self, e):
667666

668667
headers = Headers()
669668

670-
for typecheck, handler in six.iteritems(self._own_and_child_error_handlers):
669+
for typecheck, handler in self._own_and_child_error_handlers.items():
671670
if isinstance(e, typecheck):
672671
result = handler(e)
673672
default_data, code, headers = unpack(

flask_restx/fields.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
from decimal import Decimal, ROUND_HALF_EVEN
88
from email.utils import formatdate
99

10-
from six import iteritems, itervalues, text_type, string_types
11-
from six.moves.urllib.parse import urlparse, urlunparse
10+
from urllib.parse import urlparse, urlunparse
1211

1312
from flask import url_for, request
1413
from werkzeug.utils import cached_property
@@ -56,7 +55,7 @@ class MarshallingError(RestError):
5655
def __init__(self, underlying_exception):
5756
# just put the contextual representation of the error to hint on what
5857
# went wrong without exposing internals
59-
super(MarshallingError, self).__init__(text_type(underlying_exception))
58+
super(MarshallingError, self).__init__(str(underlying_exception))
6059

6160

6261
def is_indexable_but_not_string(obj):
@@ -415,9 +414,7 @@ def schema(self):
415414

416415
class String(StringMixin, Raw):
417416
"""
418-
Marshal a value as a string. Uses ``six.text_type`` so values will
419-
be converted to :class:`unicode` in python2 and :class:`str` in
420-
python3.
417+
Marshal a value as a string.
421418
"""
422419

423420
def __init__(self, *args, **kwargs):
@@ -428,7 +425,7 @@ def __init__(self, *args, **kwargs):
428425

429426
def format(self, value):
430427
try:
431-
return text_type(value)
428+
return str(value)
432429
except ValueError as ve:
433430
raise MarshallingError(ve)
434431

@@ -482,7 +479,7 @@ class Arbitrary(NumberMixin, Raw):
482479
"""
483480

484481
def format(self, value):
485-
return text_type(Decimal(value))
482+
return str(Decimal(value))
486483

487484

488485
ZERO = Decimal()
@@ -501,7 +498,7 @@ def format(self, value):
501498
dvalue = Decimal(value)
502499
if not dvalue.is_normal() and dvalue != ZERO:
503500
raise MarshallingError("Invalid Fixed precision number.")
504-
return text_type(dvalue.quantize(self.precision, rounding=ROUND_HALF_EVEN))
501+
return str(dvalue.quantize(self.precision, rounding=ROUND_HALF_EVEN))
505502

506503

507504
class Boolean(Raw):
@@ -538,7 +535,7 @@ def __init__(self, dt_format="iso8601", **kwargs):
538535
def parse(self, value):
539536
if value is None:
540537
return None
541-
elif isinstance(value, string_types):
538+
elif isinstance(value, str):
542539
parser = (
543540
datetime_from_iso8601
544541
if self.dt_format == "iso8601"
@@ -610,7 +607,7 @@ def __init__(self, **kwargs):
610607
def parse(self, value):
611608
if value is None:
612609
return None
613-
elif isinstance(value, string_types):
610+
elif isinstance(value, str):
614611
return date_from_iso8601(value)
615612
elif isinstance(value, datetime):
616613
return value.date()
@@ -671,7 +668,7 @@ class FormattedString(StringMixin, Raw):
671668

672669
def __init__(self, src_str, **kwargs):
673670
super(FormattedString, self).__init__(**kwargs)
674-
self.src_str = text_type(src_str)
671+
self.src_str = str(src_str)
675672

676673
def output(self, key, obj, **kwargs):
677674
try:
@@ -721,7 +718,7 @@ class Polymorph(Nested):
721718

722719
def __init__(self, mapping, required=False, **kwargs):
723720
self.mapping = mapping
724-
parent = self.resolve_ancestor(list(itervalues(mapping)))
721+
parent = self.resolve_ancestor(list(mapping.values()))
725722
super(Polymorph, self).__init__(parent, allow_null=not required, **kwargs)
726723

727724
def output(self, key, obj, ordered=False, **kwargs):
@@ -738,7 +735,7 @@ def output(self, key, obj, ordered=False, **kwargs):
738735
raise ValueError("Polymorph field only accept class instances")
739736

740737
candidates = [
741-
fields for cls, fields in iteritems(self.mapping) if type(value) == cls
738+
fields for cls, fields in self.mapping.items() if type(value) == cls
742739
]
743740

744741
if len(candidates) <= 0:
@@ -811,7 +808,7 @@ def _flatten(self, obj):
811808
if obj == self._obj and self._flat is not None:
812809
return self._flat
813810
if isinstance(obj, dict):
814-
self._flat = [x for x in iteritems(obj)]
811+
self._flat = [x for x in obj.items()]
815812
else:
816813

817814
def __match_attributes(attribute):

0 commit comments

Comments
 (0)