diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 917f6aed..57ceb685 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -149,6 +149,8 @@ jobs: run: "echo RELEASE_VERSION=${GITHUB_REF:10} >> $GITHUB_ENV" - name: "Run Poetry Version" run: "poetry version $RELEASE_VERSION" + - name: "Run Poetry Build" + run: "poetry build" - name: "Upload binaries to release" uses: "svenstaro/upload-release-action@v2" with: @@ -176,6 +178,8 @@ jobs: run: "echo RELEASE_VERSION=${GITHUB_REF:10} >> $GITHUB_ENV" - name: "Run Poetry Version" run: "poetry version $RELEASE_VERSION" + - name: "Run Poetry Build" + run: "poetry build" - name: "Push to PyPI" uses: "pypa/gh-action-pypi-publish@release/v1" with: diff --git a/CHANGELOG.md b/CHANGELOG.md index 912c7db4..4fd85f94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## v2.2.1 - 2023-01-17 + +### Changed + +- #197 - Updated Equinix parser: Adding support for additional impact statement and notification types. +- #192 - Updated Cogent parser: Adding subject and text parser. +- #186 - Updated Telia Carrier as Arelion (while keeping Telia for backwards compatibility). + +### Fixed + +- #198 - Fixed Verizon parser: use European-style day-first date parsing +- #187 - Fixed Zayo parser: adds chardet.detect method before decoding data_part.content. + ## v2.2.0 - 2022-10-25 ### Added diff --git a/README.md b/README.md index 92884b0b..7efa5fc1 100644 --- a/README.md +++ b/README.md @@ -58,10 +58,10 @@ By default, there is a `GenericProvider` that support a `SimpleProcessor` using #### Supported providers using the BCOP standard +- Arelion (previously Telia) - EuNetworks - NTT - PacketFabric -- Telia - Telstra #### Supported providers based on other parsers diff --git a/circuit_maintenance_parser/parsers/cogent.py b/circuit_maintenance_parser/parsers/cogent.py index 694cbf7a..29679694 100644 --- a/circuit_maintenance_parser/parsers/cogent.py +++ b/circuit_maintenance_parser/parsers/cogent.py @@ -6,13 +6,145 @@ from pytz import timezone, UTC from bs4.element import ResultSet # type: ignore -from circuit_maintenance_parser.parser import Html, Impact, CircuitImpact, Status +from circuit_maintenance_parser.parser import CircuitImpact, EmailSubjectParser, Html, Impact, Status, Text logger = logging.getLogger(__name__) # pylint: disable=too-many-branches +class SubjectParserCogent1(EmailSubjectParser): + """Subject parser for Cogent nofifications.""" + + def parse_subject(self, subject: str): + """Parse subject. + + Example: + 11/19/2022 Circuit Provider Maintenance - Edina, MN 1-300123456 + Correction 06/11/2021 AB987654321-1 Planned Network Maintenance - San Jose, CA 1-123456789 + """ + data: Dict = {"circuits": []} + + subject = subject.lower() + + if subject.startswith("correction") or "rescheduled" in subject: + data["status"] = Status("RE-SCHEDULED") + elif "cancellation" in subject: + data["status"] = Status("CANCELLED") + elif "planned" in subject or "provider" in subject or "emergency" in subject: + data["status"] = Status("CONFIRMED") + elif "completed" in subject: + data["status"] = Status("COMPLETED") + else: + data["status"] = Status("NO-CHANGE") + + match = re.search(r".* ([\d-]+)", subject) + if match: + circuit_id = match.group(1) + data["circuits"].append(CircuitImpact(impact=Impact("OUTAGE"), circuit_id=circuit_id.strip())) + + return [data] + + +class TextParserCogent1(Text): + """Parse text body of Cogent emails.""" + + def parse_text(self, text): + """Execute parsing of text. + + Example: + CIRCUIT PROVIDER MAINTENANCE + + Dear Cogent Customer, + + As a valued customer, Cogent is committed to keeping you informed about any changes in the status of your service with us. This email is to alert you regarding a circuit provider maintenance which will affect your connection to Cogent: + + Start time: 10:00pm CT 11/19/2022 + End time: 5:00am CT 11/20/2022 + Work order number: VN16123 + Order ID(s) impacted: 1-300123456 + Expected Outage/Downtime: 7 hours + + Cogent customers receiving service in Edina, MN will be affected by this outage. This outage has been scheduled by Zayo. The purpose of this maintenance is to repair damaged fiber. Only the Cogent Order ID(s) above will be impacted. + + During this maintenance window, you will experience an interruption in service while Zayo completes the maintenance activities; the interruption is expected to be less than 7 hours; however, due to the complexity of the work, your downtime may be longer. + + Our network operations engineers closely monitor the work and will do everything possible to minimize any inconvenience to you. If you have any problems with your connection after this time, or if you have any questions regarding the maintenance at any point, please call Customer Support at 1-877-7-COGENT and refer to this Maintenance Ticket: VN16123. + + """ + data = { + # "circuits": [], + "summary": "Cogent circuit maintenance", + } + + lines = text.splitlines() + + for line in lines: + if line.startswith("Dear"): + match = re.search(r"Dear (.*),", line) + if match: + data["account"] = match.group(1) + elif line.startswith("Start time:"): + match = re.search(r"Start time: ([A-Za-z\d: ]*) [()A-Za-z\s]+ (\d+/\d+/\d+)", line) + if match: + start_str = " ".join(match.groups()) + elif line.startswith("End time:"): + match = re.search(r"End time: ([A-Za-z\d: ]*) [()A-Za-z\s]+ (\d+/\d+/\d+)", line) + if match: + end_str = " ".join(match.groups()) + elif line.startswith("Cogent customers receiving service"): + data["summary"] = line + match = re.search(r"[^Cogent].*?((\b[A-Z][a-z\s-]+)+, ([A-Za-z-]+[\s-]))", line) + if match: + local_timezone = timezone(self._geolocator.city_timezone(match.group(1).strip())) + + # set start time using the local city timezone + try: + start = datetime.strptime(start_str, "%I:%M %p %d/%m/%Y") + except ValueError: + start = datetime.strptime(start_str, "%I:%M%p %d/%m/%Y") + local_time = local_timezone.localize(start) + # set start time to UTC + utc_start = local_time.astimezone(UTC) + data["start"] = self.dt2ts(utc_start) + logger.info( + "Mapped start time %s at %s (%s), to %s (UTC)", + start_str, + match.group(1).strip(), + local_timezone, + utc_start, + ) + # set end time using the local city timezone + try: + end = datetime.strptime(end_str, "%I:%M %p %d/%m/%Y") + except ValueError: + end = datetime.strptime(end_str, "%I:%M%p %d/%m/%Y") + local_time = local_timezone.localize(end) + # set end time to UTC + utc_end = local_time.astimezone(UTC) + data["end"] = self.dt2ts(utc_end) + logger.info( + "Mapped end time %s at %s (%s), to %s (UTC)", + end_str, + match.group(1).strip(), + local_timezone, + utc_end, + ) + elif line.startswith("Work order number:"): + match = re.search("Work order number: (.*)", line) + if match: + data["maintenance_id"] = match.group(1) + elif line.startswith("Order ID(s) impacted:"): + data["circuits"] = [] + match = re.search(r"Order ID\(s\) impacted: (.*)", line) + if match: + for circuit_id in match.group(1).split(","): + data["circuits"].append(CircuitImpact(impact=Impact("OUTAGE"), circuit_id=circuit_id.strip())) + elif line.startswith("During this maintenance"): + data["summary"] = line + return [data] + + class HtmlParserCogent1(Html): """Notifications Parser for Cogent notifications.""" diff --git a/circuit_maintenance_parser/parsers/equinix.py b/circuit_maintenance_parser/parsers/equinix.py index 59365c2e..ea1c8bc3 100644 --- a/circuit_maintenance_parser/parsers/equinix.py +++ b/circuit_maintenance_parser/parsers/equinix.py @@ -86,6 +86,8 @@ def _parse_b(self, b_elements, data): impact = Impact.OUTAGE elif "Loss of redundancy" in impact_line: impact = Impact.REDUCED_REDUNDANCY + elif "Traffic will be re-routed" in impact_line: + impact = Impact.REDUCED_REDUNDANCY return impact def _parse_table(self, theader_elements, data, impact): # pylint: disable=no-self-use @@ -97,7 +99,31 @@ def _parse_table(self, theader_elements, data, impact): # pylint: disable=no-se continue circuit_info = list(tr_elem.find_all("td")) if circuit_info: - account, _, circuit = circuit_info # pylint: disable=unused-variable + if len(circuit_info) == 4: + # Equinix Connect notifications contain the IBX name + account, _, _, circuit = circuit_info # pylint: disable=unused-variable + elif len(circuit_info) == 14: + # Equinix Fabric notifications include a lot of additional detail on seller and subscriber ID's + ( + account, + _, + _, + circuit, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + ) = circuit_info # pylint: disable=unused-variable + elif len(circuit_info) == 3: + account, _, circuit = circuit_info # pylint: disable=unused-variable + else: + return data["circuits"].append( { "circuit_id": circuit.text, diff --git a/circuit_maintenance_parser/parsers/verizon.py b/circuit_maintenance_parser/parsers/verizon.py index 27cf741c..7665581d 100644 --- a/circuit_maintenance_parser/parsers/verizon.py +++ b/circuit_maintenance_parser/parsers/verizon.py @@ -57,7 +57,7 @@ def parse_tables(self, tables: ResultSet, data: Dict): # pylint: disable=too-ma data["start"] = self.dt2ts(start) data["end"] = self.dt2ts(end) - for row in circuit_table.find("tbody").find_all("tr"): + for row in circuit_table.find_all("tr"): cells = row.find_all("td") cells_text = [cell.string.strip() for cell in cells if cell.string] if not cells_text or cells_text[0].startswith("Company Name"): diff --git a/circuit_maintenance_parser/provider.py b/circuit_maintenance_parser/provider.py index 46f20c71..5c19505d 100644 --- a/circuit_maintenance_parser/provider.py +++ b/circuit_maintenance_parser/provider.py @@ -4,6 +4,7 @@ import traceback from typing import Iterable, List, Dict +import chardet from pydantic import BaseModel @@ -19,7 +20,7 @@ from circuit_maintenance_parser.parsers.aquacomms import HtmlParserAquaComms1, SubjectParserAquaComms1 from circuit_maintenance_parser.parsers.aws import SubjectParserAWS1, TextParserAWS1 from circuit_maintenance_parser.parsers.bso import HtmlParserBSO1 -from circuit_maintenance_parser.parsers.cogent import HtmlParserCogent1 +from circuit_maintenance_parser.parsers.cogent import HtmlParserCogent1, TextParserCogent1, SubjectParserCogent1 from circuit_maintenance_parser.parsers.colt import CsvParserColt1, SubjectParserColt1, SubjectParserColt2 from circuit_maintenance_parser.parsers.equinix import HtmlParserEquinix, SubjectParserEquinix from circuit_maintenance_parser.parsers.gtt import HtmlParserGTT1 @@ -95,7 +96,8 @@ def filter_check(filter_dict: Dict, data: NotificationData, filter_type: str) -> if filter_data_type not in filter_dict: continue - data_part_content = data_part.content.decode().replace("\r", "").replace("\n", "") + data_part_encoding = chardet.detect(data_part.content).get("encoding", "utf-8") + data_part_content = data_part.content.decode(data_part_encoding).replace("\r", "").replace("\n", "") if any(re.search(filter_re, data_part_content) for filter_re in filter_dict[filter_data_type]): logger.debug("Matching %s filter expression for %s.", filter_type, data_part_content) return True @@ -172,6 +174,14 @@ class AquaComms(GenericProvider): _default_organizer = "tickets@aquacomms.com" +class Arelion(GenericProvider): + """Arelion (formerly Telia Carrier) provider custom class.""" + + _exclude_filter = {EMAIL_HEADER_SUBJECT: ["Disturbance Information"]} + + _default_organizer = "support@arelion.com" + + class AWS(GenericProvider): """AWS provider custom class.""" @@ -195,6 +205,7 @@ class Cogent(GenericProvider): _processors: List[GenericProcessor] = [ CombinedProcessor(data_parsers=[EmailDateParser, HtmlParserCogent1]), + CombinedProcessor(data_parsers=[EmailDateParser, TextParserCogent1, SubjectParserCogent1]), ] _default_organizer = "support@cogentco.com" @@ -308,12 +319,10 @@ class Sparkle(GenericProvider): _default_organizer = "TISAmericaNOC@tisparkle.com" -class Telia(GenericProvider): +class Telia(Arelion): """Telia provider custom class.""" - _exclude_filter = {EMAIL_HEADER_SUBJECT: ["Disturbance Information"]} - - _default_organizer = "carrier-csc@teliacompany.com" + # Kept for compatibility purposes, but Telia is renamed Arelion class Telstra(GenericProvider): diff --git a/poetry.lock b/poetry.lock index 70c16430..c1240f01 100644 --- a/poetry.lock +++ b/poetry.lock @@ -35,6 +35,17 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "backports-zoneinfo" +version = "0.2.1" +description = "Backport of the standard library zoneinfo module" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +tzdata = ["tzdata"] + [[package]] name = "bandit" version = "1.7.4" @@ -119,6 +130,14 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "chardet" +version = "5.0.0" +description = "Universal encoding detector for Python 3" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "charset-normalizer" version = "2.1.1" @@ -174,7 +193,7 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "exceptiongroup" -version = "1.0.0rc9" +version = "1.0.1" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false @@ -250,13 +269,14 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\"" [[package]] name = "icalendar" -version = "4.1.0" +version = "5.0.2" description = "iCalendar parser/generator" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.7" [package.dependencies] +"backports.zoneinfo" = {version = "*", markers = "python_version == \"3.7\" or python_version == \"3.8\""} python-dateutil = "*" pytz = "*" @@ -316,11 +336,11 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] [[package]] name = "lazy-object-proxy" -version = "1.7.1" +version = "1.8.0" description = "A fast and thorough lazy object proxy." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "lxml" @@ -432,15 +452,15 @@ python-versions = ">=2.6" [[package]] name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "2.5.3" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] +test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -580,7 +600,7 @@ cli = ["click (>=5.0)"] [[package]] name = "pytz" -version = "2022.5" +version = "2022.6" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -630,7 +650,7 @@ test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "tes [[package]] name = "setuptools" -version = "65.5.0" +version = "65.5.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "dev" optional = false @@ -638,7 +658,7 @@ python-versions = ">=3.7" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mock", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -722,9 +742,17 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "types-chardet" +version = "5.0.4" +description = "Typing stubs for chardet" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "types-python-dateutil" -version = "2.8.19.2" +version = "2.8.19.3" description = "Typing stubs for python-dateutil" category = "dev" optional = false @@ -732,7 +760,7 @@ python-versions = "*" [[package]] name = "types-pytz" -version = "2022.5.0.0" +version = "2022.6.0.1" description = "Typing stubs for pytz" category = "dev" optional = false @@ -814,7 +842,7 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "fd06fd6707427de574e2615983283ca4bde6cb8fa6b875ec6b382b6447c711e1" +content-hash = "dfcb07ac46d5d695fe7fdddab30146d42783d5e6df85c90a55fdee3e440b86b2" [metadata.files] astroid = [ @@ -829,6 +857,24 @@ backoff = [ {file = "backoff-1.11.1-py2.py3-none-any.whl", hash = "sha256:61928f8fa48d52e4faa81875eecf308eccfb1016b018bb6bd21e05b5d90a96c5"}, {file = "backoff-1.11.1.tar.gz", hash = "sha256:ccb962a2378418c667b3c979b504fdeb7d9e0d29c0579e3b13b86467177728cb"}, ] +backports-zoneinfo = [ + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, + {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, +] bandit = [ {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, @@ -871,6 +917,10 @@ certifi = [ {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, ] +chardet = [ + {file = "chardet-5.0.0-py3-none-any.whl", hash = "sha256:d3e64f022d254183001eccc5db4040520c0f23b1a3f33d6413e099eb7f126557"}, + {file = "chardet-5.0.0.tar.gz", hash = "sha256:0368df2bfd78b5fc20572bb4e9bb7fb53e2c094f60ae9993339e8671d0afb8aa"}, +] charset-normalizer = [ {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, @@ -891,8 +941,8 @@ dill = [ {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, ] exceptiongroup = [ - {file = "exceptiongroup-1.0.0rc9-py3-none-any.whl", hash = "sha256:2e3c3fc1538a094aab74fad52d6c33fc94de3dfee3ee01f187c0e0c72aec5337"}, - {file = "exceptiongroup-1.0.0rc9.tar.gz", hash = "sha256:9086a4a21ef9b31c72181c77c040a074ba0889ee56a7b289ff0afb0d97655f96"}, + {file = "exceptiongroup-1.0.1-py3-none-any.whl", hash = "sha256:4d6c0aa6dd825810941c792f53d7b8d71da26f5e5f84f20f9508e8f2d33b140a"}, + {file = "exceptiongroup-1.0.1.tar.gz", hash = "sha256:73866f7f842ede6cb1daa42c4af078e2035e5f7607f0e2c762cc51bb31bbe7b2"}, ] flake8 = [ {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, @@ -915,8 +965,8 @@ gitpython = [ {file = "GitPython-3.1.29.tar.gz", hash = "sha256:cc36bfc4a3f913e66805a28e84703e419d9c264c1077e537b54f0e1af85dbefd"}, ] icalendar = [ - {file = "icalendar-4.1.0-py2.py3-none-any.whl", hash = "sha256:129304fdbad4169acc635d08b658ca22ba449b5b22b5157c3774626bc60072db"}, - {file = "icalendar-4.1.0.tar.gz", hash = "sha256:9748b7c02efcc43e58d0615ae0976ac4f265e90dadee9b4f884de29905c1b395"}, + {file = "icalendar-5.0.2-py3-none-any.whl", hash = "sha256:2eefb4765286086afb9b5ed41c121c7b59d934567990982b60bb3edbca9922bc"}, + {file = "icalendar-5.0.2.tar.gz", hash = "sha256:edc635fd9334102d409f4571fb953ef0f84ce01dd15ff83cac6afafe89c8e56a"}, ] idna = [ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, @@ -939,43 +989,25 @@ isort = [ {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, ] lazy-object-proxy = [ - {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8561da8b3dd22d696244d6d0d5330618c993a215070f473b699e00cf1f3f6443"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win32.whl", hash = "sha256:898322f8d078f2654d275124a8dd19b079080ae977033b713f677afcfc88e2b9"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:85b232e791f2229a4f55840ed54706110c80c0a210d076eee093f2b2e33e1bfd"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46ff647e76f106bb444b4533bb4153c7370cdf52efc62ccfc1a28bdb3cc95442"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f3bb77efe1367b2515f8cb4790a11cffae889148ad33adad07b9b55e0ab22c"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c19814163728941bb871240d45c4c30d33b8a2e85972c44d4e63dd7107faba44"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e40f2013d96d30217a51eeb1db28c9ac41e9d0ee915ef9d00da639c5b63f01a1"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2052837718516a94940867e16b1bb10edb069ab475c3ad84fd1e1a6dd2c0fcfc"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win32.whl", hash = "sha256:6a24357267aa976abab660b1d47a34aaf07259a0c3859a34e536f1ee6e76b5bb"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6aff3fe5de0831867092e017cf67e2750c6a1c7d88d84d2481bd84a2e019ec35"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a6e94c7b02641d1311228a102607ecd576f70734dc3d5e22610111aeacba8a0"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ce15276a1a14549d7e81c243b887293904ad2d94ad767f42df91e75fd7b5b6"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e368b7f7eac182a59ff1f81d5f3802161932a41dc1b1cc45c1f757dc876b5d2c"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ecbb350991d6434e1388bee761ece3260e5228952b1f0c46ffc800eb313ff42"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:553b0f0d8dbf21890dd66edd771f9b1b5f51bd912fa5f26de4449bfc5af5e029"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:c7a683c37a8a24f6428c28c561c80d5f4fd316ddcf0c7cab999b15ab3f5c5c69"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:df2631f9d67259dc9620d831384ed7732a198eb434eadf69aea95ad18c587a28"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07fa44286cda977bd4803b656ffc1c9b7e3bc7dff7d34263446aec8f8c96f88a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dca6244e4121c74cc20542c2ca39e5c4a5027c81d112bfb893cf0790f96f57e"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91ba172fc5b03978764d1df5144b4ba4ab13290d7bab7a50f12d8117f8630c38"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:043651b6cb706eee4f91854da4a089816a6606c1428fd391573ef8cb642ae4f7"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b9e89b87c707dd769c4ea91f7a31538888aad05c116a59820f28d59b3ebfe25a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:9d166602b525bf54ac994cf833c385bfcc341b364e3ee71e3bf5a1336e677b55"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f3953eb575b45480db6568306893f0bd9d8dfeeebd46812aa09ca9579595148"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dd7ed7429dbb6c494aa9bc4e09d94b778a3579be699f9d67da7e6804c422d3de"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ed0c2b380eb6248abdef3cd425fc52f0abd92d2b07ce26359fcbc399f636ad"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7096a5e0c1115ec82641afbdd70451a144558ea5cf564a896294e346eb611be1"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f769457a639403073968d118bc70110e7dce294688009f5c24ab78800ae56dc8"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:39b0e26725c5023757fc1ab2a89ef9d7ab23b84f9251e28f9cc114d5b59c1b09"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"}, - {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, + {file = "lazy-object-proxy-1.8.0.tar.gz", hash = "sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25"}, + {file = "lazy_object_proxy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e"}, + {file = "lazy_object_proxy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win32.whl", hash = "sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd"}, + {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f"}, + {file = "lazy_object_proxy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f"}, + {file = "lazy_object_proxy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0"}, + {file = "lazy_object_proxy-1.8.0-pp37-pypy37_pp73-any.whl", hash = "sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891"}, + {file = "lazy_object_proxy-1.8.0-pp38-pypy38_pp73-any.whl", hash = "sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec"}, + {file = "lazy_object_proxy-1.8.0-pp39-pypy39_pp73-any.whl", hash = "sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8"}, ] lxml = [ {file = "lxml-4.9.1-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed"}, @@ -1104,8 +1136,8 @@ pbr = [ {file = "pbr-5.11.0.tar.gz", hash = "sha256:b97bc6695b2aff02144133c2e7399d5885223d42b7912ffaec2ca3898e673bfe"}, ] platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, + {file = "platformdirs-2.5.3-py3-none-any.whl", hash = "sha256:0cb405749187a194f444c25c82ef7225232f11564721eabffc6ec70df83b11cb"}, + {file = "platformdirs-2.5.3.tar.gz", hash = "sha256:6e52c21afff35cb659c6e52d8b4d61b9bd544557180440538f255d9382c8cbe0"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -1168,8 +1200,8 @@ python-dotenv = [ {file = "python_dotenv-0.21.0-py3-none-any.whl", hash = "sha256:1684eb44636dd462b66c3ee016599815514527ad99965de77f43e0944634a7e5"}, ] pytz = [ - {file = "pytz-2022.5-py2.py3-none-any.whl", hash = "sha256:335ab46900b1465e714b4fda4963d87363264eb662aab5e65da039c25f1f5b22"}, - {file = "pytz-2022.5.tar.gz", hash = "sha256:c4d88f472f54d615e9cd582a5004d1e5f624854a6a27a6211591c251f22a6914"}, + {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, + {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, ] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, @@ -1222,8 +1254,8 @@ requests-mock = [ {file = "requests_mock-1.10.0-py2.py3-none-any.whl", hash = "sha256:2fdbb637ad17ee15c06f33d31169e71bf9fe2bdb7bc9da26185be0dd8d842699"}, ] setuptools = [ - {file = "setuptools-65.5.0-py3-none-any.whl", hash = "sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356"}, - {file = "setuptools-65.5.0.tar.gz", hash = "sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17"}, + {file = "setuptools-65.5.1-py3-none-any.whl", hash = "sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31"}, + {file = "setuptools-65.5.1.tar.gz", hash = "sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f"}, ] shapely = [ {file = "Shapely-1.8.5.post1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d048f93e42ba578b82758c15d8ae037d08e69d91d9872bca5a1895b118f4e2b0"}, @@ -1320,13 +1352,17 @@ typed-ast = [ {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, ] +types-chardet = [ + {file = "types-chardet-5.0.4.tar.gz", hash = "sha256:449a98338fa264ddee88dd3a8141989f0ae920bcc720460c54b9f4374a6c1bb3"}, + {file = "types_chardet-5.0.4-py3-none-any.whl", hash = "sha256:6946e22f32789a473852570810b4afe632172fae03c04bdbffe670606cc4ac11"}, +] types-python-dateutil = [ - {file = "types-python-dateutil-2.8.19.2.tar.gz", hash = "sha256:e6e32ce18f37765b08c46622287bc8d8136dc0c562d9ad5b8fd158c59963d7a7"}, - {file = "types_python_dateutil-2.8.19.2-py3-none-any.whl", hash = "sha256:3f4dbe465e7e0c6581db11fd7a4855d1355b78712b3f292bd399cd332247e9c0"}, + {file = "types-python-dateutil-2.8.19.3.tar.gz", hash = "sha256:a313284df5ed3fd078303262edc0efde28998cd08e5061ef1ccc0bb5fef4d2da"}, + {file = "types_python_dateutil-2.8.19.3-py3-none-any.whl", hash = "sha256:ce6af1bdf0aca6b7dc8815a664f0e8b55da91ff7851102cf87c87178e7c8e7ec"}, ] types-pytz = [ - {file = "types-pytz-2022.5.0.0.tar.gz", hash = "sha256:0c163b15d3e598e6cc7074a99ca9ec72b25dc1b446acc133b827667af0b7b09a"}, - {file = "types_pytz-2022.5.0.0-py3-none-any.whl", hash = "sha256:a8e1fe6a1b270fbfaf2553b20ad0f1316707cc320e596da903bb17d7373fed2d"}, + {file = "types-pytz-2022.6.0.1.tar.gz", hash = "sha256:d078196374d1277e9f9984d49373ea043cf2c64d5d5c491fbc86c258557bd46f"}, + {file = "types_pytz-2022.6.0.1-py3-none-any.whl", hash = "sha256:bea605ce5d5a5d52a8e1afd7656c9b42476e18a0f888de6be91587355313ddf4"}, ] types-toml = [ {file = "types-toml-0.10.8.tar.gz", hash = "sha256:b7e7ea572308b1030dc86c3ba825c5210814c2825612ec679eb7814f8dd9295a"}, diff --git a/pyproject.toml b/pyproject.toml index dcd5070b..2d954ec4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "circuit-maintenance-parser" -version = "2.2.0" +version = "2.2.1" description = "Python library to parse Circuit Maintenance notifications and return a structured data back" authors = ["Network to Code "] license = "Apache-2.0" @@ -26,12 +26,13 @@ python = "^3.7" click = ">=7.1, <9.0" # Skipping 1.9.x versions due issue https://github.com/samuelcolvin/pydantic/issues/4114 pydantic = {version = "~1.8.2", extras = ["dotenv"]} -icalendar = "^4.0.7" +icalendar = "^5.0.0" bs4 = "^0.0.1" lxml = "^4.6.2" geopy = "^2.1.0" tzwhere = "^3.0.3" backoff = "^1.11.1" +chardet = "^5" [tool.poetry.dev-dependencies] pytest = "^7.0.0" @@ -51,6 +52,7 @@ types-pytz = "^2022.0.0" types-toml = "^0.10.1" netconan = "^0.12.3" toml = "0.10.2" +types-chardet = "^5.0.4" [tool.poetry.scripts] circuit-maintenance-parser = "circuit_maintenance_parser.cli:main" diff --git a/tests/unit/data/telia/telia1 b/tests/unit/data/arelion/arelion1 similarity index 63% rename from tests/unit/data/telia/telia1 rename to tests/unit/data/arelion/arelion1 index 9d3dd4b7..43082cf8 100644 --- a/tests/unit/data/telia/telia1 +++ b/tests/unit/data/arelion/arelion1 @@ -1,24 +1,24 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:-//Telia Carrier//Change Management Tool +PRODID:-//Arelion//Change Management Tool BEGIN:VEVENT DTSTART;VALUE=DATE-TIME:20210810T040000Z DTEND;VALUE=DATE-TIME:20210810T120000Z DTSTAMP;VALUE=DATE-TIME:20210802T080506Z -UID:PWIC111111.1@teliacarrier.com -SUMMARY:PWIC111111.1: Planned work notification from Telia Carrier -ORGANIZER;CN="Telia Carrier CSC":mailto:carrier-csc@teliacompany.com +UID:PWIC111111.1@arelion.com +SUMMARY:PWIC111111.1: Planned work notification from Arelion +ORGANIZER;CN="Arelion CSC":mailto:support@arelion.com SEQUENCE:34 -X-MAINTNOTE-PROVIDER:teliacarrier.com +X-MAINTNOTE-PROVIDER:arelion.com X-MAINTNOTE-ACCOUNT:1111 X-MAINTNOTE-MAINTENANCE-ID:PWIC111111.1 X-MAINTNOTE-IMPACT:OUTAGE X-MAINTNOTE-OBJECT-ID:IC-111111 X-MAINTNOTE-OBJECT-ID:IC-222222 X-MAINTNOTE-STATUS:CANCELLED -DESCRIPTION:Please note that Telia Carrier will perform maintenance work as +DESCRIPTION:Please note that Arelion will perform maintenance work as outlined below.\n\nPlanned work reference: PWIC111111\nAction and Reason: - Telia Carrier is upgrading its transmission capacity in order to fulfill + Arelion is upgrading its transmission capacity in order to fulfill customer needs. The work will be done in several service windows (contain ing both Primary and Backup). @@ -27,4 +27,4 @@ Each service window will be announced separ several times.\nLo cation: Atlanta/GA, US\nImpacted services: IC-111111, IC-222222 END:VEVENT -END:VCALENDAR \ No newline at end of file +END:VCALENDAR diff --git a/tests/unit/data/telia/telia1_result.json b/tests/unit/data/arelion/arelion1_result.json similarity index 76% rename from tests/unit/data/telia/telia1_result.json rename to tests/unit/data/arelion/arelion1_result.json index a6bbc911..8c1bffd9 100644 --- a/tests/unit/data/telia/telia1_result.json +++ b/tests/unit/data/arelion/arelion1_result.json @@ -13,13 +13,13 @@ ], "end": 1628596800, "maintenance_id": "PWIC111111.1", - "organizer": "mailto:carrier-csc@teliacompany.com", - "provider": "teliacarrier.com", + "organizer": "mailto:support@arelion.com", + "provider": "arelion.com", "sequence": 34, "stamp": 1627891506, "start": 1628568000, "status": "CANCELLED", - "summary": "PWIC111111.1: Planned work notification from Telia Carrier", - "uid": "PWIC111111.1@teliacarrier.com" + "summary": "PWIC111111.1: Planned work notification from Arelion", + "uid": "PWIC111111.1@arelion.com" } -] \ No newline at end of file +] diff --git a/tests/unit/data/telia/telia2 b/tests/unit/data/arelion/arelion2 similarity index 63% rename from tests/unit/data/telia/telia2 rename to tests/unit/data/arelion/arelion2 index 1fcb1648..7e3f5e9e 100644 --- a/tests/unit/data/telia/telia2 +++ b/tests/unit/data/arelion/arelion2 @@ -1,24 +1,24 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:-//Telia Carrier//Change Management Tool +PRODID:-//Arelion//Change Management Tool BEGIN:VEVENT DTSTART;VALUE=DATE-TIME:20210810T040000Z DTEND;VALUE=DATE-TIME:20210810T120000Z DTSTAMP;VALUE=DATE-TIME:20210802T080506Z -UID:PWIC111111.1@teliacarrier.com -SUMMARY:PWIC111111.1: Planned work notification from Telia Carrier -ORGANIZER;CN="Telia Carrier CSC":mailto:carrier-csc@teliacompany.com +UID:PWIC111111.1@arelion.com +SUMMARY:PWIC111111.1: Planned work notification from Arelion +ORGANIZER;CN="Arelion CSC":mailto:support@arelion.com SEQUENCE:34 -X-MAINTNOTE-PROVIDER:teliacarrier.com +X-MAINTNOTE-PROVIDER:arelion.com X-MAINTNOTE-ACCOUNT:1111 X-MAINTNOTE-MAINTENANCE-ID:PWIC111111.1 X-MAINTNOTE-IMPACT:OUTAGE X-MAINTNOTE-OBJECT-ID:IC-111111 X-MAINTNOTE-OBJECT-ID:IC-222222 X-MAINTNOTE-STATUS:CANCELLED -DESCRIPTION:Please note that Telia Carrier will perform maintenance work as +DESCRIPTION:Please note that Arelion will perform maintenance work as outlined below.\n\nPlanned work reference: PWIC111111\nAction and Reason: - Telia Carrier is upgrading its transmission capacity in order to fulfill + Arelion is upgrading its transmission capacity in order to fulfill customer needs. The work will be done in several service windows (contain ing both Primary and Backup). @@ -29,24 +29,24 @@ several times.\nLo END:VEVENT BEGIN:VEVENT VERSION:2.0 -PRODID:-//Telia Carrier//Change Management Tool +PRODID:-//Arelion//Change Management Tool DTSTART;VALUE=DATE-TIME:20210810T040000Z DTEND;VALUE=DATE-TIME:20210810T120000Z DTSTAMP;VALUE=DATE-TIME:20210802T080506Z -UID:PWIC111111.2@teliacarrier.com -SUMMARY:PWIC111111.2: Planned work notification from Telia Carrier -ORGANIZER;CN="Telia Carrier CSC":mailto:carrier-csc@teliacompany.com +UID:PWIC111111.2@arelion.com +SUMMARY:PWIC111111.2: Planned work notification from Arelion +ORGANIZER;CN="Arelion CSC":mailto:support@arelion.com SEQUENCE:34 -X-MAINTNOTE-PROVIDER:teliacarrier.com +X-MAINTNOTE-PROVIDER:arelion.com X-MAINTNOTE-ACCOUNT:1111 X-MAINTNOTE-MAINTENANCE-ID:PWIC111111.2 X-MAINTNOTE-IMPACT:OUTAGE X-MAINTNOTE-OBJECT-ID:IC-111111 X-MAINTNOTE-OBJECT-ID:IC-222222 X-MAINTNOTE-STATUS:CANCELLED -DESCRIPTION:Please note that Telia Carrier will perform maintenance work as +DESCRIPTION:Please note that Arelion will perform maintenance work as outlined below.\n\nPlanned work reference: PWIC111111\nAction and Reason: - Telia Carrier is upgrading its transmission capacity in order to fulfill + Arelion is upgrading its transmission capacity in order to fulfill customer needs. The work will be done in several service windows (contain ing both Primary and Backup). @@ -55,4 +55,4 @@ Each service window will be announced separ several times.\nLo cation: Atlanta/GA, US\nImpacted services: IC-111111, IC-222222 END:VEVENT -END:VCALENDAR \ No newline at end of file +END:VCALENDAR diff --git a/tests/unit/data/telia/telia2_result.json b/tests/unit/data/arelion/arelion2_result.json similarity index 76% rename from tests/unit/data/telia/telia2_result.json rename to tests/unit/data/arelion/arelion2_result.json index dbfa94ff..aa54cc86 100644 --- a/tests/unit/data/telia/telia2_result.json +++ b/tests/unit/data/arelion/arelion2_result.json @@ -13,14 +13,14 @@ ], "end": 1628596800, "maintenance_id": "PWIC111111.1", - "organizer": "mailto:carrier-csc@teliacompany.com", - "provider": "teliacarrier.com", + "organizer": "mailto:support@arelion.com", + "provider": "arelion.com", "sequence": 34, "stamp": 1627891506, "start": 1628568000, "status": "CANCELLED", - "summary": "PWIC111111.1: Planned work notification from Telia Carrier", - "uid": "PWIC111111.1@teliacarrier.com" + "summary": "PWIC111111.1: Planned work notification from Arelion", + "uid": "PWIC111111.1@arelion.com" }, { "account": "1111", @@ -36,13 +36,13 @@ ], "end": 1628596800, "maintenance_id": "PWIC111111.2", - "organizer": "mailto:carrier-csc@teliacompany.com", - "provider": "teliacarrier.com", + "organizer": "mailto:support@arelion.com", + "provider": "arelion.com", "sequence": 34, "stamp": 1627891506, "start": 1628568000, "status": "CANCELLED", - "summary": "PWIC111111.2: Planned work notification from Telia Carrier", - "uid": "PWIC111111.2@teliacarrier.com" + "summary": "PWIC111111.2: Planned work notification from Arelion", + "uid": "PWIC111111.2@arelion.com" } -] \ No newline at end of file +] diff --git a/tests/unit/data/cogent/cogent3.eml b/tests/unit/data/cogent/cogent3.eml new file mode 100644 index 00000000..3af0082c --- /dev/null +++ b/tests/unit/data/cogent/cogent3.eml @@ -0,0 +1,85 @@ +Received: from PH0PR14MB4247.namprd14.prod.outlook.com (2603:10b6:510:2a::19) + by BN6PR1401MB2083.namprd14.prod.outlook.com with HTTPS; Thu, 3 Nov 2022 + 11:48:38 +0000 +Received: from SN7PR04CA0214.namprd04.prod.outlook.com (2222:10b6:8306:127::9) + by PH0PR14MB4247.namprd14.prod.outlook.com (2222:10b6:510:23a::19) with + Microsoft SMTP Server (version=TLS1_2, + cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.24.5391.22; Thu, 3 Nov + 2022 11:48:35 +0000 +Received: from SN1NAM02GT0032.eop-nam01.prod.protection.outlook.com + (2444:10v6:806:127:cafe::4a) by SR7PRP4C$0214.outlook.office365.com + (2444:10bj:806:127::9) with Microsoft SMTP Server (version=TLS1_2, + cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5291.22 via Frontend + Transport; Thu, 3 Nov 2022 11:48:35 +0000 +Authentication-Results: spf=pass (sender IP is 11.22.33.244) + smtp.mailfrom=cogentco.com; dkim=none (message not signed) + header.d=none;dmarc=bestguesspass action=none + header.from=cogentco.com;compauth=pass reason=109 +Received-SPF: Pass (protection.outlook.com: domain of cogentco.com designates + 11.22.33.244 as permitted sender) receiver=protection.outlook.com; + client-ip=11.22.33.244; helo=engtools.sys.cogentco.com; pr=C +Received: from engtools.sys.cogentco.com (11.22.33.244) by + SN1NAM02FT0042.mail.protection.outlook.com (10.20.30.140) with Microsoft SMTP + Server id 13.20.5791.20 via Frontend Transport; Thu, 3 Nov 2022 11:48:35 + +0000 +Message-ID: +From: "Cogent-NoReply@cogentco.com" +To: example@example.com +Date: Thu, 03 Nov 2022 11:44:00 +0000 +Subject: 11/3/2022 Fiber Provider Maintenance - Minneapolis, MN + 1-300123456 +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable +Return-Path: Cogent-NoReply@cogentco.com +X-MS-Exchange-Organization-ExpirationStartTime: 03 Nov 2022 11:48:35.4396 + (UTC) +X-EOPAttributedMessage: + (UTC) +MIME-Version: 1.0 + +CAUTION: This email originated outside of Cyxtera. Do not click links or op= +en attachments unless you recognize the sender and have verified the conten= +t is safe. + +FIBER PROVIDER MAINTENANCE + +Dear Cogent Customer, + +As a valued customer, Cogent is committed to keeping you informed about any= + changes in the status of your service with us. This email is to alert you = +regarding a fiber provider maintenance which will affect your connection to= + Cogent: + +Start time: 10:00pm CT 11/3/2022 (Day 3 of 3) +End time: 5:00am CT 11/4/2022 +Work order number: VN12345 +Order ID(s) impacted: 1-300123456 +Expected Outage/Downtime: 7 hours + +Cogent customers receiving service in Minneapolis, MN will be affected by t= +his outage. This outage has been scheduled by Zayo. The purpose of this mai= +ntenance is to replace damaged fiber. Only the Cogent Order ID(s) above wil= +l be impacted. + +During this maintenance window, you will experience an interruption in serv= +ice while Zayo completes the maintenance activities; the interruption is ex= +pected to be less than 7 hours; however, due to the complexity of the work,= + your downtime may be longer. + +Our network operations engineers closely monitor the work and will do every= +thing possible to minimize any inconvenience to you. If you have any probl= +ems with your connection after this time, or if you have any questions rega= +rding the maintenance at any point, please call Customer Support at 1-877-7= +-COGENT and refer to this Maintenance Ticket: VN15285. + +We appreciate your patience during this work and welcome any feedback. Plea= +se send all questions and concerns to mailto:support@cogentco.com + + + +Sincerely, + +Customer Support +Cogent Communications +support@cogentco.com +877-7COGENT diff --git a/tests/unit/data/cogent/cogent3_result.json b/tests/unit/data/cogent/cogent3_result.json new file mode 100644 index 00000000..037f9b10 --- /dev/null +++ b/tests/unit/data/cogent/cogent3_result.json @@ -0,0 +1,16 @@ +[ + { + "account": "Cogent Customer", + "circuits": [ + { + "circuit_id": "1-300123456", + "impact": "OUTAGE" + } + ], + "end": 1649671200, + "maintenance_id": "VN12345", + "start": 1667475840, + "status": "CONFIRMED", + "summary": "During this maintenance window, you will experience an interruption in service while Zayo completes the maintenance activities; the interruption is expected to be less than 7 hours; however, due to the complexity of the work, your downtime may be longer." + } +] diff --git a/tests/unit/data/equinix/equinix5.eml b/tests/unit/data/equinix/equinix5.eml new file mode 100644 index 00000000..064f11d3 --- /dev/null +++ b/tests/unit/data/equinix/equinix5.eml @@ -0,0 +1,419 @@ +Delivered-To: nautobot.email@example.com +Received: by 26b:c69a:80d0:f85:f301:549e:e7a4:9133 with SMTP id hs33csp4865244mab; + Mon, 6 Dec 2021 07:03:42 -0800 (PST) +X-Received: by 26b:c69a:9c77:260f:a4fa:46cf:bf19:8a68 with SMTP id j19mr36120315lfg.340.1638803022202; + Mon, 06 Dec 2021 07:03:42 -0800 (PST) +ARC-Seal: i=3; a=rsa-sha256; t=1638803022; cv=pass; + d=google.com; s=arc-20160816; + b=wFeh1i2FgY4zIP6j6JX7ur5ZxGySWbBOmnEAqWt0efhNZHYO7dYGGvhd+ew5J3hyei + rYIeHM7bJYqloB8pv3fbFOpOyOoSdpOeuFPZuTdOpn8s/YQKFpkD/cXdM6+EL6ae0MPR + Qg4lggMLqctIFDxGJKkUiFKF11IGdZcGhL/HZKUqAyD4QaxNbhJymBi3cIeSWv9YxMri + mGcZNsMuLpD6DCsn7J8NmL8DIt+VIPhqJNnSqZRtNCiLI4EmOO8e6S5sDItfGMp8qerx + /4GLV4ERMmeiSteVAEUoDSvXyCdbqODitCSRpwwY4Duf24EQPoWR9ZNE9R4rjuwSv+Ft + lAZQ== +ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; + h=list-unsubscribe:list-archive:list-help:list-post:list-id + :mailing-list:precedence:organization:mime-version:subject + :message-id:to:reply-to:from:date:sender:dkim-signature; + bh=R0VYk2ZSiBDs7fEF522bB6CVP+jkmxIwlo7fEz5wuM4=; + b=Ndvx3ze2TJi6Z7rrImATCyNxDPIBXLrGNBZFJfxOY1TjGJsO1P/c8v6yvEkJyveDBS + HeFYmsVCII+50ma0RwRrE6igvgp81wQsAfD09TXnadgzBbsal/u/TKBXpakvfmBOXieU + vhf/dneaion+l9cnWbrAZxgCeErZk4YcvcA/XOAXUQvmz+q3rEClsXy4qxpRRIDY9bIj + XiEcQ8cIyVmLjJkfMg/+8FxjlJz+oEVdCMciM/TbiI+IXDmWCW2nNT7kxmTZq5DrSLS/ + SrCqESUPMngmI+TDZLbqQk0hA/hAqv0tBP/LKtS3blFKnByaE2XqDDnc74/xqOGs0tcN + LQ0g== +ARC-Authentication-Results: i=3; mx.google.com; + dkim=pass header.i=@example.com header.s=example header.b=jlMpGX2M; + arc=pass (i=2 spf=pass spfdomain=equinix.com dmarc=pass fromdomain=equinix.com); + spf=pass (google.com: domain of maint-notices+bncbdbld5ph4eibbtomxcgqmgqeyrh3nsy@example.com designates 223.132.15.9 as permitted sender) smtp.mailfrom=maint-notices+bncBDBLD5PH4EIBBTOMXCGQMGQEYRH3NSY@example.com; + dmarc=fail (p=NONE sp=NONE dis=NONE arc=pass) header.from=equinix.com +Return-Path: +Received: from mail-sor-f69.google.com (mail-sor-f69.google.com. [223.132.15.9]) + by mx.google.com with SMTPS id 124sor4230631vkb.28.2021.12.06.07.03.41 + for + (Google Transport Security); + Mon, 06 Dec 2021 07:03:42 -0800 (PST) +Received-SPF: pass (google.com: domain of maint-notices+bncbdbld5ph4eibbtomxcgqmgqeyrh3nsy@example.com designates 223.132.15.9 as permitted sender) client-ip=223.132.15.9; +Authentication-Results: mx.google.com; + dkim=pass header.i=@example.com header.s=example header.b=jlMpGX2M; + arc=pass (i=2 spf=pass spfdomain=equinix.com dmarc=pass fromdomain=equinix.com); + spf=pass (google.com: domain of maint-notices+bncbdbld5ph4eibbtomxcgqmgqeyrh3nsy@example.com designates 223.132.15.9 as permitted sender) smtp.mailfrom=maint-notices+bncBDBLD5PH4EIBBTOMXCGQMGQEYRH3NSY@example.com; + dmarc=fail (p=NONE sp=NONE dis=NONE arc=pass) header.from=equinix.com +ARC-Seal: i=2; a=rsa-sha256; t=1638803021; cv=pass; + d=google.com; s=arc-20160816; + b=mTB+fBQ+mIfJnTasYRtWnDI7MwI+p8gC+KuU6BNv5TUAm3M9nr6Aq5cccMfTWkzvTP + nXMMEH5AAwpNEXHQP7XzGvQLv7cxOIY5g7B1v1KLpdtrU8dZkoNMUqs3BmpEdBOhujX8 + sOQ9lMBjF8efEJ48x9Ot0B2te1Nzj0+eNS/dymp138OuSdbINbVTxiuqcwlZ97JXOCL8 + zbNpaKgtjmBvsPkCh6otz4BiZmQDOXgV/dEWqJEFzVGc0le8LfWZBCwnZYhVzEyyTPtW + AI5NLZDdqUOjTxLMbY6y4kM1Kyg5EL4hAvSGR01JPdOiH5to3A8DQ2MhnpfQmADTuK7T + bsnA== +ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; + h=list-unsubscribe:list-archive:list-help:list-post:list-id + :mailing-list:precedence:organization:mime-version:subject + :message-id:to:reply-to:from:date:sender:dkim-signature; + bh=R0VYk2ZSiBDs7fEF522bB6CVP+jkmxIwlo7fEz5wuM4=; + b=FVNVdWQeZml1pbbmGemW1a1Cq75xibwRVddCm3xjJO1xlxghswE2i3R8LGGVbTrMl5 + +6D8tVuVs/g1Auezvs6Gj7ZCGTPa2DTmSvcMGxczjVgY8qaYvB2TEJUNdCyrtrv6i1bL + 6mJO0TZbBUbaIAo2Thr4kMOA62UI4s8fufSoKIcFdKXD6Si+1d8Ug2yeztB9IYcbQTcR + iUF3kWSGl4F7VT1tKa0+qK9IEJ+TOyXZFNivxD8bylX/aqvZ/haEaqFZJAw5wBWA+HI0 + 2/7voD6JAa4IJSk3dNaX87Pdhs1WcxlOKAalgsCNVuSeN96kc5FdN0PGV+kFxfl42uy4 + BUow== +ARC-Authentication-Results: i=2; mx.google.com; + spf=pass (google.com: domain of no-reply@equinix.com designates 82.248.245.45 as permitted sender) smtp.mailfrom=no-reply@equinix.com; + dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=equinix.com +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=example.com; s=example; + h=sender:date:from:reply-to:to:message-id:subject:mime-version + :organization:x-original-sender:x-original-authentication-results + :precedence:mailing-list:list-id:list-post:list-help:list-archive + :list-unsubscribe; + bh=R0VYk2ZSiBDs7fEF522bB6CVP+jkmxIwlo7fEz5wuM4=; + b=jlMpGX2M3S6PHG8oE6631CVzWVoLPWcnDiCH83EQ67YXX9rVvz/SuZjPIhjApqYYu5 + J7w8XkeAXAQWJAKbr9IE4AUJ7nA8kLZU/ZP7lAxPTQsM7MFRXdvqw5+xg6R0sk5Pr1uq + 1g3JmWdiVAZKEipEq7H5N1a8K7kNOu27R14yQ= +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20210112; + h=sender:x-gm-message-state:date:from:reply-to:to:message-id:subject + :mime-version:organization:x-original-sender + :x-original-authentication-results:precedence:mailing-list:list-id + :x-spam-checked-in-group:list-post:list-help:list-archive + :list-unsubscribe; + bh=R0VYk2ZSiBDs7fEF522bB6CVP+jkmxIwlo7fEz5wuM4=; + b=N8yb6kiuCXL7WSYeD60M6aEx67Y7+KXKIlZawUJAzZ71rQaqfnferFxPvZAop+p4/H + Uhj0PghDskYHNkR0vbUOUty842JNIbYOI2S+FrHs/cfdLqHNwNwiv8N5OWdczAUqMDOc + aD0iGBk1A/YucqKtrGqpoNDmiUMDb8bcVqEvx1Tmhs4cIl1fzPTZkvJQZXed4dXQFNUg + B7w2DPNH7+gpm2xETc2XU78kvoopKl4Uqtg3va9ntDl47p7QQ/RH65GOKonIfy6w5sZ7 + UZZVHPP+L/QUA7y1NDHBSVlQWFNiLYCo9tviITATZJWR6NzUpNhHELwMzcErRlhwjxHA + gsNg== +Sender: maint-notices@example.com +X-Gm-Message-State: AOAM533VjlUj/LnFyQw6o0/xeOuSqlLm74Eu6fwRVVfPgXTuX5AJXBcT + cAvJNZpcyEL49FDqjsEE1/LPLlro +X-Google-Smtp-Source: ABdhPJy6PqBs7zFjsCpnVPD/K3IQt2HloRSlQiCjXVwxBKRb7W8g+KhWJ4iR4IeVft1P+Iihq/Xk8Q== +X-Received: by 26b:c65b:3ad2:32b5:a246:1e35:126:a90b with SMTP id m10mr41966216vkf.29.1638803021272; + Mon, 06 Dec 2021 07:03:41 -0800 (PST) +X-BeenThere: maint-notices@example.com +Received: by 26b:c69a:9846:8a28:5c9d:d7b2:25b7:f565 with SMTP id cd38ls5065354vsb.5.gmail; Mon, + 06 Dec 2021 07:03:40 -0800 (PST) +X-Received: by 26b:c69a:9846:c584:83ff:9eb:e3dd:79cd with SMTP id k14mr35991447vst.70.1638803019627; + Mon, 06 Dec 2021 07:03:39 -0800 (PST) +ARC-Seal: i=1; a=rsa-sha256; t=1638803019; cv=none; + d=google.com; s=arc-20160816; + b=s3eQTgOQyndq/+00IH3QWxfI3Sb794jyPwy9/dMYijX8Kp1EcV7v5lTcym69+eKGbU + ZhiI4fVygo80ZL2Sx9GMeO4aT8gWQgzZBSVsumL+zhCdTrXhSQSd05XRX6Ywnlh/S7x8 + 3qxD97RjdTHySFLVoPSg5sd7T51MqRE4Uo4gUcuypm9uMlwyeeC+Zxguk5/1/+03+VXO + bkzvp/wOVAy7OK/H3G7SGUXqQ7L2CchMSHVS/mDrEC7dbPSIzPtMErC1ZG6V6KNHZDoC + O5KSfTGdGPjsYYxb30dTL0fqdfvLqWB7IO2fNA2Hbz5JSIPgGRncY7W8BP3PnfPqQpQB + zryg== +ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; + h=organization:mime-version:subject:message-id:to:reply-to:from:date; + bh=KXImSC2nRLcb870x1UBCENwiwa6LLafq6KrnTRpMeMA=; + b=z4xTPHCi+j6NfccgK7zZUYlAytL9/xoM2BFIMfBxIvleq6rxXKZ4moL0K0Bm/iizZD + ozEFUQNVsO9Xf0KoA6al8wvHH0v0UnFgcjtK77+cWFR3uabcp3jcny2F66YO3d/3INwH + BLXoi92zLlitD+y7UF3rGhjdArYUGgQPxiL/K5I9k1hvnkG7zvdNNdONiVwHJz1Msj7H + drP+Z/SRjhrnSqZbPHEc3dZSC18uUW0U6tc+lV/qzn+rcplbH9/LJ35U21TLTnKibM88 + PKoIN+w96weW4/fLbXnQmFDFpuLYIDlPicnd+kvrdXhMoLv/SBtz+h9Qf4zxQ1FqwZHD + zz0Q== +ARC-Authentication-Results: i=1; mx.google.com; + spf=pass (google.com: domain of no-reply@equinix.com designates 82.248.245.45 as permitted sender) smtp.mailfrom=no-reply@equinix.com; + dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=equinix.com +Received: from ch3esa01.corp.equinix.com (nat1-ch-mis.equinix.com. [82.248.245.45]) + by mx.google.com with ESMTPS id n9si10427993vse.680.2021.12.06.07.03.24 + (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); + Mon, 06 Dec 2021 07:03:39 -0800 (PST) +Received-SPF: pass (google.com: domain of no-reply@equinix.com designates 82.248.245.45 as permitted sender) client-ip=82.248.245.45; +Received: from unknown (HELO vmclxremas08.corp.equinix.com) ([10.153.56.233]) + by ch3esa01.corp.equinix.com with ESMTP; 06 Dec 2021 07:03:22 -0800 +Date: Mon, 6 Dec 2021 15:03:22 +0000 (UTC) +From: Equinix Network Maintenance NO-REPLY +Reply-To: Equinix Network Maintenance NO-REPLY +To: "EquinixNetworkMaintenance.SE" +Message-ID: <382392005.90948.1638803002267@vmclxremas08.corp.equinix.com> +Subject: [External] REMINDER - Scheduled Software Upgrade on Infrastructure device-SG + Metro Area Network Maintenance -02-NOV-2022 [5-9876543210] +MIME-Version: 1.0 +Content-Type: multipart/alternative; + boundary="----=_Part_35052_1014703399.1667311770403" +X-Priority: 1 +Organization: Equinix, Inc +X-Original-Sender: no-reply@equinix.com +X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: + domain of no-reply@equinix.com designates 82.248.245.45 as permitted sender) + smtp.mailfrom=no-reply@equinix.com; dmarc=pass (p=NONE sp=NONE + dis=NONE) header.from=equinix.com +Precedence: list +Mailing-list: list maint-notices@example.com; contact maint-notices+owners@example.com +List-ID: +X-Spam-Checked-In-Group: maint-notices@example.com +X-Google-Group-Id: 536184160288 +List-Post: , +List-Help: , + +List-Archive: +List-Unsubscribe: , + + +------=_Part_35052_1014703399.1667311770403 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: quoted-printable + + Dear Equinix Customer, + +The maintenance listed below will commence in 24 hours. + +=20 + +Dear Equinix Customer, + +DATE:=09=0902-NOV-2022 - 03-NOV-2022 + +SPAN:=09=0902-NOV-2022 - 03-NOV-2022 + +LOCAL:=09=09WEDNESDAY, 02 NOV 22:00 - THURSDAY, 03 NOV 06:00 +UTC:=09=09WEDNESDAY, 02 NOV 14:00 - WEDNESDAY, 02 NOV 22:00 + +IBX(s): SG1,SG2,SG3,SG4,SG5 + + +DESCRIPTION:Please be advised that Equinix engineers will be performing a p= +lanned software upgrade on one of our infrastructure devices. There will be= + no interruption to your services including VCs but there will only be a lo= +ss of redundancy on our internal infrastructure during this work. + + +PRODUCTS:=09EQUINIX FABRIC + +IMPACT:=09No impact to your service + +Equinix Fabric =09 =09=09=09 =09=09=09 =09=09=09=09 Account # =09=09=09= +=09 Product =09=09=09=09 IBX =09=09=09=09 Service Serial # =09=09= +=09=09 ECX Port =09=09=09=09 L2 Seller Profile Name =09=09=09=09 L= +2 Connection Name =09=09=09=09 L2 Connection UUID =09=09=09=09 L3 Sel= +ler Profile Name =09=09=09=09 L3 Subscription Name =09=09=09=09 L3 Su= +bscription UUID =09=09=09=09 Virtual Asset Type =09=09=09=09 Virtual = +Asset Name =09=09=09=09 Virtual Asset UUID =09=09=09 =09=09=09=09 =09=09= +=09=09=09=09 123456 =09=09=09=09=09=09 Equinix Fabric =09=09=09=09=09=09 SG= +2 =09=09=09=09=09=09 24682468-A =09=09=09=09=09=09 = +=09=09=09=09=09=09 =09=09=09=09=09=09 =09=09=09=09=09=09 = +8f5 =09=09=09=09=09=09 - =09=09=09=09=09=09 - =09=09=09=09=09=09 - =09=09= +=09=09=09=09 - =09=09=09=09=09=09 - =09=09=09=09=09=09 - =09=09=09=09 =09= +=09=09=09 =09=09=09=09=09=09 123456 =09=09=09=09=09=09 Equinix Fabric =09= +=09=09=09=09=09 SG2 =09=09=09=09=09=09 135791357-A =09=09=09=09=09=09 Expedi= +a-SG2-CX-PRI-01 =09=09=09=09=09=09 =09=09=09=09=09=09 =09=09=09=09=09=09 =09=09=09=09=09=09 - =09=09=09=09=09=09 - =09=09=09=09=09=09 - =09=09=09= +=09=09=09 - =09=09=09=09=09=09 - =09=09=09=09=09=09 - =09=09=09=09 =09=09= +=09 =09 + +We apologize for any inconvenience you may experience during this activity.= + Your cooperation and understanding are greatly appreciated. + +The Equinix SMC is available to provide up-to-date status information or ad= +ditional details, should you have any questions regarding the maintenance. = + Please reference 5-9876543210.=20 + + +Sincerely,=20 +Equinix SMC=20 +Contacts: +Please do not reply to this email address. If you have any questions or con= +cerns regarding this notification, please log a network ticket via the Equi= +nix Customer Portal, or contact Global Service Desk and quote the the ticke= +t reference [5-9876543210].=20 +To unsubscribe from notifications, please log in to the Equinix Customer Po= +rtal and change your preferences. + +How are we doing? Tell Equinix - We're Listening. E Q U= + I N I X | Unit 5501-5504A, 55/F International Commerce Centre, +1 Austin Road West, Kowloon, Hong Kong | www.equinix.com =C2= +=A9 2018 Equinix, Inc. All rights reserved.| Legal | Privacy +------=_Part_35052_1014703399.1667311770403 +Content-Type: text/html; charset=UTF-8 +Content-Transfer-Encoding: 7bit + + + + + + + + + + + + +
+ + + + + +
Meet Equinix
+ +
+
+
+ + + + + + +
  + +
+

+Dear Equinix Customer,
+
+The maintenance listed below will commence in 24 hours.
+
+

+


+Dear Equinix Customer,
+
+DATE: 02-NOV-2022 - 03-NOV-2022
+
+SPAN: 02-NOV-2022 - 03-NOV-2022
+
+LOCAL: WEDNESDAY, 02 NOV 22:00 - THURSDAY, 03 NOV 06:00
+UTC: WEDNESDAY, 02 NOV 14:00 - WEDNESDAY, 02 NOV 22:00
+
+IBX(s): SG1,SG2,SG3,SG4,SG5
+
+
+DESCRIPTION:Please be advised that Equinix engineers will be performing a planned software upgrade on one of our infrastructure devices. There will be no interruption to your services including VCs but there will only be a loss of redundancy on our internal infrastructure during this work.
+

+PRODUCTS: EQUINIX FABRIC
+
+IMPACT: No impact to your service
+
+ Equinix Fabric + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Account #ProductIBXService Serial #ECX PortL2 Seller Profile NameL2 Connection NameL2 Connection UUIDL3 Seller Profile NameL3 Subscription NameL3 Subscription UUIDVirtual Asset TypeVirtual Asset NameVirtual Asset UUID
123456Equinix FabricSG224682468-A------
123456Equinix FabricSG2135791357-A------
+
+
We apologize for any inconvenience you may experience during this activity. Your cooperation and understanding are greatly appreciated.

