Completed
Push — master ( c11a3c...d81170 )
by Felipe A.
01:04
created

Config.__getitem__()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 2
rs 10
cc 1
1
import flask
2
import flask.config
3
4
from .compat import basestring
5
6
7
class Config(flask.config.Config):
8
    '''
9
    Flask-compatible case-insensitive Config classt.
10
11
    See :type:`flask.config.Config` for more info.
12
    '''
13
    def __init__(self, root, defaults=None):
14
        if defaults:
15
            defaults = self.gendict(defaults)
16
        super(Config, self).__init__(root, defaults)
17
18
    @classmethod
19
    def genkey(cls, k):
20
        '''
21
        Key translation function.
22
23
        :param k: key
24
        :type k: str
25
        :returns: uppercase key
26
        ;rtype: str
27
        '''
28
        return k.upper() if isinstance(k, basestring) else k
29
30
    @classmethod
31
    def gendict(cls, *args, **kwargs):
32
        '''
33
        Pre-translated key dictionary constructor.
34
35
        See :type:`dict` for more info.
36
37
        :returns: dictionary with uppercase keys
38
        :rtype: dict
39
        '''
40
        gk = cls.genkey
41
        return dict((gk(k), v) for k, v in dict(*args, **kwargs).items())
42
43
    def __getitem__(self, k):
44
        return super(Config, self).__getitem__(self.genkey(k))
45
46
    def __setitem__(self, k, v):
47
        super(Config, self).__setitem__(self.genkey(k), v)
48
49
    def __delitem__(self, k):
50
        super(Config, self).__delitem__(self.genkey(k))
51
52
    def get(self, k, default=None):
53
        return super(Config, self).get(self.genkey(k), default)
54
55
    def pop(self, k, *args):
56
        return super(Config, self).pop(self.genkey(k), *args)
57
58
    def update(self, *args, **kwargs):
59
        super(Config, self).update(self.gendict(*args, **kwargs))
60
61
62
class Flask(flask.Flask):
63
    '''
64
    Flask class using case-insensitive :type:`Config` class.
65
66
    See :type:`flask.Flask` for more info.
67
    '''
68
    config_class = Config
69