mirror of
https://github.com/gentoo-mirror/guru.git
synced 2025-04-20 08:18:49 -04:00
I don't understand why the failing test was added in the first place. Moreover the failing tests comes from a PR that is not merged upstream. So for now I simply removed the test from the patch. Closes: https://bugs.gentoo.org/915571 Signed-off-by: David Roman <davidroman96@gmail.com>
148 lines
4.7 KiB
Diff
148 lines
4.7 KiB
Diff
diff --git a/flask_restx/api.py b/flask_restx/api.py
|
|
index 5996dd59..bd0413dd 100644
|
|
--- a/flask_restx/api.py
|
|
+++ b/flask_restx/api.py
|
|
@@ -14,10 +14,6 @@
|
|
from flask import url_for, request, current_app
|
|
from flask import make_response as original_flask_make_response
|
|
|
|
-try:
|
|
- from flask.helpers import _endpoint_from_view_func
|
|
-except ImportError:
|
|
- from flask.scaffold import _endpoint_from_view_func
|
|
from flask.signals import got_request_exception
|
|
|
|
from jsonschema import RefResolver
|
|
@@ -45,10 +41,13 @@
|
|
from .postman import PostmanCollectionV1
|
|
from .resource import Resource
|
|
from .swagger import Swagger
|
|
-from .utils import default_id, camel_to_dash, unpack
|
|
+from .utils import default_id, camel_to_dash, unpack, import_check_view_func
|
|
from .representations import output_json
|
|
from ._http import HTTPStatus
|
|
|
|
+endpoint_from_view_func = import_check_view_func()
|
|
+
|
|
+
|
|
RE_RULES = re.compile("(<.*>)")
|
|
|
|
# List headers that should never be handled by Flask-RESTX
|
|
@@ -850,7 +849,7 @@ def _blueprint_setup_add_url_rule_patch(
|
|
rule = blueprint_setup.url_prefix + rule
|
|
options.setdefault("subdomain", blueprint_setup.subdomain)
|
|
if endpoint is None:
|
|
- endpoint = _endpoint_from_view_func(view_func)
|
|
+ endpoint = endpoint_from_view_func(view_func)
|
|
defaults = blueprint_setup.url_defaults
|
|
if "defaults" in options:
|
|
defaults = dict(defaults, **options.pop("defaults"))
|
|
diff --git a/flask_restx/utils.py b/flask_restx/utils.py
|
|
index 809a29b3..35dec2ae 100644
|
|
--- a/flask_restx/utils.py
|
|
+++ b/flask_restx/utils.py
|
|
@@ -1,4 +1,6 @@
|
|
import re
|
|
+import warnings
|
|
+import typing
|
|
|
|
from collections import OrderedDict
|
|
from copy import deepcopy
|
|
@@ -20,6 +22,10 @@
|
|
)
|
|
|
|
|
|
+class FlaskCompatibilityWarning(DeprecationWarning):
|
|
+ pass
|
|
+
|
|
+
|
|
def merge(first, second):
|
|
"""
|
|
Recursively merges two dictionaries.
|
|
@@ -118,3 +124,43 @@ def unpack(response, default_code=HTTPStatus.OK):
|
|
return data, code or default_code, headers
|
|
else:
|
|
raise ValueError("Too many response values")
|
|
+
|
|
+
|
|
+def to_view_name(view_func: typing.Callable) -> str:
|
|
+ """Helper that returns the default endpoint for a given
|
|
+ function. This always is the function name.
|
|
+
|
|
+ Note: copy of simple flask internal helper
|
|
+ """
|
|
+ assert view_func is not None, "expected view func if endpoint is not provided."
|
|
+ return view_func.__name__
|
|
+
|
|
+
|
|
+def import_check_view_func():
|
|
+ """
|
|
+ Resolve import flask _endpoint_from_view_func.
|
|
+
|
|
+ Show warning if function cannot be found and provide copy of last known implementation.
|
|
+
|
|
+ Note: This helper method exists because reoccurring problem with flask function, but
|
|
+ actual method body remaining the same in each flask version.
|
|
+ """
|
|
+ import importlib.metadata
|
|
+
|
|
+ flask_version = importlib.metadata.version("flask").split(".")
|
|
+ try:
|
|
+ if flask_version[0] == "1":
|
|
+ from flask.helpers import _endpoint_from_view_func
|
|
+ elif flask_version[0] == "2":
|
|
+ from flask.scaffold import _endpoint_from_view_func
|
|
+ elif flask_version[0] == "3":
|
|
+ from flask.sansio.scaffold import _endpoint_from_view_func
|
|
+ else:
|
|
+ warnings.simplefilter("once", FlaskCompatibilityWarning)
|
|
+ _endpoint_from_view_func = None
|
|
+ except ImportError:
|
|
+ warnings.simplefilter("once", FlaskCompatibilityWarning)
|
|
+ _endpoint_from_view_func = None
|
|
+ if _endpoint_from_view_func is None:
|
|
+ _endpoint_from_view_func = to_view_name
|
|
+ return _endpoint_from_view_func
|
|
diff --git a/tests/test_utils.py b/tests/test_utils.py
|
|
index d98d68d0..fe3a1adb 100644
|
|
--- a/tests/test_utils.py
|
|
+++ b/tests/test_utils.py
|
|
@@ -98,3 +98,14 @@ def test_value_headers_default_code(self):
|
|
def test_too_many_values(self):
|
|
with pytest.raises(ValueError):
|
|
utils.unpack((None, None, None, None))
|
|
+
|
|
+
|
|
+class ToViewNameTest(object):
|
|
+ def test_none(self):
|
|
+ with pytest.raises(AssertionError):
|
|
+ _ = utils.to_view_name(None)
|
|
+
|
|
+
|
|
+class ImportCheckViewFuncTest(object):
|
|
+ def test_callable(self):
|
|
+ assert callable(utils.import_check_view_func())
|
|
|
|
From 13ac54e4ba513c01ec8e4a23b4e88b7b555cf2f1 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Trval?= <trval@kajot.cz>
|
|
Date: Fri, 6 Oct 2023 15:46:13 +0200
|
|
Subject: [PATCH 2/2] modify: include new import_check_view_func in
|
|
utils.__all__ to keep nice static checks
|
|
|
|
---
|
|
flask_restx/utils.py | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
diff --git a/flask_restx/utils.py b/flask_restx/utils.py
|
|
index 35dec2ae..367527a5 100644
|
|
--- a/flask_restx/utils.py
|
|
+++ b/flask_restx/utils.py
|
|
@@ -19,6 +19,7 @@
|
|
"not_none",
|
|
"not_none_sorted",
|
|
"unpack",
|
|
+ "import_check_view_func",
|
|
)
|
|
|
|
|