forked from orbit-oss/flask
parent
883cb7cedc
commit
6aee9f6d77
2 changed files with 21 additions and 2 deletions
|
|
@ -300,14 +300,23 @@ def url_for(endpoint, **values):
|
||||||
scheme = values.pop('_scheme', None)
|
scheme = values.pop('_scheme', None)
|
||||||
appctx.app.inject_url_defaults(endpoint, values)
|
appctx.app.inject_url_defaults(endpoint, values)
|
||||||
|
|
||||||
|
# This is not the best way to deal with this but currently the
|
||||||
|
# underlying Werkzeug router does not support overriding the scheme on
|
||||||
|
# a per build call basis.
|
||||||
|
old_scheme = None
|
||||||
if scheme is not None:
|
if scheme is not None:
|
||||||
if not external:
|
if not external:
|
||||||
raise ValueError('When specifying _scheme, _external must be True')
|
raise ValueError('When specifying _scheme, _external must be True')
|
||||||
|
old_scheme = url_adapter.url_scheme
|
||||||
url_adapter.url_scheme = scheme
|
url_adapter.url_scheme = scheme
|
||||||
|
|
||||||
try:
|
try:
|
||||||
rv = url_adapter.build(endpoint, values, method=method,
|
try:
|
||||||
force_external=external)
|
rv = url_adapter.build(endpoint, values, method=method,
|
||||||
|
force_external=external)
|
||||||
|
finally:
|
||||||
|
if old_scheme is not None:
|
||||||
|
url_adapter.url_scheme = old_scheme
|
||||||
except BuildError as error:
|
except BuildError as error:
|
||||||
# We need to inject the values again so that the app callback can
|
# We need to inject the values again so that the app callback can
|
||||||
# deal with that sort of stuff.
|
# deal with that sort of stuff.
|
||||||
|
|
|
||||||
|
|
@ -627,6 +627,16 @@ class TestLogging(object):
|
||||||
'index',
|
'index',
|
||||||
_scheme='https')
|
_scheme='https')
|
||||||
|
|
||||||
|
def test_url_for_with_alternating_schemes(self):
|
||||||
|
app = flask.Flask(__name__)
|
||||||
|
@app.route('/')
|
||||||
|
def index():
|
||||||
|
return '42'
|
||||||
|
with app.test_request_context():
|
||||||
|
assert flask.url_for('index', _external=True) == 'http://localhost/'
|
||||||
|
assert flask.url_for('index', _external=True, _scheme='https') == 'https://localhost/'
|
||||||
|
assert flask.url_for('index', _external=True) == 'http://localhost/'
|
||||||
|
|
||||||
def test_url_with_method(self):
|
def test_url_with_method(self):
|
||||||
from flask.views import MethodView
|
from flask.views import MethodView
|
||||||
app = flask.Flask(__name__)
|
app = flask.Flask(__name__)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue