Code Duplication    Length = 20-21 lines in 2 locations

flask_extras/decorators.py 2 locations

@@ 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(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=[]):
@@ 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(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(list(diff)))
48
            return func(*args, **kwargs)
49
        return inner
50
    return outer
51
52
53
def require_args(params=[]):