| @@ 53-73 (lines=21) @@ | ||
| 50 | return outer |
|
| 51 | ||
| 52 | ||
| 53 | def require_args(args={}, use_values=True): |
|
| 54 | """Check for required args (and values) in a view. |
|
| 55 | ||
| 56 | @require_args({'paginate': True}) |
|
| 57 | @def view(): |
|
| 58 | pass |
|
| 59 | """ |
|
| 60 | def outer(func, *args, **kwargs): |
|
| 61 | @wraps(func) |
|
| 62 | def inner(*args, **kwargs): |
|
| 63 | if args: |
|
| 64 | s1 = set(args.values()) |
|
| 65 | s2 = set([k for k, v in request.args.items()]) |
|
| 66 | matches = s1.intersection(s2) |
|
| 67 | diff = s1.difference(s2) |
|
| 68 | if len(s1) != len(matches): |
|
| 69 | raise ValueError( |
|
| 70 | 'Missing required arg(s): {}'.format(diff)) |
|
| 71 | return func(*args, **kwargs) |
|
| 72 | return inner |
|
| 73 | return outer |
|
| 74 | ||
| @@ 30-50 (lines=21) @@ | ||
| 27 | return outer |
|
| 28 | ||
| 29 | ||
| 30 | def require_cookies(cookies=[]): |
|
| 31 | """Check for required cookies in a view. |
|
| 32 | ||
| 33 | @require_cookies(['csrftoken', 'session']) |
|
| 34 | @def view(): |
|
| 35 | pass |
|
| 36 | """ |
|
| 37 | def outer(func, *args, **kwargs): |
|
| 38 | @wraps(func) |
|
| 39 | def inner(*args, **kwargs): |
|
| 40 | if cookies: |
|
| 41 | s1 = set(cookies) |
|
| 42 | s2 = set([k for k, v in request.cookies.items()]) |
|
| 43 | matches = s1.intersection(s2) |
|
| 44 | diff = s1.difference(s2) |
|
| 45 | if len(s1) != len(matches): |
|
| 46 | raise ValueError( |
|
| 47 | 'Missing required cookie(s): {}'.format(diff)) |
|
| 48 | return func(*args, **kwargs) |
|
| 49 | return inner |
|
| 50 | return outer |
|
| 51 | ||
| 52 | ||
| 53 | def require_args(args={}, use_values=True): |
|
| @@ 8-27 (lines=20) @@ | ||
| 5 | from flask import request |
|
| 6 | ||
| 7 | ||
| 8 | def require_headers(headers=[]): |
|
| 9 | """Check for required headers in a view. |
|
| 10 | ||
| 11 | @require_headers(['X-Foo']) |
|
| 12 | @def view(): |
|
| 13 | pass |
|
| 14 | """ |
|
| 15 | def outer(func, *args, **kwargs): |
|
| 16 | @wraps(func) |
|
| 17 | def inner(*args, **kwargs): |
|
| 18 | if headers: |
|
| 19 | s1, s2 = set(headers), set([h[0] for h in request.headers]) |
|
| 20 | matches = s1.intersection(s2) |
|
| 21 | diff = s1.difference(s2) |
|
| 22 | if len(s1) != len(matches): |
|
| 23 | raise ValueError( |
|
| 24 | 'Missing required header(s): {}'.format(list(diff))) |
|
| 25 | return func(*args, **kwargs) |
|
| 26 | return inner |
|
| 27 | return outer |
|
| 28 | ||
| 29 | ||
| 30 | def require_cookies(cookies=[]): |
|