The Equinix SMC is available to provide up-to-date status information or additional details, should you have any questions regarding the maintenance. Please reference 5-9876543210.
+
+

Sincerely,
Equinix SMC

Contacts:

Please do not reply to this email address. If you have any questions or concerns regarding this notification, please log a network ticket via the Equinix Customer Portal, or contact Global Service Desk and quote the the ticket reference [5-9876543210].


+
To unsubscribe from notifications, please log in to the Equinix Customer Portal and change your preferences.

+
+
+
+
+

 

+
+
+ + + +
Equinix + + + +
How are we doing? Tell Equinix - We're Listening. + +  +
+
 
+
+ + + + + +
+ + + + + +
+ + + + + + +
E Q U I N I X   |   Unit 5501-5504A, 55/F International Commerce Centre,
1 Austin Road West, Kowloon, Hong Kong
+
   |   www.equinix.com
+
© 2018 Equinix, Inc. All rights reserved.| Legal | Privacy +
+ + + + + +------=_Part_35052_1014703399.1667311770403-- diff --git a/tests/unit/data/equinix/equinix5_result.json b/tests/unit/data/equinix/equinix5_result.json new file mode 100644 index 00000000..738b575d --- /dev/null +++ b/tests/unit/data/equinix/equinix5_result.json @@ -0,0 +1,17 @@ +[ + { + "account": "123456", + "circuits": [ + { + "circuit_id": "24682468-A", + "impact": "NO-IMPACT" + }, + { + "circuit_id": "135791357-A", + "impact": "NO-IMPACT" + } + ], + "end": 1667426400, + "start": 1667397600 + } +] \ No newline at end of file diff --git a/tests/unit/data/equinix/equinix5_result_combined.json b/tests/unit/data/equinix/equinix5_result_combined.json new file mode 100644 index 00000000..346677cb --- /dev/null +++ b/tests/unit/data/equinix/equinix5_result_combined.json @@ -0,0 +1,25 @@ +[ + { + "account": "123456", + "circuits": [ + { + "circuit_id": "24682468-A", + "impact": "NO-IMPACT" + }, + { + "circuit_id": "135791357-A", + "impact": "NO-IMPACT" + } + ], + "end": 1667426400, + "maintenance_id": "5-9876543210", + "organizer": "servicedesk@equinix.com", + "provider": "equinix", + "sequence": 1, + "stamp": 1638803002, + "start": 1667397600, + "status": "CONFIRMED", + "summary": "[External] REMINDER - Scheduled Software Upgrade on Infrastructure device-SG Metro Area Network Maintenance -02-NOV-2022 [5-9876543210]", + "uid": "0" + } +] \ No newline at end of file diff --git a/tests/unit/data/verizon/verizon5.html b/tests/unit/data/verizon/verizon5.html new file mode 100644 index 00000000..87efe8d2 --- /dev/null +++ b/tests/unit/data/verizon/verizon5.html @@ -0,0 +1,366 @@ + +
+
ENGLISH
+
+

