Passed
Push — master ( b29ecb...3caa16 )
by
unknown
01:14
created

RandomStringExtension.__init__()   A

Complexity

Conditions 2

Size

Total Lines 10
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 10
rs 10
c 0
b 0
f 0
cc 2
nop 2
1
# -*- coding: utf-8 -*-
2
3
"""Jinja2 extensions."""
4
5
import json
6
import string
7
try:
8
    # Python 3.6 and above
9
    from secrets import choice
10
except ImportError:
11
    from random import choice
12
13
from jinja2.ext import Extension
14
15
16
class JsonifyExtension(Extension):
17
    """Jinja2 extension to convert a Python object to JSON."""
18
19
    def __init__(self, environment):
20
        """Initialize the extension with the given environment."""
21
        super(JsonifyExtension, self).__init__(environment)
22
23
        def jsonify(obj):
24
            return json.dumps(obj, sort_keys=True, indent=4)
25
26
        environment.filters['jsonify'] = jsonify
27
28
29
class RandomStringExtension(Extension):
30
    """Jinja2 extension to create a random string."""
31
32
    def __init__(self, environment):
33
        super(RandomStringExtension, self).__init__(environment)
34
35
        def random_ascii_string(length, punctuation=False):
36
            if punctuation:
37
                corpus = "".join((string.ascii_letters, string.punctuation))
38
            else:
39
                corpus = string.ascii_letters
40
            return "".join(choice(corpus) for _ in range(length))
41
        environment.globals.update(random_ascii_string=random_ascii_string)
42