Beispiel #1
0
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/"
Beispiel #2
0
    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")
Beispiel #3
0
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'
Beispiel #4
0
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"
Beispiel #5
0
    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')
Beispiel #6
0
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/'
Beispiel #7
0
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']
Beispiel #8
0
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
Beispiel #9
0
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"]
Beispiel #10
0
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
Beispiel #11
0
 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))
Beispiel #12
0
 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')
Beispiel #13
0
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'
Beispiel #14
0
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'
Beispiel #15
0
 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')
Beispiel #16
0
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)
Beispiel #17
0
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'
Beispiel #18
0
 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))
Beispiel #19
0
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'
Beispiel #20
0
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)
Beispiel #21
0
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"
Beispiel #22
0
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"
Beispiel #23
0
 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))
Beispiel #24
0
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)
Beispiel #25
0
 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')
Beispiel #26
0
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'
Beispiel #27
0
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
Beispiel #28
0
 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)
Beispiel #29
0
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'
Beispiel #30
0
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
Beispiel #31
0
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
Beispiel #32
0
    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')
Beispiel #33
0
    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)
Beispiel #34
0
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'
Beispiel #35
0
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
Beispiel #36
0
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'
Beispiel #37
0
    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')
Beispiel #38
0
    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)
Beispiel #39
0
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
Beispiel #40
0
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"
Beispiel #41
0
    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/')
Beispiel #42
0
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/'
Beispiel #43
0
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"
Beispiel #44
0
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'
Beispiel #45
0
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
Beispiel #46
0
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"
Beispiel #47
0
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
Beispiel #48
0
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
Beispiel #49
0
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
Beispiel #50
0
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"
Beispiel #51
0
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
Beispiel #52
0
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'
Beispiel #53
0
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
Beispiel #54
0
    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')
Beispiel #55
0
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'
Beispiel #56
0
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"