diff --git a/.cookiecutter.json b/.cookiecutter.json new file mode 100644 index 00000000..89fc1ace --- /dev/null +++ b/.cookiecutter.json @@ -0,0 +1,29 @@ +{ + "cookiecutter": { + "codeowner_github_usernames": "@itdependsnetworks @jeffkala @qduk", + "full_name": "Network to Code, LLC", + "email": "info@networktocode.com", + "github_org": "networktocode", + "description": "Common helper functions useful in network automation.", + "project_name": "netutils", + "project_slug": "netutils", + "repo_url": "https://github.com/networktocode/netutils", + "base_url": "netutils", + "project_python_name": "netutils", + "project_python_base_version": "3.9", + "project_with_config_settings": "no", + "generate_docs": "yes", + "version": "1.15.1", + "_drift_manager": { + "template": "https://github.com/networktocode-llc/cookiecutter-ntc.git", + "template_dir": "python", + "template_ref": "main", + "cookie_dir": "", + "branch_prefix": "drift-manager", + "pull_request_strategy": "create", + "post_actions": [], + "draft": false, + "baked_commit_ref": "cb8b5e31dece5ab2663d2ffd218a96ca1ae794c5" + } + } +} diff --git a/.dockerignore b/.dockerignore index e4b30e20..a1837320 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,10 +1,30 @@ -**/*.pyc -**/*.pyo -**/*.log -.git/ -.gitignore +# Docker related +development/Dockerfile +development/docker-compose*.yml +development/*.env +*.env +environments/ Dockerfile docker-compose.yml .env + +# Python +**/*.pyc +**/*.pyo +**/__pycache__/ +**/.pytest_cache/ +**/.venv/ + + +# Other docs/_build -**/__pycache__ \ No newline at end of file +FAQ.md +.git/ +.gitignore +.github +tasks.py +LICENSE +**/*.log +**/.vscode/ +invoke*.yml +tasks.py diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 491431e0..1a093633 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,8 +4,8 @@ about: Report a reproducible bug in the current release of netutils --- ### Environment -* Python version: -* netutils version: +* Python version: +* netutils version: ### Expected Behavior diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 67ee840b..cbf1dbd5 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -5,7 +5,7 @@ about: Propose a new feature or enhancement --- ### Environment -* netutils version: +* netutils version: + +## [v1.15.2 (2025-12-31)](https://github.com/networktocode/netutils/releases/tag/v1.15.2) + +### Fixed + +- [#723](https://github.com/networktocode/netutils/issues/723) - Fix the GitHub release failures occurring in CI. +- [#741](https://github.com/networktocode/netutils/issues/741) - Fixed the logic error where `salt=0` was ignored in `encrypt_cisco_type7` +- [#750](https://github.com/networktocode/netutils/issues/750) - Fix PAN-OS banner parsing by removing IOS-style banner end normalization. + ## [v1.15.1 (2025-10-20)](https://github.com/networktocode/netutils/releases/tag/v1.15.1) ### Added diff --git a/docs/admin/uninstall.md b/docs/admin/uninstall.md index c6f249a5..4f526b2d 100644 --- a/docs/admin/uninstall.md +++ b/docs/admin/uninstall.md @@ -3,5 +3,5 @@ Uninstall from environment. ```bash -$ pip uninstall netutils -``` \ No newline at end of file +pip uninstall netutils +``` diff --git a/docs/admin/upgrade.md b/docs/admin/upgrade.md index 6204d1fa..9352295a 100644 --- a/docs/admin/upgrade.md +++ b/docs/admin/upgrade.md @@ -3,5 +3,5 @@ Upgrade from PyPI. ```bash -$ pip install netutils --upgrade -``` \ No newline at end of file +pip install netutils --upgrade +``` diff --git a/docs/dev/arch_decision.md b/docs/dev/arch_decision.md new file mode 100644 index 00000000..cbe4d49d --- /dev/null +++ b/docs/dev/arch_decision.md @@ -0,0 +1,3 @@ +# Architecture Decision Records + +The intention is to document deviations from a standard pattern. diff --git a/docs/dev/contributing.md b/docs/dev/contributing.md index 19747ed3..5be51ea7 100644 --- a/docs/dev/contributing.md +++ b/docs/dev/contributing.md @@ -4,7 +4,7 @@ Pull requests are welcomed and automatically built and tested against multiple v Except for unit tests, testing is only supported on Python 3.13. -The project is packaged with a light development environment based on `Docker` to help with the local development of the project and to run tests within GitHub Actions. +The project is packaged with a light development environment based on `Docker` to help with the local development of the project and to run tests within GitHub Actions. The project is following Network to Code software development guidelines and is leveraging the following: @@ -68,6 +68,37 @@ When adding to any of these features, you must run the `development_scripts` fro To add a new function to the jinja2 filter, add a new entry to the `_JINJA2_FUNCTION_MAPPINGS` located in the `utils.py` file. When adding an entry, the key corresponds with the name to call the function and the value to the path to find the function. +Documentation is built using [mkdocs](https://www.mkdocs.org/). The [Docker based development environment](dev_environment.md#docker-development-environment) can be started by running `invoke docs` [http://localhost:8001](http://localhost:8001) that auto-refreshes when you make any changes to your local files. + +## Creating Changelog Fragments + +All pull requests to `next` or `develop` must include a changelog fragment file in the `./changes` directory. To create a fragment, use your GitHub issue number and fragment type as the filename. For example, `2362.added`. Valid fragment types are `added`, `changed`, `deprecated`, `fixed`, `removed`, and `security`. The change summary is added to the file in plain text. Change summaries should be complete sentences, starting with a capital letter and ending with a period, and be in past tense. Each line of the change fragment will generate a single change entry in the release notes. Use multiple lines in the same file if your change needs to generate multiple release notes in the same category. If the change needs to create multiple entries in separate categories, create multiple files. + +!!! example + + **Wrong** + ```plaintext title="changes/1234.fixed" + fix critical bug in documentation + ``` + + **Right** + ```plaintext title="changes/1234.fixed" + Fixed critical bug in documentation. + ``` + +!!! example "Multiple Entry Example" + + This will generate 2 entries in the `fixed` category and one entry in the `changed` category. + + ```plaintext title="changes/1234.fixed" + Fixed critical bug in documentation. + Fixed release notes generation. + ``` + + ```plaintext title="changes/1234.changed" + Changed release notes generation. + ``` + ## Branching Policy The branching policy includes the following tenets: @@ -100,4 +131,4 @@ When a new release is created the following should happen. - A post release PR is created with. - Change the version from `..` to `..-beta` pyproject.toml. - Set the PR to the `develop`. - - Once tests pass, merge. \ No newline at end of file + - Once tests pass, merge. diff --git a/docs/images/networktocode_logo.svg b/docs/images/networktocode_logo.svg new file mode 100644 index 00000000..348e5241 --- /dev/null +++ b/docs/images/networktocode_logo.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index e3f24707..00000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -mkdocs==1.6.0 -mkdocs-material==9.5.32 -markdown-version-annotations==1.0.1 -griffe==1.1.1 -mkdocstrings-python==1.10.8 -mkdocstrings==0.25.2 -mkdocs-autorefs==1.2.0 -# Unique requirements -mkdocs-python-classy==0.1.3 \ No newline at end of file diff --git a/docs/user/lib_getting_started.md b/docs/user/lib_getting_started.md index d6dba101..4b5f4c56 100644 --- a/docs/user/lib_getting_started.md +++ b/docs/user/lib_getting_started.md @@ -4,4 +4,4 @@ The library's primary use case is providing Python functions for the community. ## Install the Library -To install the library, please follow the instructions detailed in the [Installation Guide](../admin/install.md). \ No newline at end of file +To install the library, please follow the instructions detailed in the [Installation Guide](../admin/install.md). diff --git a/example.invoke.yml b/example.invoke.yml new file mode 100644 index 00000000..199f8277 --- /dev/null +++ b/example.invoke.yml @@ -0,0 +1,7 @@ +--- +"netutils": + python_ver: "3.9" + local: false + # image_name: "netutils" + # image_ver: "latest" + # pwd: "." diff --git a/mkdocs.yml b/mkdocs.yml index 5fb748b5..174fd3d1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -14,7 +14,10 @@ theme: - "python" - "yaml" features: + - "content.action.edit" + - "content.action.view" - "content.code.copy" + - "navigation.footer" - "navigation.indexes" - "navigation.tabs" - "navigation.tabs.sticky" diff --git a/netutils/config/parser.py b/netutils/config/parser.py index 32a511be..e08dd690 100644 --- a/netutils/config/parser.py +++ b/netutils/config/parser.py @@ -1522,11 +1522,10 @@ def _build_banner(self, config_line: str) -> t.Optional[str]: if not self.is_banner_end(line): banner_config.append(line) else: - line = normalise_delimiter_caret_c(self.banner_end, line) banner_config.append(line.strip()) line = "\n".join(banner_config) - if line.endswith("^C"): - banner, end, _ = line.rpartition("^C") + if line.endswith('"'): + banner, end, _ = line.rpartition('"') line = banner + end self._update_config_lines(line.strip()) self._current_parents = self._current_parents[:-1] diff --git a/netutils/constants.py b/netutils/constants.py index 9d23e6d1..6a68117c 100644 --- a/netutils/constants.py +++ b/netutils/constants.py @@ -1,8 +1,6 @@ """Constant definitions used in project.""" -from netutils.data_files.protocol_mappings import ( # noqa: F401 # pylint:disable=unused-import - PROTOCOLS, -) +from netutils.data_files.protocol_mappings import PROTOCOLS # noqa: F401 # pylint:disable=unused-import # This variable provides mapping for known interface variants, to the associated long form. BASE_INTERFACES = { @@ -415,8 +413,7 @@ r"hour(s)?,\s+)?((?P\d+) minute(s)?)" ), ( - r"((?P\d+) day(s)?,\s+)?" - r"((?P\d+)):((?P\d+)):((?P\d+))" # pylint: disable=implicit-str-concat + r"((?P\d+) day(s)?,\s+)?" r"((?P\d+)):((?P\d+)):((?P\d+))" # pylint: disable=implicit-str-concat ), ( r"(((?P\d+)y)?(?P\d+)w)?((?P\d+)d)?((?P\d+)h)?" diff --git a/netutils/data_files/oui_mappings.py b/netutils/data_files/oui_mappings.py index 2e713818..f1c34ffd 100644 --- a/netutils/data_files/oui_mappings.py +++ b/netutils/data_files/oui_mappings.py @@ -2800,7 +2800,7 @@ "000b0c": "Agile Systems Inc.", "000b0d": "Air2U, Inc.", "000b0e": "Trapeze Networks", - "000b0f": "Bosch Rexroth", + "000b0f": "Bosch Rexroth AG", "000b10": "11wave Technonlogy Co.,Ltd", "000b11": "HIMEJI ABC TRADING CO.,LTD.", "000b12": "NURI Telecom Co., Ltd.", @@ -2891,7 +2891,7 @@ "000b68": "Addvalue Communications Pte Ltd", "000b69": "Franke Finland Oy", "000b6a": "Asiarock Technology Limited", - "000b6b": "Wistron Neweb Corporation", + "000b6b": "WNC Corporation", "000b6c": "Sychip Inc.", "000b6d": "SOLECTRON JAPAN NAKANIIDA", "000b6e": "Neff Instrument Corp.", @@ -3660,7 +3660,7 @@ "000e6f": "IRIS Corporation Berhad", "000e70": "in2 Networks", "000e71": "Gemstar Technology Development Ltd.", - "000e72": "Arca Technologies S.r.l.", + "000e72": "Sesami Technologies Srl", "000e73": "Tpack A/S", "000e74": "Solar Telecom. Tech", "000e75": "New York Air Brake Corp.", @@ -4254,7 +4254,7 @@ "0010c3": "CSI-CONTROL SYSTEMS", "0010c4": "MEDIA GLOBAL LINKS CO., LTD.", "0010c5": "PROTOCOL TECHNOLOGIES, INC.", - "0010c6": "Universal Global Scientific Industrial Co., Ltd.", + "0010c6": "Universal Global Scientific Industrial., Ltd", "0010c7": "DATA TRANSMISSION NETWORK", "0010c8": "COMMUNICATIONS ELECTRONICS SECURITY GROUP", "0010c9": "MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO.", @@ -5649,7 +5649,7 @@ "00163e": "Xensource, Inc.", "00163f": "CReTE SYSTEMS Inc.", "001640": "Asmobile Communication Inc.", - "001641": "Universal Global Scientific Industrial Co., Ltd.", + "001641": "Universal Global Scientific Industrial., Ltd", "001642": "Pangolin", "001643": "Sunhillo Corporation", "001644": "LITE-ON Technology Corp.", @@ -6713,7 +6713,7 @@ "001a68": "Weltec Enterprise Co., Ltd.", "001a69": "Wuhan Yangtze Optical Technology CO.,Ltd.", "001a6a": "Tranzas, Inc.", - "001a6b": "Universal Global Scientific Industrial Co., Ltd.", + "001a6b": "Universal Global Scientific Industrial., Ltd", "001a6c": "Cisco Systems, Inc", "001a6d": "Cisco Systems, Inc", "001a6e": "Impro Technologies", @@ -6791,7 +6791,7 @@ "001ab6": "Texas Instruments", "001ab7": "Ethos Networks LTD.", "001ab8": "Anseri Corporation", - "001ab9": "PMC", + "001ab9": "Groupe Carrus", "001aba": "Caton Overseas Limited", "001abb": "Fontal Technology Incorporation", "001abc": "U4EA Technologies Ltd", @@ -6991,7 +6991,7 @@ "001b82": "Taiwan Semiconductor Co., Ltd.", "001b83": "Finsoft Ltd", "001b84": "Scan Engineering Telecom", - "001b85": "MAN Energy Solutions", + "001b85": "Everllence", "001b86": "Bosch Access Systems GmbH", "001b87": "Deepsound Tech. Co., Ltd", "001b88": "Divinet Access Technologies Ltd", @@ -7035,7 +7035,7 @@ "001bae": "Micro Control Systems, Inc", "001baf": "Nokia Danmark A/S", "001bb0": "Bharat Electronics Limited", - "001bb1": "Wistron Neweb Corporation", + "001bb1": "WNC Corporation", "001bb2": "Intellect International NV", "001bb3": "Condalo GmbH", "001bb4": "Airvod Limited", @@ -7678,7 +7678,7 @@ "001e34": "CryptoMetrics", "001e35": "Nintendo Co., Ltd.", "001e36": "IPTE", - "001e37": "Universal Global Scientific Industrial Co., Ltd.", + "001e37": "Universal Global Scientific Industrial., Ltd", "001e38": "Bluecard Software Technology Co., Ltd.", "001e39": "Comsys Communication Ltd.", "001e3a": "Nokia Danmark A/S", @@ -7830,7 +7830,7 @@ "001ece": "Limited", "001ecf": "PHILIPS ELECTRONICS UK LTD", "001ed0": "Ingespace", - "001ed1": "Keyprocessor B.V.", + "001ed1": "TKH Security B.V.", "001ed2": "Ray Shine Video Technology Inc", "001ed3": "Dot Technology Int'l Co., Ltd.", "001ed4": "Doble Engineering", @@ -8520,7 +8520,7 @@ "002183": "ANDRITZ HYDRO GmbH", "002184": "POWERSOFT SRL", "002185": "MICRO-STAR INT'L CO.,LTD.", - "002186": "Universal Global Scientific Industrial Co., Ltd.", + "002186": "Universal Global Scientific Industrial., Ltd", "002187": "Imacs GmbH", "002188": "EMC Corporation", "002189": "AppTech, Inc.", @@ -9273,7 +9273,7 @@ "00247b": "Actiontec Electronics, Inc", "00247c": "Nokia Danmark A/S", "00247d": "Nokia Danmark A/S", - "00247e": "Universal Global Scientific Industrial Co., Ltd.", + "00247e": "Universal Global Scientific Industrial., Ltd", "00247f": "Nortel Networks", "002480": "Meteocontrol GmbH", "002481": "Hewlett Packard", @@ -9926,7 +9926,7 @@ "002710": "Intel Corporate", "002711": "LanPro Inc", "002712": "MaxVision LLC", - "002713": "Universal Global Scientific Industrial Co., Ltd.", + "002713": "Universal Global Scientific Industrial., Ltd", "002714": "Grainmustards, Co,ltd.", "002715": "Rebound Telecom. Co., Ltd", "002716": "Adachi-Syokai Co., Ltd.", @@ -12916,6 +12916,7 @@ "00e421": "Sony Interactive Entertainment Inc.", "00e5e4": "Sichuan Tianyi Comheart Telecom Co.,LTD", "00e5f1": "BUFFALO.INC", + "00e607": "AURCORE TECHNOLOGY INC.", "00e60e": "Extreme Networks Headquarters", "00e63a": "Ruckus Wireless", "00e666": "ARIMA Communications Corp.", @@ -13017,6 +13018,7 @@ "041a04": "WaveIP", "041b94": "Host Mobility AB", "041bba": "Samsung Electronics Co.,Ltd", + "041cdb": "Siba Service", "041d10": "Dream Ware Inc.", "041dc7": "zte corporation", "041e64": "Apple, Inc.", @@ -13043,6 +13045,7 @@ "042bbb": "PicoCELA, Inc.", "042dad": "Areus GmbH", "042db4": "Co., Ltd Modern MOMA Branch", + "042ec1": "Apple, Inc.", "042f56": "LTD", "043110": "Inspur Group Co., Ltd.", "043201": "Broadcom Limited", @@ -13121,6 +13124,7 @@ "045d4b": "Sony Corporation", "045d56": "camtron industrial inc.", "045ea4": "Netis Technology Co., Ltd.", + "045fa6": "Shenzhen SDMC Technology CP,.LTD", "045fa7": "Shenzhen Yichen Technology Development Co.,LTD", "045fb9": "Cisco Systems, Inc", "046169": "MEDIA GLOBAL LINKS CO., LTD.", @@ -13148,6 +13152,7 @@ "04714b": "IEEE Registration Authority", "047153": "TECHNOLOGIES CORPORATION", "047295": "Apple, Inc.", + "0472ef": "Apple, Inc.", "04749e": "HUAWEI TECHNOLOGIES CO.,LTD", "0474a1": "Aligera Equipamentos Digitais Ltda", "047503": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -13162,7 +13167,7 @@ "0479fd": "Ciena Corporation", "047a0b": "Beijing Xiaomi Electronics Co., Ltd.", "047aae": "Huawei Device Co., Ltd.", - "047bcb": "Universal Global Scientific Industrial Co., Ltd.", + "047bcb": "Universal Global Scientific Industrial., Ltd", "047c16": "Micro-Star INTL CO., LTD.", "047d50": "Shenzhen Kang Ying Technology Co.Ltd.", "047d7b": "Quanta Computer Inc.", @@ -13310,6 +13315,7 @@ "04d4c4": "ASUSTek COMPUTER INC.", "04d590": "Fortinet, Inc.", "04d60e": "FUNAI ELECTRIC CO., LTD.", + "04d688": "CIG SHANGHAI CO LTD", "04d6f4": "GD Midea Air-Conditioning Equipment Co.,Ltd.", "04d783": "Y&H E&C Co.,LTD.", "04d7a5": "New H3C Technologies Co., Ltd", @@ -13562,6 +13568,7 @@ "081605": "Vodafone Italia S.p.A.", "081651": "SHENZHEN SEA STAR TECHNOLOGY CO.,LTD", "0816d5": "GOERTEK INC.", + "0816e3": "HUAWEI TECHNOLOGIES CO.,LTD", "081735": "Cisco Systems, Inc", "0817f4": "IBM Corp", "08181a": "zte corporation", @@ -13614,10 +13621,11 @@ "083a2f": "Guangzhou Juan Intelligent Tech Joint Stock Co.,Ltd", "083a38": "New H3C Technologies Co., Ltd", "083a5c": "Junilab, Inc.", - "083a88": "Universal Global Scientific Industrial Co., Ltd.", + "083a88": "Universal Global Scientific Industrial., Ltd", "083a8d": "Espressif Inc.", "083ab8": "Shinoda Plasma Co., Ltd.", "083af2": "Espressif Inc.", + "083bc1": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "083be9": "New H3C Technologies Co., Ltd", "083d88": "Samsung Electronics Co.,Ltd", "083e0c": "Commscope", @@ -13713,6 +13721,7 @@ "087b87": "Cisco Systems, Inc", "087baa": "SVYAZKOMPLEKTSERVICE, LLC", "087c39": "Amazon Technologies Inc.", + "087c43": "Huawei Device Co., Ltd.", "087cbe": "Quintic Corp.", "087d21": "Altasec technology corporation", "087e64": "Vantiva USA LLC", @@ -13889,6 +13898,7 @@ "08f7e9": "HRCP Research and Development Partnership", "08f80d": "IEEE Registration Authority", "08f8bc": "Apple, Inc.", + "08f97e": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", "08f9e0": "Espressif Inc.", "08fa28": "HUAWEI TECHNOLOGIES CO.,LTD", "08fa79": "vivo Mobile Communication Co., Ltd.", @@ -13976,7 +13986,7 @@ "0c3afa": "New H3C Technologies Co., Ltd", "0c3b50": "Apple, Inc.", "0c3c65": "Dome Imaging Inc", - "0c3ccd": "Universal Global Scientific Industrial Co., Ltd.", + "0c3ccd": "Universal Global Scientific Industrial., Ltd", "0c3d5e": "Nanjing Qinheng Microelectronics Co., Ltd.", "0c3e9f": "Apple, Inc.", "0c4101": "Co., Ltd.", @@ -14050,6 +14060,7 @@ "0c7329": "Sercomm Corporation.", "0c73be": "Dongguan Haimai Electronie Technology Co.,Ltd", "0c73eb": "IEEE Registration Authority", + "0c7474": "Fiberhome Telecommunication Technologies Co.,LTD", "0c74c2": "Apple, Inc.", "0c7512": "Shenzhen Kunlun TongTai Technology Co.,Ltd.", "0c7523": "BEIJING GEHUA CATV NETWORK CO.,LTD", @@ -14185,6 +14196,7 @@ "0cc47a": "Super Micro Computer, Inc.", "0cc47e": "EUCAST Co., Ltd.", "0cc56c": "Apple, Inc.", + "0cc574": "FRITZ! Technology GmbH", "0cc655": "Wuxi YSTen Technology Co.,Ltd.", "0cc66a": "Nokia Corporation", "0cc6ac": "DAGS", @@ -14246,6 +14258,7 @@ "0ce99a": "ATLS ALTEC", "0cea14": "Ubiquiti Inc", "0ceac9": "Commscope", + "0ceb25": "Power Plus Communications AG", "0cec80": "Texas Instruments", "0cec84": "Shenzhen TINNO Mobile Technology Corp.", "0cec8d": "Motorola Mobility LLC, a Lenovo Company", @@ -14495,6 +14508,7 @@ "107bef": "Zyxel Communications Corporation", "107c61": "ASUSTek COMPUTER INC.", "107d1a": "Dell Inc.", + "107dc8": "Apple, Inc.", "1081b4": "Hunan Greatwall Galaxy Science and Technology Co.,Ltd.", "10823d": "Ruijie Networks Co.,LTD", "108286": "Luxshare Precision Industry Co.,Ltd", @@ -14666,12 +14680,13 @@ "10e83a": "FIBERX DISTRIBUIDORA DE PRODUTOS DE TELECOMUNICACAO LTDA", "10e840": "CO., LTD.", "10e878": "Nokia", - "10e8a7": "Wistron Neweb Corporation", + "10e8a7": "WNC Corporation", "10e8ee": "PhaseSpace", "10e953": "Huawei Device Co., Ltd.", "10e992": "INGRAM MICRO SERVICES", "10ea59": "Cisco SPVTG", "10ec81": "Samsung Electronics Co.,Ltd", + "10edc8": "NXP Semiconductors Taiwan Ltd.", "10eed9": "Canoga Perkins Corporation", "10f005": "Intel Corporate", "10f068": "Ruckus Wireless", @@ -14918,6 +14933,7 @@ "14942f": "USYS CO.,LTD.", "149448": "BLU CASTLE S.A.", "14946c": "Apple, Inc.", + "149569": "Shenzhen iComm Semiconductor CO.,LTD", "1495ce": "Apple, Inc.", "14962d": "New H3C Technologies Co., Ltd", "1496e5": "Samsung Electronics Co.,Ltd", @@ -15161,7 +15177,7 @@ "183f70": "Apple, Inc.", "1840a4": "Shenzhen Trylong Smart Science and Technology Co., Ltd.", "1841c3": "GD Midea Air-Conditioning Equipment Co.,Ltd.", - "1841fe": "Digital 14", + "1841fe": "KATIM L.L.C", "18421d": "Private", "18422f": "Alcatel Lucent", "1842d4": "Wuhan Hosan Telecommunication Technology Co.,Ltd", @@ -15297,6 +15313,7 @@ "188b9d": "Cisco Systems, Inc", "188ed5": "TP Vision Belgium N.V. - innovation site Brugge", "188ef9": "G2C Co. Ltd.", + "189024": "Astera LED Technology GmbH", "189067": "Shenzhen Jingxun Technology Co., Ltd.", "189088": "eero inc.", "1890d8": "Sagemcom Broadband SAS", @@ -15348,6 +15365,7 @@ "18af8f": "Apple, Inc.", "18af9f": "DIGITRONIC Automationsanlagen GmbH", "18afa1": "Shenzhen Yifang Network Technology Co., Ltd.", + "18b0a4": "zte corporation", "18b169": "Sonicwall", "18b185": "Co., Ltd.", "18b209": "Torrey Pines Logic, Inc", @@ -15388,7 +15406,7 @@ "18caa7": "zte corporation", "18cc18": "Intel Corporate", "18cc23": "Philio Technology Corporation", - "18cc88": "Hitachi Air Conditioning Shimizu, Inc.", + "18cc88": "Hitachi Global Life Solutions, Inc.", "18ce94": "Samsung Electronics Co.,Ltd", "18cedf": "Quectel Wireless Solutions Co.,Ltd.", "18cf24": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -15669,6 +15687,7 @@ "1c7c98": "NEC Platforms, Ltd.", "1c7cc7": "Coriant GmbH", "1c7d22": "FUJIFILM Business Innovation Corp.", + "1c7d51": "HANSHOW TECHNOLOGY CO.,LTD.", "1c7e51": "3bumen.com", "1c7ee5": "D-Link International", "1c7f2c": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -15767,6 +15786,7 @@ "1cc1bc": "Co.,Ltd", "1cc1de": "Hewlett Packard", "1cc316": "Xiamen Milesight IoT Co., Ltd.", + "1cc3ab": "Espressif Inc.", "1cc3eb": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "1cc586": "Absolute Acoustics", "1cc63c": "Arcadyan Technology Corporation", @@ -15788,7 +15808,7 @@ "1cd40c": "Kriwan Industrie-Elektronik GmbH", "1cd5e2": "Shenzhen YOUHUA Technology Co., Ltd", "1cd6bd": "LEEDARSON LIGHTING CO., LTD.", - "1cd6be": "Wistron Neweb Corporation", + "1cd6be": "WNC Corporation", "1cda27": "vivo Mobile Communication Co., Ltd.", "1cdbd4": "Espressif Inc.", "1cddea": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", @@ -15860,6 +15880,7 @@ "200bcf": "Nintendo Co.,Ltd", "200c86": "GX India Pvt Ltd", "200cc8": "NETGEAR", + "200d3d": "Quectel Wireless Solutions Co., Ltd.", "200db0": "Shenzhen Four Seas Global Link Network Technology Co., Ltd.", "200e0f": "Panasonic Marketing Middle East & Africa FZE", "200e2b": "Apple, Inc.", @@ -15956,6 +15977,7 @@ "20443a": "Schneider Electric Asia Pacific Ltd", "204441": "Remote Solution", "204569": "ITEL MOBILE LIMITED", + "20463a": "Apple, Inc.", "2046a1": "VECOW Co., Ltd", "204747": "Dell Inc.", "2047b5": "Sagemcom Broadband SAS", @@ -15984,6 +16006,7 @@ "205721": "Salix Technology CO., Ltd.", "20579e": "HUNAN FN-LINK TECHNOLOGY LIMITED", "2057af": "Shenzhen FH-NET OPTOELECTRONICS CO.,LTD", + "205843": "WNC Corporation", "205869": "Ruckus Wireless", "2059a0": "Paragon Technologies Inc.", "205a00": "Coval", @@ -16191,6 +16214,7 @@ "20f120": "Cisco Systems, Inc", "20f17c": "HUAWEI TECHNOLOGIES CO.,LTD", "20f19e": "Commscope", + "20f1b2": "Tuya Smart Inc.", "20f307": "zte corporation", "20f375": "Commscope", "20f3a3": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -16314,7 +16338,7 @@ "243faa": "Huawei Device Co., Ltd.", "2440ae": "NIIC Technology Co., Ltd.", "24418c": "Intel Corporate", - "2441fe": "Wistron Neweb Corporation", + "2441fe": "WNC Corporation", "2442bc": "Alinco,incorporated", "2442e3": "Shenzhen Ai-Thinker Technology Co.,Ltd", "2443e2": "DASAN Network Solutions", @@ -16384,6 +16408,7 @@ "246c60": "Huawei Device Co., Ltd.", "246c84": "Cisco Systems, Inc", "246c8a": "YUKAI Engineering", + "246d10": "Apple, Inc.", "246e96": "Dell Inc.", "246f28": "Espressif Inc.", "246f8c": "Huawei Device Co., Ltd.", @@ -16447,6 +16472,7 @@ "249eab": "HUAWEI TECHNOLOGIES CO.,LTD", "249f89": "Texas Instruments", "24a074": "Apple, Inc.", + "24a10d": "IEEE Registration Authority", "24a160": "Espressif Inc.", "24a186": "Commscope", "24a2e1": "Apple, Inc.", @@ -16497,6 +16523,7 @@ "24c0b3": "RSF", "24c17a": "BEIJING IACTIVE NETWORK CO.,LTD", "24c1bd": "CRRC DALIAN R&D CO.,LTD.", + "24c35d": "Duke University", "24c3f9": "Securitas Direct AB", "24c406": "SUNITEC TECHNOLOGY CO.,LIMITED", "24c42f": "Philips Lifeline", @@ -16523,6 +16550,7 @@ "24d337": "Xiaomi Communications Co Ltd", "24d3f2": "zte corporation", "24d51c": "Zhongtian broadband technology co., LTD ", + "24d53b": "Motorola Mobility LLC, a Lenovo Company", "24d5e4": "Cisco Systems, Inc", "24d76b": "Syntronic AB", "24d79c": "Cisco Systems, Inc", @@ -16635,6 +16663,7 @@ "2811a8": "Intel Corporate", "2811ec": "HUAWEI TECHNOLOGIES CO.,LTD", "281293": "Honor Device Co., Ltd.", + "2812d0": "Motorola Mobility LLC, a Lenovo Company", "281471": "Lantis co., LTD.", "2815a4": "SHENZHEN PINSU ZHILIAN INFORMATION TECHNOLOGY CO.,LTD.", "28162e": "2Wire Inc", @@ -16655,7 +16684,7 @@ "282373": "Digita", "2823f5": "Information Technology Co., Ltd.", "2824c9": "Amazon Technologies Inc.", - "2824ff": "Wistron Neweb Corporation", + "2824ff": "WNC Corporation", "282536": "SHENZHEN HOLATEK CO.,LTD", "28255f": "HUMAX NETWORKS", "2826a6": "PBR electronics GmbH", @@ -16674,7 +16703,7 @@ "282d06": "AMPAK Technology,Inc.", "282d7f": "Apple, Inc.", "282e30": "MECHATRONICS INNOVATION TECHNOLOGIES, S.L.U.", - "282e89": "Wistron Neweb Corporation", + "282e89": "WNC Corporation", "282fc2": "Automotive Data Solutions", "2830ac": "Frontiir Co. Ltd.", "283152": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -16723,6 +16752,7 @@ "284846": "GridCentric Inc.", "2848e7": "Huawei Device Co., Ltd.", "284992": "Luminator Technology Group Global LLC", + "284b54": "Apple, Inc.", "284c53": "Intune Networks", "284d7d": "zte corporation", "284d92": "Luminator Technology Group Global LLC", @@ -16798,6 +16828,7 @@ "28808a": "HUAWEI TECHNOLOGIES CO.,LTD", "2880a2": "Inseego Wireless, Inc", "28827c": "Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch", + "288328": "EMALDO TECHNOLOGY(HK)LIMITED", "288335": "Samsung Electronics Co.,Ltd", "2883c9": "Apple, Inc.", "28840e": "silicon valley immigration service ", @@ -16866,6 +16897,7 @@ "28b2bd": "Intel Corporate", "28b371": "Ruckus Wireless", "28b3ab": "Genmark Automation", + "28b446": "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", "28b448": "HUAWEI TECHNOLOGIES CO.,LTD", "28b4fb": "Sprocomm Technologies CO.,LTD.", "28b591": "Cisco Systems, Inc", @@ -17069,6 +17101,7 @@ "2c2768": "HUAWEI TECHNOLOGIES CO.,LTD", "2c279e": "IEEE Registration Authority", "2c27d7": "Hewlett Packard", + "2c27e4": "Co.,Ltd.", "2c282d": "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", "2c28b7": "Hangzhou Ruiying technology co., LTD", "2c2997": "Microsoft Corporation", @@ -17097,6 +17130,7 @@ "2c39c1": "Ciena Corporation", "2c3a28": "Fagor Electrónica", "2c3a91": "Huawei Device Co., Ltd.", + "2c3ab1": "Huawei Device Co., Ltd.", "2c3ae8": "Espressif Inc.", "2c3afd": "AVM Audiovisuelles Marketing und Computersysteme GmbH", "2c3b70": "AzureWave Technology Inc.", @@ -17170,6 +17204,7 @@ "2c6373": "Sichuan Tianyi Comheart Telecom Co.,LTD", "2c641f": "Vizio, Inc", "2c64f6": "Wu Qi Technologies,Inc.", + "2c658d": "Cisco Systems, Inc", "2c66ad": "NimbleTech Digital Inc.", "2c66f5": "SHENZHEN ELECTRICAL APPLIANCES CO.", "2c6798": "InTalTech Ltd.", @@ -17220,6 +17255,7 @@ "2c8ac7": "Ubee Interactive Co., Limited", "2c8bf2": "Hitachi Metals America Ltd", "2c8d37": "Virtium", + "2c8d48": "Smart Innovation LLC", "2c8db1": "Intel Corporate", "2c9127": "Eintechno Corporation", "2c91ab": "AVM Audiovisuelles Marketing und Computersysteme GmbH", @@ -17249,7 +17285,7 @@ "2c9ee0": "Cavli Inc.", "2c9eec": "Jabil Circuit Penang", "2c9efc": "CANON INC.", - "2c9ffb": "Wistron Neweb Corporation", + "2c9ffb": "WNC Corporation", "2ca02f": "Veroguard Systems Pty Ltd", "2ca042": "Huawei Device Co., Ltd.", "2ca157": "acromate, Inc.", @@ -17344,7 +17380,7 @@ "2cda46": "Samsung Electronics Co.,Ltd", "2cdb07": "Intel Corporate", "2cdc78": "LLC", - "2cdcad": "Wistron Neweb Corporation", + "2cdcad": "WNC Corporation", "2cdcc1": "EM Microelectronic", "2cdcd7": "AzureWave Technology Inc.", "2cdd0c": "Discovergy GmbH", @@ -17407,6 +17443,7 @@ "300505": "Intel Corporate", "30053f": "JTI Co.,Ltd.", "30055c": "Brother industries, LTD.", + "30075c": "43403", "3009c0": "Motorola Mobility LLC, a Lenovo Company", "3009f9": "IEEE Registration Authority", "300a60": "IEEE Registration Authority", @@ -17425,7 +17462,7 @@ "301389": "Siemens AG, Automations & Drives,", "30138b": "HP Inc.", "30142d": "Piciorgros GmbH", - "30144a": "Wistron Neweb Corporation", + "30144a": "WNC Corporation", "301518": "Ubiquitous Communication Co. ltd.", "30168d": "ProLon", "30169d": "MERCUSYS TECHNOLOGIES CO., LTD.", @@ -17493,6 +17530,7 @@ "303fbb": "Hewlett Packard Enterprise ", "304074": "zte corporation", "304174": "ALTEC LANSING LLC", + "3041db": "vivo Mobile Communication Co., Ltd.", "304225": "BURG-WÄCHTER KG", "304240": "zte corporation", "3042a1": "ilumisys Inc. DBA Toggled", @@ -17570,6 +17608,7 @@ "3078d3": "Virgilant Technologies Ltd.", "307a05": "HUAWEI TECHNOLOGIES CO.,LTD", "307a57": "Inc", + "307ad2": "Apple, Inc.", "307bac": "New H3C Technologies Co., Ltd", "307bc9": "SHENZHEN BILIAN ELECTRONIC CO.,LTD", "307c30": "RIM", @@ -17748,6 +17787,7 @@ "30f42f": "ESP", "30f527": "New H3C Technologies Co., Ltd", "30f600": "Sagemcom Broadband SAS", + "30f65d": "Hewlett Packard Enterprise", "30f6b9": "Ecocentric Energy", "30f6ef": "Intel Corporate", "30f70d": "Cisco Systems, Inc", @@ -17831,6 +17871,7 @@ "3425b4": "Silicon Laboratories", "3425be": "Amazon Technologies Inc.", "342606": "CarePredict, Inc.", + "3426e6": "CIG SHANGHAI CO LTD", "342792": "FREEBOX SAS", "342840": "Apple, Inc.", "342865": "Juniper Networks", @@ -18167,7 +18208,7 @@ "34ee16": "Apple, Inc.", "34ee2a": "ConMet", "34ef44": "2Wire Inc", - "34ef8b": "NTT Communications Corporation", + "34ef8b": "NTT DOCOMO BUSINESS, Inc.", "34efb6": "Edgecore Networks Corporation", "34f043": "Samsung Electronics Co.,Ltd", "34f0ca": "Shenzhen Linghangyuan Digital Technology Co.,Ltd.", @@ -18385,7 +18426,7 @@ "387acc": "SHENZHEN BILIAN ELECTRONIC CO.,LTD", "387b01": "Shenzhen MiaoMing Intelligent Technology Co.,Ltd", "387b47": "AKELA, Inc.", - "387c76": "Universal Global Scientific Industrial Co., Ltd.", + "387c76": "Universal Global Scientific Industrial., Ltd", "387f8b": "Apple, Inc.", "3880df": "Motorola Mobility LLC, a Lenovo Company", "3881d7": "Texas Instruments", @@ -18406,7 +18447,8 @@ "388abe": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "388b59": "Google, Inc.", "388c50": "LG Electronics", - "388d3d": "Wistron Neweb Corporation", + "388cef": "Samsung Electronics Co.,Ltd", + "388d3d": "WNC Corporation", "388e7a": "AUTOIT", "388ee7": "Fanhattan LLC", "388f30": "Samsung Electronics Co.,Ltd", @@ -18477,7 +18519,7 @@ "38b5d3": "SecuWorks", "38b725": "Corporation", "38b74d": "Fijowave Limited", - "38b800": "Wistron Neweb Corporation", + "38b800": "WNC Corporation", "38b8eb": "IEEE Registration Authority", "38b9af": "NXP Semiconductors Taiwan Ltd.", "38bab0": "Broadcom", @@ -18621,6 +18663,7 @@ "3c0cdb": "UNION MAN TECHNOLOGY CO.,LTD", "3c0d2c": "Liquid-Markets GmbH", "3c0e23": "Cisco Systems, Inc", + "3c0f02": "Espressif Inc.", "3c0fc1": "KBC Networks", "3c1040": "daesung network", "3c1060": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -18655,7 +18698,9 @@ "3c2093": "GD Midea Air-Conditioning Equipment Co.,Ltd.", "3c20f6": "Samsung Electronics Co.,Ltd", "3c219c": "Intel Corporate", + "3c227f": "Quectel Wireless Solutions Co., Ltd.", "3c22fb": "Apple, Inc.", + "3c240a": "Huawei Device Co., Ltd.", "3c24f0": "IEEE Registration Authority", "3c25d7": "Nokia Corporation", "3c25f8": "Dell Inc.", @@ -18951,7 +18996,7 @@ "3ce038": "Omnifi Inc.", "3ce064": "Texas Instruments", "3ce072": "Apple, Inc.", - "3ce1a1": "Universal Global Scientific Industrial Co., Ltd.", + "3ce1a1": "Universal Global Scientific Industrial., Ltd", "3ce36b": "Zhejiang Dahua Technology Co., Ltd.", "3ce3e7": "China Mobile Group Device Co.,Ltd.", "3ce441": "Amazon Technologies Inc.", @@ -19030,7 +19075,7 @@ "4018b1": "Extreme Networks Headquarters", "4018d7": "Smartronix, Inc.", "401920": "Movon Corporation", - "401a58": "Wistron Neweb Corporation", + "401a58": "WNC Corporation", "401b5f": "WEIFANG GOERTEK ELECTRONICS CO.,LTD", "401c83": "Intel Corporate", "401cd4": "Huawei Device Co., Ltd.", @@ -19044,6 +19089,7 @@ "402508": "Highway 9 Networks, Inc.", "4025c2": "Intel Corporate", "402619": "Apple, Inc.", + "402641": "HUAWEI TECHNOLOGIES CO.,LTD", "40268e": "Shenzhen Photon Leap Technology Co., Ltd.", "40270b": "Mobileeco Co., Ltd", "4027a8": "Cisco Meraki", @@ -19053,7 +19099,7 @@ "402b69": "Kumho Electric Inc.", "402ba1": "Sony Corporation", "402c76": "IEEE Registration Authority", - "402cf4": "Universal Global Scientific Industrial Co., Ltd.", + "402cf4": "Universal Global Scientific Industrial., Ltd", "402e28": "MiXTelematics", "402e71": "Texas Instruments", "402f51": "Maxtek Optoelectronics Ltd", @@ -19087,6 +19133,7 @@ "404229": "Layer3TV, Inc", "404244": "Cisco Systems, Inc", "4044ce": "HUAWEI TECHNOLOGIES CO.,LTD", + "4044f7": "Nintendo Co.,Ltd", "4044fd": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "4045a0": "vivo Mobile Communication Co., Ltd.", "4045c4": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -19112,6 +19159,7 @@ "4050e0": "Milton Security Group LLC", "40516c": "Grandex International Corporation", "40520d": "Pico Technology", + "405493": "zte corporation", "4054e4": "Wearsafe Labs Inc", "405539": "Cisco Systems, Inc", "405548": "Quectel Wireless Solutions Co.,Ltd.", @@ -19471,7 +19519,8 @@ "44388c": "Sumitomo Electric Industries, Ltd", "4438e8": "Intel Corporate", "4438f3": "EM Microelectronic", - "4439c4": "Universal Global Scientific Industrial Co., Ltd.", + "4439aa": "G.Tech Technology Ltd.", + "4439c4": "Universal Global Scientific Industrial., Ltd", "443b14": "MitraStar Technology Corp.", "443b32": "Intelbras", "443c88": "FICOSA MAROC INTERNATIONAL", @@ -19727,7 +19776,7 @@ "44e49a": "OMNITRONICS PTY LTD", "44e4d9": "Cisco Systems, Inc", "44e4e6": "Extreme Networks Headquarters", - "44e4ee": "Wistron Neweb Corporation", + "44e4ee": "WNC Corporation", "44e517": "Intel Corporate", "44e59b": "HUAWEI TECHNOLOGIES CO.,LTD", "44e64a": "Shenzhen iComm Semiconductor CO.,LTD", @@ -20026,7 +20075,7 @@ "48a91c": "Apple, Inc.", "48a964": "APEXSHA SMARTTECH PRIVATE LIMITED", "48a98a": "Routerboard.com", - "48a9d2": "Wistron Neweb Corporation", + "48a9d2": "WNC Corporation", "48aa5d": "Store Electronic Systems", "48ad08": "HUAWEI TECHNOLOGIES CO.,LTD", "48ad9a": "Intel Corporate", @@ -20486,6 +20535,7 @@ "4cd629": "HUAWEI TECHNOLOGIES CO.,LTD", "4cd637": "Qsono Electronics Co., Ltd", "4cd717": "Dell Inc.", + "4cd74a": "Vantiva USA LLC", "4cd7b6": "Helmer Scientific", "4cd7c8": "Guangzhou V-Solution Telecommunication Technology Co.,Ltd.", "4cd98f": "Dell Inc.", @@ -20505,6 +20555,7 @@ "4ce1bb": "Zhuhai HiFocus Technology Co., Ltd.", "4ce2f1": "Udino srl", "4ce5ae": "Tianjin Beebox Intelligent Technology Co.,Ltd.", + "4ce65e": "HUAWEI TECHNOLOGIES CO.,LTD", "4ce676": "BUFFALO.INC", "4ce6c0": "Apple, Inc.", "4ce705": "Siemens Industrial Automation Products Ltd., Chengdu", @@ -20792,11 +20843,14 @@ "508cf5": "China Mobile Group Device Co.,Ltd.", "508d62": "HUAWEI TECHNOLOGIES CO.,LTD", "508d6f": "CHAHOO Limited", + "508d9e": "HUAWEI TECHNOLOGIES CO.,LTD", "508e49": "Xiaomi Communications Co Ltd", "508f4c": "Xiaomi Communications Co Ltd", "5091e3": "TP-Link Systems Inc", + "50926a": "Beijing Xiaomi Mobile Software Co., Ltd", "5092b9": "Samsung Electronics Co.,Ltd", "50934f": "Gradual Tecnologia Ltda.", + "5093ce": "HUAWEI TECHNOLOGIES CO.,LTD", "509551": "Commscope", "509707": "Xiamen Paperang Technology Co.,Ltd.", "509744": "Sdn. Bhd.", @@ -20951,10 +21005,12 @@ "50faab": "L-tek d.o.o.", "50facb": "IEEE Registration Authority", "50fb19": "CORP.", + "50fbff": "Franklin Technology Inc. ", "50fc30": "Treehouse Labs", "50fc9f": "Samsung Electronics Co.,Ltd", "50fdd5": "SJI Industry Company", "50fe0c": "AzureWave Technology Inc.", + "50fe39": "Beijing Xiaomi Mobile Software Co., Ltd", "50fef2": "Sify Technologies Ltd", "50ff20": "Keenetic Limited", "50ff99": "IEEE Registration Authority", @@ -21100,6 +21156,7 @@ "545414": "Digital RF Corea, Inc", "5454cf": "PROBEDIGITAL CO.,LTD", "5455d5": "Huawei Device Co., Ltd.", + "545925": "HUAWEI TECHNOLOGIES CO.,LTD", "545aa6": "Espressif Inc.", "545b86": "Panasonic Automotive Systems Co.,Ltd", "545dd9": "EDISTEC", @@ -21343,6 +21400,7 @@ "5800e3": "Liteon Technology Corporation", "580205": "AzureWave Technology Inc.", "5803fb": "Hangzhou Hikvision Digital Technology Co.,Ltd.", + "58044f": "TP-Link Systems Inc.", "580454": "ICOMM HK LIMITED", "5804cb": "Tianjin Huisun Technology Co.,Ltd.", "580528": "LABRIS NETWORKS", @@ -21390,6 +21448,7 @@ "582575": "HUAWEI TECHNOLOGIES CO.,LTD", "58257a": "CO.,LTD", "58263a": "Silicon Laboratories", + "582745": "Angelbird Technologies GmbH", "58278c": "BUFFALO.INC", "582af7": "HUAWEI TECHNOLOGIES CO.,LTD", "582b0a": "Texas Instruments", @@ -21452,6 +21511,7 @@ "5859c2": "Extreme Networks Headquarters", "585b69": "TVT CO., LTD", "585ff6": "zte corporation", + "586010": "shenzhen zovoton electronic co.,ltd", "58605f": "HUAWEI TECHNOLOGIES CO.,LTD", "5860d8": "Commscope", "586163": "Pte. Ltd.", @@ -21538,7 +21598,7 @@ "58960a": "LG Electronics", "58961d": "Intel Corporate", "589630": "Vantiva USA LLC", - "589671": "Wistron Neweb Corporation", + "589671": "WNC Corporation", "58971e": "Cisco Systems, Inc", "5897bd": "Cisco Systems, Inc", "589835": "Technicolor Delivery Technologies Belgium NV", @@ -21638,7 +21698,7 @@ "58e28f": "Apple, Inc.", "58e326": "Compass Technologies Inc.", "58e359": "Interroll Software & Electronics GmbH", - "58e403": "Wistron Neweb Corporation", + "58e403": "WNC Corporation", "58e434": "Juniper Networks", "58e476": "CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD", "58e488": "Amazon Technologies Inc.", @@ -21781,6 +21841,7 @@ "5c43d2": "HAZEMEYER", "5c443e": "Skullcandy", "5c4527": "Juniper Networks", + "5c4546": "Shenzhen Water World Information Co.,Ltd.", "5c46b0": "SIMCom Wireless Solutions Limited", "5c475e": "Ring LLC", "5c4842": "Hangzhou Anysoft Information Technology Co. , Ltd", @@ -21966,7 +22027,7 @@ "5cbd9e": "LIMITED", "5cbe05": "ISPEC", "5cbe69": "Oraimo Technology Limited", - "5cbf03": "Emoco Labs Ab", + "5cbf03": "EMOCO ", "5cc0a0": "HUAWEI TECHNOLOGIES CO.,LTD", "5cc1d7": "Samsung Electronics Co.,Ltd", "5cc1f2": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -22079,7 +22140,7 @@ "600194": "Espressif Inc.", "6001b1": "HUAWEI TECHNOLOGIES CO.,LTD", "600292": "PEGATRON CORPORATION", - "6002b4": "Wistron Neweb Corporation", + "6002b4": "WNC Corporation", "600308": "Apple, Inc.", "60030c": "Shenzhen YOUHUA Technology Co., Ltd", "600347": "Billion Electric Co. Ltd.", @@ -22217,6 +22278,7 @@ "605b30": "Dell Inc.", "605bb4": "AzureWave Technology Inc.", "605e4f": "Huawei Device Co., Ltd.", + "605e65": "Mellanox Technologies, Inc.", "605f8d": "eero inc.", "605faa": "Huawei Device Co., Ltd.", "60601f": "SZ DJI TECHNOLOGY CO.,LTD", @@ -22274,6 +22336,7 @@ "60812b": "Astronics Custom Control Concepts", "6081f9": "Helium Systems, Inc", "608246": "Apple, Inc.", + "608306": "Huawei Device Co., Ltd.", "608334": "HUAWEI TECHNOLOGIES CO.,LTD", "608373": "Apple, Inc.", "6083b2": "GkWare e.K.", @@ -22402,6 +22465,7 @@ "60d2b9": "REALAND BIO CO., LTD.", "60d2dd": "Shenzhen Baitong Putian Technology Co.,Ltd.", "60d30a": "Quatius Limited", + "60d4af": "Honor Device Co., Ltd.", "60d4e9": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "60d51b": "Fujitsu Limited", "60d561": "Shenzhen Glazero Technology Co., Ltd.", @@ -22432,7 +22496,7 @@ "60e32b": "Intel Corporate", "60e5d8": "zte corporation", "60e6bc": "Sino-Telecom Technology Co.,Ltd.", - "60e6f0": "Wistron Neweb Corporation", + "60e6f0": "WNC Corporation", "60e701": "HUAWEI TECHNOLOGIES CO.,LTD", "60e78a": "UNISEM", "60e85b": "Texas Instruments", @@ -22637,6 +22701,7 @@ "64680c": "Comtrend Corporation", "64681a": "DASAN Network Solutions", "646876": "Edifier International", + "646911": "APTIV SERVICES US, LLC", "64694e": "Texas Instruments", "6469bc": "Hytera Communications Co .,ltd", "646a52": "Avaya Inc", @@ -22757,6 +22822,7 @@ "64bb1e": "Earda Technologies co Ltd", "64bc11": "CombiQ AB", "64bc58": "Intel Corporate", + "64bd6d": "Apple, Inc.", "64be63": "STORDIS GmbH", "64bf6b": "HUAWEI TECHNOLOGIES CO.,LTD", "64c01a": "Sichuan Tianyi Comheart Telecom Co.,LTD", @@ -22858,6 +22924,7 @@ "64f970": "Kenade Electronics Technology Co.,LTD.", "64f987": "Avvasi Inc.", "64f9c0": "ANALOG DEVICES", + "64fa2b": "Sagemcom Broadband SAS", "64fb01": "Zhongshan Camry Electronic Company Limited", "64fb50": "RoomReady/Zdi, Inc.", "64fb81": "IEEE Registration Authority", @@ -22866,7 +22933,7 @@ "64fd29": "Zhejiang Dahua Technology Co., Ltd.", "64fd96": "Sagemcom Broadband SAS", "64fe15": "Flaircomm Microelectronics,Inc.", - "64ff0a": "Wistron Neweb Corporation", + "64ff0a": "WNC Corporation", "680235": "Konten Networks Inc.", "6802b8": "Compal Broadband Networks, Inc.", "680489": "Cisco Systems, Inc", @@ -22895,7 +22962,7 @@ "681ab2": "zte corporation", "681bef": "HUAWEI TECHNOLOGIES CO.,LTD", "681ca2": "Rosewill Inc.", - "681d4c": "eSystems MTG GmbH", + "681d4c": "Kontron eSystems GmbH", "681d64": "Sunwave Communications Co., Ltd", "681def": "Shenzhen CYX Technology Co., Ltd.", "681e8b": "InfoSight Corporation", @@ -22924,6 +22991,8 @@ "682d83": "SHENZHEN DINGHE COMMUNICATION COMPANY", "682ddc": "Wuhan Changjiang Electro-Communication Equipment CO.,LTD", "682f67": "Apple, Inc.", + "683036": "Apple, Inc.", + "683045": "HUAWEI TECHNOLOGIES CO.,LTD", "6831fe": "Teladin Co.,Ltd.", "68332c": "KENSTEL NETWORKS LIMITED", "6833ee": "Commscope", @@ -23101,6 +23170,7 @@ "68a0f6": "HUAWEI TECHNOLOGIES CO.,LTD", "68a1b7": "CO.,Ltd.", "68a2aa": "Acres Manufacturing", + "68a34f": "Nokia", "68a378": "FREEBOX SAS", "68a3c4": "Liteon Technology Corporation", "68a40e": "BSH Hausgeräte GmbH", @@ -23210,6 +23280,7 @@ "68ee88": "Shenzhen TINNO Mobile Technology Corp.", "68ee96": "Cisco SPVTG", "68ef43": "Apple, Inc.", + "68efa8": "AutomationDirect.com", "68efab": "Vention", "68efbd": "Cisco Systems, Inc", "68efdc": "Apple, Inc.", @@ -23253,7 +23324,7 @@ "6c09bf": "Fiberhome Telecommunication Technologies Co.,LTD", "6c09d6": "Digiquest Electronics LTD", "6c0b5e": "HP Inc.", - "6c0b84": "Universal Global Scientific Industrial Co., Ltd.", + "6c0b84": "Universal Global Scientific Industrial., Ltd", "6c0c9a": "Amazon Technologies Inc.", "6c0d34": "Nokia", "6c0dc4": "Beijing Xiaomi Electronics Co., Ltd.", @@ -23265,6 +23336,7 @@ "6c0f6a": "JDC Tech Co., Ltd.", "6c108b": "WeLink Communications", "6c11b3": "Wu Qi Technologies,Inc.", + "6c11ba": "zte corporation", "6c1270": "Apple, Inc.", "6c13d5": "Cisco Systems, Inc", "6c1414": "BUJEON ELECTRONICS Co,.Ltd", @@ -23348,6 +23420,7 @@ "6c416a": "Cisco Systems, Inc", "6c41de": "HUAWEI TECHNOLOGIES CO.,LTD", "6c42ab": "Subscriber Networks, Inc.", + "6c4329": "COSMIQ EDUSNAP PRIVATE LIMITED", "6c433c": "TECNO MOBILE LIMITED", "6c4418": "Zappware", "6c442a": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -23364,6 +23437,7 @@ "6c4b7f": "Vossloh-Schwabe Deutschland GmbH", "6c4b90": "LiteON", "6c4bb4": "HUMAX Co., Ltd.", + "6c4cbc": "TP-Link Systems Inc.", "6c4ce2": "Intel Corporate", "6c4d51": "Shenzhen Ceres Technology Co., Ltd.", "6c4d73": "Apple, Inc.", @@ -23433,9 +23507,11 @@ "6c7660": "KYOCERA CORPORATION ", "6c78c1": "Juniper Networks", "6c79b8": "Texas Instruments", + "6c7a63": "Arista Networks", "6c7db7": "Cisco Meraki", "6c7e67": "Apple, Inc.", "6c7f0c": "Cisco Meraki", + "6c7f49": "Huawei Device Co., Ltd.", "6c80ab": "ifanr Inc", "6c81fe": "Mitsuba Corporation", "6c8243": "Huawei Device Co., Ltd.", @@ -23446,6 +23522,7 @@ "6c8686": "Technonia", "6c8720": "New H3C Technologies Co., Ltd", "6c8814": "Intel Corporate", + "6c885f": "Private", "6c8aec": "Nantong Coship Electronics Co., Ltd.", "6c8b2f": "zte corporation", "6c8bd3": "Cisco Systems, Inc", @@ -23579,6 +23656,7 @@ "6ce0b0": "SOUND4", "6ce2d3": "New H3C Technologies Co., Ltd", "6ce3b6": "Nera Telecommunications Ltd.", + "6ce4a4": "Silicon Laboratories", "6ce4ce": "Villiger Security Solutions AG", "6ce4da": "NEC Platforms, Ltd.", "6ce5c9": "Apple, Inc.", @@ -23675,6 +23753,7 @@ "702526": "Nokia", "702559": "CyberTAN Technology Inc.", "702605": "SONY Visual Products Inc.", + "702661": "Universal Global Scientific Industrial., Ltd", "702804": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "70288b": "Samsung Electronics Co.,Ltd", "702900": "Shenzhen ChipTrip Technology Co,Ltd", @@ -23718,6 +23797,7 @@ "703c39": "SEAWING Kft", "703c69": "Apple, Inc.", "703d15": "Hangzhou H3C Technologies Co., Limited", + "703e76": "Arcadyan Corporation", "703e97": "Iton Technology Corp.", "703eac": "Apple, Inc.", "7040ff": "Huawei Device Co., Ltd.", @@ -23780,7 +23860,7 @@ "7060de": "LaVision GmbH", "706173": "Calantec GmbH", "70617b": "Cisco Systems, Inc", - "7061be": "Wistron Neweb Corporation", + "7061be": "WNC Corporation", "7061ee": "Sunwoda Electronic Co.,Ltd", "7062b8": "D-Link International", "706417": "ORBIS TECNOLOGIA ELECTRICA S.A.", @@ -23991,9 +24071,11 @@ "70e56e": "Texas Instruments", "70e72c": "Apple, Inc.", "70e843": "Beijing C&W Optical Communication Technology Co.,Ltd.", + "70e997": "HUAWEI TECHNOLOGIES CO.,LTD", "70ea1a": "Cisco Systems, Inc", "70ea5a": "Apple, Inc.", "70eb74": "Ningbo Goneo Electric Appliance Co., Ltd.", + "70eba5": "Huawei Device Co., Ltd.", "70ece4": "Apple, Inc.", "70edfa": "imperix Ltd", "70ee50": "Netatmo", @@ -24009,7 +24091,7 @@ "70f1e5": "Xetawave LLC", "70f220": "Actiontec Electronics, Inc", "70f35a": "Cisco Systems, Inc", - "70f395": "Universal Global Scientific Industrial Co., Ltd.", + "70f395": "Universal Global Scientific Industrial., Ltd", "70f6cf": "Relay, Inc.", "70f74f": "Robert Bosch JuP1", "70f754": "AMPAK Technology,Inc.", @@ -24198,7 +24280,7 @@ "746f19": "TECHNOLOGY CO., LTD.", "746f3d": "Contec GmbH", "746f88": "zte corporation", - "746ff7": "Wistron Neweb Corporation", + "746ff7": "WNC Corporation", "747069": "Huawei Device Co., Ltd.", "7470fd": "Intel Corporate", "74718b": "Apple, Inc.", @@ -24639,7 +24721,7 @@ "7866ae": "ZTEC Instruments, Inc.", "7866d7": "GENSTORAIGE TECHNOLOGY CO.LTD.", "7866f3": "shenzhen worldelite electronics co., LTD", - "78670e": "Wistron Neweb Corporation", + "78670e": "WNC Corporation", "7867d7": "Apple, Inc.", "786829": "eero inc.", "7868f7": "YSTen Technology Co.,Ltd", @@ -24660,6 +24742,7 @@ "787689": "eero inc.", "7876d9": "EXARA Group", "787835": "IEEE Registration Authority", + "787984": "Apple, Inc.", "787a6f": "Juice Technology AG", "787b8a": "Apple, Inc.", "787d48": "ITEL MOBILE LIMITED", @@ -25131,6 +25214,7 @@ "7ca15d": "GN ReSound A/S", "7ca177": "HUAWEI TECHNOLOGIES CO.,LTD", "7ca1ae": "Apple, Inc.", + "7ca236": "Verizon Connect", "7ca237": "King Slide Technology CO., LTD.", "7ca23e": "HUAWEI TECHNOLOGIES CO.,LTD", "7ca29b": "D.SignT GmbH & Co. KG", @@ -25150,6 +25234,7 @@ "7cacb2": "Bosch Software Innovations GmbH", "7cad4f": "Cisco Systems, Inc", "7cad74": "Cisco Systems, Inc", + "7caf77": "Nokia", "7cb03e": "OSRAM GmbH", "7cb073": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "7cb0c2": "Intel Corporate", @@ -25221,6 +25306,7 @@ "7cccfc": "Quectel Wireless Solutions Co.,Ltd.", "7ccd11": "MS-Magnet", "7ccd3c": "Guangzhou Juzing Technology Co., Ltd", + "7ccf4e": "FINE TRIUMPH TECHNOLOGY CORP.,LTD.", "7ccfcf": "Shanghai SEARI Intelligent System Co., Ltd", "7cd1c3": "Apple, Inc.", "7cd2da": "Apple, Inc.", @@ -25413,6 +25499,7 @@ "804731": "Packet Design, Inc.", "804786": "Samsung Electronics Co.,Ltd", "80482c": "Wyze Labs Inc", + "804863": "Electralsys Networks ", "80489f": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "8048a5": "Sichuan Tianyi Comheart Telecom Co.,LTD", "804971": "Apple, Inc.", @@ -25436,6 +25523,7 @@ "80563c": "ZF", "8056f2": "Hon Hai Precision Ind. Co.,Ltd.", "805719": "Samsung Electronics Co.,Ltd", + "805722": "Wuxi Sunning Smart Devices Co., Ltd", "8058c5": "NovaTec Kommunikationstechnik GmbH", "8058f8": "Motorola Mobility LLC, a Lenovo Company", "8059fd": "Noviga", @@ -25448,6 +25536,7 @@ "806007": "RIM", "806036": "HUAWEI TECHNOLOGIES CO.,LTD", "8060b7": "CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.", + "806132": "Cisco Systems, Inc", "80615f": "Beijing Sinead Technology Co., Ltd. ", "80616c": "New H3C Technologies Co., Ltd", "80618f": "Shenzhen sangfei consumer communications co.,ltd", @@ -25575,6 +25664,7 @@ "80b07b": "zte corporation", "80b219": "ELEKTRON TECHNOLOGY UK LIMITED", "80b234": "Vantiva USA LLC", + "80b269": "Subtle Computing", "80b289": "Forworld Electronics Ltd.", "80b32a": "UK Grid Solutions Ltd", "80b54e": "Espressif Inc.", @@ -25658,7 +25748,7 @@ "80e94a": "LEAPS s.r.o.", "80ea07": "TP-LINK TECHNOLOGIES CO.,LTD.", "80ea0b": "Zyxel Communications Corporation", - "80ea23": "Wistron Neweb Corporation", + "80ea23": "WNC Corporation", "80ea96": "Apple, Inc.", "80eaca": "Dialog Semiconductor Hellas SA", "80eb77": "Wistron Corporation", @@ -25816,6 +25906,7 @@ "845a3e": "Cisco Systems, Inc", "845a81": "ffly4u", "845b12": "HUAWEI TECHNOLOGIES CO.,LTD", + "845c31": "Dell Inc.", "845c93": "Chabrier Services", "845cf3": "Intel Corporate", "845dd7": "Shenzhen Netcom Electronics Co.,Ltd", @@ -25839,6 +25930,7 @@ "846eb1": "Park Assist LLC", "846ebc": "Nokia Solutions and Networks India Private Limited", "846fce": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", + "847003": "Axon Networks Inc.", "847051": "ALPSALPINE CO,.LTD", "8470d7": "eero inc.", "847127": "Silicon Laboratories", @@ -25901,6 +25993,7 @@ "84930c": "InCoax Networks Europe AB", "8493a0": "Huawei Device Co., Ltd.", "8493b2": "zte corporation", + "8493ec": "Guangzhou Shiyuan Electronic Technology Company Limited", "849437": "Apple, Inc.", "849459": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "84948c": "Hitron Technologies. Inc", @@ -26108,6 +26201,7 @@ "8815c5": "Huawei Device Co., Ltd.", "8817a3": "Sdn. Bhd.", "8818ae": "Tamron Co., Ltd", + "8818f1": "Nokia", "881908": "Apple, Inc.", "881a14": "Silicon Laboratories", "881b99": "SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.", @@ -26138,6 +26232,7 @@ "882949": "Sdn. Bhd.", "882950": "Netmoon Technology Co., Ltd", "88299c": "Samsung Electronics Co.,Ltd", + "8829bf": "Amazon Technologies Inc.", "882a5e": "New H3C Technologies Co., Ltd", "882ae1": "MRC INC.", "882b94": "MADOKA SYSTEM Co.,Ltd.", @@ -26211,7 +26306,7 @@ "8858be": "kuosheng.com", "885a06": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "885a23": "CELESTICA INC.", - "885a85": "Wistron Neweb Corporation", + "885a85": "WNC Corporation", "885a92": "Cisco Systems, Inc", "885bdd": "Extreme Networks Headquarters", "885c47": "Alcatel Lucent", @@ -26331,6 +26426,7 @@ "88a479": "Apple, Inc.", "88a4c2": "Electronics Technology co., ltd", "88a5bd": "QPCOM INC.", + "88a68d": "Shanghai MXCHIP Information Technology Co., Ltd.", "88a6c6": "Sagemcom Broadband SAS", "88a6ef": "IEEE Registration Authority", "88a73c": "Ragentek Technology Group", @@ -26504,6 +26600,7 @@ "8c1850": "Information Technology Co., Ltd.", "8c18d9": "Shenzhen RF Technology Co., Ltd", "8c192d": "IEEE Registration Authority", + "8c1952": "Amazon Technologies Inc.", "8c19b5": "Arcadyan Corporation", "8c1a50": "China Mobile Group Device Co.,Ltd.", "8c1abf": "Samsung Electronics Co.,Ltd", @@ -26545,7 +26642,7 @@ "8c395c": "Bit4id Srl", "8c3a7e": "Universal Electronics, Inc.", "8c3b32": "Microfan B.V.", - "8c3b4a": "Universal Global Scientific Industrial Co., Ltd.", + "8c3b4a": "Universal Global Scientific Industrial., Ltd", "8c3bad": "NETGEAR", "8c3c07": "Skiva Technologies, Inc.", "8c3c4a": "NAKAYO Inc", @@ -26582,7 +26679,7 @@ "8c5219": "SHARP Corporation", "8c53c3": "Beijing Xiaomi Mobile Software Co., Ltd", "8c53d2": "China Mobile Group Device Co.,Ltd.", - "8c53e6": "Wistron Neweb Corporation", + "8c53e6": "WNC Corporation", "8c53f7": "A&D ENGINEERING CO., LTD.", "8c541d": "LGE ", "8c554a": "Intel Corporate", @@ -26591,7 +26688,7 @@ "8c5646": "LG Electronics", "8c569d": "Imaging Solutions Group", "8c56c5": "Nintendo Co., Ltd.", - "8c579b": "Wistron Neweb Corporation", + "8c579b": "WNC Corporation", "8c57fd": "LVX Western", "8c5823": "SZ DJI TECHNOLOGY CO.,LTD", "8c5877": "Apple, Inc.", @@ -26695,7 +26792,7 @@ "8c8abb": "Beijing Orient View Technology Co., Ltd.", "8c8acd": "HUAWEI TECHNOLOGIES CO.,LTD", "8c8b48": "Silicon Laboratories", - "8c8b5b": "Wistron Neweb Corporation", + "8c8b5b": "WNC Corporation", "8c8b83": "Texas Instruments", "8c8caa": "Electronics Technology co., ltd", "8c8d28": "Intel Corporate", @@ -26967,6 +27064,7 @@ "903dbd": "SECURE METERS LIMITED", "903e7f": "Fiberhome Telecommunication Technologies Co.,LTD", "903eab": "Commscope", + "903f86": "New H3C Technologies Co., Ltd", "903fc3": "Huawei Device Co., Ltd.", "903fea": "HUAWEI TECHNOLOGIES CO.,LTD", "9043e2": "Cornami, Inc", @@ -27041,6 +27139,7 @@ "906fa9": "NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.", "907025": "Garea Microsys Co.,Ltd.", "907065": "Texas Instruments", + "907069": "Espressif Inc.", "9070bf": "Mimosa Networks", "9070d3": "Fiberhome Telecommunication Technologies Co.,LTD", "907240": "Apple, Inc.", @@ -27131,7 +27230,7 @@ "90a2da": "GHEO SA", "90a365": "HMD Global Oy", "90a46a": "SISNET CO., LTD", - "90a4de": "Wistron Neweb Corporation", + "90a4de": "WNC Corporation", "90a57d": "Huawei Device Co., Ltd.", "90a5af": "HUAWEI TECHNOLOGIES CO.,LTD", "90a62f": "NAVER", @@ -27268,6 +27367,7 @@ "90fd61": "Apple, Inc.", "90fd73": "zte corporation", "90fd9f": "Silicon Laboratories", + "90fee2": "ISIF", "90ff79": "Metro Ethernet Forum", "90ffd6": "Honor Device Co., Ltd.", "940006": "jinyoung", @@ -27513,6 +27613,7 @@ "94a7bc": "BodyMedia, Inc.", "94a990": "Espressif Inc.", "94a9a8": "Texas Instruments", + "94aa07": "Nokia", "94aa0a": "Fiberhome Telecommunication Technologies Co.,LTD", "94aab8": "Technology Co. Ltd.", "94ab18": "cellXica ltd", @@ -27751,6 +27852,7 @@ "982a0a": "Intelbras", "982cbc": "Intel Corporate", "982cbe": "2Wire Inc", + "982cc6": "TECHNOLOGIES CORPORATION", "982d56": "Resolution Audio", "982d68": "Samsung Electronics Co., Ltd", "982dba": "Fibergate Inc.", @@ -27779,6 +27881,7 @@ "983f60": "HUAWEI TECHNOLOGIES CO.,LTD", "983f66": "Funshion Online Technologies Co.,Ltd", "983f9f": "Network Technology Inc.", + "983fa4": "zte corporation", "983fe8": "Samsung Electronics Co.,Ltd", "9840bb": "Dell Inc.", "98415c": "Nintendo Co.,Ltd", @@ -27794,7 +27897,7 @@ "984744": "Shenzhen Boomtech Industrial Corporation", "984827": "TP-LINK TECHNOLOGIES CO.,LTD.", "984874": "HUAWEI TECHNOLOGIES CO.,LTD", - "984914": "Wistron Neweb Corporation", + "984914": "WNC Corporation", "984925": "Juniper Networks", "98499f": "Domo Tactical Communications", "9849e1": "Boeing Defence Australia", @@ -27822,6 +27925,7 @@ "98597a": "Intel Corporate", "985a98": "HUAWEI TECHNOLOGIES CO.,LTD", "985aeb": "Apple, Inc.", + "985b76": "Vantiva Connected Home - Orange Belgium", "985bb0": "KMDATA INC.", "985c93": "SBG Systems SAS", "985d46": "PeopleNet Communication", @@ -27910,6 +28014,7 @@ "989db2": "GOIP Global Services Pvt. Ltd.", "989de5": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "989e63": "Apple, Inc.", + "989e80": "tonies GmbH", "989f1a": "Private", "989f1e": "HUAWEI TECHNOLOGIES CO.,LTD", "98a14a": "Quectel Wireless Solutions Co.,Ltd.", @@ -28236,6 +28341,7 @@ "9c6b72": "Realme Chongqing MobileTelecommunications Corp Ltd", "9c6bf0": "Shenzhen Yipingfang Network Technology Co., Ltd.", "9c6c15": "Microsoft Corporation", + "9c6d92": "Shanghai Kanghai Infomation System CO.,LTD", "9c6f52": "zte corporation", "9c713a": "HUAWEI TECHNOLOGIES CO.,LTD", "9c7370": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -28413,6 +28519,7 @@ "9ce330": "Cisco Meraki", "9ce33f": "Apple, Inc.", "9ce374": "HUAWEI TECHNOLOGIES CO.,LTD", + "9ce450": "IEEE Registration Authority", "9ce549": "IEEE Registration Authority", "9ce635": "Nintendo Co., Ltd.", "9ce65e": "Apple, Inc.", @@ -28676,6 +28783,7 @@ "a08d16": "HUAWEI TECHNOLOGIES CO.,LTD", "a08e24": "eero inc.", "a08e78": "Sagemcom Broadband SAS", + "a090b5": "Tiinlab Corporation", "a090de": "VEEDIMS,LLC", "a091a2": "Co., Ltd.", "a091c8": "zte corporation", @@ -28808,6 +28916,7 @@ "a0e0af": "Cisco Systems, Inc", "a0e25a": "Amicus SK, s.r.o.", "a0e295": "DAT System Co.,Ltd", + "a0e390": "Apple, Inc.", "a0e453": "Sony Corporation", "a0e4cb": "Zyxel Communications Corporation", "a0e534": "Stratec Biomedical AG", @@ -28835,6 +28944,7 @@ "a0f479": "HUAWEI TECHNOLOGIES CO.,LTD", "a0f509": "IEI Integration Corp.", "a0f6fd": "Texas Instruments", + "a0f7c3": "Ficosa Automotive SLU", "a0f849": "Cisco Systems, Inc", "a0f895": "Shenzhen TINNO Mobile Technology Corp.", "a0f9b7": "Ademco Smart Homes Technology(Tianjin)Co.,Ltd.", @@ -28850,6 +28960,7 @@ "a0ff0c": "Hangzhou Hikvision Digital Technology Co.,Ltd.", "a0ff22": "SHENZHEN APICAL TECHNOLOGY CO., LTD", "a0ff70": "Vantiva USA LLC", + "a0fffd": "HMD Global Oy", "a4004e": "Cisco Systems, Inc", "a400e2": "HUAWEI TECHNOLOGIES CO.,LTD", "a40130": "ABIsystems Co., LTD", @@ -28860,6 +28971,7 @@ "a4056e": "Tiinlab Corporation", "a4059e": "STA Infinity LLP", "a405d6": "Commscope", + "a405fd": "Co., Ltd.", "a406e9": "Texas Instruments", "a407b6": "Samsung Electronics Co.,Ltd", "a40801": "Amazon Technologies Inc.", @@ -29004,6 +29116,7 @@ "a45fb9": "DreamBig Semiconductor, Inc.", "a46011": "Verifone, Inc.", "a46032": "LTD", + "a46185": "Tools for Humanity Corporation", "a46191": "NamJunSa", "a462df": "DS Global. Co., LTD", "a463a1": "Inventus Power Eletronica do Brasil LTDA", @@ -29072,6 +29185,7 @@ "a4933f": "HUAWEI TECHNOLOGIES CO.,LTD", "a49340": "Beijing Supvan Information Technology Co.,Ltd.", "a4934c": "Cisco Systems, Inc", + "a493ad": "Huawei Device Co., Ltd.", "a49426": "Elgama-Elektronika Ltd.", "a494dc": "Infinite Clouds", "a49700": "Cisco Systems, Inc", @@ -29234,6 +29348,7 @@ "a4ee57": "Seiko Epson Corporation", "a4ef15": "Inc.", "a4ef52": "Telewave Co., Ltd.", + "a4f00f": "Espressif Inc.", "a4f05e": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "a4f1e8": "Apple, Inc.", "a4f33b": "zte corporation", @@ -29371,7 +29486,7 @@ "a852d4": "Hewlett Packard Enterprise", "a8537d": "Mist Systems, Inc.", "a854a2": "Heimgard Technologies AS", - "a854b2": "Wistron Neweb Corporation", + "a854b2": "WNC Corporation", "a8556a": "3S System Technology Inc.", "a8574e": "TP-LINK TECHNOLOGIES CO.,LTD.", "a85840": "Co.,Ltd.", @@ -29497,6 +29612,7 @@ "a89fba": "Samsung Electronics Co.,Ltd", "a89fec": "Commscope", "a8a089": "Tactical Communications", + "a8a092": "CHINA DRAGON TECHNOLOGY LIMITED", "a8a097": "ScioTeq bvba", "a8a159": "ASRock Incorporation", "a8a198": "TCT mobile ltd", @@ -29534,6 +29650,7 @@ "a8bd3a": "UNION MAN TECHNOLOGY CO.,LTD", "a8be27": "Apple, Inc.", "a8bf3c": "HDV Phoelectron Technology Limited", + "a8c050": "Quectel Wireless Solutions Co.,Ltd.", "a8c092": "Huawei Device Co., Ltd.", "a8c0ea": "Pepwave Limited", "a8c222": "TM-Research Inc.", @@ -29552,6 +29669,7 @@ "a8cb95": "EAST BEST CO., LTD.", "a8cc6f": "HMD Global Oy", "a8ce90": "CVC", + "a8cee7": "Fiberhome Telecommunication Technologies Co.,LTD", "a8cfe0": "GDN Enterprises Private Limited", "a8d081": "Huawei Device Co., Ltd.", "a8d0e3": "Systech Electronics Ltd", @@ -29707,6 +29825,7 @@ "ac3743": "HTC Corporation", "ac37c9": "RAID Incorporated", "ac3870": "Lenovo Mobile Communication Technology Ltd.", + "ac393d": "eero inc.", "ac3971": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "ac3a67": "Cisco Systems, Inc", "ac3a7a": "Roku, Inc.", @@ -29863,7 +29982,7 @@ "ac9073": "HUAWEI TECHNOLOGIES CO.,LTD", "ac9085": "Apple, Inc.", "ac915d": "Digital Control Technology Limited", - "ac919b": "Wistron Neweb Corporation", + "ac919b": "WNC Corporation", "ac91a1": "Dell Inc.", "ac9232": "HUAWEI TECHNOLOGIES CO.,LTD", "ac932f": "Nokia Corporation", @@ -30002,6 +30121,7 @@ "acea6a": "GENIX INFOCOMM CO., LTD.", "aceaea": "HUAWEI TECHNOLOGIES CO.,LTD", "aceb51": "Universal Electronics, Inc.", + "acebe6": "Espressif Inc.", "acec80": "Commscope", "acec85": "eero inc.", "aced32": "Extreme Networks Headquarters", @@ -30036,7 +30156,7 @@ "acfdec": "Apple, Inc.", "acfe05": "ITEL MOBILE LIMITED", "acff6b": "HUAWEI TECHNOLOGIES CO.,LTD", - "b00073": "Wistron Neweb Corporation", + "b00073": "WNC Corporation", "b000b4": "Cisco Systems, Inc", "b00247": "AMPAK Technology, Inc.", "b0027e": "MULLER SERVICES", @@ -30071,6 +30191,7 @@ "b01f47": "Heights Telecom T ltd", "b01f81": "IEEE Registration Authority", "b01f8c": "Hewlett Packard Enterprise", + "b01ff4": "Sagemcom Broadband SAS", "b0216f": "HUAWEI TECHNOLOGIES CO.,LTD", "b0227a": "HP Inc.", "b02347": "Shenzhen Giant Microelectronics Company Limited", @@ -30261,6 +30382,7 @@ "b0a454": "Tripwire Inc.", "b0a460": "Intel Corporate", "b0a4f0": "HUAWEI TECHNOLOGIES CO.,LTD", + "b0a604": "Espressif Inc.", "b0a651": "Cisco Systems, Inc", "b0a6f5": "Xaptum, Inc.", "b0a72a": "Ensemble Designs, Inc.", @@ -30328,6 +30450,7 @@ "b0c95b": "Beijing Symtech CO.,LTD", "b0ca68": "Apple, Inc.", "b0cae7": "Huawei Device Co., Ltd.", + "b0cbd8": "Espressif Inc.", "b0ccce": "IEEE Registration Authority", "b0ccfe": "Huawei Device Co., Ltd.", "b0ce18": "Zhejiang shenghui lighting co.,Ltd", @@ -30370,6 +30493,7 @@ "b0e754": "2Wire Inc", "b0e7de": "Homa Technologies JSC", "b0e892": "Seiko Epson Corporation", + "b0e8e8": "Silicon Laboratories", "b0e97e": "Advanced Micro Peripherals", "b0e9fe": "Co., Ltd.", "b0ea19": "Co.,Ltd.", @@ -30415,6 +30539,7 @@ "b402f2": "Synaptics, Inc", "b40418": "Smartchip Integrated Inc.", "b40421": "zte corporation", + "b40429": "Guangzhou Shiyuan Electronic Technology Company Limited", "b4055d": "IEIT SYSTEMS Co., Ltd.", "b40566": "SP Best Corporation Co., LTD.", "b405a1": "Xiaomi Communications Co Ltd", @@ -30453,6 +30578,7 @@ "b41c30": "zte corporation", "b41cab": "ICR, inc.", "b41d2b": "Shenzhen YOUHUA Technology Co., Ltd", + "b41d62": "Nokia Shanghai Bell Co., Ltd.", "b41dc4": "HUAWEI TECHNOLOGIES CO.,LTD", "b41def": "Internet Laboratories, Inc.", "b41e52": "Flock Safety", @@ -30531,6 +30657,7 @@ "b452a9": "Texas Instruments", "b45459": "Information Technology Co., Ltd.", "b45570": "Borea", + "b45575": "Apple, Inc.", "b4565d": "Corp.", "b456b9": "Teraspek Technologies Co.,Ltd", "b456e3": "Apple, Inc.", @@ -30541,6 +30668,7 @@ "b45b86": "Funshion Online Technologies Co.,Ltd", "b45bd1": "TP-Link Systems Inc.", "b45ca4": "Thing-talk Wireless Communication Technologies Corporation Limited", + "b45cb5": "Mellanox Technologies, Inc.", "b45d50": "Hewlett Packard Enterprise", "b45f84": "zte corporation", "b46077": "Sichuan Changhong Electric Ltd.", @@ -30618,6 +30746,7 @@ "b49cdf": "Apple, Inc.", "b49d02": "Samsung Electronics Co.,Ltd", "b49d0b": "BQ", + "b49d6b": "vivo Mobile Communication Co., Ltd.", "b49db4": "Axion Technologies Inc.", "b49dfd": "Shenzhen SDMC Technology CO.,Ltd.", "b49e80": "Sichuan Changhong Electric Ltd.", @@ -30670,6 +30799,7 @@ "b4b676": "Intel Corporate", "b4b686": "Hewlett Packard", "b4b742": "Amazon Technologies Inc.", + "b4b853": "Honor Device Co., Ltd.", "b4b859": "Texa Spa", "b4b88d": "Thuh Company", "b4b9e6": "eero inc.", @@ -30738,6 +30868,7 @@ "b4e46b": "China Mobile IOT Company Limited", "b4e53e": "Ruckus Wireless", "b4e54c": "LLC Elektra", + "b4e5c5": "Huawei Device Co., Ltd.", "b4e62a": "LG Innotek", "b4e62d": "Espressif Inc.", "b4e782": "Vivalnk", @@ -30886,6 +31017,7 @@ "b85001": "Extreme Networks Headquarters", "b850d8": "Beijing Xiaomi Mobile Software Co., Ltd", "b851a9": "Nokia", + "b85213": "zte corporation", "b852e0": "Beijing Xiaomi Electronics Co.,Ltd", "b853ac": "Apple, Inc.", "b85510": "Ltd.", @@ -30951,7 +31083,7 @@ "b8804f": "Texas Instruments", "b88198": "Intel Corporate", "b881fa": "Apple, Inc.", - "b882f2": "Wistron Neweb Corporation", + "b882f2": "WNC Corporation", "b88303": "Hewlett Packard Enterprise ", "b8857b": "HUAWEI TECHNOLOGIES CO.,LTD", "b88584": "Dell Inc.", @@ -31005,7 +31137,7 @@ "b89be4": "ABB Power Systems Power Generation", "b89c13": "Alps Alpine", "b89ea6": "SPBEC-MINING CO.LTD", - "b89f09": "Wistron Neweb Corporation", + "b89f09": "WNC Corporation", "b89fcc": "HUAWEI TECHNOLOGIES CO.,LTD", "b8a0b8": "Samsung Electronics Co.,Ltd", "b8a14a": "Raisecom Technology CO., LTD", @@ -31042,7 +31174,7 @@ "b8b77d": "Guangdong Transtek Medical Electronics CO.,Ltd", "b8b7d7": "2GIG Technologies", "b8b7db": "GOIP Global Services Pvt. Ltd.", - "b8b7f1": "Wistron Neweb Corporation", + "b8b7f1": "WNC Corporation", "b8b81e": "Intel Corporate", "b8b94e": "Shenzhen iBaby Labs, Inc.", "b8ba68": "Xi'an Jizhong Digital Communication Co.,Ltd", @@ -31154,6 +31286,7 @@ "b8f8be": "BLUECOM", "b8f934": "Sony Corporation", "b8fbaf": "Xiamen IPRT Technology CO.,LTD", + "b8fbb3": "TP-Link Systems Inc.", "b8fc28": "Valeo Vision Systems", "b8fc9a": "Limited", "b8fd32": "Zhejiang ROICX Microelectronics", @@ -31239,8 +31372,8 @@ "bc2ef6": "Huawei Device Co., Ltd.", "bc2f3d": "vivo Mobile Communication Co., Ltd.", "bc305b": "Dell Inc.", - "bc307d": "Wistron Neweb Corporation", - "bc307e": "Wistron Neweb Corporation", + "bc307d": "WNC Corporation", + "bc307e": "WNC Corporation", "bc30d9": "Arcadyan Corporation", "bc3198": "IEEE Registration Authority", "bc31e2": "New H3C Technologies Co., Ltd", @@ -31386,6 +31519,7 @@ "bc88c3": "Ningbo Dooya Mechanic & Electronic Technology Co., Ltd", "bc89a6": "Nintendo Co.,Ltd", "bc89a7": "Apple, Inc.", + "bc89f8": "GD Midea Air-Conditioning Equipment Co.,Ltd.", "bc8aa3": "NHN Entertainment", "bc8ae8": "QING DAO HAIER TELECOM CO.,LTD.", "bc8b55": "NPP ELIKS America Inc. DBA T&M Atlantic", @@ -31617,6 +31751,8 @@ "c02e1d": "Nokia Solutions and Networks GmbH & Co. KG", "c02e25": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "c02e26": "iRhythm Technologies, Inc.", + "c02e5f": "Zyxel Communications Corporation", + "c02edf": "AltoBeam Inc.", "c02ff1": "Volta Networks", "c0335e": "Microsoft", "c03379": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -31710,6 +31846,7 @@ "c06c6d": "MagneMotion, Inc.", "c06d1a": "Tianjin Henxinhuifeng Technology Co.,Ltd.", "c06ded": "Hangzhou Hikvision Digital Technology Co.,Ltd.", + "c06e3d": "SHENZHEN TECNO TECHNOLOGY ", "c06f98": "eero inc.", "c07009": "HUAWEI TECHNOLOGIES CO.,LTD", "c071aa": "ShenZhen OnMicro Electronics Co.,Ltd.", @@ -31962,6 +32099,7 @@ "c4143c": "Cisco Systems, Inc", "c414a2": "Cisco Meraki", "c41688": "Huawei Device Co., Ltd.", + "c4168f": "Apple, Inc.", "c416c8": "HUAWEI TECHNOLOGIES CO.,LTD", "c416fa": "Prysm Inc", "c4170e": "Huawei Device Co., Ltd.", @@ -32068,6 +32206,7 @@ "c45976": "Fugoo Coorporation", "c45a86": "Huawei Device Co., Ltd.", "c45ab1": "Dell Inc.", + "c45bac": "Apple, Inc.", "c45bbe": "Espressif Inc.", "c45bf7": "ants", "c45d83": "Samsung Electronics Co.,Ltd", @@ -32091,6 +32230,7 @@ "c46516": "Hewlett Packard", "c46699": "vivo Mobile Communication Co., Ltd.", "c4678b": "Alphabet Capital Sdn Bhd", + "c467a1": "Inc.", "c467b5": "Libratone A/S", "c467d1": "HUAWEI TECHNOLOGIES CO.,LTD", "c468d0": "VTech Telecommunications Ltd.", @@ -32409,6 +32549,7 @@ "c8334b": "Apple, Inc.", "c833e5": "HUAWEI TECHNOLOGIES CO.,LTD", "c8348e": "Intel Corporate", + "c834e5": "Cisco Systems, Inc", "c835b8": "Ericsson, EAB/RWI/K", "c836a3": "GERTEC BRASIL LTDA", "c83870": "Samsung Electronics Co.,Ltd", @@ -32488,6 +32629,7 @@ "c86c20": "Sichuan Tianyi Comheart Telecom Co.,LTD", "c86c3d": "Amazon Technologies Inc.", "c86c87": "Zyxel Communications Corporation", + "c86c9a": "SNUC System", "c86cb6": "Optcom Co., Ltd.", "c86e08": "Intel Corporate", "c86f1d": "Apple, Inc.", @@ -32506,6 +32648,7 @@ "c877f3": "VusionGroup", "c87867": "Mist Systems, Inc.", "c8787d": "D-Link Corporation", + "c878f7": "Cisco Systems, Inc", "c87b23": "Bose Corporation", "c87b5b": "zte corporation", "c87cbc": "Valink Co., Ltd. ", @@ -32541,6 +32684,7 @@ "c8903e": "Pakton Technologies", "c8908a": "Samsung Electronics Co.,Ltd", "c890a8": "Co., Ltd.", + "c890f7": "HUAWEI TECHNOLOGIES CO.,LTD", "c891f9": "Sagemcom Broadband SAS", "c89346": "MXCHIP Company Limited", "c89383": "Embedded Automation, Inc.", @@ -32857,7 +33001,7 @@ "cc50e3": "Espressif Inc.", "cc51b4": "Sdn. Bhd.", "cc5289": "SHENZHEN OPTFOCUS TECHNOLOGY.,LTD", - "cc52af": "Universal Global Scientific Industrial Co., Ltd.", + "cc52af": "Universal Global Scientific Industrial., Ltd", "cc53b5": "HUAWEI TECHNOLOGIES CO.,LTD", "cc5459": "OnTime Networks AS", "cc54fe": "Mimosa Networks", @@ -33155,6 +33299,7 @@ "d016f0": "IEEE Registration Authority", "d01769": "Murata Manufacturing Co., Ltd.", "d0176a": "Samsung Electronics Co.,Ltd", + "d017b7": "Atios AG", "d017c2": "ASUSTek COMPUTER INC.", "d0196a": "Ciena Corporation", "d019d3": "ITEL MOBILE LIMITED", @@ -33504,6 +33649,7 @@ "d40adc": "Qingdao Intelligent&Precise Electronics Co.,Ltd.", "d40b1a": "HTC Corporation", "d40bb9": "Solid Semecs bv.", + "d40dab": "Shenzhen Cudy Technology Co., Ltd.", "d40e60": "Nanjing phx-gctech Information Technology Co., Ltd", "d40f9e": "Apple, Inc.", "d40fb2": "Applied Micro Electronics AME bv", @@ -33539,6 +33685,7 @@ "d424dd": "AVM Audiovisuelles Marketing und Computersysteme GmbH", "d4258b": "Intel Corporate", "d425cc": "IEEE Registration Authority", + "d425de": "New H3C Technologies Co., Ltd", "d42751": "Infopia Co., Ltd", "d42787": "Shanghai High-Flying Electronics Technology Co., Ltd", "d427ff": "Sagemcom Broadband SAS", @@ -33551,6 +33698,7 @@ "d42c44": "Cisco Systems, Inc", "d42c46": "BUFFALO.INC", "d42dc5": "i-PRO Co., Ltd.", + "d42dcc": "Apple, Inc.", "d42f23": "Akenori PTE Ltd", "d42f4b": "Hon Hai Precision Industry Co.,LTD", "d42fca": "Apple, Inc.", @@ -33601,6 +33749,7 @@ "d44d77": "Nokia", "d44d9f": "Shenzhen Skyworth Digital Technology CO., Ltd", "d44da4": "Murata Manufacturing Co., Ltd.", + "d44f14": "Tesla,Inc.", "d44f67": "HUAWEI TECHNOLOGIES CO.,LTD", "d44f68": "Eidetic Communications Inc", "d44f80": "Kemper Digital GmbH", @@ -33762,6 +33911,7 @@ "d49e05": "zte corporation", "d49e3b": "Guangzhou Shiyuan Electronic Technology Company Limited", "d49e6d": "Wuhan Zhongyuan Huadian Science & Technology Co.,", + "d49f29": "Fiberhome Telecommunication Technologies Co.,LTD", "d49fdd": "Huawei Device Co., Ltd.", "d4a02a": "Cisco Systems, Inc", "d4a0fb": "IEEE Registration Authority", @@ -33777,6 +33927,7 @@ "d4a499": "InView Technology Corporation", "d4a5b4": "Technology Co., Ltd", "d4a651": "Tuya Smart Inc.", + "d4a7ea": "Solar76", "d4a923": "HUAWEI TECHNOLOGIES CO.,LTD", "d4a928": "GreenWave Reality Inc", "d4aaff": "MICRO WORLD ", @@ -33907,6 +34058,7 @@ "d4fb8e": "Apple, Inc.", "d4fc13": "Fiberhome Telecommunication Technologies Co.,LTD", "d4fe28": "Silicon Laboratories", + "d4ff1a": "Apple, Inc.", "d4ff26": "OHSUNG", "d8004d": "Apple, Inc.", "d80093": "Aurender Inc.", @@ -33996,6 +34148,7 @@ "d83214": "Tenda Technology Co.,Ltd.Dongguan branch", "d8325a": "Shenzhen YOUHUA Technology Co., Ltd", "d832e3": "Xiaomi Communications Co Ltd", + "d8332a": "Ruijie Networks Co.,LTD", "d8337f": "Office FA.com Co.,Ltd.", "d833b7": "Sagemcom Broadband SAS", "d8341c": "GD Midea Air-Conditioning Equipment Co.,Ltd.", @@ -34070,7 +34223,7 @@ "d85f77": "Co., Ltd.", "d860b0": "bioMérieux Italia S.p.A.", "d860b3": "Guangdong Global Electronic Technology CO.,LTD", - "d86162": "Wistron Neweb Corporation", + "d86162": "WNC Corporation", "d86194": "Objetivos y Sevicios de Valor Añadido", "d862db": "Eno Inc.", "d8630d": "Mobility Technologies Communication Co., Ltd.", @@ -34139,6 +34292,7 @@ "d88ed4": "eero inc.", "d88f76": "Apple, Inc.", "d890e8": "Samsung Electronics Co.,Ltd", + "d8911d": "Jiangsu Yuwell POCTech Biotechnology Co.,Ltd", "d8912a": "Zyxel Communications Corporation", "d89136": "Dover Fueling Solutions", "d89341": "General Electric Global Research", @@ -34422,7 +34576,7 @@ "dc49c9": "CASCO SIGNAL LTD", "dc4a3e": "Hewlett Packard", "dc4a9e": "IEEE Registration Authority", - "dc4ba1": "Wistron Neweb Corporation", + "dc4ba1": "WNC Corporation", "dc4bdd": "Shenzhen SuperElectron Technology Co.,Ltd.", "dc4bfe": "Shenzhen Belon Technology CO.,LTD", "dc4d23": "MRV Comunications", @@ -34576,6 +34730,7 @@ "dcb4c4": "Microsoft XCG", "dcb4ca": "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", "dcb4d9": "Espressif Inc.", + "dcb4e8": "Byos", "dcb54f": "Apple, Inc.", "dcb72e": "Xiaomi Communications Co Ltd", "dcb7ac": "Hewlett Packard Enterprise", @@ -34762,7 +34917,7 @@ "e028b1": "Shenzhen Skyworth Digital Technology CO., Ltd", "e02967": "HMD Global Oy", "e02a66": "Cisco Systems, Inc", - "e02a82": "Universal Global Scientific Industrial Co., Ltd.", + "e02a82": "Universal Global Scientific Industrial., Ltd", "e02ae6": "Fiberhome Telecommunication Technologies Co.,LTD", "e02b96": "Apple, Inc.", "e02be9": "Intel Corporate", @@ -34783,7 +34938,7 @@ "e03676": "HUAWEI TECHNOLOGIES CO.,LTD", "e036e3": "Stage One International Co., Ltd.", "e03717": "Vantiva USA LLC", - "e037bf": "Wistron Neweb Corporation", + "e037bf": "WNC Corporation", "e0382d": "IEEE Registration Authority", "e0383f": "zte corporation", "e039d7": "Plexxi, Inc.", @@ -34820,7 +34975,7 @@ "e04c12": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "e04e5d": "HUAWEI TECHNOLOGIES CO.,LTD", "e04e7a": "Nanjing Qinheng Microelectronics Co., Ltd.", - "e04f43": "Universal Global Scientific Industrial Co., Ltd.", + "e04f43": "Universal Global Scientific Industrial., Ltd", "e04fbd": "Sichuan Tianyi Comheart Telecom Co.,LTD", "e0508b": "Zhejiang Dahua Technology Co., Ltd.", "e05124": "NXP Semiconductors", @@ -35002,6 +35157,7 @@ "e0cbee": "Samsung Electronics Co.,Ltd", "e0cc7a": "HUAWEI TECHNOLOGIES CO.,LTD", "e0ccf8": "Xiaomi Communications Co Ltd", + "e0cdb8": "Huawei Device Co., Ltd.", "e0cdfd": "Beijing E3Control Technology Co, LTD", "e0cec3": "ASKEY COMPUTER CORP", "e0cf2d": "Gemintek Corporation", @@ -35134,6 +35290,7 @@ "e42d02": "TCT mobile ltd", "e42d7b": "China Mobile IOT Company Limited", "e42f26": "Fiberhome Telecommunication Technologies Co.,LTD", + "e42f37": "Apple, Inc.", "e42f56": "OptoMET GmbH", "e42ff6": "Unicore communication Inc.", "e43022": "Hanwha Vision VietNam", @@ -35223,6 +35380,7 @@ "e46447": "EM Microelectronic", "e46449": "Commscope", "e46564": "SHENZHEN KTC TECHNOLOGY CO.,LTD", + "e46566": "Maple IoT Solutions LLC", "e465b8": "Espressif Inc.", "e466ab": "zte corporation", "e466e5": "Nanjing Qinheng Microelectronics Co., Ltd.", @@ -35253,6 +35411,7 @@ "e47876": "Arista Networks", "e47a2c": "SZ DJI TECHNOLOGY CO.,LTD", "e47b3f": "BEIJING CO-CLOUD TECHNOLOGY LTD.", + "e47c1a": "mercury corperation", "e47c65": "Sunstar Communication Technology Co., Ltd", "e47cf9": "Samsung Electronics Co.,Ltd", "e47d5a": "Beijing Hanbang Technology Corp.", @@ -35282,6 +35441,7 @@ "e48d8c": "Routerboard.com", "e48e10": "CIG SHANGHAI CO LTD", "e48ebb": "Rockwell Automation", + "e48ec5": "HUAWEI TECHNOLOGIES CO.,LTD", "e48f1d": "Huawei Device Co., Ltd.", "e48f34": "Vodafone Italia S.p.A.", "e48f65": "Yelatma Instrument Making Enterprise, JSC", @@ -35331,6 +35491,7 @@ "e4ab46": "UAB Selteka", "e4ab89": "MitraStar Technology Corp.", "e4ad7d": "SCL Elements", + "e4aee4": "Tuya Smart Inc.", "e4afa1": "HES-SO", "e4b005": "Beijing IQIYI Science & Technology Co., Ltd.", "e4b021": "Samsung Electronics Co.,Ltd", @@ -35642,6 +35803,7 @@ "e88da6": "Quectel Wireless Solutions Co.,Ltd.", "e88df5": "ZNYX Networks, Inc.", "e88e60": "NSD Corporation", + "e88f16": "Skullcandy", "e88f6f": "TCT mobile ltd", "e88fc4": "CO.,LTD", "e8910f": "Fiberhome Telecommunication Technologies Co.,LTD", @@ -35703,6 +35865,7 @@ "e8b265": "Dell Inc.", "e8b2ac": "Apple, Inc.", "e8b2fe": "HUMAX Co., Ltd.", + "e8b3ee": "Pixelent Inc.", "e8b3ef": "Fiberhome Telecommunication Technologies Co.,LTD", "e8b470": "IEEE Registration Authority", "e8b4ae": "Shenzhen C&D Electronics Co.,Ltd", @@ -35730,11 +35893,12 @@ "e8c229": "Bhd", "e8c2dd": "Infinix mobility limited", "e8c320": "ltd.", + "e8c386": "Apple, Inc.", "e8c417": "Fiberhome Telecommunication Technologies Co.,LTD", "e8c57a": "Ufispace Co., LTD.", "e8c6e6": "TRADING LIMITED", "e8c74f": "Liteon Technology Corporation", - "e8c7cf": "Wistron Neweb Corporation", + "e8c7cf": "WNC Corporation", "e8c829": "Intel Corporate", "e8c913": "Samsung Electronics Co.,Ltd", "e8ca50": "Co., Ltd.", @@ -35822,8 +35986,10 @@ "e8f375": "Nokia", "e8f408": "Intel Corporate", "e8f494": "AltoBeam Inc.", + "e8f60a": "Espressif Inc.", "e8f654": "HUAWEI TECHNOLOGIES CO.,LTD", "e8f673": "Microsoft Corporation", + "e8f6d7": "IEEE Registration Authority", "e8f724": "Hewlett Packard Enterprise ", "e8f72f": "HUAWEI TECHNOLOGIES CO.,LTD", "e8f791": "Xiaomi Communications Co Ltd", @@ -35923,6 +36089,7 @@ "ec3873": "Juniper Networks", "ec388f": "HUAWEI TECHNOLOGIES CO.,LTD", "ec3a52": "Huawei Device Co., Ltd.", + "ec3a56": "AzureWave Technology Inc.", "ec3baf": "EM Microelectronic", "ec3bf0": "NovelSat", "ec3c5a": "SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD", @@ -35948,6 +36115,7 @@ "ec4644": "TTK SAS", "ec4654": "Apple, Inc.", "ec4670": "Meinberg Funkuhren GmbH & Co. KG", + "ec4684": "Microsoft Corporation", "ec470c": "Universal Electronics, Inc.", "ec473c": "Redwire, LLC", "ec4993": "Qihan Technology Co., Ltd ", @@ -36013,6 +36181,7 @@ "ec753e": "HUAWEI TECHNOLOGIES CO.,LTD", "ec75ed": "Citrix Systems, Inc.", "ec7949": "FUJITSU LIMITED", + "ec79c0": "zte corporation", "ec79f2": "Startel", "ec7c2c": "HUAWEI TECHNOLOGIES CO.,LTD", "ec7c5c": "Juniper Networks", @@ -36062,7 +36231,7 @@ "ec94cb": "Espressif Inc.", "ec94d5": "Juniper Networks", "ec9681": "2276427 Ontario Inc", - "ec96bf": "eSystems MTG GmbH", + "ec96bf": "Kontron eSystems GmbH", "ec97a2": "Apple, Inc.", "ec97b2": "SUMEC Machinery & Electric Co.,Ltd.", "ec97e0": "Hangzhou Ezviz Software Co.,Ltd.", @@ -36075,6 +36244,7 @@ "ec9b5b": "Nokia Corporation", "ec9b8b": "Hewlett Packard Enterprise ", "ec9c32": "Sichuan AI-Link Technology Co., Ltd.", + "ec9e68": "Anhui Taoyun Technology Co., Ltd", "ec9ecd": "Artesyn Embedded Technologies", "ec9eea": "Xtra Technology LLC", "ec9f0d": "IEEE Registration Authority", @@ -36293,12 +36463,14 @@ "f03a55": "Omega Elektronik AS", "f03d03": "TECNO MOBILE LIMITED", "f03d29": "Actility", + "f03e05": "Murata Manufacturing Co., Ltd.", "f03e90": "Ruckus Wireless", "f03ebf": "GOGORO TAIWAN LIMITED", "f03f03": "Private", "f03f95": "HUAWEI TECHNOLOGIES CO.,LTD", "f03ff8": "R L Drake", "f0407b": "Fiberhome Telecommunication Technologies Co.,LTD", + "f040af": "IEEE Registration Authority", "f040ec": "RainX PTE. LTD.", "f041c6": "Heat Tech Company, Ltd.", "f041c8": "IEEE Registration Authority", @@ -36361,6 +36533,7 @@ "f06f46": "Ubiik", "f06fce": "Ruckus Wireless", "f0704f": "Samsung Electronics Co.,Ltd", + "f07084": "Actiontec Electronics Inc.", "f0728c": "Samsung Electronics Co.,Ltd", "f072ea": "Google, Inc.", "f073ae": "PEAK-System Technik", @@ -36404,6 +36577,7 @@ "f08edb": "VeloCloud Networks", "f09008": "Shenzhen Skyworth Digital Technology CO., Ltd", "f0921c": "Hewlett Packard", + "f09258": "China Electronics Cloud Computing Technology Co., Ltd", "f092b4": "Sichuan Tianyi Comheart Telecom Co.,LTD", "f0933a": "NxtConect", "f093c5": "Garland Technology", @@ -36647,6 +36821,7 @@ "f42b8c": "Samsung Electronics Co.,Ltd", "f42c56": "SENOR TECH CO LTD", "f42d06": "zte corporation", + "f42dc9": "Espressif Inc.", "f42e48": "zte corporation", "f42e7f": "Hewlett Packard Enterprise", "f4308b": "Xiaomi Communications Co Ltd", @@ -36716,6 +36891,7 @@ "f45842": "Boxx TV Ltd", "f45b29": "HUAWEI TECHNOLOGIES CO.,LTD", "f45b73": "Wanjiaan Interconnected Technology Co., Ltd", + "f45c42": "Huawei Device Co., Ltd.", "f45c89": "Apple, Inc.", "f45eab": "Texas Instruments", "f45f69": "Matsufu Electronics distribution Company", @@ -36745,7 +36921,7 @@ "f46add": "Liteon Technology Corporation", "f46b8c": "Hon Hai Precision Industry Co., Ltd.", "f46bef": "Sagemcom Broadband SAS", - "f46c68": "Wistron Neweb Corporation", + "f46c68": "WNC Corporation", "f46d04": "ASUSTek COMPUTER INC.", "f46d2f": "TP-LINK TECHNOLOGIES CO.,LTD.", "f46d3f": "Intel Corporate", @@ -36839,6 +37015,7 @@ "f4b520": "Biostar Microtech international corp.", "f4b52f": "Juniper Networks", "f4b549": "Xiamen Yeastar Digital Technology Co., Ltd", + "f4b599": "Apple, Inc.", "f4b5aa": "zte corporation", "f4b5bb": "CERAGON NETWORKS", "f4b62d": "Dongguan Huayin Electronic Technology Co., Ltd.", @@ -36913,6 +37090,7 @@ "f4deaf": "HUAWEI TECHNOLOGIES CO.,LTD", "f4e11e": "Texas Instruments", "f4e142": "Delta Elektronika BV", + "f4e1fc": "Hewlett Packard Enterprise", "f4e204": "COYOTE SYSTEM", "f4e2c6": "Ubiquiti Inc", "f4e3fb": "HUAWEI TECHNOLOGIES CO.,LTD", @@ -37034,6 +37212,7 @@ "f828c9": "HUAWEI TECHNOLOGIES CO.,LTD", "f829c0": "Availink, Inc.", "f82a53": "GD Midea Air-Conditioning Equipment Co.,Ltd.", + "f82ae2": "Apple, Inc.", "f82b7f": "Huawei Device Co., Ltd.", "f82bc8": "Jiangsu Switter Co., Ltd", "f82be6": "IEEE Registration Authority", @@ -37153,7 +37332,7 @@ "f86c03": "Shenzhen Teleone Technology Co., Ltd", "f86ce1": "Taicang T&W Electronics", "f86d73": "Zengge Co., Limited", - "f86dcc": "Wistron Neweb Corporation", + "f86dcc": "WNC Corporation", "f86ecf": "Arcx Inc", "f86eee": "HUAWEI TECHNOLOGIES CO.,LTD", "f86fb0": "TP-LINK TECHNOLOGIES CO.,LTD.", @@ -37369,7 +37548,7 @@ "f8edae": "CO.,LTD", "f8edfc": "HP Inc.", "f8ef5d": "Motorola Mobility LLC, a Lenovo Company", - "f8efb1": "Hangzhou Zhongxinhui lntelligent Technology Co.,Ltd.", + "f8efb1": "Hangzhou Zhongxinghui Intelligent Technology Co., Ltd.", "f8f005": "Newport Media Inc.", "f8f014": "RackWare Inc.", "f8f082": "NAGTECH LLC", @@ -37380,6 +37559,7 @@ "f8f21e": "Intel Corporate", "f8f25a": "G-Lab GmbH", "f8f295": "Annapurna labs", + "f8f2f0": "Crop.", "f8f3d3": "Shenzhen Gotron electronic CO.,LTD", "f8f464": "Rawe Electonic GmbH", "f8f519": "Rulogic Inc.", @@ -37527,7 +37707,7 @@ "fc4d6a": "Silicon Laboratories", "fc4d8c": "SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD", "fc4da6": "HUAWEI TECHNOLOGIES CO.,LTD", - "fc4dd4": "Universal Global Scientific Industrial Co., Ltd.", + "fc4dd4": "Universal Global Scientific Industrial., Ltd", "fc4e6d": "HUAWEI TECHNOLOGIES CO.,LTD", "fc4ea4": "Apple, Inc.", "fc500c": "Sitehop Ltd", @@ -37631,6 +37811,7 @@ "fc94ce": "zte corporation", "fc94e3": "Vantiva USA LLC", "fc956a": "OCTAGON SYSTEMS CORP.", + "fc963e": "EM Microelectronic", "fc9643": "Juniper Networks", "fc97a8": "Cricut Inc.", "fc9816": "ALPSALPINE CO,.LTD", @@ -37719,6 +37900,7 @@ "fccd2f": "IEEE Registration Authority", "fccf43": "HUIZHOU CITY HUIYANG DISTRICT MEISIQI INDUSTRY DEVELOPMENT CO,.LTD", "fccf62": "IBM Corp", + "fccf9f": "EM Microelectronic", "fcd202": "Realme Chongqing Mobile Telecommunications Corp.,Ltd.", "fcd290": "SKY UK LIMITED", "fcd2b6": "IEEE Registration Authority", @@ -37773,6 +37955,7 @@ "fcf738": "HUAWEI TECHNOLOGIES CO.,LTD", "fcf763": "Co., LTd", "fcf77b": "Huawei Device Co., Ltd.", + "fcf861": "Harman/Becker Automotive Systems GmbH", "fcf8ae": "Intel Corporate", "fcf8b7": "TRONTEQ Electronic", "fcfa21": "zte corporation", diff --git a/netutils/data_files/protocol_mappings.py b/netutils/data_files/protocol_mappings.py index 0d7f7ced..77d700d2 100644 --- a/netutils/data_files/protocol_mappings.py +++ b/netutils/data_files/protocol_mappings.py @@ -692,9 +692,6 @@ "itm-mcell-s": {"port_number": 828, "protocols": ["tcp", "udp"]}, "pkix-3-ca-ra": {"port_number": 829, "protocols": ["tcp", "udp"]}, "netconf-ssh": {"port_number": 830, "protocols": ["tcp", "udp"]}, - "netconf-beep": {"port_number": 831, "protocols": ["tcp", "udp"]}, - "netconfsoaphttp": {"port_number": 832, "protocols": ["tcp", "udp"]}, - "netconfsoapbeep": {"port_number": 833, "protocols": ["tcp", "udp"]}, "dhcp-failover2": {"port_number": 847, "protocols": ["tcp", "udp"]}, "gdoi": {"port_number": 848, "protocols": ["tcp", "udp"]}, "domain-s": {"port_number": 853, "protocols": ["tcp", "udp"]}, @@ -1706,7 +1703,7 @@ "tcoaddressbook": {"port_number": 1977, "protocols": ["tcp", "udp"]}, "unisql": {"port_number": 1978, "protocols": ["tcp", "udp"]}, "unisql-java": {"port_number": 1979, "protocols": ["tcp", "udp"]}, - "pearldoc-xact": {"port_number": 1980, "protocols": ["tcp", "udp"]}, + "panquest-xact": {"port_number": 1980, "protocols": ["tcp", "udp"]}, "p2pq": {"port_number": 1981, "protocols": ["tcp", "udp"]}, "estamp": {"port_number": 1982, "protocols": ["tcp", "udp"]}, "lhtp": {"port_number": 1983, "protocols": ["tcp", "udp"]}, @@ -3993,7 +3990,7 @@ "choiceview-agt": {"port_number": 4314, "protocols": ["tcp"]}, "choiceview-clt": {"port_number": 4316, "protocols": ["tcp"]}, "opentelemetry": {"port_number": 4317, "protocols": ["tcp"]}, - "fox-skytale": {"port_number": 4319, "protocols": ["tcp", "udp"]}, + "skytale": {"port_number": 4319, "protocols": ["tcp", "udp"]}, "fdt-rcatp": {"port_number": 4320, "protocols": ["tcp", "udp"]}, "rwhois": {"port_number": 4321, "protocols": ["tcp", "udp"]}, "trim-event": {"port_number": 4322, "protocols": ["tcp", "udp"]}, @@ -4071,8 +4068,8 @@ "itwo-server": {"port_number": 4410, "protocols": ["tcp"]}, "found": {"port_number": 4411, "protocols": ["tcp"]}, "smallchat": {"port_number": 4412, "protocols": ["udp"]}, - "avi-nms": {"port_number": 4413, "protocols": ["tcp"]}, - "avi-nms-disc": {"port_number": 4413, "protocols": ["udp"]}, + "vision-mon": {"port_number": 4413, "protocols": ["tcp"]}, + "vision-mon-disc": {"port_number": 4413, "protocols": ["udp"]}, "updog": {"port_number": 4414, "protocols": ["tcp"]}, "brcd-vr-req": {"port_number": 4415, "protocols": ["tcp"]}, "pjj-player": {"port_number": 4416, "protocols": ["tcp"]}, @@ -5695,6 +5692,7 @@ "xybrid-rt": {"port_number": 9978, "protocols": ["tcp"]}, "visweather": {"port_number": 9979, "protocols": ["tcp"]}, "pumpkindb": {"port_number": 9981, "protocols": ["tcp"]}, + "kaostransport": {"port_number": 9986, "protocols": ["tcp"]}, "dsm-scm-target": {"port_number": 9987, "protocols": ["tcp", "udp"]}, "nsesrvr": {"port_number": 9988, "protocols": ["tcp"]}, "osm-appsrvr": {"port_number": 9990, "protocols": ["tcp", "udp"]}, @@ -6018,6 +6016,7 @@ "trinket-agent": {"port_number": 21212, "protocols": ["tcp"]}, "cohesity-agent": {"port_number": 21213, "protocols": ["tcp"]}, "aigairserver": {"port_number": 21221, "protocols": ["tcp"]}, + "xahaud": {"port_number": 21337, "protocols": ["tcp"]}, "rdm-tfs": {"port_number": 21553, "protocols": ["tcp"]}, "dfserver": {"port_number": 21554, "protocols": ["tcp", "udp"]}, "vofr-gateway": {"port_number": 21590, "protocols": ["tcp", "udp"]}, @@ -6087,6 +6086,7 @@ "binkp": {"port_number": 24554, "protocols": ["tcp", "udp"]}, "bilobit": {"port_number": 24577, "protocols": ["tcp"]}, "bilobit-update": {"port_number": 24577, "protocols": ["udp"]}, + "udpstp": {"port_number": 24601, "protocols": ["udp"]}, "sdtvwcam": {"port_number": 24666, "protocols": ["tcp"]}, "canditv": {"port_number": 24676, "protocols": ["tcp", "udp"]}, "flashfiler": {"port_number": 24677, "protocols": ["tcp", "udp"]}, @@ -6298,7 +6298,7 @@ "ciscocsdb": {"port_number": 43441, "protocols": ["tcp", "udp"]}, "z-wave-tunnel": {"port_number": 44123, "protocols": ["tcp"]}, "pmcd": {"port_number": 44321, "protocols": ["tcp", "udp"]}, - "pmcdproxy": {"port_number": 44322, "protocols": ["tcp", "udp"]}, + "pmproxy": {"port_number": 44322, "protocols": ["tcp", "udp"]}, "pmwebapi": {"port_number": 44323, "protocols": ["tcp"]}, "cognex-dataman": {"port_number": 44444, "protocols": ["tcp"]}, "acronis-backup": {"port_number": 44445, "protocols": ["tcp"]}, diff --git a/netutils/dns.py b/netutils/dns.py index 99f5ebf7..f9ae0fa7 100644 --- a/netutils/dns.py +++ b/netutils/dns.py @@ -4,7 +4,7 @@ def fqdn_to_ip(hostname: str) -> str: - """Provides the IP address of a resolvable name on the machine it is running from. + """Provides the IP address(es) of a resolvable name on the machine it is running from. There are many reasons that a valid FQDN may not be resolvable, such as a network error from your machine to the DNS server, an upstream DNS issue, etc. @@ -13,7 +13,7 @@ def fqdn_to_ip(hostname: str) -> str: hostname: An FQDN that may or may not be resolvable. Returns: - The IP Address of a valid FQDN. + The IP Address as a string if only one is found, or a list of IP addresses if multiple are found. Examples: >>> from netutils.dns import fqdn_to_ip @@ -26,7 +26,7 @@ def fqdn_to_ip(hostname: str) -> str: socket.gaierror: If FQDN is not resolvable, leverage is_fqdn_resolvable to check first. """ # The data structure is complex, only require the first item, and drill down from there. - return socket.getaddrinfo(hostname, 0)[0][4][0] + return socket.getaddrinfo(hostname, 0)[0][4][0] # type: ignore def is_fqdn_resolvable(hostname: str) -> bool: diff --git a/netutils/os_version.py b/netutils/os_version.py index 2ea8189b..3edc07f4 100644 --- a/netutils/os_version.py +++ b/netutils/os_version.py @@ -319,4 +319,4 @@ def version_metadata(vendor: str, os_type: str, version: str) -> t.Dict[str, t.A parsed_version = version_metadata_parsers["default"](version) # type:ignore parsed_version.update({"vendor_metadata": False}) - return parsed_version + return parsed_version # type:ignore diff --git a/netutils/password.py b/netutils/password.py index 21b6a55c..b01f1464 100644 --- a/netutils/password.py +++ b/netutils/password.py @@ -292,7 +292,7 @@ def encrypt_cisco_type7(unencrypted_password: str, salt: t.Optional[int] = None) if len(unencrypted_password) > ENCRYPT_TYPE7_LENGTH: raise ValueError("Password must not exceed 25 characters.") - if not salt: + if salt is None: salt = random.randint(0, 15) # noqa: S311 # Start building the encrypted password - pre-pend the 2 decimal digit offset. encrypted_password = format(salt, "02d") diff --git a/poetry.lock b/poetry.lock index f12159b6..123c5c17 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "astroid" @@ -6,6 +6,7 @@ version = "3.2.4" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.8.0" +groups = ["dev"] files = [ {file = "astroid-3.2.4-py3-none-any.whl", hash = "sha256:413658a61eeca6202a59231abb473f932038fbcbf1666587f66d482083413a25"}, {file = "astroid-3.2.4.tar.gz", hash = "sha256:0e14202810b30da1b735827f78f5157be2bbd4a7a59b7707ca0bfc2fb4c0063a"}, @@ -14,39 +15,25 @@ files = [ [package.dependencies] typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} -[[package]] -name = "astunparse" -version = "1.6.3" -description = "An AST unparser for Python" -optional = false -python-versions = "*" -files = [ - {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"}, - {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"}, -] - -[package.dependencies] -six = ">=1.6.1,<2.0" -wheel = ">=0.23.0,<1.0" - [[package]] name = "attrs" -version = "25.3.0" +version = "23.2.0" description = "Classes Without Boilerplate" -optional = true -python-versions = ">=3.8" +optional = false +python-versions = ">=3.7" +groups = ["main", "dev"] files = [ - {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, - {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6) ; platform_python_implementation == \"CPython\" and python_version >= \"3.8\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.8\""] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "babel" @@ -54,16 +41,34 @@ version = "2.17.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, ] -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] + +[[package]] +name = "backrefs" +version = "5.9" +description = "A wrapper around re and regex that adds additional back references." +optional = false +python-versions = ">=3.9" +groups = ["docs"] +files = [ + {file = "backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f"}, + {file = "backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf"}, + {file = "backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa"}, + {file = "backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b"}, + {file = "backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9"}, + {file = "backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60"}, + {file = "backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59"}, +] [package.extras] -dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] +extras = ["regex"] [[package]] name = "bcrypt" @@ -71,6 +76,8 @@ version = "4.3.0" description = "Modern password hashing for your software and your servers" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "bcrypt-4.3.0-cp313-cp313t-macosx_10_12_universal2.whl", hash = "sha256:f01e060f14b6b57bbb72fc5b4a83ac21c443c9a2ee708e04a10e9192f90a6281"}, {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5eeac541cefd0bb887a371ef73c62c3cd78535e4887b310626036a7c0a817bb"}, @@ -135,10 +142,12 @@ version = "2025.7.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" +groups = ["main", "docs"] files = [ {file = "certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2"}, {file = "certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995"}, ] +markers = {main = "extra == \"optionals\""} [[package]] name = "cffi" @@ -146,6 +155,8 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -225,6 +236,7 @@ version = "3.4.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" +groups = ["main", "docs"] files = [ {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, @@ -319,6 +331,7 @@ files = [ {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, ] +markers = {main = "extra == \"optionals\""} [[package]] name = "click" @@ -326,6 +339,7 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["dev", "docs"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -340,94 +354,236 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev", "docs"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {dev = "sys_platform == \"win32\" or platform_system == \"Windows\""} [[package]] name = "coverage" -version = "7.6.1" +version = "7.10.7" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" -files = [ - {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, - {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, - {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, - {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, - {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, - {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, - {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, - {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, - {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, - {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, - {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, - {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, - {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, - {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, - {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, - {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, - {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, - {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a"}, + {file = "coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5"}, + {file = "coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17"}, + {file = "coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b"}, + {file = "coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87"}, + {file = "coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e"}, + {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e"}, + {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df"}, + {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0"}, + {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13"}, + {file = "coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b"}, + {file = "coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807"}, + {file = "coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59"}, + {file = "coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a"}, + {file = "coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699"}, + {file = "coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d"}, + {file = "coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e"}, + {file = "coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23"}, + {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab"}, + {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82"}, + {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2"}, + {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61"}, + {file = "coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14"}, + {file = "coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2"}, + {file = "coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a"}, + {file = "coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417"}, + {file = "coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973"}, + {file = "coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c"}, + {file = "coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7"}, + {file = "coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6"}, + {file = "coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59"}, + {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b"}, + {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a"}, + {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb"}, + {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1"}, + {file = "coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256"}, + {file = "coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba"}, + {file = "coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf"}, + {file = "coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d"}, + {file = "coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b"}, + {file = "coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e"}, + {file = "coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b"}, + {file = "coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49"}, + {file = "coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911"}, + {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0"}, + {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f"}, + {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c"}, + {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f"}, + {file = "coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698"}, + {file = "coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843"}, + {file = "coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546"}, + {file = "coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c"}, + {file = "coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15"}, + {file = "coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4"}, + {file = "coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0"}, + {file = "coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0"}, + {file = "coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65"}, + {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541"}, + {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6"}, + {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999"}, + {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2"}, + {file = "coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a"}, + {file = "coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb"}, + {file = "coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb"}, + {file = "coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520"}, + {file = "coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32"}, + {file = "coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f"}, + {file = "coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a"}, + {file = "coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360"}, + {file = "coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69"}, + {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14"}, + {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe"}, + {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e"}, + {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd"}, + {file = "coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2"}, + {file = "coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681"}, + {file = "coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880"}, + {file = "coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63"}, + {file = "coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2"}, + {file = "coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d"}, + {file = "coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0"}, + {file = "coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699"}, + {file = "coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9"}, + {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f"}, + {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1"}, + {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0"}, + {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399"}, + {file = "coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235"}, + {file = "coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d"}, + {file = "coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a"}, + {file = "coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3"}, + {file = "coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c"}, + {file = "coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396"}, + {file = "coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40"}, + {file = "coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594"}, + {file = "coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a"}, + {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b"}, + {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3"}, + {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0"}, + {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f"}, + {file = "coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431"}, + {file = "coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07"}, + {file = "coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260"}, + {file = "coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239"}, ] [package.extras] -toml = ["tomli"] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] + +[[package]] +name = "coverage" +version = "7.11.0" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "coverage-7.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb53f1e8adeeb2e78962bade0c08bfdc461853c7969706ed901821e009b35e31"}, + {file = "coverage-7.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9a03ec6cb9f40a5c360f138b88266fd8f58408d71e89f536b4f91d85721d075"}, + {file = "coverage-7.11.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0d7f0616c557cbc3d1c2090334eddcbb70e1ae3a40b07222d62b3aa47f608fab"}, + {file = "coverage-7.11.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e44a86a47bbdf83b0a3ea4d7df5410d6b1a0de984fbd805fa5101f3624b9abe0"}, + {file = "coverage-7.11.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:596763d2f9a0ee7eec6e643e29660def2eef297e1de0d334c78c08706f1cb785"}, + {file = "coverage-7.11.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ef55537ff511b5e0a43edb4c50a7bf7ba1c3eea20b4f49b1490f1e8e0e42c591"}, + {file = "coverage-7.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cbabd8f4d0d3dc571d77ae5bdbfa6afe5061e679a9d74b6797c48d143307088"}, + {file = "coverage-7.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e24045453384e0ae2a587d562df2a04d852672eb63051d16096d3f08aa4c7c2f"}, + {file = "coverage-7.11.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:7161edd3426c8d19bdccde7d49e6f27f748f3c31cc350c5de7c633fea445d866"}, + {file = "coverage-7.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d4ed4de17e692ba6415b0587bc7f12bc80915031fc9db46a23ce70fc88c9841"}, + {file = "coverage-7.11.0-cp310-cp310-win32.whl", hash = "sha256:765c0bc8fe46f48e341ef737c91c715bd2a53a12792592296a095f0c237e09cf"}, + {file = "coverage-7.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:24d6f3128f1b2d20d84b24f4074475457faedc3d4613a7e66b5e769939c7d969"}, + {file = "coverage-7.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d58ecaa865c5b9fa56e35efc51d1014d4c0d22838815b9fce57a27dd9576847"}, + {file = "coverage-7.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b679e171f1c104a5668550ada700e3c4937110dbdd153b7ef9055c4f1a1ee3cc"}, + {file = "coverage-7.11.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ca61691ba8c5b6797deb221a0d09d7470364733ea9c69425a640f1f01b7c5bf0"}, + {file = "coverage-7.11.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aef1747ede4bd8ca9cfc04cc3011516500c6891f1b33a94add3253f6f876b7b7"}, + {file = "coverage-7.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1839d08406e4cba2953dcc0ffb312252f14d7c4c96919f70167611f4dee2623"}, + {file = "coverage-7.11.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e0eb0a2dcc62478eb5b4cbb80b97bdee852d7e280b90e81f11b407d0b81c4287"}, + {file = "coverage-7.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bc1fbea96343b53f65d5351d8fd3b34fd415a2670d7c300b06d3e14a5af4f552"}, + {file = "coverage-7.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:214b622259dd0cf435f10241f1333d32caa64dbc27f8790ab693428a141723de"}, + {file = "coverage-7.11.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:258d9967520cca899695d4eb7ea38be03f06951d6ca2f21fb48b1235f791e601"}, + {file = "coverage-7.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cf9e6ff4ca908ca15c157c409d608da77a56a09877b97c889b98fb2c32b6465e"}, + {file = "coverage-7.11.0-cp311-cp311-win32.whl", hash = "sha256:fcc15fc462707b0680cff6242c48625da7f9a16a28a41bb8fd7a4280920e676c"}, + {file = "coverage-7.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:865965bf955d92790f1facd64fe7ff73551bd2c1e7e6b26443934e9701ba30b9"}, + {file = "coverage-7.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:5693e57a065760dcbeb292d60cc4d0231a6d4b6b6f6a3191561e1d5e8820b745"}, + {file = "coverage-7.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9c49e77811cf9d024b95faf86c3f059b11c0c9be0b0d61bc598f453703bd6fd1"}, + {file = "coverage-7.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a61e37a403a778e2cda2a6a39abcc895f1d984071942a41074b5c7ee31642007"}, + {file = "coverage-7.11.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c79cae102bb3b1801e2ef1511fb50e91ec83a1ce466b2c7c25010d884336de46"}, + {file = "coverage-7.11.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:16ce17ceb5d211f320b62df002fa7016b7442ea0fd260c11cec8ce7730954893"}, + {file = "coverage-7.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80027673e9d0bd6aef86134b0771845e2da85755cf686e7c7c59566cf5a89115"}, + {file = "coverage-7.11.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d3ffa07a08657306cd2215b0da53761c4d73cb54d9143b9303a6481ec0cd415"}, + {file = "coverage-7.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a3b6a5f8b2524fd6c1066bc85bfd97e78709bb5e37b5b94911a6506b65f47186"}, + {file = "coverage-7.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fcc0a4aa589de34bc56e1a80a740ee0f8c47611bdfb28cd1849de60660f3799d"}, + {file = "coverage-7.11.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:dba82204769d78c3fd31b35c3d5f46e06511936c5019c39f98320e05b08f794d"}, + {file = "coverage-7.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:81b335f03ba67309a95210caf3eb43bd6fe75a4e22ba653ef97b4696c56c7ec2"}, + {file = "coverage-7.11.0-cp312-cp312-win32.whl", hash = "sha256:037b2d064c2f8cc8716fe4d39cb705779af3fbf1ba318dc96a1af858888c7bb5"}, + {file = "coverage-7.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:d66c0104aec3b75e5fd897e7940188ea1892ca1d0235316bf89286d6a22568c0"}, + {file = "coverage-7.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:d91ebeac603812a09cf6a886ba6e464f3bbb367411904ae3790dfe28311b15ad"}, + {file = "coverage-7.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cc3f49e65ea6e0d5d9bd60368684fe52a704d46f9e7fc413918f18d046ec40e1"}, + {file = "coverage-7.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f39ae2f63f37472c17b4990f794035c9890418b1b8cca75c01193f3c8d3e01be"}, + {file = "coverage-7.11.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7db53b5cdd2917b6eaadd0b1251cf4e7d96f4a8d24e174bdbdf2f65b5ea7994d"}, + {file = "coverage-7.11.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10ad04ac3a122048688387828b4537bc9cf60c0bf4869c1e9989c46e45690b82"}, + {file = "coverage-7.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4036cc9c7983a2b1f2556d574d2eb2154ac6ed55114761685657e38782b23f52"}, + {file = "coverage-7.11.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7ab934dd13b1c5e94b692b1e01bd87e4488cb746e3a50f798cb9464fd128374b"}, + {file = "coverage-7.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59a6e5a265f7cfc05f76e3bb53eca2e0dfe90f05e07e849930fecd6abb8f40b4"}, + {file = "coverage-7.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df01d6c4c81e15a7c88337b795bb7595a8596e92310266b5072c7e301168efbd"}, + {file = "coverage-7.11.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8c934bd088eed6174210942761e38ee81d28c46de0132ebb1801dbe36a390dcc"}, + {file = "coverage-7.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a03eaf7ec24078ad64a07f02e30060aaf22b91dedf31a6b24d0d98d2bba7f48"}, + {file = "coverage-7.11.0-cp313-cp313-win32.whl", hash = "sha256:695340f698a5f56f795b2836abe6fb576e7c53d48cd155ad2f80fd24bc63a040"}, + {file = "coverage-7.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:2727d47fce3ee2bac648528e41455d1b0c46395a087a229deac75e9f88ba5a05"}, + {file = "coverage-7.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:0efa742f431529699712b92ecdf22de8ff198df41e43aeaaadf69973eb93f17a"}, + {file = "coverage-7.11.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:587c38849b853b157706407e9ebdca8fd12f45869edb56defbef2daa5fb0812b"}, + {file = "coverage-7.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b971bdefdd75096163dd4261c74be813c4508477e39ff7b92191dea19f24cd37"}, + {file = "coverage-7.11.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:269bfe913b7d5be12ab13a95f3a76da23cf147be7fa043933320ba5625f0a8de"}, + {file = "coverage-7.11.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:dadbcce51a10c07b7c72b0ce4a25e4b6dcb0c0372846afb8e5b6307a121eb99f"}, + {file = "coverage-7.11.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ed43fa22c6436f7957df036331f8fe4efa7af132054e1844918866cd228af6c"}, + {file = "coverage-7.11.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9516add7256b6713ec08359b7b05aeff8850c98d357784c7205b2e60aa2513fa"}, + {file = "coverage-7.11.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb92e47c92fcbcdc692f428da67db33337fa213756f7adb6a011f7b5a7a20740"}, + {file = "coverage-7.11.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d06f4fc7acf3cabd6d74941d53329e06bab00a8fe10e4df2714f0b134bfc64ef"}, + {file = "coverage-7.11.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:6fbcee1a8f056af07ecd344482f711f563a9eb1c2cad192e87df00338ec3cdb0"}, + {file = "coverage-7.11.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dbbf012be5f32533a490709ad597ad8a8ff80c582a95adc8d62af664e532f9ca"}, + {file = "coverage-7.11.0-cp313-cp313t-win32.whl", hash = "sha256:cee6291bb4fed184f1c2b663606a115c743df98a537c969c3c64b49989da96c2"}, + {file = "coverage-7.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a386c1061bf98e7ea4758e4313c0ab5ecf57af341ef0f43a0bf26c2477b5c268"}, + {file = "coverage-7.11.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f9ea02ef40bb83823b2b04964459d281688fe173e20643870bb5d2edf68bc836"}, + {file = "coverage-7.11.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c770885b28fb399aaf2a65bbd1c12bf6f307ffd112d6a76c5231a94276f0c497"}, + {file = "coverage-7.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a3d0e2087dba64c86a6b254f43e12d264b636a39e88c5cc0a01a7c71bcfdab7e"}, + {file = "coverage-7.11.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:73feb83bb41c32811973b8565f3705caf01d928d972b72042b44e97c71fd70d1"}, + {file = "coverage-7.11.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c6f31f281012235ad08f9a560976cc2fc9c95c17604ff3ab20120fe480169bca"}, + {file = "coverage-7.11.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9570ad567f880ef675673992222746a124b9595506826b210fbe0ce3f0499cd"}, + {file = "coverage-7.11.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8badf70446042553a773547a61fecaa734b55dc738cacf20c56ab04b77425e43"}, + {file = "coverage-7.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a09c1211959903a479e389685b7feb8a17f59ec5a4ef9afde7650bd5eabc2777"}, + {file = "coverage-7.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:5ef83b107f50db3f9ae40f69e34b3bd9337456c5a7fe3461c7abf8b75dd666a2"}, + {file = "coverage-7.11.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f91f927a3215b8907e214af77200250bb6aae36eca3f760f89780d13e495388d"}, + {file = "coverage-7.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cdbcd376716d6b7fbfeedd687a6c4be019c5a5671b35f804ba76a4c0a778cba4"}, + {file = "coverage-7.11.0-cp314-cp314-win32.whl", hash = "sha256:bab7ec4bb501743edc63609320aaec8cd9188b396354f482f4de4d40a9d10721"}, + {file = "coverage-7.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:3d4ba9a449e9364a936a27322b20d32d8b166553bfe63059bd21527e681e2fad"}, + {file = "coverage-7.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:ce37f215223af94ef0f75ac68ea096f9f8e8c8ec7d6e8c346ee45c0d363f0479"}, + {file = "coverage-7.11.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f413ce6e07e0d0dc9c433228727b619871532674b45165abafe201f200cc215f"}, + {file = "coverage-7.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:05791e528a18f7072bf5998ba772fe29db4da1234c45c2087866b5ba4dea710e"}, + {file = "coverage-7.11.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cacb29f420cfeb9283b803263c3b9a068924474ff19ca126ba9103e1278dfa44"}, + {file = "coverage-7.11.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314c24e700d7027ae3ab0d95fbf8d53544fca1f20345fd30cd219b737c6e58d3"}, + {file = "coverage-7.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:630d0bd7a293ad2fc8b4b94e5758c8b2536fdf36c05f1681270203e463cbfa9b"}, + {file = "coverage-7.11.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e89641f5175d65e2dbb44db15fe4ea48fade5d5bbb9868fdc2b4fce22f4a469d"}, + {file = "coverage-7.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c9f08ea03114a637dab06cedb2e914da9dc67fa52c6015c018ff43fdde25b9c2"}, + {file = "coverage-7.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce9f3bde4e9b031eaf1eb61df95c1401427029ea1bfddb8621c1161dcb0fa02e"}, + {file = "coverage-7.11.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:e4dc07e95495923d6fd4d6c27bf70769425b71c89053083843fd78f378558996"}, + {file = "coverage-7.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:424538266794db2861db4922b05d729ade0940ee69dcf0591ce8f69784db0e11"}, + {file = "coverage-7.11.0-cp314-cp314t-win32.whl", hash = "sha256:4c1eeb3fb8eb9e0190bebafd0462936f75717687117339f708f395fe455acc73"}, + {file = "coverage-7.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b56efee146c98dbf2cf5cffc61b9829d1e94442df4d7398b26892a53992d3547"}, + {file = "coverage-7.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:b5c2705afa83f49bd91962a4094b6b082f94aef7626365ab3f8f4bd159c5acf3"}, + {file = "coverage-7.11.0-py3-none-any.whl", hash = "sha256:4b7589765348d78fb4e5fb6ea35d07564e387da2fc5efff62e0222971f155f68"}, + {file = "coverage-7.11.0.tar.gz", hash = "sha256:167bd504ac1ca2af7ff3b81d245dfea0292c5032ebef9d66cc08a7d28c1b8050"}, +] + +[package.extras] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] [[package]] name = "cryptography" @@ -435,6 +591,8 @@ version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, @@ -484,6 +642,7 @@ version = "0.4.0" description = "serialize all of Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049"}, {file = "dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0"}, @@ -499,6 +658,8 @@ version = "1.3.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, @@ -516,6 +677,8 @@ version = "1.0.0" description = "Clean single-source support for Python 3 and 2" optional = true python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, @@ -527,6 +690,7 @@ version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." optional = false python-versions = "*" +groups = ["docs"] files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, @@ -544,25 +708,39 @@ version = "1.1.1" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "griffe-1.1.1-py3-none-any.whl", hash = "sha256:0c469411e8d671a545725f5c0851a746da8bd99d354a79fdc4abd45219252efb"}, {file = "griffe-1.1.1.tar.gz", hash = "sha256:faeb78764c0b2bd010719d6e015d07709b0f260258b5d4dd6c88343d9702aa30"}, ] [package.dependencies] -astunparse = {version = ">=1.6", markers = "python_version < \"3.9\""} colorama = ">=0.4" +[[package]] +name = "hjson" +version = "3.1.0" +description = "Hjson, a user interface for JSON." +optional = false +python-versions = "*" +groups = ["docs"] +files = [ + {file = "hjson-3.1.0-py3-none-any.whl", hash = "sha256:65713cdcf13214fb554eb8b4ef803419733f4f5e551047c9b711098ab7186b89"}, + {file = "hjson-3.1.0.tar.gz", hash = "sha256:55af475a27cf83a7969c808399d7bccdec8fb836a07ddbd574587593b9cdcf75"}, +] + [[package]] name = "idna" version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main", "docs"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +markers = {main = "extra == \"optionals\""} [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] @@ -573,6 +751,8 @@ version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] +markers = "python_version == \"3.9\"" files = [ {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, @@ -582,12 +762,12 @@ files = [ zipp = ">=3.20" [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +test = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] @@ -596,6 +776,8 @@ version = "6.4.5" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version == \"3.9\"" files = [ {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, @@ -605,7 +787,7 @@ files = [ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] @@ -618,6 +800,7 @@ version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, @@ -629,6 +812,7 @@ version = "2.2.0" description = "Pythonic task execution" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "invoke-2.2.0-py3-none-any.whl", hash = "sha256:6ea924cc53d4f78e3d98bc436b08069a03077e6f85ad1ddaa8a116d7dad15820"}, {file = "invoke-2.2.0.tar.gz", hash = "sha256:ee6cbb101af1a859c7fe84f2a264c059020b0cb7fe3535f9424300ab568f6bd5"}, @@ -640,6 +824,7 @@ version = "5.13.2" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" +groups = ["dev"] files = [ {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, @@ -654,10 +839,12 @@ version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["main", "dev", "docs"] files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] +markers = {main = "extra == \"optionals\""} [package.dependencies] MarkupSafe = ">=2.0" @@ -671,6 +858,8 @@ version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -678,9 +867,7 @@ files = [ [package.dependencies] attrs = ">=22.2.0" -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} jsonschema-specifications = ">=2023.03.6" -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} referencing = ">=0.28.4" rpds-py = ">=0.7.1" @@ -694,13 +881,14 @@ version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, ] [package.dependencies] -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} referencing = ">=0.31.0" [[package]] @@ -709,6 +897,8 @@ version = "2.7.1" description = "Junos 'EZ' automation for non-programmers" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "junos-eznc-2.7.1.tar.gz", hash = "sha256:371f0298bf03e0cb4c017c43f6f4122263584eda0d690d0112e93f13daae41ac"}, {file = "junos_eznc-2.7.1-py3-none-any.whl", hash = "sha256:8a7918faa8f0570341cac64c1210c1cd3e3542162d1e7449c3364f8d805716b2"}, @@ -732,6 +922,8 @@ version = "0.3" description = "Wrapper to the POSIX crypt library call and associated functionality." optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "legacycrypt-0.3-py3-none-any.whl", hash = "sha256:b5e373506ccb442f8d715e29fa75f53a11bbec3ca0d7b63445f4dbb656555218"}, {file = "legacycrypt-0.3.tar.gz", hash = "sha256:e76e7fd25666a451428b20d5afbbecf3654565b2e11511b53226be955c4d2292"}, @@ -743,6 +935,8 @@ version = "6.0.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "lxml-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:35bc626eec405f745199200ccb5c6b36f202675d204aa29bb52e27ba2b71dea8"}, {file = "lxml-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:246b40f8a4aec341cbbf52617cad8ab7c888d944bfe12a6abd2b1f6cfb6f6082"}, @@ -852,6 +1046,7 @@ version = "3.7" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, @@ -864,12 +1059,30 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] +[[package]] +name = "markdown-data-tables" +version = "1.0.0" +description = "Embed data files such as YAML as tables in a Markdown document" +optional = false +python-versions = ">=3.8,<4.0" +groups = ["docs"] +files = [ + {file = "markdown_data_tables-1.0.0-py3-none-any.whl", hash = "sha256:a59c6743685691ced4341bdb01024b7a863a1adaa3a2ef92fa068a7e90227d9a"}, + {file = "markdown_data_tables-1.0.0.tar.gz", hash = "sha256:ac1b07c58bb66e9f060ba81cdd63070ec94deb21f0147e519c77c8475ba696ea"}, +] + +[package.dependencies] +markdown = ">=3.3.7,<4.0.0" +pyyaml = ">=6.0,<7.0" +tabulate = ">=0.9.0,<0.10.0" + [[package]] name = "markdown-version-annotations" version = "1.0.1" description = "Markdown plugin to add custom admonitions for documenting version differences" optional = false python-versions = "<4.0,>=3.7" +groups = ["docs"] files = [ {file = "markdown_version_annotations-1.0.1-py3-none-any.whl", hash = "sha256:6df0b2ac08bab906c8baa425f59fc0fe342fbe8b3917c144fb75914266b33200"}, {file = "markdown_version_annotations-1.0.1.tar.gz", hash = "sha256:620aade507ef175ccfb2059db152a34c6a1d2add28c2be16ea4de38d742e6132"}, @@ -884,6 +1097,7 @@ version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" +groups = ["main", "dev", "docs"] files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, @@ -946,6 +1160,7 @@ files = [ {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] +markers = {main = "extra == \"optionals\""} [[package]] name = "mccabe" @@ -953,6 +1168,7 @@ version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -964,6 +1180,7 @@ version = "1.3.4" description = "A deep merge function for 🐍." optional = false python-versions = ">=3.6" +groups = ["docs"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, @@ -971,13 +1188,14 @@ files = [ [[package]] name = "mkdocs" -version = "1.6.0" +version = "1.6.1" description = "Project documentation with Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ - {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, - {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, + {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, + {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, ] [package.dependencies] @@ -998,7 +1216,7 @@ watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] [[package]] name = "mkdocs-autorefs" @@ -1006,6 +1224,7 @@ version = "1.2.0" description = "Automatically link across pages in MkDocs." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_autorefs-1.2.0-py3-none-any.whl", hash = "sha256:d588754ae89bd0ced0c70c06f58566a4ee43471eeeee5202427da7de9ef85a2f"}, {file = "mkdocs_autorefs-1.2.0.tar.gz", hash = "sha256:a86b93abff653521bda71cf3fc5596342b7a23982093915cb74273f67522190f"}, @@ -1016,12 +1235,28 @@ Markdown = ">=3.3" markupsafe = ">=2.0.1" mkdocs = ">=1.1" +[[package]] +name = "mkdocs-gen-files" +version = "0.5.0" +description = "MkDocs plugin to programmatically generate documentation pages during the build" +optional = false +python-versions = ">=3.7" +groups = ["docs"] +files = [ + {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, + {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3" + [[package]] name = "mkdocs-get-deps" version = "0.2.0" description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, @@ -1033,32 +1268,71 @@ mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" +[[package]] +name = "mkdocs-glightbox" +version = "0.4.0" +description = "MkDocs plugin supports image lightbox with GLightbox." +optional = false +python-versions = "*" +groups = ["docs"] +files = [ + {file = "mkdocs-glightbox-0.4.0.tar.gz", hash = "sha256:392b34207bf95991071a16d5f8916d1d2f2cd5d5bb59ae2997485ccd778c70d9"}, + {file = "mkdocs_glightbox-0.4.0-py3-none-any.whl", hash = "sha256:e0107beee75d3eb7380ac06ea2d6eac94c999eaa49f8c3cbab0e7be2ac006ccf"}, +] + +[[package]] +name = "mkdocs-macros-plugin" +version = "1.3.7" +description = "Unleash the power of MkDocs with macros and variables" +optional = false +python-versions = ">=3.8" +groups = ["docs"] +files = [ + {file = "mkdocs_macros_plugin-1.3.7-py3-none-any.whl", hash = "sha256:02432033a5b77fb247d6ec7924e72fc4ceec264165b1644ab8d0dc159c22ce59"}, + {file = "mkdocs_macros_plugin-1.3.7.tar.gz", hash = "sha256:17c7fd1a49b94defcdb502fd453d17a1e730f8836523379d21292eb2be4cb523"}, +] + +[package.dependencies] +hjson = "*" +jinja2 = "*" +mkdocs = ">=0.17" +packaging = "*" +pathspec = "*" +python-dateutil = "*" +pyyaml = "*" +super-collections = "*" +termcolor = "*" + +[package.extras] +test = ["mkdocs-d2-plugin", "mkdocs-include-markdown-plugin", "mkdocs-macros-test", "mkdocs-material (>=6.2)", "mkdocs-test"] + [[package]] name = "mkdocs-material" -version = "9.5.32" +version = "9.6.15" description = "Documentation that simply works" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ - {file = "mkdocs_material-9.5.32-py3-none-any.whl", hash = "sha256:f3704f46b63d31b3cd35c0055a72280bed825786eccaf19c655b44e0cd2c6b3f"}, - {file = "mkdocs_material-9.5.32.tar.gz", hash = "sha256:38ed66e6d6768dde4edde022554553e48b2db0d26d1320b19e2e2b9da0be1120"}, + {file = "mkdocs_material-9.6.15-py3-none-any.whl", hash = "sha256:ac969c94d4fe5eb7c924b6d2f43d7db41159ea91553d18a9afc4780c34f2717a"}, + {file = "mkdocs_material-9.6.15.tar.gz", hash = "sha256:64adf8fa8dba1a17905b6aee1894a5aafd966d4aeb44a11088519b0f5ca4f1b5"}, ] [package.dependencies] babel = ">=2.10,<3.0" +backrefs = ">=5.7.post1,<6.0" colorama = ">=0.4,<1.0" -jinja2 = ">=3.0,<4.0" +jinja2 = ">=3.1,<4.0" markdown = ">=3.2,<4.0" mkdocs = ">=1.6,<2.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" pymdown-extensions = ">=10.2,<11.0" -regex = ">=2022.4" requests = ">=2.26,<3.0" [package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] @@ -1068,6 +1342,7 @@ version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, @@ -1079,36 +1354,67 @@ version = "0.1.3" description = "Mkdocs plugin to view Python Classes." optional = false python-versions = ">=3.8,<4.0" +groups = ["docs"] files = [ {file = "mkdocs_python_classy-0.1.3-py3-none-any.whl", hash = "sha256:fdcfe1cffb39069abdd00873556a88493f463448fad27337ca781e39ad3472a8"}, {file = "mkdocs_python_classy-0.1.3.tar.gz", hash = "sha256:a6ffdc7ac995b5773eaca97aea88cab43c10bb8e127b238ec052bd92389cc175"}, ] [package.dependencies] -astunparse = {version = ">=1.6.3,<2.0.0", markers = "python_version < \"3.9\""} mkdocs = ">=1.4.0,<2.0.0" pymdown-extensions = ">=6.3" +[[package]] +name = "mkdocs-redirects" +version = "1.2.2" +description = "A MkDocs plugin for dynamic page redirects to prevent broken links" +optional = false +python-versions = ">=3.8" +groups = ["docs"] +files = [ + {file = "mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5"}, + {file = "mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095"}, +] + +[package.dependencies] +mkdocs = ">=1.1.1" + +[[package]] +name = "mkdocs-section-index" +version = "0.3.10" +description = "MkDocs plugin to allow clickable sections that lead to an index page" +optional = false +python-versions = ">=3.9" +groups = ["docs"] +files = [ + {file = "mkdocs_section_index-0.3.10-py3-none-any.whl", hash = "sha256:bc27c0d0dc497c0ebaee1fc72839362aed77be7318b5ec0c30628f65918e4776"}, + {file = "mkdocs_section_index-0.3.10.tar.gz", hash = "sha256:a82afbda633c82c5568f0e3b008176b9b365bf4bd8b6f919d6eff09ee146b9f8"}, +] + +[package.dependencies] +mkdocs = ">=1.2" + [[package]] name = "mkdocstrings" -version = "0.25.2" +version = "0.27.0" description = "Automatic documentation from sources, for MkDocs." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["docs"] files = [ - {file = "mkdocstrings-0.25.2-py3-none-any.whl", hash = "sha256:9e2cda5e2e12db8bb98d21e3410f3f27f8faab685a24b03b06ba7daa5b92abfc"}, - {file = "mkdocstrings-0.25.2.tar.gz", hash = "sha256:5cf57ad7f61e8be3111a2458b4e49c2029c9cb35525393b179f9c916ca8042dc"}, + {file = "mkdocstrings-0.27.0-py3-none-any.whl", hash = "sha256:6ceaa7ea830770959b55a16203ac63da24badd71325b96af950e59fd37366332"}, + {file = "mkdocstrings-0.27.0.tar.gz", hash = "sha256:16adca6d6b0a1f9e0c07ff0b02ced8e16f228a9d65a37c063ec4c14d7b76a657"}, ] [package.dependencies] click = ">=7.0" importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} Jinja2 = ">=2.11.1" -Markdown = ">=3.3" +Markdown = ">=3.6" MarkupSafe = ">=1.1" mkdocs = ">=1.4" -mkdocs-autorefs = ">=0.3.1" -platformdirs = ">=2.2.0" +mkdocs-autorefs = ">=1.2" +platformdirs = ">=2.2" pymdown-extensions = ">=6.3" typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} @@ -1119,68 +1425,89 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.10.8" +version = "1.13.0" description = "A Python handler for mkdocstrings." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["docs"] files = [ - {file = "mkdocstrings_python-1.10.8-py3-none-any.whl", hash = "sha256:bb12e76c8b071686617f824029cb1dfe0e9afe89f27fb3ad9a27f95f054dcd89"}, - {file = "mkdocstrings_python-1.10.8.tar.gz", hash = "sha256:5856a59cbebbb8deb133224a540de1ff60bded25e54d8beacc375bb133d39016"}, + {file = "mkdocstrings_python-1.13.0-py3-none-any.whl", hash = "sha256:b88bbb207bab4086434743849f8e796788b373bd32e7bfefbf8560ac45d88f97"}, + {file = "mkdocstrings_python-1.13.0.tar.gz", hash = "sha256:2dbd5757e8375b9720e81db16f52f1856bf59905428fd7ef88005d1370e2f64c"}, ] [package.dependencies] griffe = ">=0.49" -mkdocstrings = ">=0.25" +mkdocs-autorefs = ">=1.2" +mkdocstrings = ">=0.26" + +[[package]] +name = "mock" +version = "5.2.0" +description = "Rolling backport of unittest.mock for all Pythons" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "mock-5.2.0-py3-none-any.whl", hash = "sha256:7ba87f72ca0e915175596069dbbcc7c75af7b5e9b9bc107ad6349ede0819982f"}, + {file = "mock-5.2.0.tar.gz", hash = "sha256:4e460e818629b4b173f32d08bf30d3af8123afbb8e04bb5707a1fd4799e503f0"}, +] + +[package.extras] +build = ["blurb", "twine", "wheel"] +docs = ["sphinx"] +test = ["pytest", "pytest-cov"] [[package]] name = "mypy" -version = "1.14.1" +version = "1.18.2" description = "Optional static typing for Python" optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, - {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, - {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, - {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, - {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, - {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, - {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, - {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, - {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, - {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, - {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, - {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, - {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, - {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, - {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, - {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c"}, + {file = "mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e"}, + {file = "mypy-1.18.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448acd386266989ef11662ce3c8011fd2a7b632e0ec7d61a98edd8e27472225b"}, + {file = "mypy-1.18.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f9e171c465ad3901dc652643ee4bffa8e9fef4d7d0eece23b428908c77a76a66"}, + {file = "mypy-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:592ec214750bc00741af1f80cbf96b5013d81486b7bb24cb052382c19e40b428"}, + {file = "mypy-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:7fb95f97199ea11769ebe3638c29b550b5221e997c63b14ef93d2e971606ebed"}, + {file = "mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f"}, + {file = "mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341"}, + {file = "mypy-1.18.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1379451880512ffce14505493bd9fe469e0697543717298242574882cf8cdb8d"}, + {file = "mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86"}, + {file = "mypy-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ca30b50a51e7ba93b00422e486cbb124f1c56a535e20eff7b2d6ab72b3b2e37"}, + {file = "mypy-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:664dc726e67fa54e14536f6e1224bcfce1d9e5ac02426d2326e2bb4e081d1ce8"}, + {file = "mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34"}, + {file = "mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764"}, + {file = "mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893"}, + {file = "mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914"}, + {file = "mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8"}, + {file = "mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074"}, + {file = "mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc"}, + {file = "mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e"}, + {file = "mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986"}, + {file = "mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d"}, + {file = "mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba"}, + {file = "mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544"}, + {file = "mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce"}, + {file = "mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d"}, + {file = "mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c"}, + {file = "mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb"}, + {file = "mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075"}, + {file = "mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf"}, + {file = "mypy-1.18.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25a9c8fb67b00599f839cf472713f54249a62efd53a54b565eb61956a7e3296b"}, + {file = "mypy-1.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2b9c7e284ee20e7598d6f42e13ca40b4928e6957ed6813d1ab6348aa3f47133"}, + {file = "mypy-1.18.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6985ed057513e344e43a26cc1cd815c7a94602fb6a3130a34798625bc2f07b6"}, + {file = "mypy-1.18.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f27105f1525ec024b5c630c0b9f36d5c1cc4d447d61fe51ff4bd60633f47ac"}, + {file = "mypy-1.18.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:030c52d0ea8144e721e49b1f68391e39553d7451f0c3f8a7565b59e19fcb608b"}, + {file = "mypy-1.18.2-cp39-cp39-win_amd64.whl", hash = "sha256:aa5e07ac1a60a253445797e42b8b2963c9675563a94f11291ab40718b016a7a0"}, + {file = "mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e"}, + {file = "mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b"}, ] [package.dependencies] mypy_extensions = ">=1.0.0" +pathspec = ">=0.9.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing_extensions = ">=4.6.0" @@ -1197,6 +1524,7 @@ version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, @@ -1208,6 +1536,8 @@ version = "4.1.0" description = "Network Automation and Programmability Abstraction Layer with Multivendor support" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "napalm-4.1.0-py2.py3-none-any.whl", hash = "sha256:14a5b7759a0247a26fff2c444b1cfc150a08224de8addf4076c384845285bf5b"}, {file = "napalm-4.1.0.tar.gz", hash = "sha256:3b3e18efd556861c056ba509eb46f5ffc9e3e6c42db399fa76b6ea9af272c17a"}, @@ -1240,6 +1570,8 @@ version = "0.6.19" description = "Python library for NETCONF clients" optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "ncclient-0.6.19.tar.gz", hash = "sha256:de7a796221910cbd0f32eb20f7dd7c94cfe61aa170fc5f0c5941c557f835c312"}, ] @@ -1254,6 +1586,8 @@ version = "1.3.0" description = "A network address manipulation library for Python" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "netaddr-1.3.0-py3-none-any.whl", hash = "sha256:c2c6a8ebe5554ce33b7d5b3a306b71bbb373e000bbbf2350dd5213cc56e3dbbe"}, {file = "netaddr-1.3.0.tar.gz", hash = "sha256:5c3c3d9895b551b763779ba7db7a03487dc1f8e3b385af819af341ae9ef6e48a"}, @@ -1268,6 +1602,8 @@ version = "4.4.0" description = "Multi-vendor library to simplify legacy CLI connections to network devices" optional = true python-versions = "<4.0,>=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "netmiko-4.4.0-py3-none-any.whl", hash = "sha256:2ff4683f013fac0f80715286c7d3250e89166aefc4421cb75d3ff483f2ebbbc0"}, {file = "netmiko-4.4.0.tar.gz", hash = "sha256:25ff1237976aa3ff2cacf04949314638c899220a1675bd029e31b07ce20ce3b6"}, @@ -1289,6 +1625,8 @@ version = "7.9.0" description = "TextFSM Templates for Network Devices, and Python wrapper for TextFSM's CliTable." optional = true python-versions = "<4.0,>=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "ntc_templates-7.9.0-py3-none-any.whl", hash = "sha256:44ae2651719592bb70e98886f363b15bab12892b37f8338f0a2255aa5c7b6ee3"}, {file = "ntc_templates-7.9.0.tar.gz", hash = "sha256:df4b4520c3dd41b33ad0746ea7742c63b13eb2860579c7648c348167af5432e2"}, @@ -1303,6 +1641,7 @@ version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, @@ -1314,6 +1653,7 @@ version = "0.5.7" description = "Divides large result sets into pages for easier browsing" optional = false python-versions = "*" +groups = ["docs"] files = [ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, @@ -1329,6 +1669,8 @@ version = "3.5.1" description = "SSH2 protocol library" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "paramiko-3.5.1-py3-none-any.whl", hash = "sha256:43b9a0501fc2b5e70680388d9346cf252cfb7d00b0667c39e80eb43a408b8f61"}, {file = "paramiko-3.5.1.tar.gz", hash = "sha256:b2c665bc45b2b215bd7d7f039901b14b067da00f3a11e6640995fd58f2664822"}, @@ -1340,8 +1682,8 @@ cryptography = ">=3.3" pynacl = ">=1.5" [package.extras] -all = ["gssapi (>=1.4.1)", "invoke (>=2.0)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] -gssapi = ["gssapi (>=1.4.1)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] +all = ["gssapi (>=1.4.1) ; platform_system != \"Windows\"", "invoke (>=2.0)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8) ; platform_system == \"Windows\""] +gssapi = ["gssapi (>=1.4.1) ; platform_system != \"Windows\"", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8) ; platform_system == \"Windows\""] invoke = ["invoke (>=2.0)"] [[package]] @@ -1350,28 +1692,19 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -optional = true -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - [[package]] name = "platformdirs" version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -1388,6 +1721,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1403,34 +1737,21 @@ version = "2.22" description = "C parser in Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] -[[package]] -name = "pydocstyle" -version = "6.3.0" -description = "Python docstring style checker" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, - {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, -] - -[package.dependencies] -snowballstemmer = ">=2.2.0" - -[package.extras] -toml = ["tomli (>=1.2.3)"] - [[package]] name = "pyeapi" version = "1.0.4" description = "Python Client for eAPI" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "pyeapi-1.0.4.tar.gz", hash = "sha256:05920677246823cd3dddf7d4d0f831fbc86fd416f356706a03bc56a291d78f3d"}, ] @@ -1448,6 +1769,7 @@ version = "2.19.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, @@ -1462,6 +1784,7 @@ version = "3.2.7" description = "python code static checker" optional = false python-versions = ">=3.8.0" +groups = ["dev"] files = [ {file = "pylint-3.2.7-py3-none-any.whl", hash = "sha256:02f4aedeac91be69fb3b4bea997ce580a4ac68ce58b89eaefeaf06749df73f4b"}, {file = "pylint-3.2.7.tar.gz", hash = "sha256:1b7a721b575eaeaa7d39db076b6e7743c993ea44f57979127c517c6c572c803e"}, @@ -1473,7 +1796,7 @@ colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=0.3.6", markers = "python_version == \"3.11\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -1492,6 +1815,7 @@ version = "10.15" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "pymdown_extensions-10.15-py3-none-any.whl", hash = "sha256:46e99bb272612b0de3b7e7caf6da8dd5f4ca5212c0b273feb9304e236c484e5f"}, {file = "pymdown_extensions-10.15.tar.gz", hash = "sha256:0e5994e32155f4b03504f939e501b981d306daf7ec2aa1cd2eb6bd300784f8f7"}, @@ -1510,6 +1834,8 @@ version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, @@ -1536,6 +1862,8 @@ version = "3.1.4" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = true python-versions = ">=3.6.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, @@ -1550,6 +1878,8 @@ version = "3.5" description = "Python Serial Port Extension" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"}, {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"}, @@ -1564,6 +1894,7 @@ version = "8.3.5" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, @@ -1586,6 +1917,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["docs"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -1594,23 +1926,13 @@ files = [ [package.dependencies] six = ">=1.5" -[[package]] -name = "pytz" -version = "2025.2" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, - {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, -] - [[package]] name = "pyyaml" version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -1673,6 +1995,7 @@ version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " optional = false python-versions = ">=3.6" +groups = ["docs"] files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, @@ -1687,6 +2010,8 @@ version = "0.35.1" description = "JSON Referencing + Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, @@ -1696,119 +2021,18 @@ files = [ attrs = ">=22.2.0" rpds-py = ">=0.7.0" -[[package]] -name = "regex" -version = "2024.11.6" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.8" -files = [ - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, - {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, - {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, - {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, - {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, - {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, - {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, - {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, - {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, - {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, - {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, - {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, - {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, - {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, -] - [[package]] name = "requests" version = "2.32.4" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["main", "docs"] files = [ {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, ] +markers = {main = "extra == \"optionals\""} [package.dependencies] certifi = ">=2017.4.17" @@ -1826,6 +2050,8 @@ version = "0.20.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "rpds_py-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a649dfd735fff086e8a9d0503a9f0c7d01b7912a333c7ae77e1515c08c146dad"}, {file = "rpds_py-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f16bc1334853e91ddaaa1217045dd7be166170beec337576818461268a3de67f"}, @@ -1934,30 +2160,30 @@ files = [ [[package]] name = "ruff" -version = "0.12.12" +version = "0.5.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" -files = [ - {file = "ruff-0.12.12-py3-none-linux_armv6l.whl", hash = "sha256:de1c4b916d98ab289818e55ce481e2cacfaad7710b01d1f990c497edf217dafc"}, - {file = "ruff-0.12.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7acd6045e87fac75a0b0cdedacf9ab3e1ad9d929d149785903cff9bb69ad9727"}, - {file = "ruff-0.12.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:abf4073688d7d6da16611f2f126be86523a8ec4343d15d276c614bda8ec44edb"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:968e77094b1d7a576992ac078557d1439df678a34c6fe02fd979f973af167577"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42a67d16e5b1ffc6d21c5f67851e0e769517fb57a8ebad1d0781b30888aa704e"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b216ec0a0674e4b1214dcc998a5088e54eaf39417327b19ffefba1c4a1e4971e"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:59f909c0fdd8f1dcdbfed0b9569b8bf428cf144bec87d9de298dcd4723f5bee8"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ac93d87047e765336f0c18eacad51dad0c1c33c9df7484c40f98e1d773876f5"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:01543c137fd3650d322922e8b14cc133b8ea734617c4891c5a9fccf4bfc9aa92"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afc2fa864197634e549d87fb1e7b6feb01df0a80fd510d6489e1ce8c0b1cc45"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0c0945246f5ad776cb8925e36af2438e66188d2b57d9cf2eed2c382c58b371e5"}, - {file = "ruff-0.12.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a0fbafe8c58e37aae28b84a80ba1817f2ea552e9450156018a478bf1fa80f4e4"}, - {file = "ruff-0.12.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b9c456fb2fc8e1282affa932c9e40f5ec31ec9cbb66751a316bd131273b57c23"}, - {file = "ruff-0.12.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f12856123b0ad0147d90b3961f5c90e7427f9acd4b40050705499c98983f489"}, - {file = "ruff-0.12.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:26a1b5a2bf7dd2c47e3b46d077cd9c0fc3b93e6c6cc9ed750bd312ae9dc302ee"}, - {file = "ruff-0.12.12-py3-none-win32.whl", hash = "sha256:173be2bfc142af07a01e3a759aba6f7791aa47acf3604f610b1c36db888df7b1"}, - {file = "ruff-0.12.12-py3-none-win_amd64.whl", hash = "sha256:e99620bf01884e5f38611934c09dd194eb665b0109104acae3ba6102b600fd0d"}, - {file = "ruff-0.12.12-py3-none-win_arm64.whl", hash = "sha256:2a8199cab4ce4d72d158319b63370abf60991495fb733db96cd923a34c52d093"}, - {file = "ruff-0.12.12.tar.gz", hash = "sha256:b86cd3415dbe31b3b46a71c598f4c4b2f550346d1ccf6326b347cc0c8fd063d6"}, +groups = ["dev"] +files = [ + {file = "ruff-0.5.5-py3-none-linux_armv6l.whl", hash = "sha256:605d589ec35d1da9213a9d4d7e7a9c761d90bba78fc8790d1c5e65026c1b9eaf"}, + {file = "ruff-0.5.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00817603822a3e42b80f7c3298c8269e09f889ee94640cd1fc7f9329788d7bf8"}, + {file = "ruff-0.5.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:187a60f555e9f865a2ff2c6984b9afeffa7158ba6e1eab56cb830404c942b0f3"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe26fc46fa8c6e0ae3f47ddccfbb136253c831c3289bba044befe68f467bfb16"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ad25dd9c5faac95c8e9efb13e15803cd8bbf7f4600645a60ffe17c73f60779b"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f70737c157d7edf749bcb952d13854e8f745cec695a01bdc6e29c29c288fc36e"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:cfd7de17cef6ab559e9f5ab859f0d3296393bc78f69030967ca4d87a541b97a0"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a09b43e02f76ac0145f86a08e045e2ea452066f7ba064fd6b0cdccb486f7c3e7"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0b856cb19c60cd40198be5d8d4b556228e3dcd545b4f423d1ad812bfdca5884"}, + {file = "ruff-0.5.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3687d002f911e8a5faf977e619a034d159a8373514a587249cc00f211c67a091"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ac9dc814e510436e30d0ba535f435a7f3dc97f895f844f5b3f347ec8c228a523"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:af9bdf6c389b5add40d89b201425b531e0a5cceb3cfdcc69f04d3d531c6be74f"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d40a8533ed545390ef8315b8e25c4bb85739b90bd0f3fe1280a29ae364cc55d8"}, + {file = "ruff-0.5.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cab904683bf9e2ecbbe9ff235bfe056f0eba754d0168ad5407832928d579e7ab"}, + {file = "ruff-0.5.5-py3-none-win32.whl", hash = "sha256:696f18463b47a94575db635ebb4c178188645636f05e934fdf361b74edf1bb2d"}, + {file = "ruff-0.5.5-py3-none-win_amd64.whl", hash = "sha256:50f36d77f52d4c9c2f1361ccbfbd09099a1b2ea5d2b2222c586ab08885cf3445"}, + {file = "ruff-0.5.5-py3-none-win_arm64.whl", hash = "sha256:3191317d967af701f1b73a31ed5788795936e423b7acce82a2b63e26eb3e89d6"}, + {file = "ruff-0.5.5.tar.gz", hash = "sha256:cc5516bdb4858d972fbc31d246bdb390eab8df1a26e2353be2dbc0c2d7f5421a"}, ] [[package]] @@ -1966,6 +2192,8 @@ version = "0.15.0" description = "scp module for paramiko" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "scp-0.15.0-py2.py3-none-any.whl", hash = "sha256:9e7f721e5ac563c33eb0831d0f949c6342f1c28c3bdc3b02f39d77b5ea20df7e"}, {file = "scp-0.15.0.tar.gz", hash = "sha256:f1b22e9932123ccf17eebf19e0953c6e9148f589f93d91b872941a696305c83f"}, @@ -1980,19 +2208,21 @@ version = "75.3.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "setuptools-75.3.2-py3-none-any.whl", hash = "sha256:90ab613b6583fc02d5369cbca13ea26ea0e182d1df2d943ee9cbe81d4c61add9"}, {file = "setuptools-75.3.2.tar.gz", hash = "sha256:3c1383e1038b68556a382c1e8ded8887cd20141b0eb5708a6c8d277de49364f5"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.5.2) ; sys_platform != \"cygwin\""] +core = ["importlib-metadata (>=6) ; python_version < \"3.10\"", "importlib-resources (>=5.10.2) ; python_version < \"3.9\"", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "ruff (<=0.7.1)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.12.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "ruff (<=0.7.1)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.12.*)", "pytest-mypy"] [[package]] name = "six" @@ -2000,28 +2230,86 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "docs"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] +markers = {main = "extra == \"optionals\""} [[package]] -name = "snowballstemmer" -version = "3.0.1" -description = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." +name = "super-collections" +version = "0.6.2" +description = "file: README.md" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*" +python-versions = ">=3.8" +groups = ["docs"] files = [ - {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"}, - {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"}, + {file = "super_collections-0.6.2-py3-none-any.whl", hash = "sha256:291b74d26299e9051d69ad9d89e61b07b6646f86a57a2f5ab3063d206eee9c56"}, + {file = "super_collections-0.6.2.tar.gz", hash = "sha256:0c8d8abacd9fad2c7c1c715f036c29f5db213f8cac65f24d45ecba12b4da187a"}, ] +[package.dependencies] +hjson = "*" + +[package.extras] +test = ["pytest (>=7.0)", "pyyaml", "rich"] + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +groups = ["docs"] +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "termcolor" +version = "3.1.0" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version < \"3.11\"" +files = [ + {file = "termcolor-3.1.0-py3-none-any.whl", hash = "sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa"}, + {file = "termcolor-3.1.0.tar.gz", hash = "sha256:6a6dd7fbee581909eeec6a756cff1d7f7c376063b14e4a298dc4980309e55970"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "termcolor" +version = "3.2.0" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.10" +groups = ["docs"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "termcolor-3.2.0-py3-none-any.whl", hash = "sha256:a10343879eba4da819353c55cb8049b0933890c2ebf9ad5d3ecd2bb32ea96ea6"}, + {file = "termcolor-3.2.0.tar.gz", hash = "sha256:610e6456feec42c4bcd28934a8c87a06c3fa28b01561d46aa09a9881b8622c58"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + [[package]] name = "textfsm" version = "1.1.3" description = "Python module for parsing semi-structured text into python tables." optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "textfsm-1.1.3-py2.py3-none-any.whl", hash = "sha256:dcbeebc6a6137bed561c71a56344d752e6dbc04ae5ea309252cb70fb97ccc9cd"}, {file = "textfsm-1.1.3.tar.gz", hash = "sha256:577ef278a9237f5341ae9b682947cefa4a2c1b24dbe486f94f2c95addc6504b5"}, @@ -2037,6 +2325,7 @@ version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["dev"] files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -2048,6 +2337,8 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -2089,6 +2380,7 @@ version = "0.13.3" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0"}, {file = "tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1"}, @@ -2100,6 +2392,7 @@ version = "24.8.0" description = "Building newsfiles for your project." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "towncrier-24.8.0-py3-none-any.whl", hash = "sha256:9343209592b839209cdf28c339ba45792fbfe9775b5f9c177462fd693e127d8d"}, {file = "towncrier-24.8.0.tar.gz", hash = "sha256:013423ee7eed102b2f393c287d22d95f66f1a3ea10a4baa82d298001a7f18af3"}, @@ -2121,6 +2414,8 @@ version = "0.9.3" description = "A lightweight, object-oriented Python state machine implementation with many extensions." optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "transitions-0.9.3-py2.py3-none-any.whl", hash = "sha256:02463248f2b668d86f66636b1e3c9e8de84d93e22915247f4e1aa9ee1cae28aa"}, {file = "transitions-0.9.3.tar.gz", hash = "sha256:881fb75bb1654ed55d86060bb067f2c716f8e155f57bb73fd444e53713aafec8"}, @@ -2139,14 +2434,16 @@ version = "0.9.5" description = "Template Text Parser" optional = true python-versions = ">=2.7,<4.0" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "ttp-0.9.5-py2.py3-none-any.whl", hash = "sha256:2c9fcf560b3f696e9fdd3554dc8e4622cbb10cac1d4fca13a7cf608c4a7fd137"}, {file = "ttp-0.9.5.tar.gz", hash = "sha256:234414f4d3039d2d1cde09993f89f8db1b34d447f76c6a402555cefac2e59c4e"}, ] [package.extras] -docs = ["Sphinx (==4.3.0)", "readthedocs-sphinx-search (==0.1.1)", "sphinx_rtd_theme (==1.0.0)", "sphinxcontrib-applehelp (==1.0.1)", "sphinxcontrib-devhelp (==1.0.1)", "sphinxcontrib-htmlhelp (==2.0.0)", "sphinxcontrib-jsmath (==1.0.1)", "sphinxcontrib-napoleon (==0.7)", "sphinxcontrib-qthelp (==1.0.2)", "sphinxcontrib-serializinghtml (==1.1.5)", "sphinxcontrib-spelling (==7.2.1)"] -full = ["cerberus (>=1.3.0,<1.4.0)", "deepdiff (>=5.8.0,<5.9.0)", "jinja2 (>=3.0.0,<3.1.0)", "n2g (>=0.2.0,<0.3.0)", "openpyxl (>=3.0.0,<3.1.0)", "pyyaml (==6.0)", "tabulate (>=0.8.0,<0.9.0)", "ttp_templates (<1.0.0)", "yangson (>=1.4.0,<1.5.0)"] +docs = ["Sphinx (==4.3.0) ; python_version >= \"3.7\"", "readthedocs-sphinx-search (==0.1.1) ; python_version >= \"3.7\"", "sphinx_rtd_theme (==1.0.0) ; python_version >= \"3.7\"", "sphinxcontrib-applehelp (==1.0.1) ; python_version >= \"3.7\"", "sphinxcontrib-devhelp (==1.0.1) ; python_version >= \"3.7\"", "sphinxcontrib-htmlhelp (==2.0.0) ; python_version >= \"3.7\"", "sphinxcontrib-jsmath (==1.0.1) ; python_version >= \"3.7\"", "sphinxcontrib-napoleon (==0.7) ; python_version >= \"3.7\"", "sphinxcontrib-qthelp (==1.0.2) ; python_version >= \"3.7\"", "sphinxcontrib-serializinghtml (==1.1.5) ; python_version >= \"3.7\"", "sphinxcontrib-spelling (==7.2.1) ; python_version >= \"3.7\""] +full = ["cerberus (>=1.3.0,<1.4.0) ; python_version >= \"3.7\"", "deepdiff (>=5.8.0,<5.9.0) ; python_version >= \"3.7\"", "jinja2 (>=3.0.0,<3.1.0) ; python_version >= \"3.7\"", "n2g (>=0.2.0,<0.3.0) ; python_version >= \"3.7\"", "openpyxl (>=3.0.0,<3.1.0) ; python_version >= \"3.7\"", "pyyaml (==6.0) ; python_version >= \"3.7\"", "tabulate (>=0.8.0,<0.9.0) ; python_version >= \"3.7\"", "ttp_templates (<1.0.0) ; python_version >= \"3.7\"", "yangson (>=1.4.0,<1.5.0) ; python_version >= \"3.7\""] [[package]] name = "ttp-templates" @@ -2154,6 +2451,8 @@ version = "0.3.7" description = "Template Text Parser Templates collections" optional = true python-versions = "<4.0,>=3.6" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "ttp_templates-0.3.7-py3-none-any.whl", hash = "sha256:2328304fb4c957ee60db6f301143e8a4556b22a12b3e2f30511e8ef97fc78f7e"}, {file = "ttp_templates-0.3.7.tar.gz", hash = "sha256:f9103041a3683a0cb3811609ad990f679beadfc9a92c3e3fa05d6037414ad2bf"}, @@ -2163,7 +2462,7 @@ files = [ ttp = ">=0.6.0" [package.extras] -docs = ["mkdocs (==1.2.4)", "mkdocs-material (==7.2.2)", "mkdocs-material-extensions (==1.0.1)", "mkdocstrings[python] (>=0.18.0,<0.19.0)", "pygments (==2.11)", "pymdown-extensions (==9.3)"] +docs = ["mkdocs (==1.2.4) ; python_version >= \"3.7\"", "mkdocs-material (==7.2.2) ; python_version >= \"3.7\"", "mkdocs-material-extensions (==1.0.1) ; python_version >= \"3.7\"", "mkdocstrings[python] (>=0.18.0,<0.19.0) ; python_version >= \"3.7\"", "pygments (==2.11) ; python_version >= \"3.7\"", "pymdown-extensions (==9.3) ; python_version >= \"3.7\""] [[package]] name = "typing-extensions" @@ -2171,10 +2470,12 @@ version = "4.13.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, ] +markers = {main = "extra == \"optionals\"", docs = "python_version == \"3.9\""} [[package]] name = "urllib3" @@ -2182,13 +2483,15 @@ version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" +groups = ["main", "docs"] files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] +markers = {main = "extra == \"optionals\""} [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -2199,6 +2502,7 @@ version = "4.0.2" description = "Filesystem events monitoring" optional = false python-versions = ">=3.8" +groups = ["docs"] files = [ {file = "watchdog-4.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ede7f010f2239b97cc79e6cb3c249e72962404ae3865860855d5cbe708b0fd22"}, {file = "watchdog-4.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a2cffa171445b0efa0726c561eca9a27d00a1f2b83846dbd5a4f639c4f8ca8e1"}, @@ -2240,26 +2544,13 @@ files = [ [package.extras] watchmedo = ["PyYAML (>=3.10)"] -[[package]] -name = "wheel" -version = "0.45.1" -description = "A built-package format for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248"}, - {file = "wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729"}, -] - -[package.extras] -test = ["pytest (>=6.0.0)", "setuptools (>=65)"] - [[package]] name = "yamllint" version = "1.35.1" description = "A linter for YAML files." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "yamllint-1.35.1-py3-none-any.whl", hash = "sha256:2e16e504bb129ff515b37823b472750b36b6de07963bd74b307341ef5ad8bdc3"}, {file = "yamllint-1.35.1.tar.gz", hash = "sha256:7a003809f88324fd2c877734f2d575ee7881dd9043360657cc8049c809eba6cd"}, @@ -2278,6 +2569,8 @@ version = "0.4.2" description = "YAML loader and dumper for PyYAML allowing to keep keys order." optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"optionals\"" files = [ {file = "yamlordereddictloader-0.4.2-py3-none-any.whl", hash = "sha256:dc048adb67026786cd24119bd71241f35bc8b0fd37d24b415c37bbc8049f9cd7"}, {file = "yamlordereddictloader-0.4.2.tar.gz", hash = "sha256:36af2f6210fcff5da4fc4c12e1d815f973dceb41044e795e1f06115d634bca13"}, @@ -2292,23 +2585,25 @@ version = "3.20.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" +groups = ["dev", "docs"] +markers = "python_version == \"3.9\"" files = [ {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [extras] optionals = ["jsonschema", "legacycrypt", "napalm"] [metadata] -lock-version = "2.0" -python-versions = "^3.8" -content-hash = "7c1825da1196104d2750470d4b1483b4f0c62b588c73be27eacde1791356f5e7" +lock-version = "2.1" +python-versions = ">=3.9,<3.14" +content-hash = "10ef70aa9d370afe0aacccb79db57c48e45846c8475923eae719e5db733e5f1c" diff --git a/pyproject.toml b/pyproject.toml index a00c35e4..1a435e0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "netutils" -version = "1.15.1" +version = "1.15.2" description = "Common helper functions useful in network automation." authors = ["Network to Code, LLC "] license = "Apache-2.0" @@ -26,7 +26,7 @@ include = [ ] [tool.poetry.dependencies] -python = "^3.8" +python = ">=3.9,<3.14" napalm = {version = "^4.0.0", optional = true} jsonschema = {version = "^4.17.3", optional = true} legacycrypt = {version = "0.3", optional = true} @@ -37,26 +37,41 @@ optionals = ["jsonschema", "napalm", "legacycrypt"] [tool.poetry.group.dev.dependencies] coverage = "*" invoke = "*" -pylint = "^3.1.0" pytest = "*" -pyyaml = "*" -pydocstyle = "*" -toml = "*" -yamllint = "*" +mock = "*" mypy = "*" -towncrier = "^24.8.0" -ruff = "*" +pyyaml = "^6.0.1" +pylint = "*" +yamllint = "*" +toml = "^0.10.2" +attrs = "^23.2.0" +towncrier = ">=23.6.0,<=24.8.0" +ruff = "0.5.5" Markdown = "*" + +[tool.poetry.group.docs.dependencies] +# Rendering docs to HTML +mkdocs = "1.6.1" +# Embedding YAML files into Markdown documents as tables +markdown-data-tables = "1.0.0" # Render custom markdown for version added/changed/remove notes markdown-version-annotations = "1.0.1" -# Rendering docs to HTML -mkdocs = "1.6.0" -# Material for MkDocs theme -mkdocs-material = "9.5.32" +# Automatically generate some files as part of mkdocs build +mkdocs-gen-files = "0.5.0" +# Image lightboxing in mkdocs +mkdocs-glightbox = "0.4.0" +# Use Jinja2 templating in docs - see settings.md +mkdocs-macros-plugin = "1.3.7" +# Material for mkdocs theme +mkdocs-material = "9.6.15" +# Handle docs redirections +mkdocs-redirects = "1.2.2" +# Automatically handle index pages for docs sections +mkdocs-section-index = "0.3.10" # Automatic documentation from sources, for MkDocs -mkdocstrings = "0.25.2" -mkdocstrings-python = "1.10.8" -mkdocs-autorefs = "1.2.0" +mkdocstrings = "0.27.0" +# Python-specific extension to mkdocstrings +mkdocstrings-python = "1.13.0" griffe = "1.1.1" mkdocs-python-classy = "0.1.3" @@ -99,6 +114,9 @@ convention = "google" "S" ] +[tool.pylint.master] +ignore=[".venv", "tests"] + [tool.pylint.basic] # No docstrings required for private methods (Pylint default), or for test_ functions, or for inner Meta classes. no-docstring-rgx="^(_|test_|Meta$)" @@ -120,7 +138,7 @@ notes = """, """ [build-system] -requires = ["poetry-core>=1.0.0"] +requires = ["poetry-core>=2.0.0,<3.0.0"] build-backend = "poetry.core.masonry.api" [tool.pytest.ini_options] @@ -150,6 +168,7 @@ strict_equality = true exclude = ["tests/", "tasks.py"] show_error_codes = true + [tool.towncrier] package = "netutils" directory = "changes" diff --git a/tasks.py b/tasks.py index 87ea81d5..55122783 100644 --- a/tasks.py +++ b/tasks.py @@ -1,5 +1,6 @@ """Tasks for use with Invoke.""" +import os import re from pathlib import Path @@ -10,8 +11,7 @@ def is_truthy(arg): """Convert "truthy" strings into Booleans. - Examples - -------- + Examples: >>> is_truthy('yes') True Args: @@ -30,17 +30,17 @@ def is_truthy(arg): # Use pyinvoke configuration for default values, see http://docs.pyinvoke.org/en/stable/concepts/configuration.html -# Variables may be overwritten in invoke.yml or by the environment variables INVOKE_PYNTC_xxx +# Variables may be overwritten in invoke.yml or by the environment variables INVOKE_NETUTILS_xxx namespace = Collection("netutils") namespace.configure( { "netutils": { "project_name": "netutils", - "python_ver": "3.13", - "local": False, + "python_ver": "3.9", + "local": is_truthy(os.getenv("INVOKE_NETUTILS_LOCAL", "false")), "image_name": "netutils", - "image_ver": "latest", - "pwd": ".", + "image_ver": os.getenv("INVOKE_PARSER_IMAGE_VER", "latest"), + "pwd": Path(__file__).parent, } } ) @@ -98,6 +98,9 @@ def run_command(context, exec_cmd, port=None): return result +# ------------------------------------------------------------------------------ +# BUILD +# ------------------------------------------------------------------------------ @task( help={ "cache": "Whether to use Docker's cache when building images (default enabled)", @@ -122,6 +125,26 @@ def build(context, cache=True, force_rm=False, hide=False): ) +@task +def generate_packages(context): + """Generate all Python packages inside docker and copy the file locally under dist/.""" + command = "poetry build" + run_command(context, command) + + +@task( + help={ + "check": ( + "If enabled, check for outdated dependencies in the poetry.lock file, " + "instead of generating a new one. (default: disabled)" + ) + } +) +def lock(context, check=False): + """Generate poetry.lock inside the library container.""" + run_command(context, f"poetry {'check' if check else 'lock --no-update'}") + + @task def clean(context): """Remove the project specific image.""" @@ -139,11 +162,7 @@ def rebuild(context): @task def coverage(context): - """Run the coverage report against pytest. - - Args: - context (obj): Used to run specific commands - """ + """Run the coverage report against pytest.""" exec_cmd = "coverage run --source=netutils -m pytest" run_command(context, exec_cmd) run_command(context, "coverage report") @@ -152,11 +171,7 @@ def coverage(context): @task def pytest(context): - """Run pytest for the specified name and Python version. - - Args: - context (obj): Used to run specific commands - """ + """Run pytest test cases.""" exec_cmd = "pytest -vv --doctest-modules netutils/ && coverage run --source=netutils -m pytest && coverage report" run_command(context, exec_cmd) @@ -236,7 +251,6 @@ def yamllint(context): Args: context (obj): Used to run specific commands - local (bool): Define as `True` to execute locally """ exec_cmd = "yamllint ." run_command(context, exec_cmd) @@ -253,25 +267,41 @@ def cli(context): context.run(f"{dev}", pty=True) -@task -def tests(context): +@task( + help={ + "lint-only": "Only run linters; unit tests will be excluded. (default: False)", + } +) +def tests(context, lint_only=False): """Run all tests for the specified name and Python version. Args: context (obj): Used to run specific commands + lint_only (bool): If True, only run linters and skip unit tests. """ + # If we are not running locally, start the docker containers so we don't have to for each test + # Sorted loosely from fastest to slowest + print("Running ruff...") ruff(context) - pylint(context) + print("Running yamllint...") yamllint(context) + print("Running mypy...") mypy(context) - pytest(context) - + print("Running poetry check...") + lock(context, check=True) + print("Running pylint...") + pylint(context) + print("Running mkdocs...") + build_and_check_docs(context) + if not lint_only: + print("Running unit tests...") + pytest(context) print("All tests have passed!") @task def build_and_check_docs(context): - """Build documentation to be available within Docs Sites.""" + """Build documentation and test the configuration.""" command = "mkdocs build --no-directory-urls --strict" run_command(context, command) @@ -290,7 +320,7 @@ def build_and_check_docs(context): @task def docs(context): """Build and serve docs locally for development.""" - exec_cmd = "mkdocs serve -v --dev-addr=0.0.0.0:8001" + exec_cmd = "mkdocs serve -v" run_command(context, exec_cmd, port="8001:8001") diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py index 04c2c7e6..c8a87857 100644 --- a/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py +++ b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_received.py @@ -30,7 +30,7 @@ parents=(), ), ConfigLine( - config_line="************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************\n\n^C", + config_line='************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************\n\n"', parents=('set deviceconfig system login-banner "',), ), ConfigLine( diff --git a/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_set_received.py b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_set_received.py index 51516605..3f51be37 100644 --- a/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_set_received.py +++ b/tests/unit/mock/config/parser/base/paloalto_panos/panos_basic_set_received.py @@ -30,7 +30,7 @@ parents=(), ), ConfigLine( - config_line="************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************^C", + config_line='************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************"', parents=('set deviceconfig system login-banner "',), ), ConfigLine( diff --git a/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py b/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py index 4cf8a408..71a1adb5 100644 --- a/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py +++ b/tests/unit/mock/config/parser/base/paloalto_panos/panos_full_received.py @@ -272,7 +272,7 @@ ConfigLine(config_line="set deviceconfig system hostname firewall1", parents=()), ConfigLine(config_line='set deviceconfig system login-banner "', parents=()), ConfigLine( - config_line="************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************\n\n^C", + config_line='************************************************************************\n* firewall1.example.com * [PROD VM500 firewalls]\n************************************************************************\n* WARNING *\n* Unauthorized access to this device or devices attached to *\n* or accessible from this network is strictly prohibited. *\n* Possession of passwords or devices enabling access to this *\n* device or devices does not constitute authorization. Unauthorized *\n* access will be prosecuted to the fullest extent of the law. *\n* *\n************************************************************************\n\n"', parents=('set deviceconfig system login-banner "',), ), ConfigLine( diff --git a/tests/unit/test_basics.py b/tests/unit/test_basics.py index 796f0122..99d07ac7 100644 --- a/tests/unit/test_basics.py +++ b/tests/unit/test_basics.py @@ -1,24 +1,29 @@ """Basic tests that do not require netutils.""" import os +import re import unittest import toml -class TestDocsPackaging(unittest.TestCase): - """Test Version in doc requirements is the same pyproject.""" +class TestDocsReleaseNotes(unittest.TestCase): + """Test that mkdocs has the release notes for the current version.""" - def test_version(self): - """Verify that pyproject.toml dev dependencies have the same versions as in the docs requirements.txt.""" + def test_version_file_found(self): + """Verify that if the current version has no letters, which would see in alpha or beta has an associated release note file.""" parent_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) poetry_path = os.path.join(parent_path, "pyproject.toml") - poetry_details = toml.load(poetry_path)["tool"]["poetry"]["group"]["dev"]["dependencies"] - with open(f"{parent_path}/docs/requirements.txt", "r", encoding="utf-8") as file: - requirements = [line for line in file.read().splitlines() if (len(line) > 0 and not line.startswith("#"))] - for pkg in requirements: - if len(pkg.split("==")) == 2: - pkg, version = pkg.split("==") - else: - version = "*" - self.assertEqual(poetry_details[pkg], version) + project_version = toml.load(poetry_path)["tool"]["poetry"]["version"] + + docs_path = os.path.join(parent_path, "docs") + release_notes_files = [file for file in os.listdir(f"{docs_path}/admin/release_notes/") if file.endswith(".md")] + version_pattern = re.compile(r"^(\d+)\.(\d+)\.\d+$") + + match = version_pattern.match(project_version) + # If there is no match, then it is likely an alpha or beta version and we can skip this test. + if match: + major, minor = match.groups() + version_str = f"version_{major}.{minor}.md" + if version_str not in release_notes_files: + self.fail(f"Release note file for version {version_str} not found in release notes folder.") diff --git a/tests/unit/test_password.py b/tests/unit/test_password.py index 9db1895f..bd373fab 100644 --- a/tests/unit/test_password.py +++ b/tests/unit/test_password.py @@ -86,6 +86,10 @@ "sent": {"unencrypted_password": "cisco", "salt": 10}, "received": "104D000A0618", }, + { + "sent": {"unencrypted_password": "cisco", "salt": 0}, + "received": "00071A150754", + }, ] ENCRYPT_CISCO_TYPE9 = [