Completed
Push — master ( f66965...c4eb3d )
by Chris
01:32
created

require_cookies()   B

Complexity

Conditions 6

Size

Total Lines 21

Duplication

Lines 21
Ratio 100 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
c 1
b 0
f 0
dl 21
loc 21
rs 7.8867
1
"""App view decorators."""
2
3
from functools import wraps
4
5
from flask import request
6
7
8 View Code Duplication
def require_headers(headers=[]):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
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 View Code Duplication
def require_cookies(cookies=[]):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
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 View Code Duplication
def require_args(args={}, use_values=True):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
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