Skip to content

Commit ecef43f

Browse files
author
Matt Topol
authored
fix(quart): add check for PREFER_SECURE_URLS for quart 0.10.0 (#30)
* fix(quart): add check for PREFER_SECURE_URLS for quart 0.10.0 * fix(req_ctx): use proper args to test_req_ctx for quart version * add "packaging" dep for tests
1 parent 37c0a95 commit ecef43f

5 files changed

Lines changed: 33 additions & 11 deletions

File tree

quart_openapi/__about__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# -*- coding: utf-8 -*-
22
__short_version__ = '1.4'
3-
__release__ = '1.4.3'
3+
__release__ = '1.4.4'
44
__description__ = 'Framework for Quart to add swagger generation to routes and restful resources'

quart_openapi/swagger.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,14 @@ def as_dict(self) -> Dict[str, Any]:
124124
for resource, path, methods in self.api.resources:
125125
paths[extract_path(path)] = self.serialize_resource(resource, path, methods)
126126

127+
scheme = self.api.config.get('PREFERRED_URL_SCHEME',
128+
'http' if not self.api.config.get('PREFER_SECURE_URLS', False) else 'https')
127129
spec = {
128130
'openapi': '3.0.0',
129131
'info': infos,
130132
'servers': [
131133
{
132-
'url': ''.join([self.api.config['PREFERRED_URL_SCHEME'], '://',
133-
self.api.config['SERVER_NAME'] or ''])
134+
'url': ''.join([scheme, '://', self.api.config['SERVER_NAME'] or ''])
134135
}
135136
],
136137
'paths': paths,

requirements/test.pip

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
pytest >= 3.6.3
2-
pytest-asyncio
2+
pytest-asyncio
3+
packaging

tests/test_blueprints.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
import pytest
2+
from packaging import version
23
from http import HTTPStatus
34
from quart_openapi import Pint, Resource, PintBlueprint
45
from quart import Blueprint, url_for, request, ResponseReturnValue, abort
6+
from quart.__about__ import __version__ as quart_version
57
from quart.views import MethodView
68

9+
QUART_VER_GT_09 = version.parse(quart_version) >= version.parse('0.9.0')
10+
11+
def req_ctx(app: Pint, page: str, method: str=''):
12+
if QUART_VER_GT_09:
13+
return app.test_request_context(page, method=method)
14+
else:
15+
return app.test_request_context(method, page)
16+
717
@pytest.mark.asyncio
818
async def test_root_endpoint_blueprint(app: Pint) -> None:
919
blueprint = Blueprint('blueprint', __name__)
@@ -13,7 +23,7 @@ async def route() -> ResponseReturnValue:
1323
return 'OK'
1424

1525
app.register_blueprint(blueprint)
16-
async with app.test_request_context('GET', '/page/'):
26+
async with req_ctx(app, '/page/', method='GET'):
1727
assert request.blueprint == 'blueprint'
1828
assert '/page/' == url_for('blueprint.route')
1929

@@ -31,18 +41,18 @@ async def route() -> ResponseReturnValue:
3141
app.register_blueprint(blueprint, url_prefix='/blueprint')
3242
app.register_blueprint(prefix)
3343

34-
async with app.test_request_context('GET', '/'):
44+
async with req_ctx(app, '/', method='GET'):
3545
assert '/page/' == url_for('route')
3646
assert '/prefix/page/' == url_for('prefix.route')
3747
assert '/blueprint/page/' == url_for('blueprint.route')
3848

39-
async with app.test_request_context('GET', '/page/'):
49+
async with req_ctx(app, '/page/', method='GET'):
4050
assert request.blueprint is None
4151

42-
async with app.test_request_context('GET', '/prefix/page/'):
52+
async with req_ctx(app, '/prefix/page/', method='GET'):
4353
assert request.blueprint == 'prefix'
4454

45-
async with app.test_request_context('GET', '/blueprint/page/'):
55+
async with req_ctx(app, '/blueprint/page/', method='GET'):
4656
assert request.blueprint == 'blueprint'
4757

4858

@@ -90,7 +100,7 @@ async def test_pint_blueprint_openapi(app: Pint) -> None:
90100
blueprint = PintBlueprint('blueprint', __name__, url_prefix='/blueprint')
91101
app.register_blueprint(blueprint)
92102

93-
async with app.test_request_context('GET', '/'):
103+
async with req_ctx(app, '/', method='GET'):
94104
assert '/openapi.json' == url_for('openapi')
95105

96106

tests/test_routing.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
import pytest
2+
from packaging import version
23
from quart_openapi import Pint, Resource
34
from jsonschema import RefResolver
45
from quart import request, jsonify, url_for
6+
from quart.__about__ import __version__ as quart_version
57
from http import HTTPStatus
68

9+
QUART_VER_GT_09 = version.parse(quart_version) >= version.parse('0.9.0')
10+
11+
def req_ctx(app: Pint, page: str, method: str=''):
12+
if QUART_VER_GT_09:
13+
return app.test_request_context(page, method=method)
14+
else:
15+
return app.test_request_context(method, page)
16+
717
@pytest.mark.asyncio
818
async def test_simple_app(app):
919
@app.route('/statusCheck')
@@ -46,7 +56,7 @@ class Tester(Resource):
4656
async def get(self):
4757
return 'Got'
4858

49-
async with app.test_request_context('GET', '/'):
59+
async with req_ctx(app, '/', method='GET'):
5060
openapi_url = url_for('openapi')
5161
route_url = url_for('tester')
5262
assert '/openapi.json' == openapi_url

0 commit comments

Comments
 (0)