auth: decorators: Make validate_request public
The `_validate_request` function in `milla.auth.decorators` is a helper used by the `auth_required` and `require_perms` decorators. It can also be used by custom decorators, so it is now a first-class, documented, public function.master
parent
f3a98c2697
commit
d955d23e91
|
@ -20,13 +20,18 @@
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from milla.auth import permissions
|
from milla.auth import permissions
|
||||||
import milla.auth
|
import milla.auth
|
||||||
|
import warnings
|
||||||
try:
|
try:
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pkg_resources = None
|
pkg_resources = None
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['auth_required', 'require_perms']
|
__all__ = [
|
||||||
|
'auth_required',
|
||||||
|
'require_perms',
|
||||||
|
'validate_request',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
VALIDATOR_EP_GROUP = 'milla.request_validator'
|
VALIDATOR_EP_GROUP = 'milla.request_validator'
|
||||||
|
@ -42,6 +47,33 @@ def _find_request(*args, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
def _validate_request(func, requirement, *args, **kwargs):
|
def _validate_request(func, requirement, *args, **kwargs):
|
||||||
|
warnings.warn(
|
||||||
|
'_validate_request is deprecated; use validate_request instead',
|
||||||
|
DeprecationWarning,
|
||||||
|
stacklevel=2,
|
||||||
|
)
|
||||||
|
validate_request(func, requirement, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def validate_request(func, requirement, *args, **kwargs):
|
||||||
|
'''Validate a request meets a given requirement
|
||||||
|
|
||||||
|
:param func: Decorated callable
|
||||||
|
:param requirement: A requirement that the request must meet in
|
||||||
|
order to be considered valid, as specified by the request
|
||||||
|
validator used by the application. This is usally a sub-class of
|
||||||
|
:py:class:`~milla.auth.permissions.PermissionRequirement`, or
|
||||||
|
some other class that has a ``check`` method that accepts a
|
||||||
|
:py:class:`~milla.Request` object as its only argument.
|
||||||
|
:param args: Positional arguments to pass through to the decorated
|
||||||
|
callable
|
||||||
|
:param kwargs: Keyword arguments to pass through to the decorated
|
||||||
|
callable
|
||||||
|
|
||||||
|
This is a helper function used by :py:func:`auth_required` and
|
||||||
|
:py:func:`require_perms` that can be used by other request
|
||||||
|
decorators as well.
|
||||||
|
'''
|
||||||
request = _find_request(*args, **kwargs)
|
request = _find_request(*args, **kwargs)
|
||||||
|
|
||||||
rv = request.config.get('request_validator', 'default')
|
rv = request.config.get('request_validator', 'default')
|
||||||
|
@ -103,7 +135,7 @@ def auth_required(func):
|
||||||
|
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
return _validate_request(func, None, *args, **kwargs)
|
return validate_request(func, None, *args, **kwargs)
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
|
@ -154,5 +186,5 @@ class require_perms(object):
|
||||||
def __call__(self, func):
|
def __call__(self, func):
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
return _validate_request(func, self.requirement, *args, **kwargs)
|
return validate_request(func, self.requirement, *args, **kwargs)
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
Loading…
Reference in New Issue