@@ -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,18 +44,46 @@ 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"\[.+\]\s([A-Za-z\s] +).+?(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 :
5151 data ["maintenance_id" ] = search .group (2 )
5252 data ["start" ] = self .dt2ts (parser .parse (search .group (3 )))
5353 data ["end" ] = self .dt2ts (parser .parse (search .group (4 )))
54- if search .group (5 ) == "START" :
54+ status = search .group (5 ).strip ()
55+ if status == "START" :
5556 data ["status" ] = Status ("IN-PROCESS" )
56- elif search . group ( 5 ) == "COMPLETED" :
57+ elif status == "COMPLETED" :
5758 data ["status" ] = Status ("COMPLETED" )
5859 else :
5960 data ["status" ] = Status ("CONFIRMED" )
60- data ["summary" ] = subject
61+ data ["summary" ] = search .group (1 ).strip ()
62+ return [data ]
63+
64+
65+ class SubjectParserColt2 (EmailSubjectParser ):
66+ """Subject parser for Colt notifications - type 2."""
67+
68+ def parse_subject (self , subject ):
69+ r"""Parse subject.
70+
71+ Example:
72+ - [ 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
73+ - [ 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
74+ """
75+ data = {}
76+ search = re .search (
77+ 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]+).+" ,
78+ subject ,
79+ )
80+ if search :
81+ if search .group (1 ).upper () == "CANCELLATION" :
82+ data ["status" ] = Status ("CANCELLED" )
83+ else :
84+ data ["status" ] = Status ("CONFIRMED" )
85+ data ["maintenance_id" ] = search .group (3 )
86+ data ["start" ] = self .dt2ts (parser .parse (search .group (4 )))
87+ data ["end" ] = self .dt2ts (parser .parse (search .group (5 )))
88+ data ["summary" ] = search .group (2 ).strip ()
6189 return [data ]
0 commit comments