+ logo +

+

+ Verizon Maintenance Notification +

+

 

+

+   +

+ +

Dear Verizon Customer,

+

 

+

I'd like to take this opportunity to thank you for being a Verizon Customer, and to update you on maintenance work that will be carried out on the Verizon network. Verizon will be performing maintenance activities, utilizing proven methods , in a manner to ensure the best performance for your connection. The maintenance window is from Mar 26 2023 22:00 GMT - Mar 27 2023 03:00 GMT , however your expected circuit downtime within this window to be 1 Hour(s). Belowyou will find more detailed information as it relates to the impact to your environment.

+

+
+

+
+

+ + If you have questions regarding this maintenance event, please contact Verizon's Global Event Management Center at email + + GEMC@VERIZON.COM. + + +

+

+
+

+

+ + For those customers with a defined Account Team or Technical Service Manager, please refer all circuit-based questions to your Verizon Account Representative.   + +

+

+
+

+

+ + NOTE: If your circuit remains down after the maintenance window has passed, please follow your defined Verizon Repair Center processfor investigation. + +

+

+
+

+

+ + We appreciate your cooperation and understanding inthis matter. Verizon's goal is to provide you with exceptional service every day, in every interaction. Thank you once again for your business, and your partnership. + +

+

+
+

+

 

