@@ -33,7 +33,7 @@ def parse_csv(raw):
3333
3434
3535class SubjectParserColt1 (EmailSubjectParser ):
36- """Subject parser for Colt notifications."""
36+ """Subject parser for Colt notifications - type 1 ."""
3737
3838 def parse_subject (self , subject ):
3939 """Parse subject.
@@ -44,7 +44,7 @@ def parse_subject(self, subject):
4444 """
4545 data = {}
4646 search = re .search (
47- r"\[.+\](.+).+?(CRQ\w+-\w+).+? (\d+/\d+/\d+\s\d+:\d+:\d+\s[A-Z]+).+?(\d+/\d+/\d+\s\d+:\d+:\d+\s[A-Z]+).+?([A-Z]+)" ,
47+ r"\[.+\](.+).+?(CRQ\w+-\w+)\s (\d+/\d+/\d+\s\d+:\d+:\d+\s+ [A-Z]+).+?(\d+/\d+/\d+\s\d+:\d+:\d+\s+ [A-Z]+).+?([A-Z]+)" ,
4848 subject ,
4949 )
5050 if search :
@@ -59,3 +59,30 @@ def parse_subject(self, subject):
5959 data ["status" ] = Status ("CONFIRMED" )
6060 data ["summary" ] = subject
6161 return [data ]
62+
63+
64+ class SubjectParserColt2 (EmailSubjectParser ):
65+ """Subject parser for Colt notifications - type 2."""
66+
67+ def parse_subject (self , subject ):
68+ r"""Parse subject.
69+
70+ Example:
71+ - [ EXTERNAL ] Cancellation Colt Third Party Maintenance Notification -\n CRQ1-12345678 [07/12/2021 23:00:00 GMT - 08/12/2021 05:00:00 GMT] for\n ACME, 123456
72+ - [ EXTERNAL ] Colt Third Party Maintenance Notification -\n CRQ1-48926339503 [07/12/2021 23:00:00 GMT - 08/12/2021 05:00:00 GMT] for\n ACME, 123456
73+ """
74+ data = {}
75+ search = re .search (
76+ r"\[.+\]\s+([A-Za-z]+)\s+([\w\s]+)[\s-]+?(CRQ\w+-\w+).+?(\d+/\d+/\d+\s\d+:\d+:\d+\s+[A-Z]+).+?(\d+/\d+/\d+\s\d+:\d+:\d+\s[A-Z]+).+" ,
77+ subject ,
78+ )
79+ if search :
80+ if search .group (1 ).upper () == "CANCELLATION" :
81+ data ["status" ] = Status ("CANCELLED" )
82+ else :
83+ data ["status" ] = Status ("CONFIRMED" )
84+ data ["maintenance_id" ] = search .group (3 )
85+ data ["start" ] = self .dt2ts (parser .parse (search .group (4 )))
86+ data ["end" ] = self .dt2ts (parser .parse (search .group (5 )))
87+ data ["summary" ] = subject
88+ return [data ]
0 commit comments