Code Duplication    Length = 20-21 lines in 3 locations

flask_extras/decorators.py 3 locations

@@ 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=[]):