+

 

+

+
+

+

+ + Regards, + +

+

+ + Global Event Management Center + +

+

+ + + GEMC.Leadership@verizon.com + + +

+

+
+

+

+ + +
+ +
+

+ + + + + + + + + + + + + + + + + + + + = + + + + + + + + + + + + + + + + + + +
+

+ +

+
+

+ + Customer Contact ID: +

+
+

+ 12345678 +

+
+

+ + Maintenance Date/Time (Local): + +

+
+

+ Mar 26 2023 22:00 GMT - Mar 27 2023 03:00 GMT +

+
+

+ + Maintenance Date/Time (GMT): +

+
+

+ Mar 26 2023 22:00 GMT - Mar 27 2023 03:00 GMT +

+
+

+ + + Maintenance Location: + +

+
+

+ IRELAND, IRELAND +

+
+

+ +   + +

+

+ + + Description of Maintenance: + +

+
+

+  A Third Party vendor will be performing scheduled network maintenance. +

+
+

+ + + Planned Circuit Downtime: + +

+
+

+ 1 Hour(s) +

+
+

+ + + Verizon MASTARS Request number: + + +

+
+

+ 987654321-1 +

+
+

+ + + Verizon MASTARS Event id + : + + +

+
+

+ 123456 +

+
+

 

