From 23b6b877791564cf87cd9e4e84ea7091494e127a Mon Sep 17 00:00:00 2001 From: Marat Sharafutdinov Date: Sat, 9 Mar 2024 17:13:22 +0300 Subject: [PATCH 1/5] Remove unused variable --- flask_apispec/apidoc.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/flask_apispec/apidoc.py b/flask_apispec/apidoc.py index 2491158..fb6823a 100644 --- a/flask_apispec/apidoc.py +++ b/flask_apispec/apidoc.py @@ -1,7 +1,6 @@ import copy import functools -import apispec from apispec.core import VALID_METHODS from apispec.ext.marshmallow import MarshmallowPlugin @@ -11,9 +10,6 @@ from flask_apispec.paths import rule_to_path, rule_to_params from flask_apispec.utils import resolve_resource, resolve_annotations, merge_recursive -APISPEC_VERSION_INFO = tuple( - [int(part) for part in apispec.__version__.split('.') if part.isdigit()] -) class Converter: def __init__(self, app, spec, document_options=True): From 46b3ebca788b433f868d535d0a5cb158e6ac1c1c Mon Sep 17 00:00:00 2001 From: Marat Sharafutdinov Date: Sat, 9 Mar 2024 17:15:41 +0300 Subject: [PATCH 2/5] Deprecate Python versions 3.6 and 3.7 --- .travis.yml | 1 - setup.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index e87c1e3..2237d8d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,6 @@ env: - MARSHMALLOW_VERSION="==3.0.0" - MARSHMALLOW_VERSION="" python: -- '3.6' - '3.8' before_install: - travis_retry pip install codecov diff --git a/setup.py b/setup.py index 2f67f59..42c79d5 100755 --- a/setup.py +++ b/setup.py @@ -48,7 +48,7 @@ def read(fname): license='MIT', zip_safe=False, keywords='flask marshmallow webargs apispec', - python_requires=">=3.6", + python_requires=">=3.8", test_suite='tests', project_urls={ 'Bug Reports': 'https://github.com/jmcarp/flask-apispec/issues', From d537a094ed0e25efcdcfc9ebbb36500a2b715582 Mon Sep 17 00:00:00 2001 From: Marat Sharafutdinov Date: Sat, 9 Mar 2024 17:16:07 +0300 Subject: [PATCH 3/5] Add packaging dependency --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 42c79d5..fb54135 100755 --- a/setup.py +++ b/setup.py @@ -49,6 +49,7 @@ def read(fname): zip_safe=False, keywords='flask marshmallow webargs apispec', python_requires=">=3.8", + dependencies=["packaging>=17.0"], test_suite='tests', project_urls={ 'Bug Reports': 'https://github.com/jmcarp/flask-apispec/issues', From 852accd3bb076148b90efa74b9292a2667bf783b Mon Sep 17 00:00:00 2001 From: Marat Sharafutdinov Date: Sat, 9 Mar 2024 17:17:31 +0300 Subject: [PATCH 4/5] Fix marshmallow version detection --- flask_apispec/wrapper.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/flask_apispec/wrapper.py b/flask_apispec/wrapper.py index a6cd967..b14c616 100644 --- a/flask_apispec/wrapper.py +++ b/flask_apispec/wrapper.py @@ -1,17 +1,16 @@ from flask import Response +import importlib.metadata from collections.abc import Mapping import flask -import marshmallow as ma import werkzeug +from packaging.version import Version from webargs import flaskparser from flask_apispec import utils -MARSHMALLOW_VERSION_INFO = tuple( - [int(part) for part in ma.__version__.split('.') if part.isdigit()] -) +MARSHMALLOW_VERSION = Version(importlib.metadata.version("marshmallow")) class Wrapper: @@ -60,7 +59,7 @@ def marshal_result(self, result, status_code): if schema and annotation.apply is not False: schema = utils.resolve_schema(schema['schema'], request=flask.request) dumped = schema.dump(result) - output = dumped.data if MARSHMALLOW_VERSION_INFO[0] < 3 else dumped + output = dumped.data if MARSHMALLOW_VERSION.major < 3 else dumped else: output = result From bb175357a7b9670d4480fa2f39caee5f62138bc5 Mon Sep 17 00:00:00 2001 From: Marat Sharafutdinov Date: Thu, 17 Apr 2025 21:09:33 +0300 Subject: [PATCH 5/5] Add util function removed from marshmallow --- flask_apispec/apidoc.py | 5 +++-- flask_apispec/utils.py | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/flask_apispec/apidoc.py b/flask_apispec/apidoc.py index fb6823a..7c289ef 100644 --- a/flask_apispec/apidoc.py +++ b/flask_apispec/apidoc.py @@ -5,10 +5,11 @@ from apispec.ext.marshmallow import MarshmallowPlugin from marshmallow import Schema -from marshmallow.utils import is_instance_or_subclass from flask_apispec.paths import rule_to_path, rule_to_params -from flask_apispec.utils import resolve_resource, resolve_annotations, merge_recursive +from flask_apispec.utils import ( + is_instance_or_subclass, resolve_resource, resolve_annotations, merge_recursive +) class Converter: diff --git a/flask_apispec/utils.py b/flask_apispec/utils.py index 686736a..5437bb2 100644 --- a/flask_apispec/utils.py +++ b/flask_apispec/utils.py @@ -99,3 +99,10 @@ def _merge_recursive(child, parent): for key in keys } return child if child is not None else parent + + +def is_instance_or_subclass(val, class_): + try: + return issubclass(val, class_) + except TypeError: + return isinstance(val, class_)