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

1import logging 

2from typing import List 

3 

4from requests import Timeout 

5import requests 

6 

7from rfpy import conf 

8 

9 

10POST_MARK_URL = "https://api.postmarkapp.com/email" 

11 

12 

13class PostmarkHandler(logging.Handler): 

14 """ 

15 Post logging messages to Postmark's HTTP email API 

16 """ 

17 

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 

24 

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")