+ + +

+ Circuits Affected: +

+
+
+

 

+

+ + + + + + + + + + + + + + + + + + + + + + +
+ Company Name + + Circuit ID + + Billing ID + + DNS Short Name + + ServiceType +
+
+
ACME - EMEAC12345678X123456789acme-12345678DIA
+
+
+
+

+

 

+

 

+

------------------------------------------------------------------------------------------------------------

+

 

+

+ In case your service remains downafter scheduled maintenance, please call to our Service Desk. +

+

 

+
+
+
+

+ + + + + + + + + + + + + + + + + + + + + + +
+

+ Country +

+
+

+ Freephone Number +

+ +
+

+ Direct Dial +

+
+

Calls from Austria, Belgium, Denmark, France, Finland, Germany, Greece, Hungary, Ireland, Italy, Luxembourg, Netherlands, Norway, Portugal, Spain, Sweden, Switzerland, United Kingdom

+
+

00800 1103 1121

+
+

+44 118 905 4017

+
+

Calls from USA

+
+

+1 866 567 2507

+
+

+44 118 905 4017

+
+

Any other countries

+
+

 

+
+

+44 118 905 4017

+
+

+

 

+

This information can also be found in thecustomer facing  EUROPEAN TECHNICAL SERVICE DESK TELEPHONE NUMBERS USER GUIDE:
+

