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/flask_apispec/apidoc.py b/flask_apispec/apidoc.py index 2491158..7c289ef 100644 --- a/flask_apispec/apidoc.py +++ b/flask_apispec/apidoc.py @@ -1,20 +1,17 @@ import copy import functools -import apispec from apispec.core import VALID_METHODS 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 - -APISPEC_VERSION_INFO = tuple( - [int(part) for part in apispec.__version__.split('.') if part.isdigit()] +from flask_apispec.utils import ( + is_instance_or_subclass, resolve_resource, resolve_annotations, merge_recursive ) + class Converter: def __init__(self, app, spec, document_options=True): self.app = app 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_) 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 diff --git a/setup.py b/setup.py index 2f67f59..fb54135 100755 --- a/setup.py +++ b/setup.py @@ -48,7 +48,8 @@ def read(fname): license='MIT', zip_safe=False, keywords='flask marshmallow webargs apispec', - python_requires=">=3.6", + python_requires=">=3.8", + dependencies=["packaging>=17.0"], test_suite='tests', project_urls={ 'Bug Reports': 'https://github.com/jmcarp/flask-apispec/issues',