Skip to content

Commit 0b9495a

Browse files
committed
Colt parsing updates to align with encoding fix in nautobot
1 parent 89b180a commit 0b9495a

File tree

5 files changed

+381
-3
lines changed

5 files changed

+381
-3
lines changed

circuit_maintenance_parser/parsers/colt.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def parse_csv(raw):
3333

3434

3535
class 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]

circuit_maintenance_parser/provider.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from circuit_maintenance_parser.parsers.aquacomms import HtmlParserAquaComms1, SubjectParserAquaComms1
2020
from circuit_maintenance_parser.parsers.aws import SubjectParserAWS1, TextParserAWS1
2121
from circuit_maintenance_parser.parsers.cogent import HtmlParserCogent1
22-
from circuit_maintenance_parser.parsers.colt import CsvParserColt1, SubjectParserColt1
22+
from circuit_maintenance_parser.parsers.colt import CsvParserColt1, SubjectParserColt1, SubjectParserColt2
2323
from circuit_maintenance_parser.parsers.equinix import HtmlParserEquinix, SubjectParserEquinix
2424
from circuit_maintenance_parser.parsers.gtt import HtmlParserGTT1
2525
from circuit_maintenance_parser.parsers.hgc import HtmlParserHGC1, HtmlParserHGC2, SubjectParserHGC1
@@ -194,6 +194,7 @@ class Colt(GenericProvider):
194194

195195
_processors: List[GenericProcessor] = [
196196
CombinedProcessor(data_parsers=[EmailDateParser, CsvParserColt1, SubjectParserColt1]),
197+
CombinedProcessor(data_parsers=[EmailDateParser, CsvParserColt1, SubjectParserColt2]),
197198
]
198199
_default_organizer = "[email protected]"
199200

0 commit comments

Comments
 (0)