|
14 | 14 | # limitations under the License.
|
15 | 15 | #
|
16 | 16 |
|
17 |
| -import traceback |
18 | 17 | from datetime import datetime
|
19 | 18 |
|
20 | 19 | from imapclient import IMAPClient
|
|
23 | 22 | from lib import get_envelope_subject, \
|
24 | 23 | get_envelope_sender_first, \
|
25 | 24 | get_envelope_from_first, \
|
26 |
| - get_envelope_date |
| 25 | + get_envelope_date, \ |
| 26 | + create_logger |
27 | 27 | from lib.config import get_config, get_imap_folder, create_imap_connector
|
28 | 28 | from lib.connector import ImapConnector
|
29 | 29 |
|
30 | 30 | if __name__ == '__main__':
|
31 |
| - config = get_config() |
| 31 | + root_logger = create_logger() |
| 32 | + |
| 33 | + config = get_config(logger=root_logger) |
32 | 34 | if not config:
|
33 | 35 | exit(1)
|
34 | 36 |
|
35 | 37 | sections = config.sections()
|
36 | 38 | if not sections:
|
37 |
| - print('No IMAP servers configured. Nothing to do.') |
| 39 | + root_logger.warning('No IMAP servers configured. Nothing to do.') |
38 | 40 | exit(0)
|
39 | 41 |
|
| 42 | + root_logger.info('Testing %s configured IMAP connections...', len(sections)) |
40 | 43 | for section in sections:
|
41 |
| - connector: ImapConnector = create_imap_connector(config=config, section=section) |
| 44 | + logger = create_logger(section) |
| 45 | + |
| 46 | + try: |
| 47 | + connector: ImapConnector = create_imap_connector(config=config, section=section) |
| 48 | + except Exception as ex: |
| 49 | + logger.exception('Invalid configuration. %s', str(ex)) |
| 50 | + continue |
42 | 51 |
|
43 |
| - print('[%s] Testing connection...' % section) |
| 52 | + logger.info('Testing connection...') |
44 | 53 | client: IMAPClient | None = None
|
45 | 54 | try:
|
46 | 55 | folder = get_imap_folder(config=config, section=section)
|
|
51 | 60 | select_folder_readonly=True,
|
52 | 61 | )
|
53 | 62 | except Exception as ex:
|
54 |
| - print('[%s] ERROR: Connection failed! %s\n%s' % ( |
55 |
| - section, |
56 |
| - str(ex), |
57 |
| - '\n'.join(traceback.format_exception(ex)), |
58 |
| - )) |
| 63 | + logger.exception('Connection failed. %s', str(ex)) |
59 | 64 | continue
|
60 | 65 |
|
61 |
| - print('[%s] Connection successful.' % section) |
| 66 | + logger.info('Connection successful.') |
62 | 67 |
|
63 | 68 | try:
|
64 | 69 | capabilities = []
|
65 | 70 | for cap in client.capabilities():
|
66 | 71 | capabilities.append(cap.decode('utf-8'))
|
67 | 72 |
|
68 |
| - print('[%s] Capabilities: %s' % (section, ', '.join(sorted(capabilities)),)) |
| 73 | + logger.info('Capabilities: %s', ', '.join(sorted(capabilities))) |
69 | 74 | except Exception as ex:
|
70 |
| - print('[%s] ERROR: Can\'t load server capabilities! %s\n%s' % ( |
71 |
| - section, |
72 |
| - str(ex), |
73 |
| - '\n'.join(traceback.format_exception(ex)), |
74 |
| - )) |
| 75 | + logger.exception('Can\'t load server capabilities. %s', str(ex)) |
75 | 76 | continue
|
76 | 77 |
|
77 |
| - print('[%s] Fetch latest message from "%s".' % (section, folder,)) |
| 78 | + logger.info('Fetch latest message from "%s".', folder) |
78 | 79 | message_numbers = client.search()
|
79 | 80 | if len(message_numbers) < 1:
|
80 |
| - print('[%s] No messages found in "%s".' % (section, folder,)) |
| 81 | + logger.info('No messages found in "%s".', folder) |
81 | 82 | continue
|
82 | 83 |
|
83 | 84 | last_message_number = message_numbers[len(message_numbers) - 1]
|
84 |
| - # print('[%s] Fetching message number #%s...' % (section, last_message_number,)) |
85 |
| - |
86 | 85 | result = client.fetch([last_message_number], ['ENVELOPE'])
|
87 | 86 | if last_message_number not in result:
|
88 |
| - print('[%s] ERROR: No envelope data found for message nr %s in "%s".' % ( |
89 |
| - section, |
90 |
| - last_message_number, |
91 |
| - folder, |
92 |
| - )) |
| 87 | + logger.error('No envelope data found for message nr %s in "%s".', last_message_number, folder) |
93 | 88 | continue
|
94 | 89 |
|
95 |
| - print('[%s] Latest message in "%s":' % (section, folder,)) |
| 90 | + message_info = ['Latest message in "%s":' % folder] |
96 | 91 |
|
97 | 92 | last_message_envelope: Envelope = result[last_message_number][b'ENVELOPE']
|
98 |
| - # pprint(last_message_envelope) |
99 | 93 |
|
100 | 94 | msg_date: datetime | None = get_envelope_date(last_message_envelope)
|
101 |
| - print('-> Date : %s' % msg_date) |
| 95 | + message_info.append('-> Date : %s' % msg_date) |
102 | 96 |
|
103 | 97 | subject: str | None = get_envelope_subject(last_message_envelope)
|
104 |
| - print('-> Subject : %s' % subject) |
| 98 | + message_info.append('-> Subject : %s' % subject) |
105 | 99 |
|
106 | 100 | from_address: Address | None = get_envelope_from_first(last_message_envelope)
|
107 |
| - print('-> From : %s' % str(from_address)) |
| 101 | + message_info.append('-> From : %s' % str(from_address)) |
108 | 102 |
|
109 | 103 | sender_address: Address | None = get_envelope_sender_first(last_message_envelope)
|
110 |
| - print('-> Sender : %s' % str(sender_address)) |
| 104 | + message_info.append('-> Sender : %s' % str(sender_address)) |
| 105 | + |
| 106 | + logger.info('\n'.join(message_info)) |
111 | 107 |
|
112 | 108 | finally:
|
113 | 109 | # noinspection PyBroadException
|
|
0 commit comments