-
Notifications
You must be signed in to change notification settings - Fork 171
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Re-add deferred catchall routing (#4015)
- Loading branch information
Showing
6 changed files
with
120 additions
and
1 deletion.
There are no files selected for viewing
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from .defer_handler import install_defer_routes # noqa: F401 |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
from flask import Flask, request, Response | ||
from google.appengine.ext import deferred | ||
|
||
from backend.common.url_converters import ( | ||
has_regex_url_converter, | ||
install_regex_url_converter, | ||
) | ||
|
||
|
||
def handle_defer(path: str) -> Response: | ||
return deferred.application.post(request.environ) | ||
|
||
|
||
def install_defer_routes(app: Flask) -> None: | ||
# Requires regex URL converter | ||
if not has_regex_url_converter(app): | ||
install_regex_url_converter(app) | ||
|
||
app.add_url_rule( | ||
'/_ah/queue/<regex("deferred.*?"):path>', | ||
view_func=handle_defer, | ||
methods=["POST"], | ||
) |
Empty file.
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
from unittest.mock import patch | ||
|
||
from flask import Flask | ||
|
||
from backend.common.deferred.defer_handler import handle_defer, install_defer_routes | ||
from backend.common.url_converters import install_regex_url_converter | ||
|
||
|
||
def test_install_defer_routes(): | ||
route = '/_ah/queue/<regex("deferred.*?"):path>' | ||
app = Flask(__name__) | ||
rules = [r for r in app.url_map.iter_rules() if str(r) == route] | ||
assert len(rules) == 0 | ||
install_defer_routes(app) | ||
rules = [r for r in app.url_map.iter_rules() if str(r) == route] | ||
assert len(rules) == 1 | ||
rule = rules[0] | ||
assert rule.methods == {"OPTIONS", "POST"} | ||
assert rule.endpoint == "handle_defer" | ||
|
||
|
||
def test_install_defer_routes_regex(): | ||
app = Flask(__name__) | ||
|
||
with patch( | ||
"backend.common.deferred.defer_handler.install_regex_url_converter", | ||
wraps=install_regex_url_converter, | ||
) as mock_install_regex_url_converter: | ||
install_defer_routes(app) | ||
|
||
mock_install_regex_url_converter.assert_called() | ||
|
||
|
||
def test_install_defer_routes_regex_already_installed(): | ||
app = Flask(__name__) | ||
|
||
install_regex_url_converter(app) | ||
|
||
with patch( | ||
"backend.common.deferred.defer_handler.has_regex_url_converter", | ||
return_value=True, | ||
), patch( | ||
"backend.common.deferred.defer_handler.install_regex_url_converter", | ||
wraps=install_regex_url_converter, | ||
) as mock_install_regex_url_converter: | ||
install_defer_routes(app) | ||
|
||
mock_install_regex_url_converter.assert_not_called() | ||
|
||
|
||
def test_handle_defer(): | ||
app = Flask(__name__) | ||
with app.test_request_context() as request_context, patch( | ||
"google.appengine.ext.deferred.application.post" | ||
) as mock_post: | ||
environ = request_context.request.environ | ||
handle_defer("/some/path") | ||
|
||
assert mock_post.called_with(environ) |
This file contains 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