diff --git a/README.md b/README.md index a5f3773a..d7565e32 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,8 @@ Include support for all extensions and interfaces: Individual optional installation extras are: - graphql, openapi +- graphql: Adds GraphQL support via Graphene +- openapi: Adds OpenAPI/Swagger interface support Or, install directly from the repository: diff --git a/docs/source/tour.rst b/docs/source/tour.rst index 792ac927..2548ff66 100644 --- a/docs/source/tour.rst +++ b/docs/source/tour.rst @@ -66,10 +66,16 @@ Responder comes with built-in support for OpenAPI / marshmallow:: pip install 'responder[openapi]' -New in Responder `1.4.0`:: +.. note:: + + If you're upgrading from a previous version, note that the OpenAPI module + has been renamed from ``responder.ext.schema`` to ``responder.ext.openapi``. + Update your imports accordingly. + +New in Responder 1.4.0:: import responder - from responder.ext.schema import Schema as OpenAPISchema + from responder.ext.openapi import OpenAPISchema from marshmallow import Schema, fields contact = { @@ -200,12 +206,11 @@ Responder can automatically supply API Documentation for you. Using the example The new and recommended way:: - ... - from responder.ext.schema import Schema - ... + from responder.ext.openapi import OpenAPISchema + api = responder.API() - schema = Schema( + schema = OpenAPISchema( app=api, title="Web Service", version="1.0", @@ -220,7 +225,7 @@ The new and recommended way:: ) -The old way :: +The old way:: api = responder.API( title="Web Service", diff --git a/responder/api.py b/responder/api.py index 62beeb3d..81bb831b 100644 --- a/responder/api.py +++ b/responder/api.py @@ -109,7 +109,13 @@ def __init__( self.add_middleware(SessionMiddleware, secret_key=self.secret_key) if openapi or docs_route: - from .ext.schema import OpenAPISchema + try: + from .ext.openapi import OpenAPISchema + except ImportError as ex: + raise ImportError( + "The dependencies for the OpenAPI extension are not installed. " + "Install them using: pip install 'responder[openapi]'" + ) from ex self.openapi = OpenAPISchema( app=self, diff --git a/responder/ext/schema/__init__.py b/responder/ext/openapi/__init__.py similarity index 100% rename from responder/ext/schema/__init__.py rename to responder/ext/openapi/__init__.py diff --git a/responder/ext/schema/docs/elements.html b/responder/ext/openapi/docs/elements.html similarity index 100% rename from responder/ext/schema/docs/elements.html rename to responder/ext/openapi/docs/elements.html diff --git a/responder/ext/schema/docs/rapidoc.html b/responder/ext/openapi/docs/rapidoc.html similarity index 100% rename from responder/ext/schema/docs/rapidoc.html rename to responder/ext/openapi/docs/rapidoc.html diff --git a/responder/ext/schema/docs/redoc.html b/responder/ext/openapi/docs/redoc.html similarity index 100% rename from responder/ext/schema/docs/redoc.html rename to responder/ext/openapi/docs/redoc.html diff --git a/responder/ext/schema/docs/swagger_ui.html b/responder/ext/openapi/docs/swagger_ui.html similarity index 100% rename from responder/ext/schema/docs/swagger_ui.html rename to responder/ext/openapi/docs/swagger_ui.html diff --git a/setup.py b/setup.py index 17f5f902..c9add646 100644 --- a/setup.py +++ b/setup.py @@ -134,7 +134,7 @@ def run(self): ], "full": ["responder[graphql,openapi]"], "graphql": ["graphene"], - "openapi": ["apispec>=1.0.0b1"], + "openapi": ["apispec>=1.0.0"], "release": ["build", "twine"], "test": ["flask", "mypy", "pytest", "pytest-cov", "pytest-mock"], }, diff --git a/tests/test_responder.py b/tests/test_responder.py index 730a9f9c..0ce99319 100644 --- a/tests/test_responder.py +++ b/tests/test_responder.py @@ -326,7 +326,7 @@ def test_schema_generation_explicit(needs_openapi): import marshmallow import responder - from responder.ext.schema import OpenAPISchema + from responder.ext.openapi import OpenAPISchema api = responder.API() @@ -393,7 +393,7 @@ def test_documentation_explicit(needs_openapi): import marshmallow import responder - from responder.ext.schema import OpenAPISchema + from responder.ext.openapi import OpenAPISchema description = "This is a sample server for a pet store." terms_of_service = "http://example.com/terms/"