Test Failed
Push — main ( 0a80b2...05d6aa )
by Sat CFDI
03:21
created

satdigitalinvoice.log_tools   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 40
dl 0
loc 61
rs 10
c 0
b 0
f 0

4 Functions

Rating   Name   Duplication   Size   Complexity  
A log_line() 0 5 1
A log_email() 0 6 1
A log_item() 0 5 1
A cfdi_header() 0 3 1

4 Methods

Rating   Name   Duplication   Size   Complexity  
A LogHandler.__init__() 0 4 1
A LogAdapter.info_yaml() 0 3 1
A LogHandler.clear() 0 3 1
A LogHandler.emit() 0 4 1
1
import logging
2
3
import yaml
4
from satcfdi import Code, CFDI
5
6
7
class LogAdapter(logging.LoggerAdapter):
8
    def info_yaml(self, data):
9
        self.info(
10
            yaml.safe_dump(data, allow_unicode=True, width=1280, sort_keys=False)
11
        )
12
13
14
logger = LogAdapter(logging.getLogger())
15
16
17
class LogHandler(logging.StreamHandler):
18
    def __init__(self, console):
19
        super().__init__()
20
        self.buffer = ""
21
        self.console = console
22
23
    def emit(self, record):
24
        msg = self.format(record)
25
        self.buffer += msg + '\n'
26
        self.console.update(value=self.buffer)
27
28
    def clear(self):
29
        self.buffer = ""
30
        self.console.update(value="")
31
32
33
def log_email(receptor, notify_invoices, facturas_pendientes):
34
    logger.info_yaml({
35
        "Rfc": Code(receptor["Rfc"], receptor["RazonSocial"]),
36
        "Facturas": [f"{i.name} - {i.uuid}" for i in notify_invoices],
37
        "Pendientes Meses Anteriores": [f"{i.name} - {i.uuid}" for i in facturas_pendientes],
38
        "Correos": receptor["Email"]
39
    })
40
41
42
def log_line(text, exc_info=False):
43
    ln = (150 - len(text)) // 2
44
    logger.info(
45
        ("=" * ln) + " " + text + " " + ("=" * ln),
46
        exc_info=exc_info
47
    )
48
49
50
def log_item(text, exc_info=False):
51
    ln = (150 - len(text)) // 2
52
    logger.info(
53
        ("*" * ln) + " " + text + " " + ("*" * ln),
54
        exc_info=exc_info
55
    )
56
57
58
def cfdi_header(cfdi):
59
    receptor = Code(cfdi['Receptor']['Rfc'], cfdi['Receptor']['Nombre'])
60
    return f"{cfdi.name} - {cfdi.uuid} {receptor}"