Last active
December 27, 2017 23:43
-
-
Save miguelgrinberg/9908687 to your computer and use it in GitHub Desktop.
reverse of url_for(): decompose a URL into its parts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from flask.globals import _app_ctx_stack, _request_ctx_stack | |
from werkzeug.urls import url_parse | |
from werkzeug.exceptions import NotFound | |
def split_url(url, method=None): | |
appctx = _app_ctx_stack.top | |
reqctx = _request_ctx_stack.top | |
if appctx is None: | |
raise RuntimeError('Attempted to match a URL without the ' | |
'application context being pushed. This has to be ' | |
'executed when application context is available.') | |
if reqctx is not None: | |
url_adapter = reqctx.url_adapter | |
else: | |
url_adapter = appctx.url_adapter | |
if url_adapter is None: | |
raise RuntimeError('Application was not able to create a URL ' | |
'adapter for request independent URL matching. ' | |
'You might be able to fix this by setting ' | |
'the SERVER_NAME config variable.') | |
parsed_url = url_parse(url) | |
if parsed_url.netloc is not '' and \ | |
parsed_url.netloc != url_adapter.server_name: | |
raise NotFound() | |
return url_adapter.match(parsed_url.path, method) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment