Skip to content

Commit 852eca0

Browse files
authored
Remove six (Python 2 support) (#1102)
* remove some six uses (Py2) * remove more six usages * no need for "object" in Py3 * remove remaining six uses
1 parent e3f0279 commit 852eca0

File tree

14 files changed

+33
-65
lines changed

14 files changed

+33
-65
lines changed

connexion/__init__.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,34 @@
1515
sys.modules[full_name] = sys.modules[compat.__name__]
1616

1717

18-
def not_installed_error(): # pragma: no cover
19-
import six
18+
def not_installed_error(exc): # pragma: no cover
2019
import functools
2120

22-
def _required_lib(exec_info, *args, **kwargs):
23-
six.reraise(*exec_info)
21+
def _required_lib(exc, *args, **kwargs):
22+
raise exc
2423

25-
return functools.partial(_required_lib, sys.exc_info())
24+
return functools.partial(_required_lib, exc)
2625

2726

2827
try:
2928
from .apis.flask_api import FlaskApi, context # NOQA
3029
from .apps.flask_app import FlaskApp
3130
from flask import request # NOQA
32-
except ImportError: # pragma: no cover
33-
_flask_not_installed_error = not_installed_error()
31+
except ImportError as e: # pragma: no cover
32+
_flask_not_installed_error = not_installed_error(e)
3433
FlaskApi = _flask_not_installed_error
3534
FlaskApp = _flask_not_installed_error
3635

3736
App = FlaskApp
3837
Api = FlaskApi
3938

40-
if sys.version_info[0] >= 3: # pragma: no cover
41-
try:
42-
from .apis.aiohttp_api import AioHttpApi
43-
from .apps.aiohttp_app import AioHttpApp
44-
except ImportError: # pragma: no cover
45-
_aiohttp_not_installed_error = not_installed_error()
46-
AioHttpApi = _aiohttp_not_installed_error
47-
AioHttpApp = _aiohttp_not_installed_error
39+
try:
40+
from .apis.aiohttp_api import AioHttpApi
41+
from .apps.aiohttp_app import AioHttpApp
42+
except ImportError as e: # pragma: no cover
43+
_aiohttp_not_installed_error = not_installed_error(e)
44+
AioHttpApi = _aiohttp_not_installed_error
45+
AioHttpApp = _aiohttp_not_installed_error
4846

4947
# This version is replaced during release process.
5048
__version__ = '2018.0.dev1'

connexion/apis/abstract.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import warnings
66
from enum import Enum
77

8-
import six
9-
108
from ..decorators.produces import NoContent
119
from ..exceptions import ResolverError
1210
from ..http_facts import METHODS
@@ -31,8 +29,7 @@ def __init__(cls, name, bases, attrs):
3129
cls._set_jsonifier()
3230

3331

34-
@six.add_metaclass(AbstractAPIMeta)
35-
class AbstractAPI(object):
32+
class AbstractAPI(metaclass=AbstractAPIMeta):
3633
"""
3734
Defines an abstract interface for a Swagger API
3835
"""
@@ -230,7 +227,8 @@ def _handle_add_operation_error(self, path, method, exc_info):
230227
logger.exception(error_msg)
231228
else:
232229
logger.error(error_msg)
233-
six.reraise(*exc_info)
230+
_type, value, traceback = exc_info
231+
raise value.with_traceback(traceback)
234232

235233
@classmethod
236234
@abc.abstractmethod

connexion/apis/flask_api.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import warnings
33

44
import flask
5-
import six
65
import werkzeug.exceptions
76
from connexion.apis import flask_utils
87
from connexion.apis.abstract import AbstractAPI
@@ -182,7 +181,7 @@ def _build_response(cls, mimetype, content_type=None, headers=None, status_code=
182181
'response': data,
183182
'status': status_code
184183
}
185-
kwargs = {k: v for k, v in six.iteritems(kwargs) if v is not None}
184+
kwargs = {k: v for k, v in kwargs.items() if v is not None}
186185
return flask.current_app.response_class(**kwargs) # type: flask.Response
187186

188187
@classmethod

connexion/apps/abstract.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@
22
import logging
33
import pathlib
44

5-
import six
6-
75
from ..options import ConnexionOptions
86
from ..resolver import Resolver
97

108
logger = logging.getLogger('connexion.app')
119

1210

13-
@six.add_metaclass(abc.ABCMeta)
14-
class AbstractApp(object):
11+
class AbstractApp(metaclass=abc.ABCMeta):
1512
def __init__(self, import_name, api_cls, port=None, specification_dir='',
1613
host=None, server=None, arguments=None, auth_all_paths=False, debug=None,
1714
resolver=None, options=None, skip_error_handlers=False):

connexion/decorators/parameter.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import re
55

66
import inflection
7-
import six
87

98
from ..http_facts import FORM_CONTENT_TYPES
109
from ..lifecycle import ConnexionRequest # NOQA
@@ -33,15 +32,11 @@ def inspect_function_arguments(function): # pragma: no cover
3332
:type function: Callable
3433
:rtype: tuple[list[str], bool]
3534
"""
36-
if six.PY3:
37-
parameters = inspect.signature(function).parameters
38-
bound_arguments = [name for name, p in parameters.items()
39-
if p.kind not in (p.VAR_POSITIONAL, p.VAR_KEYWORD)]
40-
has_kwargs = any(p.kind == p.VAR_KEYWORD for p in parameters.values())
41-
return list(bound_arguments), has_kwargs
42-
else:
43-
argspec = inspect.getargspec(function)
44-
return argspec.args, bool(argspec.keywords)
35+
parameters = inspect.signature(function).parameters
36+
bound_arguments = [name for name, p in parameters.items()
37+
if p.kind not in (p.VAR_POSITIONAL, p.VAR_KEYWORD)]
38+
has_kwargs = any(p.kind == p.VAR_KEYWORD for p in parameters.values())
39+
return list(bound_arguments), has_kwargs
4540

4641

4742
def snake_and_shadow(name):

connexion/decorators/security.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import requests
99
from connexion.utils import get_function_from_name
10-
from six.moves import http_cookies
10+
import http.cookies
1111

1212
from ..exceptions import (ConnexionException, OAuthProblem,
1313
OAuthResponseProblem, OAuthScopeProblem)
@@ -240,7 +240,7 @@ def get_cookie_value(cookies, name):
240240
:param cookies: str: cookies raw data
241241
:param name: str: cookies key
242242
'''
243-
cookie_parser = http_cookies.SimpleCookie()
243+
cookie_parser = http.cookies.SimpleCookie()
244244
cookie_parser.load(str(cookies))
245245
try:
246246
return cookie_parser[name].value

connexion/decorators/uri_parsing.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import json
77
from .. import utils
88

9-
import six
10-
119
from ..utils import create_empty_dict_from_list
1210
from .decorator import BaseDecorator
1311

@@ -21,8 +19,7 @@
2119
}
2220

2321

24-
@six.add_metaclass(abc.ABCMeta)
25-
class AbstractURIParser(BaseDecorator):
22+
class AbstractURIParser(BaseDecorator, metaclass=abc.ABCMeta):
2623
parsable_parameters = ["query", "path"]
2724

2825
def __init__(self, param_defns, body_defn):

connexion/decorators/validation.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import sys
66

77
import pkg_resources
8-
import six
98
from jsonschema import Draft4Validator, ValidationError, draft4_format_checker
109
from jsonschema.validators import extend
1110
from werkzeug.datastructures import FileStorage
@@ -230,7 +229,7 @@ def validate_schema(self, data, url):
230229
logger.error("{url} validation error: {error}".format(url=url,
231230
error=exception),
232231
extra={'validator': 'response'})
233-
six.reraise(*sys.exc_info())
232+
raise exception
234233

235234
return None
236235

connexion/jsonifier.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
import json
33
import uuid
44

5-
import six
6-
75

86
class JSONEncoder(json.JSONEncoder):
97
def default(self, o):
@@ -41,7 +39,7 @@ def dumps(self, data, **kwargs):
4139
""" Central point where JSON serialization happens inside
4240
Connexion.
4341
"""
44-
for k, v in six.iteritems(self.dumps_args):
42+
for k, v in self.dumps_args.items():
4543
kwargs.setdefault(k, v)
4644
return self.json.dumps(data, **kwargs) + '\n'
4745

connexion/operations/abstract.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import abc
22
import logging
33

4-
import six
54
from connexion.operations.secure import SecureOperation
65

76
from ..decorators.metrics import UWSGIMetricsCollector
@@ -22,8 +21,7 @@
2221
}
2322

2423

25-
@six.add_metaclass(abc.ABCMeta)
26-
class AbstractOperation(SecureOperation):
24+
class AbstractOperation(SecureOperation, metaclass=abc.ABCMeta):
2725

2826
"""
2927
An API routes requests to an Operation by a (path, method) pair.

0 commit comments

Comments
 (0)