From 99be2ec022e2ceb1c21527c8278a7179630430d5 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Sun, 16 Jan 2011 17:13:25 +0100 Subject: [PATCH] Flask no longer internally depends on rules being added through the add_url_rule function --- CHANGES | 3 +++ flask/app.py | 3 ++- tests/flask_tests.py | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 7d204466..017eee1f 100644 --- a/CHANGES +++ b/CHANGES @@ -27,6 +27,9 @@ Release date to be announced, codename to be selected used to flip the setting of exception propagation which previously was linked to `DEBUG` alone and is now linked to either `DEBUG` or `TESTING`. +- Flask no longer internally depends on rules being added through the + `add_url_rule` function and can now also accept regular werkzeug + rules added to the url map. Version 0.6.1 ------------- diff --git a/flask/app.py b/flask/app.py index 7172fccb..448df8fc 100644 --- a/flask/app.py +++ b/flask/app.py @@ -730,7 +730,8 @@ class Flask(_PackageBoundObject): rule = req.url_rule # if we provide automatic options for this URL and the # request came with the OPTIONS method, reply automatically - if rule.provide_automatic_options and req.method == 'OPTIONS': + if getattr(rule, 'provide_automatic_options', False) \ + and req.method == 'OPTIONS': return self.make_default_options_response() # otherwise dispatch to the handler for that endpoint return self.view_functions[rule.endpoint](**req.view_args) diff --git a/tests/flask_tests.py b/tests/flask_tests.py index c5700ff8..e045290a 100644 --- a/tests/flask_tests.py +++ b/tests/flask_tests.py @@ -206,6 +206,24 @@ class BasicFunctionalityTestCase(unittest.TestCase): assert rv.status_code == 405 assert sorted(rv.allow) == ['GET', 'HEAD', 'OPTIONS', 'POST'] + def test_werkzeug_routing(self): + from werkzeug.routing import Submount, Rule + app = flask.Flask(__name__) + app.url_map.add(Submount('/foo', [ + Rule('/bar', endpoint='bar'), + Rule('/', endpoint='index') + ])) + def bar(): + return 'bar' + def index(): + return 'index' + app.view_functions['bar'] = bar + app.view_functions['index'] = index + + c = app.test_client() + assert c.get('/foo/').data == 'index' + assert c.get('/foo/bar').data == 'bar' + def test_session(self): app = flask.Flask(__name__) app.secret_key = 'testkey'