def test_app_url_processors(app, client): bp = flask.Blueprint("bp", __name__) # Register app-wide url defaults and preprocessor on blueprint @bp.app_url_defaults def add_language_code(endpoint, values): values.setdefault("lang_code", flask.g.lang_code) @bp.app_url_value_preprocessor def pull_lang_code(endpoint, values): flask.g.lang_code = values.pop("lang_code") # Register route rules at the app level @app.route("/<lang_code>/") def index(): return flask.url_for("about") @app.route("/<lang_code>/about") def about(): return flask.url_for("index") app.register_blueprint(bp) assert client.get("/de/").data == b"/de/about" assert client.get("/de/about").data == b"/de/"
def test_route_decorator_custom_endpoint(self): bp = flask.Blueprint("bp", __name__) @bp.route("/foo") def foo(): return flask.request.endpoint @bp.route("/bar", endpoint="bar") def foo_bar(): return flask.request.endpoint @bp.route("/bar/123", endpoint="123") def foo_bar_foo(): return flask.request.endpoint @bp.route("/bar/foo") def bar_foo(): return flask.request.endpoint app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix="/py") @app.route("/") def index(): return flask.request.endpoint c = app.test_client() self.assertEqual(c.get("/").data, "index") self.assertEqual(c.get("/py/foo").data, "bp.foo") self.assertEqual(c.get("/py/bar").data, "bp.bar") self.assertEqual(c.get("/py/bar/123").data, "bp.123") self.assertEqual(c.get("/py/bar/foo").data, "bp.bar_foo")
def test_route_decorator_custom_endpoint(): bp = keyes.Blueprint('bp', __name__) @bp.route('/foo') def foo(): return keyes.request.endpoint @bp.route('/bar', endpoint='bar') def foo_bar(): return keyes.request.endpoint @bp.route('/bar/123', endpoint='123') def foo_bar_foo(): return keyes.request.endpoint @bp.route('/bar/foo') def bar_foo(): return keyes.request.endpoint app = keyes.Keyes(__name__) app.register_blueprint(bp, url_prefix='/py') @app.route('/') def index(): return keyes.request.endpoint c = app.test_client() assert c.get('/').data == b'index' assert c.get('/py/foo').data == b'bp.foo' assert c.get('/py/bar').data == b'bp.bar' assert c.get('/py/bar/123').data == b'bp.123' assert c.get('/py/bar/foo').data == b'bp.bar_foo'
def test_route_decorator_custom_endpoint(app, client): bp = flask.Blueprint("bp", __name__) @bp.route("/foo") def foo(): return flask.request.endpoint @bp.route("/bar", endpoint="bar") def foo_bar(): return flask.request.endpoint @bp.route("/bar/123", endpoint="123") def foo_bar_foo(): return flask.request.endpoint @bp.route("/bar/foo") def bar_foo(): return flask.request.endpoint app.register_blueprint(bp, url_prefix="/py") @app.route("/") def index(): return flask.request.endpoint assert client.get("/").data == b"index" assert client.get("/py/foo").data == b"bp.foo" assert client.get("/py/bar").data == b"bp.bar" assert client.get("/py/bar/123").data == b"bp.123" assert client.get("/py/bar/foo").data == b"bp.bar_foo"
def test_route_decorator_custom_endpoint(self): bp = flask.Blueprint('bp', __name__) @bp.route('/foo') def foo(): return flask.request.endpoint @bp.route('/bar', endpoint='bar') def foo_bar(): return flask.request.endpoint @bp.route('/bar/123', endpoint='123') def foo_bar_foo(): return flask.request.endpoint @bp.route('/bar/foo') def bar_foo(): return flask.request.endpoint app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') @app.route('/') def index(): return flask.request.endpoint c = app.test_client() self.assertEqual(c.get('/').data, b'index') self.assertEqual(c.get('/py/foo').data, b'bp.foo') self.assertEqual(c.get('/py/bar').data, b'bp.bar') self.assertEqual(c.get('/py/bar/123').data, b'bp.123') self.assertEqual(c.get('/py/bar/foo').data, b'bp.bar_foo')
def test_app_url_processors(app, client): bp = flask.Blueprint('bp', __name__) # Register app-wide url defaults and preprocessor on blueprint @bp.app_url_defaults def add_language_code(endpoint, values): values.setdefault('lang_code', flask.g.lang_code) @bp.app_url_value_preprocessor def pull_lang_code(endpoint, values): flask.g.lang_code = values.pop('lang_code') # Register route rules at the app level @app.route('/<lang_code>/') def index(): return flask.url_for('about') @app.route('/<lang_code>/about') def about(): return flask.url_for('index') app.register_blueprint(bp) assert client.get('/de/').data == b'/de/about' assert client.get('/de/about').data == b'/de/'
def test_request_processing(app, client): bp = flask.Blueprint('bp', __name__) evts = [] @bp.before_request def before_bp(): evts.append('before') @bp.after_request def after_bp(response): response.data += b'|after' evts.append('after') return response @bp.teardown_request def teardown_bp(exc): evts.append('teardown') # Setup routes for testing @bp.route('/bp') def bp_endpoint(): return 'request' app.register_blueprint(bp) assert evts == [] rv = client.get('/bp') assert rv.data == b'request|after' assert evts == ['before', 'after', 'teardown']
def test_route_decorator_custom_endpoint_with_dots(app, client): bp = flask.Blueprint('bp', __name__) @bp.route('/foo') def foo(): return flask.request.endpoint try: @bp.route('/bar', endpoint='bar.bar') def foo_bar(): return flask.request.endpoint except AssertionError: pass else: raise AssertionError('expected AssertionError not raised') try: @bp.route('/bar/123', endpoint='bar.123') def foo_bar_foo(): return flask.request.endpoint except AssertionError: pass else: raise AssertionError('expected AssertionError not raised') def foo_foo_foo(): pass pytest.raises( AssertionError, lambda: bp.add_url_rule( '/bar/123', endpoint='bar.123', view_func=foo_foo_foo ) ) pytest.raises( AssertionError, bp.route('/bar/123', endpoint='bar.123'), lambda: None ) foo_foo_foo.__name__ = 'bar.123' pytest.raises( AssertionError, lambda: bp.add_url_rule( '/bar/123', view_func=foo_foo_foo ) ) bp.add_url_rule('/bar/456', endpoint='foofoofoo', view_func=functools.partial(foo_foo_foo)) app.register_blueprint(bp, url_prefix='/py') assert client.get('/py/foo').data == b'bp.foo' # The rule's didn't actually made it through rv = client.get('/py/bar') assert rv.status_code == 404 rv = client.get('/py/bar/123') assert rv.status_code == 404
def test_request_processing(app, client): bp = flask.Blueprint("bp", __name__) evts = [] @bp.before_request def before_bp(): evts.append("before") @bp.after_request def after_bp(response): response.data += b"|after" evts.append("after") return response @bp.teardown_request def teardown_bp(exc): evts.append("teardown") # Setup routes for testing @bp.route("/bp") def bp_endpoint(): return "request" app.register_blueprint(bp) assert evts == [] rv = client.get("/bp") assert rv.data == b"request|after" assert evts == ["before", "after", "teardown"]
def test_route_decorator_custom_endpoint_with_dots(app, client): bp = flask.Blueprint("bp", __name__) @bp.route("/foo") def foo(): return flask.request.endpoint try: @bp.route("/bar", endpoint="bar.bar") def foo_bar(): return flask.request.endpoint except AssertionError: pass else: raise AssertionError("expected AssertionError not raised") try: @bp.route("/bar/123", endpoint="bar.123") def foo_bar_foo(): return flask.request.endpoint except AssertionError: pass else: raise AssertionError("expected AssertionError not raised") def foo_foo_foo(): pass pytest.raises( AssertionError, lambda: bp.add_url_rule("/bar/123", endpoint="bar.123", view_func=foo_foo_foo), ) pytest.raises( AssertionError, bp.route("/bar/123", endpoint="bar.123"), lambda: None ) foo_foo_foo.__name__ = "bar.123" pytest.raises( AssertionError, lambda: bp.add_url_rule("/bar/123", view_func=foo_foo_foo) ) bp.add_url_rule( "/bar/456", endpoint="foofoofoo", view_func=functools.partial(foo_foo_foo) ) app.register_blueprint(bp, url_prefix="/py") assert client.get("/py/foo").data == b"bp.foo" # The rule's didn't actually made it through rv = client.get("/py/bar") assert rv.status_code == 404 rv = client.get("/py/bar/123") assert rv.status_code == 404
def test_template_test(self): bp = flask.Blueprint('bp', __name__) @bp.app_template_test() def is_boolean(value): return isinstance(value, bool) app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') self.assert_('is_boolean' in app.jinja_env.tests.keys()) self.assert_equal(app.jinja_env.tests['is_boolean'], is_boolean) self.assert_(app.jinja_env.tests['is_boolean'](False))
def test_template_filter(self): bp = flask.Blueprint('bp', __name__) @bp.app_template_filter() def my_reverse(s): return s[::-1] app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') self.assert_('my_reverse' in app.jinja_env.filters.keys()) self.assert_equal(app.jinja_env.filters['my_reverse'], my_reverse) self.assert_equal(app.jinja_env.filters['my_reverse']('abcd'), 'dcba')
def test_add_template_filter_with_name(): bp = flask.Blueprint('bp', __name__) def my_reverse(s): return s[::-1] bp.add_app_template_filter(my_reverse, 'strrev') app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') assert 'strrev' in app.jinja_env.filters.keys() assert app.jinja_env.filters['strrev'] == my_reverse assert app.jinja_env.filters['strrev']('abcd') == 'dcba'
def test_template_filter_with_name(): bp = keyes.Blueprint('bp', __name__) @bp.app_template_filter('strrev') def my_reverse(s): return s[::-1] app = keyes.Keyes(__name__) app.register_blueprint(bp, url_prefix='/py') assert 'strrev' in app.jinja_env.filters.keys() assert app.jinja_env.filters['strrev'] == my_reverse assert app.jinja_env.filters['strrev']('abcd') == 'dcba'
def test_add_template_filter_with_name(self): bp = flask.Blueprint('bp', __name__) def my_reverse(s): return s[::-1] bp.add_app_template_filter(my_reverse, 'strrev') app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') self.assert_in('strrev', app.jinja_env.filters.keys()) self.assert_equal(app.jinja_env.filters['strrev'], my_reverse) self.assert_equal(app.jinja_env.filters['strrev']('abcd'), 'dcba')
def test_add_template_test_with_name(): bp = flask.Blueprint('bp', __name__) def is_boolean(value): return isinstance(value, bool) bp.add_app_template_test(is_boolean, 'boolean') app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') assert 'boolean' in app.jinja_env.tests.keys() assert app.jinja_env.tests['boolean'] == is_boolean assert app.jinja_env.tests['boolean'](False)
def test_add_template_filter(): bp = keyes.Blueprint('bp', __name__) def my_reverse(s): return s[::-1] bp.add_app_template_filter(my_reverse) app = keyes.Keyes(__name__) app.register_blueprint(bp, url_prefix='/py') assert 'my_reverse' in app.jinja_env.filters.keys() assert app.jinja_env.filters['my_reverse'] == my_reverse assert app.jinja_env.filters['my_reverse']('abcd') == 'dcba'
def test_add_template_test_with_name(self): bp = flask.Blueprint('bp', __name__) def is_boolean(value): return isinstance(value, bool) bp.add_app_template_test(is_boolean, 'boolean') app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') self.assert_in('boolean', app.jinja_env.tests.keys()) self.assert_equal(app.jinja_env.tests['boolean'], is_boolean) self.assert_true(app.jinja_env.tests['boolean'](False))
def test_template_filter(): bp = flask.Blueprint('bp', __name__) @bp.app_template_filter() def my_reverse(s): return s[::-1] app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') assert 'my_reverse' in app.jinja_env.filters.keys() assert app.jinja_env.filters['my_reverse'] == my_reverse assert app.jinja_env.filters['my_reverse']('abcd') == 'dcba'
def test_template_test(): bp = keyes.Blueprint('bp', __name__) @bp.app_template_test() def is_boolean(value): return isinstance(value, bool) app = keyes.Keyes(__name__) app.register_blueprint(bp, url_prefix='/py') assert 'is_boolean' in app.jinja_env.tests.keys() assert app.jinja_env.tests['is_boolean'] == is_boolean assert app.jinja_env.tests['is_boolean'](False)
def test_template_filter(app): bp = flask.Blueprint("bp", __name__) @bp.app_template_filter() def my_reverse(s): return s[::-1] app.register_blueprint(bp, url_prefix="/py") assert "my_reverse" in app.jinja_env.filters.keys() assert app.jinja_env.filters["my_reverse"] == my_reverse assert app.jinja_env.filters["my_reverse"]("abcd") == "dcba"
def test_add_template_filter_with_name(app): bp = flask.Blueprint("bp", __name__) def my_reverse(s): return s[::-1] bp.add_app_template_filter(my_reverse, "strrev") app.register_blueprint(bp, url_prefix="/py") assert "strrev" in app.jinja_env.filters.keys() assert app.jinja_env.filters["strrev"] == my_reverse assert app.jinja_env.filters["strrev"]("abcd") == "dcba"
def test_add_template_filter_safe(self): bp = flask.Blueprint('bp', __name__) def nl2br(s): return s.replace('\n', '<br>') bp.add_app_template_filter(nl2br, safe=True) app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') self.assert_('nl2br' in app.jinja_env.filters.keys()) result = app.jinja_env.filters['nl2br']('ab\ncd') self.assert_equal(result, 'ab<br>cd') self.assert_(isinstance(result, flask.Markup))
def test_add_template_test_with_name(app): bp = flask.Blueprint("bp", __name__) def is_boolean(value): return isinstance(value, bool) bp.add_app_template_test(is_boolean, "boolean") app.register_blueprint(bp, url_prefix="/py") assert "boolean" in app.jinja_env.tests.keys() assert app.jinja_env.tests["boolean"] == is_boolean assert app.jinja_env.tests["boolean"](False)
def test_add_template_filter_with_name_and_template(self): bp = flask.Blueprint('bp', __name__) def my_reverse(s): return s[::-1] bp.add_app_template_filter(my_reverse, 'super_reverse') app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') @app.route('/') def index(): return flask.render_template('template_filter.html', value='abcd') rv = app.test_client().get('/') self.assert_equal(rv.data, b'dcba')
def test_template_filter_after_route_with_template(): app = flask.Flask(__name__) @app.route('/') def index(): return flask.render_template('template_filter.html', value='abcd') bp = flask.Blueprint('bp', __name__) @bp.app_template_filter() def super_reverse(s): return s[::-1] app.register_blueprint(bp, url_prefix='/py') rv = app.test_client().get('/') assert rv.data == b'dcba'
def test_template_test_after_route_with_template(): app = flask.Flask(__name__) @app.route('/') def index(): return flask.render_template('template_test.html', value=False) bp = flask.Blueprint('bp', __name__) @bp.app_template_test() def boolean(value): return isinstance(value, bool) app.register_blueprint(bp, url_prefix='/py') rv = app.test_client().get('/') assert b'Success!' in rv.data
def test_add_template_test_with_name_and_template(self): bp = flask.Blueprint('bp', __name__) def is_boolean(value): return isinstance(value, bool) bp.add_app_template_test(is_boolean, 'boolean') app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') @app.route('/') def index(): return flask.render_template('template_test.html', value=False) rv = app.test_client().get('/') self.assert_in(b'Success!', rv.data)
def test_add_template_filter_with_name_and_template(): bp = keyes.Blueprint('bp', __name__) def my_reverse(s): return s[::-1] bp.add_app_template_filter(my_reverse, 'super_reverse') app = keyes.Keyes(__name__) app.register_blueprint(bp, url_prefix='/py') @app.route('/') def index(): return keyes.render_template('template_filter.html', value='abcd') rv = app.test_client().get('/') assert rv.data == b'dcba'
def test_add_template_test_with_name_and_template(): bp = keyes.Blueprint('bp', __name__) def is_boolean(value): return isinstance(value, bool) bp.add_app_template_test(is_boolean, 'boolean') app = keyes.Keyes(__name__) app.register_blueprint(bp, url_prefix='/py') @app.route('/') def index(): return keyes.render_template('template_test.html', value=False) rv = app.test_client().get('/') assert b'Success!' in rv.data
def test_endpoint_decorator(): from werkzeug.routing import Rule app = flask.Flask(__name__) app.url_map.add(Rule('/foo', endpoint='bar')) bp = flask.Blueprint('bp', __name__) @bp.endpoint('bar') def foobar(): return flask.request.endpoint app.register_blueprint(bp, url_prefix='/bp_prefix') c = app.test_client() assert c.get('/foo').data == b'bar' assert c.get('/bp_prefix/bar').status_code == 404
def test_template_filter_after_route_with_template(self): app = flask.Flask(__name__) @app.route('/') def index(): return flask.render_template('template_filter.html', value='abcd') bp = flask.Blueprint('bp', __name__) @bp.app_template_filter() def super_reverse(s): return s[::-1] app.register_blueprint(bp, url_prefix='/py') rv = app.test_client().get('/') self.assert_equal(rv.data, b'dcba')
def test_template_test_after_route_with_template(self): app = flask.Flask(__name__) @app.route('/') def index(): return flask.render_template('template_test.html', value=False) bp = flask.Blueprint('bp', __name__) @bp.app_template_test() def boolean(value): return isinstance(value, bool) app.register_blueprint(bp, url_prefix='/py') rv = app.test_client().get('/') self.assert_in(b'Success!', rv.data)
def test_template_filter_after_route_with_template(): app = keyes.Keyes(__name__) @app.route('/') def index(): return keyes.render_template('template_filter.html', value='abcd') bp = keyes.Blueprint('bp', __name__) @bp.app_template_filter() def super_reverse(s): return s[::-1] app.register_blueprint(bp, url_prefix='/py') rv = app.test_client().get('/') assert rv.data == b'dcba'
def test_template_test_with_name_and_template(): bp = keyes.Blueprint('bp', __name__) @bp.app_template_test('boolean') def is_boolean(value): return isinstance(value, bool) app = keyes.Keyes(__name__) app.register_blueprint(bp, url_prefix='/py') @app.route('/') def index(): return keyes.render_template('template_test.html', value=False) rv = app.test_client().get('/') assert b'Success!' in rv.data
def test_add_template_filter_with_name_and_template(self): bp = flask.Blueprint('bp', __name__) def my_reverse(s): return s[::-1] bp.add_app_template_filter(my_reverse, 'super_reverse') app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') @app.route('/') def index(): return flask.render_template('template_filter.html', value='abcd') rv = app.test_client().get('/') self.assert_equal(rv.data, 'dcba')
def test_add_template_test_with_name_and_template(self): bp = flask.Blueprint('bp', __name__) def is_boolean(value): return isinstance(value, bool) bp.add_app_template_test(is_boolean, 'boolean') app = flask.Flask(__name__) app.register_blueprint(bp, url_prefix='/py') @app.route('/') def index(): return flask.render_template('template_test.html', value=False) rv = app.test_client().get('/') self.assert_('Success!' in rv.data)
def test_route_decorator_custom_endpoint_with_dots(): bp = keyes.Blueprint('bp', __name__) @bp.route('/foo') def foo(): return keyes.request.endpoint try: @bp.route('/bar', endpoint='bar.bar') def foo_bar(): return keyes.request.endpoint except AssertionError: pass else: raise AssertionError('expected AssertionError not raised') try: @bp.route('/bar/123', endpoint='bar.123') def foo_bar_foo(): return keyes.request.endpoint except AssertionError: pass else: raise AssertionError('expected AssertionError not raised') def foo_foo_foo(): pass pytest.raises( AssertionError, lambda: bp.add_url_rule( '/bar/123', endpoint='bar.123', view_func=foo_foo_foo)) pytest.raises(AssertionError, bp.route('/bar/123', endpoint='bar.123'), lambda: None) app = keyes.Keyes(__name__) app.register_blueprint(bp, url_prefix='/py') c = app.test_client() assert c.get('/py/foo').data == b'bp.foo' # The rule's didn't actually made it through rv = c.get('/py/bar') assert rv.status_code == 404 rv = c.get('/py/bar/123') assert rv.status_code == 404
def test_nested_blueprint(app, client): parent = flask.Blueprint("parent", __name__) child = flask.Blueprint("child", __name__) grandchild = flask.Blueprint("grandchild", __name__) @parent.errorhandler(403) def forbidden(e): return "Parent no", 403 @parent.route("/") def parent_index(): return "Parent yes" @parent.route("/no") def parent_no(): flask.abort(403) @child.route("/") def child_index(): return "Child yes" @child.route("/no") def child_no(): flask.abort(403) @grandchild.errorhandler(403) def grandchild_forbidden(e): return "Grandchild no", 403 @grandchild.route("/") def grandchild_index(): return "Grandchild yes" @grandchild.route("/no") def grandchild_no(): flask.abort(403) child.register_blueprint(grandchild, url_prefix="/grandchild") parent.register_blueprint(child, url_prefix="/child") app.register_blueprint(parent, url_prefix="/parent") assert client.get("/parent/").data == b"Parent yes" assert client.get("/parent/child/").data == b"Child yes" assert client.get("/parent/child/grandchild/").data == b"Grandchild yes" assert client.get("/parent/no").data == b"Parent no" assert client.get("/parent/child/no").data == b"Parent no" assert client.get("/parent/child/grandchild/no").data == b"Grandchild no"
def test_dotted_names_from_app(self): app = flask.Flask(__name__) app.testing = True test = flask.Blueprint('test', __name__) @app.route('/') def app_index(): return flask.url_for('test.index') @test.route('/test/') def index(): return flask.url_for('app_index') app.register_blueprint(test) with app.test_client() as c: rv = c.get('/') self.assert_equal(rv.data, b'/test/')
def test_dotted_names_from_app(): app = keyes.Keyes(__name__) app.testing = True test = keyes.Blueprint('test', __name__) @app.route('/') def app_index(): return keyes.url_for('test.index') @test.route('/test/') def index(): return keyes.url_for('app_index') app.register_blueprint(test) with app.test_client() as c: rv = c.get('/') assert rv.data == b'/test/'
def test_template_global(app): bp = flask.Blueprint("bp", __name__) @bp.app_template_global() def get_answer(): return 42 # Make sure the function is not in the jinja_env already assert "get_answer" not in app.jinja_env.globals.keys() app.register_blueprint(bp) # Tests assert "get_answer" in app.jinja_env.globals.keys() assert app.jinja_env.globals["get_answer"] is get_answer assert app.jinja_env.globals["get_answer"]() == 42 with app.app_context(): rv = flask.render_template_string("{{ get_answer() }}") assert rv == "42"
def test_template_global(app): bp = flask.Blueprint('bp', __name__) @bp.app_template_global() def get_answer(): return 42 # Make sure the function is not in the jinja_env already assert 'get_answer' not in app.jinja_env.globals.keys() app.register_blueprint(bp) # Tests assert 'get_answer' in app.jinja_env.globals.keys() assert app.jinja_env.globals['get_answer'] is get_answer assert app.jinja_env.globals['get_answer']() == 42 with app.app_context(): rv = flask.render_template_string('{{ get_answer() }}') assert rv == '42'
def test_app_request_processing(): app = flask.Flask(__name__) bp = flask.Blueprint('bp', __name__) evts = [] @bp.before_app_first_request def before_first_request(): evts.append('first') @bp.before_app_request def before_app(): evts.append('before') @bp.after_app_request def after_app(response): response.data += b'|after' evts.append('after') return response @bp.teardown_app_request def teardown_app(exc): evts.append('teardown') app.register_blueprint(bp) # Setup routes for testing @app.route('/') def bp_endpoint(): return 'request' # before first request assert evts == [] # first request resp = app.test_client().get('/').data assert resp == b'request|after' assert evts == ['first', 'before', 'after', 'teardown'] # second request resp = app.test_client().get('/').data assert resp == b'request|after' assert evts == ['first'] + ['before', 'after', 'teardown'] * 2
def test_blueprint_renaming(app, client) -> None: bp = flask.Blueprint("bp", __name__) bp2 = flask.Blueprint("bp2", __name__) @bp.get("/") def index(): return flask.request.endpoint @bp2.get("/") def index2(): return flask.request.endpoint bp.register_blueprint(bp2, url_prefix="/a", name="sub") app.register_blueprint(bp, url_prefix="/a") app.register_blueprint(bp, url_prefix="/b", name="alt") assert client.get("/a/").data == b"bp.index" assert client.get("/b/").data == b"alt.index" assert client.get("/a/a/").data == b"bp.sub.index2" assert client.get("/b/a/").data == b"alt.sub.index2"
def test_nesting_url_prefixes( parent_init, child_init, parent_registration, child_registration, app, client, ) -> None: parent = flask.Blueprint("parent", __name__, url_prefix=parent_init) child = flask.Blueprint("child", __name__, url_prefix=child_init) @child.route("/") def index(): return "index" parent.register_blueprint(child, url_prefix=child_registration) app.register_blueprint(parent, url_prefix=parent_registration) response = client.get("/parent/child/") assert response.status_code == 200
def test_context_processing(): app = flask.Flask(__name__) answer_bp = flask.Blueprint('answer_bp', __name__) template_string = lambda: flask.render_template_string( '{% if notanswer %}{{ notanswer }} is not the answer. {% endif %}' '{% if answer %}{{ answer }} is the answer.{% endif %}' ) # App global context processor @answer_bp.app_context_processor def not_answer_context_processor(): return {'notanswer': 43} # Blueprint local context processor @answer_bp.context_processor def answer_context_processor(): return {'answer': 42} # Setup endpoints for testing @answer_bp.route('/bp') def bp_page(): return template_string() @app.route('/') def app_page(): return template_string() # Register the blueprint app.register_blueprint(answer_bp) c = app.test_client() app_page_bytes = c.get('/').data answer_page_bytes = c.get('/bp').data assert b'43' in app_page_bytes assert b'42' not in app_page_bytes assert b'42' in answer_page_bytes assert b'43' in answer_page_bytes
def test_app_request_processing(app, client): bp = flask.Blueprint("bp", __name__) evts = [] @bp.before_app_first_request def before_first_request(): evts.append("first") @bp.before_app_request def before_app(): evts.append("before") @bp.after_app_request def after_app(response): response.data += b"|after" evts.append("after") return response @bp.teardown_app_request def teardown_app(exc): evts.append("teardown") app.register_blueprint(bp) # Setup routes for testing @app.route("/") def bp_endpoint(): return "request" # before first request assert evts == [] # first request resp = client.get("/").data assert resp == b"request|after" assert evts == ["first", "before", "after", "teardown"] # second request resp = client.get("/").data assert resp == b"request|after" assert evts == ["first"] + ["before", "after", "teardown"] * 2
def test_dotted_names(app, client): frontend = flask.Blueprint("myapp.frontend", __name__) backend = flask.Blueprint("myapp.backend", __name__) @frontend.route("/fe") def frontend_index(): return flask.url_for("myapp.backend.backend_index") @frontend.route("/fe2") def frontend_page2(): return flask.url_for(".frontend_index") @backend.route("/be") def backend_index(): return flask.url_for("myapp.frontend.frontend_index") app.register_blueprint(frontend) app.register_blueprint(backend) assert client.get("/fe").data.strip() == b"/be" assert client.get("/fe2").data.strip() == b"/fe" assert client.get("/be").data.strip() == b"/fe"
def test_default_static_cache_timeout(app): class MyBlueprint(flask.Blueprint): def get_send_file_max_age(self, filename): return 100 blueprint = MyBlueprint('blueprint', __name__, static_folder='static') app.register_blueprint(blueprint) # try/finally, in case other tests use this app for Blueprint tests. max_age_default = app.config['SEND_FILE_MAX_AGE_DEFAULT'] try: with app.test_request_context(): unexpected_max_age = 3600 if app.config['SEND_FILE_MAX_AGE_DEFAULT'] == unexpected_max_age: unexpected_max_age = 7200 app.config['SEND_FILE_MAX_AGE_DEFAULT'] = unexpected_max_age rv = blueprint.send_static_file('index.html') cc = parse_cache_control_header(rv.headers['Cache-Control']) assert cc.max_age == 100 rv.close() finally: app.config['SEND_FILE_MAX_AGE_DEFAULT'] = max_age_default
def test_dotted_names(app, client): frontend = flask.Blueprint('myapp.frontend', __name__) backend = flask.Blueprint('myapp.backend', __name__) @frontend.route('/fe') def frontend_index(): return flask.url_for('myapp.backend.backend_index') @frontend.route('/fe2') def frontend_page2(): return flask.url_for('.frontend_index') @backend.route('/be') def backend_index(): return flask.url_for('myapp.frontend.frontend_index') app.register_blueprint(frontend) app.register_blueprint(backend) assert client.get('/fe').data.strip() == b'/be' assert client.get('/fe2').data.strip() == b'/fe' assert client.get('/be').data.strip() == b'/fe'
def test_context_processing(app, client): answer_bp = flask.Blueprint("answer_bp", __name__) template_string = lambda: flask.render_template_string( # noqa: E731 "{% if notanswer %}{{ notanswer }} is not the answer. {% endif %}" "{% if answer %}{{ answer }} is the answer.{% endif %}" ) # App global context processor @answer_bp.app_context_processor def not_answer_context_processor(): return {"notanswer": 43} # Blueprint local context processor @answer_bp.context_processor def answer_context_processor(): return {"answer": 42} # Setup endpoints for testing @answer_bp.route("/bp") def bp_page(): return template_string() @app.route("/") def app_page(): return template_string() # Register the blueprint app.register_blueprint(answer_bp) app_page_bytes = client.get("/").data answer_page_bytes = client.get("/bp").data assert b"43" in app_page_bytes assert b"42" not in app_page_bytes assert b"42" in answer_page_bytes assert b"43" in answer_page_bytes
def test_dotted_names(self): frontend = flask.Blueprint('myapp.frontend', __name__) backend = flask.Blueprint('myapp.backend', __name__) @frontend.route('/fe') def frontend_index(): return flask.url_for('myapp.backend.backend_index') @frontend.route('/fe2') def frontend_page2(): return flask.url_for('.frontend_index') @backend.route('/be') def backend_index(): return flask.url_for('myapp.frontend.frontend_index') app = flask.Flask(__name__) app.register_blueprint(frontend) app.register_blueprint(backend) c = app.test_client() self.assert_equal(c.get('/fe').data.strip(), b'/be') self.assert_equal(c.get('/fe2').data.strip(), b'/fe') self.assert_equal(c.get('/be').data.strip(), b'/fe')
def test_dotted_names(): frontend = keyes.Blueprint('myapp.frontend', __name__) backend = keyes.Blueprint('myapp.backend', __name__) @frontend.route('/fe') def frontend_index(): return keyes.url_for('myapp.backend.backend_index') @frontend.route('/fe2') def frontend_page2(): return keyes.url_for('.frontend_index') @backend.route('/be') def backend_index(): return keyes.url_for('myapp.frontend.frontend_index') app = keyes.Keyes(__name__) app.register_blueprint(frontend) app.register_blueprint(backend) c = app.test_client() assert c.get('/fe').data.strip() == b'/be' assert c.get('/fe2').data.strip() == b'/fe' assert c.get('/be').data.strip() == b'/fe'
def test_nested_callback_order(app, client): parent = flask.Blueprint("parent", __name__) child = flask.Blueprint("child", __name__) @app.before_request def app_before1(): flask.g.setdefault("seen", []).append("app_1") @app.teardown_request def app_teardown1(e=None): assert flask.g.seen.pop() == "app_1" @app.before_request def app_before2(): flask.g.setdefault("seen", []).append("app_2") @app.teardown_request def app_teardown2(e=None): assert flask.g.seen.pop() == "app_2" @app.context_processor def app_ctx(): return dict(key="app") @parent.before_request def parent_before1(): flask.g.setdefault("seen", []).append("parent_1") @parent.teardown_request def parent_teardown1(e=None): assert flask.g.seen.pop() == "parent_1" @parent.before_request def parent_before2(): flask.g.setdefault("seen", []).append("parent_2") @parent.teardown_request def parent_teardown2(e=None): assert flask.g.seen.pop() == "parent_2" @parent.context_processor def parent_ctx(): return dict(key="parent") @child.before_request def child_before1(): flask.g.setdefault("seen", []).append("child_1") @child.teardown_request def child_teardown1(e=None): assert flask.g.seen.pop() == "child_1" @child.before_request def child_before2(): flask.g.setdefault("seen", []).append("child_2") @child.teardown_request def child_teardown2(e=None): assert flask.g.seen.pop() == "child_2" @child.context_processor def child_ctx(): return dict(key="child") @child.route("/a") def a(): return ", ".join(flask.g.seen) @child.route("/b") def b(): return flask.render_template_string("{{ key }}") parent.register_blueprint(child) app.register_blueprint(parent) assert ( client.get("/a").data == b"app_1, app_2, parent_1, parent_2, child_1, child_2" ) assert client.get("/b").data == b"child"