+

 

+

+ http://www.verizonenterprise.com/resources/european_service_desk_phone_numbers_user_guide_en_xg.pdf +

+

 

+

+ The below links provide essentialinformation to manage your services for a variety of topics. +

+

+ View or Create your trouble ticket online: + + https://enterprisecenter.verizon.com + +

+

+ European Technical Service User Guide: + + http://www.verizonenterprise.com/support/emea-service-assurance-user-guides/ + +

+

+ Your Country Support pages: + + http://www.verizonbusiness.com/support +To: "foo@example.com" +Message-ID: <2j1fn000000000000000000000000000000000000000000000RJZ0JO00LiATa74-RmmR2r@sfdc.net> +Subject: ***Customer,inc***ZAYO TTN-0001234567 Emergency + MAINTENANCE NOTIFICATION*** +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----=_Part_14359_801717674.1666133134471" +X-Priority: 3 +X-SFDC-LK: 00D6000000079Qk +X-SFDC-User: 0054z000008sWbJ +X-Sender: postmaster@salesforce.com +X-mail_abuse_inquiries: http://www.salesforce.com/company/abuse.jsp +X-SFDC-TLS-NoRelay: 1 +X-SFDC-Binding: 1WrIRBV94myi25uB +X-SFDC-EmailCategory: apiSingleMailViaApex +X-SFDC-Interface: internal +X-Original-Sender: mr@zayo.com +X-Original-Authentication-Results: mx.google.com; dkim=pass + header.i=@zayo.com header.s=SF112018Alt header.b=iG8OeIBq; spf=pass + (google.com: domain of mr=zayo.com__2ff706eokfxkk5lh@vthkfkgg0skc.6-79qkeai.na152.bnc.salesforce.com + designates 13.110.78.205 as permitted sender) smtp.mailfrom="mr=zayo.com__2ff706eokfxkk5lh@vthkfkgg0skc.6-79qkeai.na152.bnc.salesforce.com"; + dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zayo.com + +------=_Part_14359_801717674.1666133134471 +Content-Type: multipart/alternative; + boundary="----=_Part_14358_1498340646.1666133134471" + +------=_Part_14358_1498340646.1666133134471 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + +Zayo Maintenance Notification=20 + + +This email serves as official notification that Zayo and/or one of its prov= +iders will be performing maintenance on its network as described below. Thi= +s maintenance may affect services you have with us. + + + +Maintenance Ticket #: TTN-0001234567 + + +Urgency: Emergency + + +Date Notice Sent: 18-Oct-2022 + + +Customer: Customer,inc + + + + +Maintenance Window=20 + +1st Activity Date=20 +18-Oct-2022 19:00 to 19-Oct-2022 01:00 ( Central )=20 + + 19-Oct-2022 00:00 to 19-Oct-2022 06:00 ( GMT )=20 + + +Location of Maintenance: NE + + +Reason for Maintenance: Zayo will implement EÉmergency maintenance to restore network stability and prevent an unplanned outage. +Expected Impact: Service Affecting Activity: Any Maintenance Activity directly impacting the service(s) of customers. Service(s) are expected to go down as a result of these activities. + + +Circuit(s) Affected:=20 + + +Circuit Id +Expected Impact +A Location Address + +Z Location Address +Legacy Circuit Id + +ABCD/123456//ZYO +Hard Down - Duration of maintenance window +123 Main, Anytown, CA. USA +123 1st, Othertown, CA. USA + + + + +Please contact the Zayo Maintenance Team with any questions regarding this = +maintenance event. Please reference the Maintenance Ticket number when call= +ing. + + +Maintenance Team Contacts:=20 + + + + +Zayo=A0Global Change Management Team/=C9quipe de Gestion du Changement Glob= +al=A0Zayo + +Zayo | Our Fiber Fuels Global Innovation + +Toll free/No=A0sans=A0frais:=A01.866.236.2824 + +United Kingdom Toll Free/No=A0sans +frais Royaume-Uni:=A00800.169.1646 + +Email/Courriel:=A0mr@zayo.com=A0 + +Website/Site Web:=A0https://www.zayo.com + +Purpose=A0|=A0Network Map=A0|=A0Escalation List=A0|=A0LinkedIn=A0|=A0Twitte= +r=A0|=A0Tranzact=A0 + +=A0 + +This communication is the property of Zayo and may contain confidential or = +privileged information. If you have received this communication in error, p= +lease promptly notify the sender by reply e-mail and destroy all copies of = +the communication and any attachments. + +=A0 +------=_Part_14358_1498340646.1666133134471 +Content-Type: text/html; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + + +Zayo Maintenance Notification=20 + +

