|
17 | 17 | Text, |
18 | 18 | ) |
19 | 19 |
|
20 | | -# pylint: disable=too-many-nested-blocks, too-many-branches |
| 20 | +# pylint: disable=too-many-nested-blocks, too-many-branches, too-many-lines |
21 | 21 |
|
22 | 22 | logger = logging.getLogger(__name__) |
23 | 23 |
|
@@ -1266,38 +1266,33 @@ def parse_html(self, soup): |
1266 | 1266 | =20 |
1267 | 1267 | """ |
1268 | 1268 | data = {"circuits": [], "status": Status.CONFIRMED, "stamp": 0} |
1269 | | - maintenance_id = "" |
1270 | | - impact = Impact.OUTAGE |
1271 | | - clean_string = soup.get_text() |
1272 | | - clean_list = clean_string.splitlines() |
1273 | | - cleaner_list = [] |
1274 | | - for line in clean_list: |
1275 | | - newline = line.strip() |
1276 | | - if newline != "": |
1277 | | - cleaner_list.append(newline) |
| 1269 | + # Clean and parse the HTML text |
| 1270 | + cleaner_list = [line.strip() for line in soup.get_text().splitlines() if line.strip()] |
1278 | 1271 | data["stamp"] = self.dt2ts(parser.parse(cleaner_list[2])) |
| 1272 | + |
| 1273 | + # Extract summary |
1279 | 1274 | sumstart = cleaner_list.index("Hello,") |
1280 | 1275 | try: |
1281 | 1276 | sumend = cleaner_list.index("[1] https://aws.amazon.com/support") |
1282 | 1277 | except ValueError: |
1283 | 1278 | sumend = len(cleaner_list) |
1284 | | - newline = " " |
1285 | | - summary = newline.join(cleaner_list[sumstart:sumend]) |
| 1279 | + summary = " ".join(cleaner_list[sumstart:sumend]) |
1286 | 1280 | if "has been cancelled" in summary.lower(): |
1287 | 1281 | data["status"] = Status.CANCELLED |
1288 | | - start_time = cleaner_list[cleaner_list.index("Start time") + 1] |
1289 | | - end_time = cleaner_list[cleaner_list.index("End time") + 1] |
1290 | | - data["start"] = self.dt2ts(parser.parse(start_time)) |
1291 | | - data["end"] = self.dt2ts(parser.parse(end_time)) |
| 1282 | + |
| 1283 | + # Parse dates |
| 1284 | + data["start"] = self.dt2ts(parser.parse(cleaner_list[cleaner_list.index("Start time") + 1])) |
| 1285 | + data["end"] = self.dt2ts(parser.parse(cleaner_list[cleaner_list.index("End time") + 1])) |
1292 | 1286 | data["summary"] = summary |
1293 | 1287 | data["account"] = cleaner_list[cleaner_list.index("Affected account") + 1] |
| 1288 | + |
| 1289 | + # Extract circuits |
| 1290 | + impact = Impact.OUTAGE |
1294 | 1291 | for line in cleaner_list[sumstart:sumend]: |
1295 | | - line = line.strip() |
1296 | | - if re.match(r"[a-z]{5}-[a-z0-9]{8}", line): |
1297 | | - data["circuits"].append(CircuitImpact(circuit_id=line, impact=impact)) |
1298 | | - for circuit in data["circuits"]: |
1299 | | - maintenance_id += circuit.circuit_id |
1300 | | - maintenance_id += str(data["start"]) |
1301 | | - maintenance_id += str(data["end"]) |
| 1292 | + if re.match(r"[a-z]{5}-[a-z0-9]{8}", line.strip()): |
| 1293 | + data["circuits"].append(CircuitImpact(circuit_id=line.strip(), impact=impact)) |
| 1294 | + |
| 1295 | + # Generate maintenance ID |
| 1296 | + maintenance_id = "".join(circuit.circuit_id for circuit in data["circuits"]) + str(data["start"]) + str(data["end"]) |
1302 | 1297 | data["maintenance_id"] = hashlib.sha256(maintenance_id.encode("utf-8")).hexdigest() # nosec |
1303 | 1298 | return [data] |
0 commit comments