Coverage for rfpy/conf/logHandlers.py: 100%
22 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-24 10:52 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-24 10:52 +0000
1import logging
2from typing import List
4from requests import Timeout
5import requests
7from rfpy import conf
10POST_MARK_URL = "https://api.postmarkapp.com/email"
13class PostmarkHandler(logging.Handler):
14 """
15 Post logging messages to Postmark's HTTP email API
16 """
18 def __init__(self, fromaddr: str, toaddrs: List[str], subject: str) -> None:
19 logging.Handler.__init__(self)
20 self.fromaddr = fromaddr
21 self.toaddrs = toaddrs
22 self.subject = subject
23 self.level
25 def emit(self, record):
26 if conf.CONF.postmark_logging_key == "POSTMARK_API_TEST":
27 # Don't bother making http request if no email delivery
28 return
29 headers = {
30 "Accept": "application/json",
31 "Content-Type": "application/json",
32 "X-Postmark-Server-Token": conf.CONF.postmark_logging_key,
33 }
34 js_data = {
35 "From": self.fromaddr,
36 "To": ",".join(self.toaddrs),
37 "Subject": self.subject,
38 "TextBody": self.format(record),
39 "MessageStream": "outbound",
40 }
41 try:
42 requests.post(POST_MARK_URL, headers=headers, json=js_data, timeout=3)
43 except Timeout:
44 print("Postmark Log handler timed out")