This email serves as official notification that Zayo and/or one of = +its providers will be performing maintenance on its network as described be= +low. This maintenance may affect services you have with us. +
+ +

Maintenance Ticket #: TTN-0001234567 + +

Urgency: Emergency + +

Date Notice Sent: 18-Oct-2022 + +

Customer: NSSI - Waves and Fiber + + + +

Maintenance Window

1st Activity Date <= +/b>
18-Oct-2022 19:00 to 19-Oct-2022 01:00 ( Central )=20 +
19-Oct-2022 00:00 to 19-Oct-2022 06:00 ( GMT )=20 + +

Location of Maintenance: NE + +

Reason for Maintenance: Zayo will implement Emergency maint= +enance to restore network stability and prevent an unplanned outage + +

Expected Impact: Service Affecting Activity: Any Maintenan= +ce Activity directly impacting the service(s) of customers. Service(s) are = +expected to go down as a result of these activities. + +

Circuit(s) Affected:
+ + + + + + + + + + + + + + + + +
Circuit IdExpected ImpactA Location AddressZ Location AddressLegacy Circuit Id
ABCD/123456//ZYOHard Down - Duration of maintenance window123 Main, Anytown, CA. USA567 1st, Somewhere, CA. USA
+ + +

Please contact the Zayo Maintenance Team with any questions regardi= +ng this maintenance event. Please reference the Maintenance Ticket number w= +hen calling. + +

Maintenance Team Contacts:

+

+ +

Zayo Global Change Management Team/= +=C9quipe de Gestion du <= +span +class=3DSpellE>Changement Global Zayo

+ +

Zayo | Our Fiber Fuels Global Inn= +ovation

+ +

Toll free/No s= +ans frais: 1.866.236.2824

+ +

United Kingdom Toll Free/No sans +frais Royaume-Uni:<= +/i> 0800.169.1646

+ +

Email/Cou= +rriel: mr@zayo.com<= +/u> 

+ +

Website/Site Web: https://www.zayo.com

+ +

Purpose | Network Map Escalation List LinkedIn <= +/span>Twitter Tranzact&n= +bsp; + +

&nbs= +p;

+ +

This communication is the property of Zayo and may contain confidential= + or privileged information. If you have received this communication in erro= +r, please promptly notify the sender by reply e-mail and destroy all copies= + of the communication and any attachments.

+ +

 

+ +
+------=_Part_14358_1498340646.1666133134471-- + +------=_Part_14359_801717674.1666133134471-- diff --git a/tests/unit/data/zayo/zayo10_html_parser_result.json b/tests/unit/data/zayo/zayo10_html_parser_result.json new file mode 100644 index 00000000..f3c8840a --- /dev/null +++ b/tests/unit/data/zayo/zayo10_html_parser_result.json @@ -0,0 +1,17 @@ +[ + { + "account": "Customer,inc", + "circuits": [ + { + "circuit_id": "ABCD/123456//ZYO", + "impact": "OUTAGE" + } + ], + "end": 1666159200, + "maintenance_id": "TTN-0001234567", + "stamp": 1666051200, + "start": 1666137600, + "status": "CONFIRMED", + "summary": "Zayo will implement EÉmergency maintenance to restore network stability and prevent an unplanned outage" + } +] \ No newline at end of file diff --git a/tests/unit/data/zayo/zayo10_result.json b/tests/unit/data/zayo/zayo10_result.json new file mode 100644 index 00000000..1da4cb6f --- /dev/null +++ b/tests/unit/data/zayo/zayo10_result.json @@ -0,0 +1,21 @@ +[ + { + "account": "Customer,inc", + "circuits": [ + { + "circuit_id": "ABCD/123456//ZYO", + "impact": "OUTAGE" + } + ], + "end": 1666159200, + "maintenance_id": "TTN-0001234567", + "organizer": "mr@zayo.com", + "provider": "zayo", + "sequence": 1, + "stamp": 1666051200, + "start": 1666137600, + "status": "CONFIRMED", + "summary": "Zayo will implement EÉmergency maintenance to restore network stability and prevent an unplanned outage", + "uid": "0" + } +] \ No newline at end of file diff --git a/tests/unit/test_e2e.py b/tests/unit/test_e2e.py index 0dc23aac..3a964151 100644 --- a/tests/unit/test_e2e.py +++ b/tests/unit/test_e2e.py @@ -14,6 +14,7 @@ Equinix, GenericProvider, AquaComms, + Arelion, AWS, BSO, Cogent, @@ -28,7 +29,6 @@ PacketFabric, Seaborn, Sparkle, - Telia, Telstra, Turkcell, Verizon, @@ -64,6 +64,25 @@ Path(dir_path, "data", "aquacomms", "aquacomms1_result.json"), ], ), + # Arelion + ( + Arelion, + [ + ("ical", Path(dir_path, "data", "arelion", "arelion1")), + ], + [ + Path(dir_path, "data", "arelion", "arelion1_result.json"), + ], + ), + ( + Arelion, + [ + ("ical", Path(dir_path, "data", "arelion", "arelion2")), + ], + [ + Path(dir_path, "data", "arelion", "arelion2_result.json"), + ], + ), # AWS ( AWS, @@ -246,6 +265,11 @@ [("email", Path(dir_path, "data", "equinix", "equinix4.eml"))], [Path(dir_path, "data", "equinix", "equinix4_result_combined.json")], ), + ( + Equinix, + [("email", Path(dir_path, "data", "equinix", "equinix5.eml"))], + [Path(dir_path, "data", "equinix", "equinix5_result_combined.json")], + ), # EUNetworks ( EUNetworks, @@ -499,25 +523,6 @@ Path(dir_path, "data", "sparkle", "sparkle1_result.json"), ], ), - # Telia - ( - Telia, - [ - ("ical", Path(dir_path, "data", "telia", "telia1")), - ], - [ - Path(dir_path, "data", "telia", "telia1_result.json"), - ], - ), - ( - Telia, - [ - ("ical", Path(dir_path, "data", "telia", "telia2")), - ], - [ - Path(dir_path, "data", "telia", "telia2_result.json"), - ], - ), # Telstra ( Telstra, @@ -651,6 +656,17 @@ Path(dir_path, "data", "date", "email_date_1_result.json"), ], ), + ( + Verizon, + [ + ("html", Path(dir_path, "data", "verizon", "verizon5.html")), + (EMAIL_HEADER_DATE, Path(dir_path, "data", "date", "email_date_1")), + ], + [ + Path(dir_path, "data", "verizon", "verizon5_result.json"), + Path(dir_path, "data", "date", "email_date_1_result.json"), + ], + ), # Zayo ( Zayo, diff --git a/tests/unit/test_parsers.py b/tests/unit/test_parsers.py index 892d423d..a34d4878 100644 --- a/tests/unit/test_parsers.py +++ b/tests/unit/test_parsers.py @@ -229,6 +229,11 @@ Path(dir_path, "data", "equinix", "equinix4.eml"), Path(dir_path, "data", "equinix", "equinix4_result.json"), ), + ( + HtmlParserEquinix, + Path(dir_path, "data", "equinix", "equinix5.eml"), + Path(dir_path, "data", "equinix", "equinix5_result.json"), + ), # GTT ( HtmlParserGTT1, @@ -430,6 +435,11 @@ Path(dir_path, "data", "verizon", "verizon4.html"), Path(dir_path, "data", "verizon", "verizon4_result.json"), ), + ( + HtmlParserVerizon1, + Path(dir_path, "data", "verizon", "verizon5.html"), + Path(dir_path, "data", "verizon", "verizon5_result.json"), + ), # Zayo ( SubjectParserZayo1,