Skip to content

Commit a65dbe7

Browse files
Ryu-CZTomáš Trvalpeter-doggart
authored
fix: BaseResponse import - replace wekzeug import __version__ by importlib (#573) (#575)
* fix: BaseResponse import - replace wekzeug old style import dunder version by importlib (#573) * add: import_werkzeug_response test * modify: changelog - note fix (#573) --------- Co-authored-by: Tomáš Trval <[email protected]> Co-authored-by: Peter Doggart <[email protected]>
1 parent b7d1ded commit a65dbe7

File tree

5 files changed

+27
-14
lines changed

5 files changed

+27
-14
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Bug Fixes
3434

3535
::
3636

37+
* Fixing werkzeug 3 deprecated version import. Import is replaced by new style version check with importlib (#573) [Ryu-CZ]
3738
* Fixing flask 3.0+ compatibility of `ModuleNotFoundError: No module named 'flask.scaffold'` Import error. (#567) [Ryu-CZ]
3839

3940

flask_restx/api.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,13 @@
2828
InternalServerError,
2929
)
3030

31-
from werkzeug import __version__ as werkzeug_version
32-
33-
if werkzeug_version.split(".")[0] >= "2":
34-
from werkzeug.wrappers import Response as BaseResponse
35-
else:
36-
from werkzeug.wrappers import BaseResponse
37-
3831
from . import apidoc
3932
from .mask import ParseError, MaskError
4033
from .namespace import Namespace
4134
from .postman import PostmanCollectionV1
4235
from .resource import Resource
4336
from .swagger import Swagger
44-
from .utils import default_id, camel_to_dash, unpack, import_check_view_func
37+
from .utils import default_id, camel_to_dash, unpack, import_check_view_func, BaseResponse
4538
from .representations import output_json
4639
from ._http import HTTPStatus
4740

flask_restx/resource.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
from flask import request
22
from flask.views import MethodView
3-
from werkzeug import __version__ as werkzeug_version
43

5-
if werkzeug_version.split(".")[0] >= "2":
6-
from werkzeug.wrappers import Response as BaseResponse
7-
else:
8-
from werkzeug.wrappers import BaseResponse
94

105
from .model import ModelBase
116

12-
from .utils import unpack
7+
from .utils import unpack, BaseResponse
138

149

1510
class Resource(MethodView):

flask_restx/utils.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,29 @@
1919
"not_none",
2020
"not_none_sorted",
2121
"unpack",
22+
"BaseResponse",
2223
"import_check_view_func",
2324
)
2425

2526

27+
def import_werkzeug_response():
28+
"""Resolve `werkzeug` `Response` class import because
29+
`BaseResponse` was renamed in version 2.* to `Response`"""
30+
import importlib.metadata
31+
32+
werkzeug_major = int(importlib.metadata.version("werkzeug").split(".")[0])
33+
if werkzeug_major < 2:
34+
from werkzeug.wrappers import BaseResponse
35+
36+
return BaseResponse
37+
38+
from werkzeug.wrappers import Response
39+
40+
return Response
41+
42+
43+
BaseResponse = import_werkzeug_response()
44+
2645
class FlaskCompatibilityWarning(DeprecationWarning):
2746
pass
2847

tests/test_utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ def test_recursions_with_empty(self):
4747
assert utils.merge(a, b) == b
4848

4949

50+
class UnpackImportResponse(object):
51+
def test_import_werkzeug_response(self):
52+
assert utils.import_werkzeug_response() != None
53+
54+
5055
class CamelToDashTestCase(object):
5156
def test_no_transform(self):
5257
assert utils.camel_to_dash("test") == "test"

0 commit comments

Comments
 (0)