Test Failed
Push — develop ( a80574...5ed66c )
by Dean
02:36
created

InterfaceMessagesMeta   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 27
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 7
c 0
b 0
f 0
dl 0
loc 27
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A severity() 0 7 2
A record() 0 6 2
A message() 0 7 2
A critical() 0 3 1
1
from six import add_metaclass
2
from sortedcontainers import SortedSet
3
import collections
4
import logging
5
import time
6
7
Record = collections.namedtuple('Record', 'level timestamp message')
8
9
10
class InterfaceMessagesMeta(type):
11
    @property
12
    def critical(cls):
13
        return cls.severity >= logging.CRITICAL
14
15
    @property
16
    def message(cls):
17
        if not cls.records:
18
            return logging.NOTSET
19
20
        # Return the latest highest level/severity message
21
        return cls.records[-1].message
22
23
    @property
24
    def record(cls):
25
        if not cls.records:
26
            return None
27
28
        return cls.records[-1]
29
30
    @property
31
    def severity(cls):
32
        if not cls.records:
33
            return logging.NOTSET
34
35
        # Return the highest error level/severity
36
        return cls.records[-1].level
37
38
39
@add_metaclass(InterfaceMessagesMeta)
40
class InterfaceMessages(object):
41
    records = SortedSet()
42
43
    @classmethod
44
    def add(cls, level, message, *args):
45
        cls.records.add(Record(
46
            level=level,
47
            timestamp=time.time(),
48
            message=message % args
49
        ))
50