Browse Source

Added required_methods

pull/502/merge
Armin Ronacher 13 years ago
parent
commit
dbfd406a21
  1. 2
      CHANGES
  2. 4
      docs/api.rst
  3. 9
      flask/app.py

2
CHANGES

@ -68,6 +68,8 @@ Relase date to be decided, codename to be chosen.
longer arguments to the response object, they now have a defined meaning. longer arguments to the response object, they now have a defined meaning.
- Added :attr:`flask.Flask.request_globals_class` to allow a specific class to - Added :attr:`flask.Flask.request_globals_class` to allow a specific class to
be used on creation of the :data:`~flask.g` instance of each request. be used on creation of the :data:`~flask.g` instance of each request.
- Added `required_methods` attribute to view functions to force-add methods
on registration.
Version 0.8.1 Version 0.8.1
------------- -------------

4
docs/api.rst

@ -636,6 +636,10 @@ some defaults to :meth:`~flask.Flask.add_url_rule` or general behavior:
decorators that want to customize the `OPTIONS` response on a per-view decorators that want to customize the `OPTIONS` response on a per-view
basis. basis.
- `required_methods`: if this attribute is set, Flask will always add
these methods when registering a URL rule even if the methods were
explicitly overriden in the ``route()`` call.
Full example:: Full example::
def index(): def index():

9
flask/app.py

@ -915,6 +915,10 @@ class Flask(_PackageBoundObject):
# a tuple of only `GET` as default. # a tuple of only `GET` as default.
if methods is None: if methods is None:
methods = getattr(view_func, 'methods', None) or ('GET',) methods = getattr(view_func, 'methods', None) or ('GET',)
methods = set(methods)
# Methods that should always be added
required_methods = set(getattr(view_func, 'required_methods', ()))
# starting with Flask 0.8 the view_func object can disable and # starting with Flask 0.8 the view_func object can disable and
# force-enable the automatic options handling. # force-enable the automatic options handling.
@ -923,11 +927,14 @@ class Flask(_PackageBoundObject):
if provide_automatic_options is None: if provide_automatic_options is None:
if 'OPTIONS' not in methods: if 'OPTIONS' not in methods:
methods = tuple(methods) + ('OPTIONS',)
provide_automatic_options = True provide_automatic_options = True
required_methods.add('OPTIONS')
else: else:
provide_automatic_options = False provide_automatic_options = False
# Add the required methods now.
methods |= required_methods
# due to a werkzeug bug we need to make sure that the defaults are # due to a werkzeug bug we need to make sure that the defaults are
# None if they are an empty dictionary. This should not be necessary # None if they are an empty dictionary. This should not be necessary
# with Werkzeug 0.7 # with Werkzeug 0.7

Loading…
Cancel
Save