Completed
Push — master ( 12c888...988ad6 )
by Thomas
11:22
created

exabgp.logger.format   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 60
dl 0
loc 88
rs 10
c 0
b 0
f 0
wmc 11

8 Functions

Rating   Name   Duplication   Size   Complexity  
A lazyformat() 0 6 1
A lazynlri() 0 8 3
A formater() 0 26 1
A _long_formater() 0 3 1
A _short_formater() 0 2 1
A _short_color_formater() 0 4 1
A _long_color_formater() 0 5 1
A lazyattribute() 0 11 2
1
import os
2
import time
3
4
from exabgp.logger import color
5
from exabgp.logger.tty import istty
6
from exabgp.util.od import od
7
8
9
def _short_formater(message, source, level, timestamp):
10
    return f'{source:<15} {message}'
11
12
13
def _long_formater(message, source, level, timestamp):
14
    now = time.strftime('%H:%M:%S', timestamp)
15
    return f'{now} {os.getpid():<6} {source:<15} {message}'
16
17
18
def _short_color_formater(message, source, level, timestamp):
19
    source = color.source(level, source)
20
    message = color.message(level, message)
21
    return f'\r{source:<15} {message}'
22
23
24
def _long_color_formater(message, source, level, timestamp):
25
    now = time.strftime('%H:%M:%S', timestamp)
26
    source = color.source(level, source)
27
    message = color.message(level, message)
28
    return f'\r{now} {os.getpid():<6} {source:<15} {message}'
29
30
31
def formater(short, destination):
32
    # service, short, tty
33
    # fmt: off
34
    _formater = {
35
        ('stdout', True, True): _short_color_formater,
36
        ('stdout', True, False): _short_formater,
37
        ('stdout', False, True): _long_color_formater,
38
        ('stdout', False, False): _long_formater,
39
40
        ('stderr', True, True): _short_color_formater,
41
        ('stderr', True, False): _short_formater,
42
        ('stderr', False, True): _long_color_formater,
43
        ('stderr', False, False): _long_formater,
44
45
        ('syslog', True, True): _short_formater,
46
        ('syslog', True, False): _short_formater,
47
        ('syslog', False, True): _short_formater,
48
        ('syslog', False, False): _short_formater,
49
50
        ('file', True, True): _long_formater,
51
        ('file', True, False): _long_formater,
52
        ('file', False, True): _long_formater,
53
        ('file', False, False): _long_formater,
54
    }
55
    # fmt: on
56
    return _formater.get((destination, short, istty(destination)), None)
57
58
59
def lazyformat(prefix, message, formater=od):
60
    def _lazy():
61
        formated = formater(message)
62
        return '%s (%4d) %s' % (prefix, len(message), formated)
63
64
    return _lazy
65
66
67
def lazyattribute(flag, aid, length, data):
68
    def _lazy():
69
        return 'attribute %-18s flag 0x%02x type 0x%02x len 0x%02x%s' % (
70
            str(aid),
71
            flag,
72
            int(aid),
73
            length,
74
            ' payload %s' % od(data) if data else '',
75
        )
76
77
    return _lazy
78
79
80
def lazynlri(afi, safi, addpath, data):
81
    def _lazy():
82
        family = '%s %s' % (afi, safi)
83
        path = 'with path-information' if addpath else 'without path-information'
84
        payload = od(data) if data else 'none'
85
        return 'NLRI      %-18s %-28s payload %s' % (family, path, payload)
86
87
    return _lazy
88