Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pingparsing for openSUSE:Factory checked in at 2021-10-26 20:13:46 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pingparsing (Old) and /work/SRC/openSUSE:Factory/.python-pingparsing.new.1890 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pingparsing" Tue Oct 26 20:13:46 2021 rev:11 rq:927365 version:1.4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pingparsing/python-pingparsing.changes 2021-05-18 18:27:11.474767686 +0200 +++ /work/SRC/openSUSE:Factory/.python-pingparsing.new.1890/python-pingparsing.changes 2021-10-26 20:14:27.630034108 +0200 @@ -1,0 +2,13 @@ +Mon Oct 25 19:39:25 UTC 2021 - Martin Hauke <[email protected]> + +- Update to version 1.4.0 + * Drop support for Python 3.5 + * Add support for pyparsing v3 + +------------------------------------------------------------------- +Sat Jun 5 13:12:50 UTC 2021 - Martin Hauke <[email protected]> + +- Update to version 1.3.2 + * Fix parsing when ping results with pipe field. + +------------------------------------------------------------------- Old: ---- pingparsing-1.3.1.tar.gz New: ---- pingparsing-1.4.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pingparsing.spec ++++++ --- /var/tmp/diff_new_pack.enVS8a/_old 2021-10-26 20:14:28.114034363 +0200 +++ /var/tmp/diff_new_pack.enVS8a/_new 2021-10-26 20:14:28.118034366 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-pingparsing -Version: 1.3.1 +Version: 1.4.0 Release: 0 Summary: CLI-tool/Python-library for parsing ping command output License: MIT ++++++ pingparsing-1.3.1.tar.gz -> pingparsing-1.4.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/.github/workflows/codeql-analysis.yml new/pingparsing-1.4.0/.github/workflows/codeql-analysis.yml --- old/pingparsing-1.3.1/.github/workflows/codeql-analysis.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/pingparsing-1.4.0/.github/workflows/codeql-analysis.yml 2021-10-24 17:08:57.000000000 +0200 @@ -0,0 +1,36 @@ +name: "CodeQL" + +on: + push: + branches: [ master ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ master ] + schedule: + - cron: '24 8 * * 6' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'python' ] + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/.github/workflows/lint_and_test.yml new/pingparsing-1.4.0/.github/workflows/lint_and_test.yml --- old/pingparsing-1.3.1/.github/workflows/lint_and_test.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/pingparsing-1.4.0/.github/workflows/lint_and_test.yml 2021-10-24 17:08:57.000000000 +0200 @@ -0,0 +1,97 @@ +name: Lint and Test + +on: [push, pull_request] + +jobs: + lint: + runs-on: ${{ matrix.os }} + strategy: + matrix: + python-version: ['3.8'] + os: [ubuntu-latest] + timeout-minutes: 20 + + steps: + - uses: actions/checkout@v2 + + - name: Setup Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install pip + run: python -m pip install --upgrade --disable-pip-version-check "pip>=21.1" + + - name: Get pip cache dir + id: pip-cache + run: echo "::set-output name=dir::$(pip cache dir)" + + - name: Cache pip + id: cache-pip + uses: actions/cache@v2 + with: + path: | + ${{ steps.pip-cache.outputs.dir }} + ./.tox + key: ${{ matrix.os }}-${{ matrix.python-version }}-pip-${{ hashFiles('**/requirements.txt') }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.python-version }}-pip- + + - name: Install dependencies + run: make setup-ci + + - name: Lint + run: make check + + unit-test: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10", pypy3] + os: [ubuntu-latest, macos-latest, windows-latest] + exclude: + - os: windows-latest + python-version: "3.6" + timeout-minutes: 20 + + steps: + - uses: actions/checkout@v2 + + - name: Setup Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install pip + run: python -m pip install --upgrade --disable-pip-version-check "pip>=21.1" + + - name: Get pip cache dir + id: pip-cache + run: echo "::set-output name=dir::$(pip cache dir)" + + - name: Cache pip + uses: actions/cache@v2 + with: + path: | + ${{ steps.pip-cache.outputs.dir }} + ./.tox + key: ${{ matrix.os }}-${{ matrix.python-version }}-pip-${{ hashFiles('**/requirements.txt') }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.python-version }}-pip- + + - name: Install dependencies + run: make setup-ci + + - name: Run tox + run: tox -e cov -- --discord-verbose=0 + env: + PYTEST_DISCORD_WEBHOOK: ${{ secrets.PYTEST_DISCORD_WEBHOOK }} + + - name: Upload coverage report + run: | + python -m pip install --upgrade --disable-pip-version-check coveralls + coveralls --service=github + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.8' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/.github/workflows/tests.yml new/pingparsing-1.4.0/.github/workflows/tests.yml --- old/pingparsing-1.3.1/.github/workflows/tests.yml 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/.github/workflows/tests.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,52 +0,0 @@ -name: Tests - -on: [push, pull_request] - -jobs: - build: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - python-version: [3.5, 3.6, 3.7, 3.8, 3.9, 3.10.0-beta.1, pypy3] - os: [ubuntu-latest, macos-latest, windows-latest] - - steps: - - uses: actions/checkout@v2 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - - name: Get pip cache dir - id: pip-cache - run: | - python -m pip install --upgrade "pip>=20.1" - echo "::set-output name=dir::$(pip cache dir)" - - - name: Cache pip - uses: actions/cache@v2 - with: - path: ${{ steps.pip-cache.outputs.dir }} - key: ${{ matrix.os }}-${{ matrix.python-version }}-pip-${{ hashFiles('**/requirements.txt') }} - restore-keys: | - ${{ matrix.os }}-${{ matrix.python-version }}-pip- - - - name: Install dependencies - run: | - python -m pip install --upgrade tox - - - name: Run tox - run: | - tox -e cov -- --discord-verbose=0 - env: - PYTEST_DISCORD_WEBHOOK: ${{ secrets.PYTEST_DISCORD_WEBHOOK }} - - - name: Coverage report - run: | - python -m pip install --upgrade coveralls - coveralls --service=github - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.8' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/Makefile new/pingparsing-1.4.0/Makefile --- old/pingparsing-1.3.1/Makefile 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/Makefile 2021-10-24 17:08:57.000000000 +0200 @@ -1,24 +1,37 @@ +AUTHOR := thombashi +PACKAGE := pingparsing +BUILD_WORK_DIR := _work +PKG_BUILD_DIR := $(BUILD_WORK_DIR)/$(PACKAGE) PYTHON := python3 .PHONY: build -build: - @make clean - @tox -e build +build: clean + @$(PYTHON) -m tox -e build ls -lh dist/* +.PHONY: build-remote +build-remote: clean + @mkdir -p $(BUILD_WORK_DIR) + @cd $(BUILD_WORK_DIR) && \ + git clone https://github.com/$(AUTHOR)/$(PACKAGE).git --depth 1 && \ + cd $(PACKAGE) && \ + $(PYTHON) -m tox -e build + ls -lh $(PKG_BUILD_DIR)/dist/* + .PHONY: check check: - @-tox -e lint + @$(PYTHON) -m tox -e lint .PHONY: clean clean: - @tox -e clean + @rm -rf $(BUILD_WORK_DIR) + @$(PYTHON) -m tox -e clean .PHONY: docs docs: @cd docs && ./update_command_help.py - @tox -e docs + @$(PYTHON) -m tox -e docs .PHONY: idocs idocs: @@ -27,19 +40,23 @@ .PHONY: fmt fmt: - @tox -e fmt + @$(PYTHON) -m tox -e fmt .PHONY: readme readme: @cd docs && ./update_command_help.py - @tox -e readme + @$(PYTHON) -m tox -e readme .PHONY: release release: - @$(PYTHON) setup.py release --sign --search-dir pingparsing + @cd $(PKG_BUILD_DIR) && $(PYTHON) setup.py release --sign --search-dir $(PACKAGE) @make clean +.PHONY: setup-ci +setup-ci: + @$(PYTHON) -m pip install -q --disable-pip-version-check --upgrade tox + .PHONY: setup -setup: - @$(PYTHON) -m pip install -q --disable-pip-version-check --upgrade -e .[test] releasecmd tox +setup: setup-ci + @$(PYTHON) -m pip install -q --disable-pip-version-check --upgrade -e .[test] releasecmd @$(PYTHON) -m pip check diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/README.rst new/pingparsing-1.4.0/README.rst --- old/pingparsing-1.3.1/README.rst 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/README.rst 2021-10-24 17:08:57.000000000 +0200 @@ -22,9 +22,9 @@ :target: https://github.com/thombashi/pingparsing/actions?query=workflow%3ATests :alt: Linux/macOS/Windows CI status -.. image:: https://img.shields.io/github/stars/thombashi/pingparsing.svg?style=social&label=Star - :target: https://github.com/thombashi/pingparsing - :alt: GitHub stars +.. image:: https://github.com/thombashi/pingparsing/actions/workflows/codeql-analysis.yml/badge.svg + :target: https://github.com/thombashi/pingparsing/actions/workflows/codeql-analysis.yml + :alt: CodeQL CLI Usage ==================== @@ -485,7 +485,7 @@ Dependencies ============ -- Python 3.5+ +- Python 3.6+ - `Python package dependencies (automatically installed) <https://github.com/thombashi/pingparsing/network/dependencies>`__ Optional Dependencies diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/docs/make_readme.py new/pingparsing-1.4.0/docs/make_readme.py --- old/pingparsing-1.3.1/docs/make_readme.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/docs/make_readme.py 2021-10-24 17:08:57.000000000 +0200 @@ -29,7 +29,7 @@ PROJECT_NAME, OUTPUT_DIR, is_make_toc=True, - project_url="https://github.com/thombashi/{}".format(PROJECT_NAME), + project_url=f"https://github.com/thombashi/{PROJECT_NAME}", ) maker.examples_dir_name = "usage" @@ -45,7 +45,7 @@ maker.set_indent_level(0) maker.write_chapter("Documentation") - maker.write_lines(["https://{:s}.rtfd.io/".format(PROJECT_NAME)]) + maker.write_lines([f"https://{PROJECT_NAME:s}.rtfd.io/"]) maker.write_file(maker.doc_page_root_dir_path.joinpath("sponsors.rst")) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/docs/pages/introduction/badges.txt new/pingparsing-1.4.0/docs/pages/introduction/badges.txt --- old/pingparsing-1.3.1/docs/pages/introduction/badges.txt 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/docs/pages/introduction/badges.txt 2021-10-24 17:08:57.000000000 +0200 @@ -14,6 +14,6 @@ :target: https://github.com/thombashi/pingparsing/actions?query=workflow%3ATests :alt: Linux/macOS/Windows CI status -.. image:: https://img.shields.io/github/stars/thombashi/pingparsing.svg?style=social&label=Star - :target: https://github.com/thombashi/pingparsing - :alt: GitHub stars +.. image:: https://github.com/thombashi/pingparsing/actions/workflows/codeql-analysis.yml/badge.svg + :target: https://github.com/thombashi/pingparsing/actions/workflows/codeql-analysis.yml + :alt: CodeQL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/docs/pages/introduction/installation.rst new/pingparsing-1.4.0/docs/pages/introduction/installation.rst --- old/pingparsing-1.3.1/docs/pages/introduction/installation.rst 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/docs/pages/introduction/installation.rst 2021-10-24 17:08:57.000000000 +0200 @@ -7,7 +7,7 @@ Dependencies ============ -- Python 3.5+ +- Python 3.6+ - `Python package dependencies (automatically installed) <https://github.com/thombashi/pingparsing/network/dependencies>`__ Optional Dependencies diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/examples/examplecommon.py new/pingparsing-1.4.0/examples/examplecommon.py --- old/pingparsing-1.3.1/examples/examplecommon.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/examples/examplecommon.py 2021-10-24 17:08:57.000000000 +0200 @@ -9,22 +9,22 @@ def print_ping_parser(ping_parser): print("# properties ---") - print("packet_transmit: {:d} packets".format(ping_parser.packet_transmit)) - print("packet_receive: {:d} packets".format(ping_parser.packet_receive)) - print("packet_loss_rate: {:.1f} %".format(ping_parser.packet_loss_rate)) - print("packet_loss_count: {:d} packets".format(ping_parser.packet_loss_count)) + print(f"packet_transmit: {ping_parser.packet_transmit:d} packets") + print(f"packet_receive: {ping_parser.packet_receive:d} packets") + print(f"packet_loss_rate: {ping_parser.packet_loss_rate:.1f} %") + print(f"packet_loss_count: {ping_parser.packet_loss_count:d} packets") if ping_parser.packet_duplicate_rate: - packet_duplicate_rate = "{:.1f} %".format(ping_parser.packet_duplicate_rate) + packet_duplicate_rate = f"{ping_parser.packet_duplicate_rate:.1f} %" else: packet_duplicate_rate = "NaN" - print("packet_duplicate_rate: {:s}".format(packet_duplicate_rate)) + print(f"packet_duplicate_rate: {packet_duplicate_rate:s}") if ping_parser.packet_duplicate_count: - packet_duplicate_count = "{:d} packets".format(ping_parser.packet_duplicate_count) + packet_duplicate_count = f"{ping_parser.packet_duplicate_count:d} packets" else: packet_duplicate_count = "NaN" - print("packet_duplicate_count: {:s}".format(packet_duplicate_count)) + print(f"packet_duplicate_count: {packet_duplicate_count:s}") print("rtt_min:", ping_parser.rtt_min) print("rtt_avg:", ping_parser.rtt_avg) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/pingparsing/__main__.py new/pingparsing-1.4.0/pingparsing/__main__.py --- old/pingparsing-1.3.1/pingparsing/__main__.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/pingparsing/__main__.py 2021-10-24 17:08:57.000000000 +0200 @@ -60,9 +60,7 @@ """ ), ) - parser.add_argument( - "-V", "--version", action="version", version="%(prog)s {}".format(__version__) - ) + parser.add_argument("-V", "--version", action="version", version=f"%(prog)s {__version__}") use_stdin, found_stdin_specifier = is_use_stdin() if not use_stdin or found_stdin_specifier: @@ -321,7 +319,7 @@ if isinstance(obj, TIMESTAMP_TYPES): return obj - raise TypeError("not supported type to convert: {}".format(type(obj))) + raise TypeError(f"not supported type to convert: {type(obj)}") def _serialize_datetime(obj): @@ -331,7 +329,7 @@ if isinstance(obj, TIMESTAMP_TYPES): return obj - raise TypeError("not supported type to convert: {}".format(type(obj))) + raise TypeError(f"not supported type to convert: {type(obj)}") timestamp_serialize_map = { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/pingparsing/__version__.py new/pingparsing-1.4.0/pingparsing/__version__.py --- old/pingparsing-1.3.1/pingparsing/__version__.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/pingparsing/__version__.py 2021-10-24 17:08:57.000000000 +0200 @@ -1,6 +1,6 @@ __author__ = "Tsuyoshi Hombashi" -__copyright__ = "Copyright 2016, {}".format(__author__) +__copyright__ = f"Copyright 2016, {__author__}" __license__ = "MIT License" -__version__ = "1.3.1" +__version__ = "1.4.0" __maintainer__ = __author__ __email__ = "[email protected]" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/pingparsing/_cmd_maker.py new/pingparsing-1.4.0/pingparsing/_cmd_maker.py --- old/pingparsing-1.3.1/pingparsing/_cmd_maker.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/pingparsing/_cmd_maker.py 2021-10-24 17:08:57.000000000 +0200 @@ -209,7 +209,7 @@ def _get_destination_host(self, destination: str) -> str: if self._is_ipv6: - return "{:s}%{}".format(destination, self.interface) + return f"{destination:s}%{self.interface}" return destination diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/pingparsing/_parser.py new/pingparsing-1.4.0/pingparsing/_parser.py --- old/pingparsing-1.3.1/pingparsing/_parser.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/pingparsing/_parser.py 2021-10-24 17:08:57.000000000 +0200 @@ -32,14 +32,14 @@ class PingParser(PingParserInterface): - _BYTES_PATTERN = r"\s*(?P<{key}>[0-9]+) bytes".format(key=IcmpReplyKey.BYTES) + _BYTES_PATTERN = fr"\s*(?P<{IcmpReplyKey.BYTES}>[0-9]+) bytes" _DEST_PATTERN = r"(?P<{key}>[a-zA-Z0-9:\-\.\(\)% ]+)".format( key=IcmpReplyKey.DESTINATION ) # host or ipv4/ipv6 addr _IPADDR_PATTERN = r"(\d{1,3}\.){3}\d{1,3}" - _ICMP_SEQ_PATTERN = r"\s*icmp_seq=(?P<{key}>\d+)".format(key=IcmpReplyKey.SEQUENCE_NO) - _TTL_PATTERN = r"\s*ttl=(?P<{key}>\d+)".format(key=IcmpReplyKey.TTL) - _TIME_PATTERN = r"\s*time[=<](?P<{key}>[0-9\.]+)".format(key=IcmpReplyKey.TIME) + _ICMP_SEQ_PATTERN = fr"\s*icmp_seq=(?P<{IcmpReplyKey.SEQUENCE_NO}>\d+)" + _TTL_PATTERN = fr"\s*ttl=(?P<{IcmpReplyKey.TTL}>\d+)" + _TIME_PATTERN = fr"\s*time[=<](?P<{IcmpReplyKey.TIME}>[0-9\.]+)" def __init__(self, timezone: Optional[tzinfo] = None) -> None: self.__timezone = timezone @@ -82,7 +82,7 @@ continue results = match.groupdict() - reply = {} # type: Dict[str, Union[str, bool, float, int, datetime]] + reply: Dict[str, Union[str, bool, float, int, datetime]] = {} if IcmpReplyKey.DESTINATION in results: reply[IcmpReplyKey.DESTINATION] = results[IcmpReplyKey.DESTINATION] @@ -118,7 +118,7 @@ return icmp_reply_list def _preprocess_parse_stats(self, lines: Sequence[str]) -> Tuple[str, str, Sequence[str]]: - logger.debug("parsing as {:s} ping result format".format(self._parser_name)) + logger.debug(f"parsing as {self._parser_name:s} ping result format") stats_headline_idx = self.__find_stats_headline_idx( lines, re.compile(self._stats_headline_pattern) @@ -202,8 +202,8 @@ def _parser_name(self) -> str: return "Linux" - _TIMESTAMP_PATTERN = r"(?P<{key}>\[[0-9\.]+\])".format(key=IcmpReplyKey.TIMESTAMP) - _NO_ANS_TIMESTAMP_PATTERN = r"(?P<{key}>\[[0-9\.]+\])".format(key=IcmpReplyKey.TIMESTAMP_NO_ANS) + _TIMESTAMP_PATTERN = fr"(?P<{IcmpReplyKey.TIMESTAMP}>\[[0-9\.]+\])" + _NO_ANS_TIMESTAMP_PATTERN = fr"(?P<{IcmpReplyKey.TIMESTAMP_NO_ANS}>\[[0-9\.]+\])" @property def _icmp_no_ans_pattern(self) -> str: @@ -225,7 +225,7 @@ @property def _stats_headline_pattern(self) -> str: - return r"--- {} ping statistics ---".format(self._DEST_PATTERN) + return fr"--- {self._DEST_PATTERN} ping statistics ---" @property def _is_support_packet_duplicate(self) -> bool: @@ -276,7 +276,19 @@ + pp.Word(pp.nums + ".") + pp.Word(pp.nums + "ms") ) - parse_list = rtt_pattern.parseString(_to_unicode(rtt_line)) + try: + parse_list = rtt_pattern.parseString(_to_unicode(rtt_line)) + except pp.ParseException: + if not re.search(r"\s*pipe \d+", rtt_line): + raise ValueError + + return PingStats( + destination=destination, + packet_transmit=packet_transmit, + packet_receive=packet_receive, + duplicates=duplicates, + icmp_replies=icmp_replies, + ) return PingStats( destination=destination, @@ -301,7 +313,7 @@ return ( " from " + self._DEST_PATTERN - + r":\s*bytes=(?P<{key}>[0-9]+)".format(key=IcmpReplyKey.BYTES) + + fr":\s*bytes=(?P<{IcmpReplyKey.BYTES}>[0-9]+)" + self._TIME_PATTERN + "ms" + self._TTL_PATTERN @@ -309,7 +321,7 @@ @property def _stats_headline_pattern(self) -> str: - return r"^Ping statistics for {}".format(self._DEST_PATTERN) + return fr"^Ping statistics for {self._DEST_PATTERN}" @property def _is_support_packet_duplicate(self) -> bool: @@ -390,7 +402,7 @@ @property def _stats_headline_pattern(self) -> str: - return r"--- {} ping statistics ---".format(self._DEST_PATTERN) + return fr"--- {self._DEST_PATTERN} ping statistics ---" @property def _is_support_packet_duplicate(self) -> bool: @@ -468,7 +480,7 @@ + r"\s+from " + self._DEST_PATTERN + ": " - + r"seq=(?P<{key}>\d+) ".format(key=IcmpReplyKey.SEQUENCE_NO) + + fr"seq=(?P<{IcmpReplyKey.SEQUENCE_NO}>\d+) " + self._TTL_PATTERN + self._TIME_PATTERN ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/pingparsing/_pingparsing.py new/pingparsing-1.4.0/pingparsing/_pingparsing.py --- old/pingparsing-1.3.1/pingparsing/_pingparsing.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/pingparsing/_pingparsing.py 2021-10-24 17:08:57.000000000 +0200 @@ -33,7 +33,7 @@ """ def __init__(self, timezone: Optional[tzinfo] = None) -> None: - self.__parser = NullPingParser() # type: PingParser + self.__parser: PingParser = NullPingParser() self.__timezone = timezone @property @@ -61,7 +61,7 @@ else: ping_text = ping_message - logger.debug("parsing ping result: {}".format(ping_text)) + logger.debug(f"parsing ping result: {ping_text}") self.__parser = NullPingParser() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/pingparsing/_pingtransmitter.py new/pingparsing-1.4.0/pingparsing/_pingtransmitter.py --- old/pingparsing-1.3.1/pingparsing/_pingtransmitter.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/pingparsing/_pingtransmitter.py 2021-10-24 17:08:57.000000000 +0200 @@ -156,7 +156,7 @@ @timeout.setter def timeout(self, value: TimeArg) -> None: if value is None: - self.__timeout = value # type: Optional[hr.Time] + self.__timeout: Optional[hr.Time] = value return if isinstance(value, hr.Time): @@ -220,12 +220,12 @@ def __init__(self) -> None: self.__destination = "" - self.count = None # type: Optional[int] - self.packet_size = None # type: Optional[int] - self.ttl = None # type: Optional[int] - self.ping_option = [] # type: PingAddOpts + self.count: Optional[int] = None + self.packet_size: Optional[int] = None + self.ttl: Optional[int] = None + self.ping_option: PingAddOpts = [] self.is_quiet = False - self.interface = None # type: Optional[str] + self.interface: Optional[str] = None self.auto_codepage = True self.timeout = None @@ -267,7 +267,7 @@ logger.debug(e) return False - logger.debug("IP address: version={}, address={}".format(network.version, self.destination)) + logger.debug(f"IP address: version={network.version}, address={self.destination}") return network.version == 6 @@ -282,7 +282,7 @@ try: count = Integer(self.count).convert() except TypeConversionError as e: - raise ValueError("count must be an integer: {}".format(e)) + raise ValueError(f"count must be an integer: {e}") if count <= 0: raise ValueError("count must be greater than zero") @@ -300,7 +300,7 @@ def __make_ping_command(self) -> Command: from typing import Any # noqa - maker_class = None # type: Any + maker_class: Any = None if self.__is_linux(): maker_class = LinuxPingCmdMaker @@ -309,7 +309,7 @@ elif self.__is_windows(): maker_class = WindowsPingCmdMaker else: - raise RuntimeError("not supported platform: {}".format(platform.system())) + raise RuntimeError(f"not supported platform: {platform.system()}") return maker_class( count=self.count, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/pingparsing/_stats.py new/pingparsing-1.4.0/pingparsing/_stats.py --- old/pingparsing-1.3.1/pingparsing/_stats.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/pingparsing/_stats.py 2021-10-24 17:08:57.000000000 +0200 @@ -211,7 +211,7 @@ } """ - d = { + d: Dict[str, Union[str, int, float, IcmpReplies, None]] = { "destination": self.destination, "packet_transmit": self.packet_transmit, "packet_receive": self.packet_receive, @@ -223,7 +223,7 @@ "rtt_mdev": self.rtt_mdev, "packet_duplicate_count": self.packet_duplicate_count, "packet_duplicate_rate": self.packet_duplicate_rate, - } # type: Dict[str, Union[str, int, float, IcmpReplies, None]] + } if include_icmp_replies: d["icmp_replies"] = self.icmp_replies diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/pylama.ini new/pingparsing-1.4.0/pylama.ini --- old/pingparsing-1.3.1/pylama.ini 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/pylama.ini 2021-10-24 17:08:57.000000000 +0200 @@ -1,6 +1,9 @@ [pylama] skip = .eggs/*,.tox/*,*/.env/*,_sandbox/*,build/*,docs/conf.py +[pylama:mccabe] +complexity=15 + [pylama:pycodestyle] max_line_length = 100 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/pyproject.toml new/pingparsing-1.4.0/pyproject.toml --- old/pingparsing-1.3.1/pyproject.toml 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/pyproject.toml 2021-10-24 17:08:57.000000000 +0200 @@ -58,6 +58,16 @@ 'warnings.warn', ] +[tool.mypy] +ignore_missing_imports = true +python_version = 3.6 + +pretty = true +show_error_codes = true +show_error_context = true +warn_unreachable = true +warn_unused_configs = true + [tool.pytest.ini_options] testpaths = [ "test", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/requirements/requirements.txt new/pingparsing-1.4.0/requirements/requirements.txt --- old/pingparsing-1.3.1/requirements/requirements.txt 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/requirements/requirements.txt 2021-10-24 17:08:57.000000000 +0200 @@ -1,4 +1,4 @@ humanreadable>=0.1.0,<1 -pyparsing>=2.0.3,<3 +pyparsing>=2.0.3,<4 subprocrunner>=1.2.2,<2 typepy[datetime]>=1.1.0,<2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/setup.py new/pingparsing-1.4.0/setup.py --- old/pingparsing-1.3.1/setup.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/setup.py 2021-10-24 17:08:57.000000000 +0200 @@ -9,11 +9,11 @@ MODULE_NAME = "pingparsing" -REPOSITORY_URL = "https://github.com/thombashi/{:s}".format(MODULE_NAME) +REPOSITORY_URL = f"https://github.com/thombashi/{MODULE_NAME:s}" REQUIREMENT_DIR = "requirements" ENCODING = "utf8" -pkg_info = {} # type: Dict[str, str] +pkg_info: Dict[str, str] = {} def get_release_command_class() -> Dict[str, setuptools.Command]: @@ -57,11 +57,11 @@ packages=setuptools.find_packages(exclude=["test*"]), package_data={MODULE_NAME: ["py.typed"]}, project_urls={ - "Documentation": "https://{:s}.rtfd.io/".format(MODULE_NAME), + "Documentation": f"https://{MODULE_NAME:s}.rtfd.io/", "Source": REPOSITORY_URL, - "Tracker": "{:s}/issues".format(REPOSITORY_URL), + "Tracker": f"{REPOSITORY_URL:s}/issues", }, - python_requires=">=3.5", + python_requires=">=3.6", install_requires=install_requires, extras_require={"test": tests_requires, "cli": CLI_OPT_REQUIRES}, classifiers=[ @@ -76,7 +76,6 @@ "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/test/test_cli.py new/pingparsing-1.4.0/test/test_cli.py --- old/pingparsing-1.3.1/test/test_cli.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/test/test_cli.py 2021-10-24 17:08:57.000000000 +0200 @@ -14,10 +14,10 @@ def print_result(stdout, stderr, expected=None): if expected: - print("[expected]\n{}".format(expected)) + print(f"[expected]\n{expected}") - print("[stdout]\n{}".format(stdout)) - print("[stderr]\n{}".format(stderr)) + print(f"[stdout]\n{stdout}") + print(f"[stderr]\n{stderr}") @pytest.mark.xfail(run=False) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/test/test_pingparsing.py new/pingparsing-1.4.0/test/test_pingparsing.py --- old/pingparsing-1.3.1/test/test_pingparsing.py 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/test/test_pingparsing.py 2021-10-24 17:08:57.000000000 +0200 @@ -585,6 +585,62 @@ ], ) +LINUX_PIPE = PingTestData( + dedent( + r"""\ + PING 91.221.122.179 (91.221.122.179) 64(92) bytes of data. + [1622145167.999326] no answer yet for icmp_seq=1 + [1622145168.201746] no answer yet for icmp_seq=2 + [1622145168.405761] no answer yet for icmp_seq=3 + [1622145168.609750] no answer yet for icmp_seq=4 + [1622145170.826836] From 91.221.122.179 icmp_seq=1 Destination Host Unreachable + [1622145170.826888] From 91.221.122.179 icmp_seq=2 Destination Host Unreachable + [1622145170.826896] From 91.221.122.179 icmp_seq=3 Destination Host Unreachable + [1622145170.826901] From 91.221.122.179 icmp_seq=4 Destination Host Unreachable + [1622145170.826907] From 91.221.122.179 icmp_seq=5 Destination Host Unreachable + + --- 91.221.122.179 ping statistics --- + 5 packets transmitted, 0 received, +5 errors, 100% packet loss, time 811ms + pipe 5 + """ + ), + { + "destination": "91.221.122.179", + "packet_transmit": 5, + "packet_receive": 0, + "packet_loss_count": 5, + "packet_loss_rate": 100.0, + "rtt_min": None, + "rtt_avg": None, + "rtt_max": None, + "rtt_mdev": None, + "packet_duplicate_count": 0, + "packet_duplicate_rate": None, + }, + [ + { + "timestamp": datetime(2021, 5, 27, 19, 52, 47, 999326, tzinfo=pytz.UTC), + "icmp_seq": 1, + "duplicate": False, + }, + { + "timestamp": datetime(2021, 5, 27, 19, 52, 48, 201746, tzinfo=pytz.UTC), + "icmp_seq": 2, + "duplicate": False, + }, + { + "timestamp": datetime(2021, 5, 27, 19, 52, 48, 405761, tzinfo=pytz.UTC), + "icmp_seq": 3, + "duplicate": False, + }, + { + "timestamp": datetime(2021, 5, 27, 19, 52, 48, 609750, tzinfo=pytz.UTC), + "icmp_seq": 4, + "duplicate": False, + }, + ], +) + WINDOWS10_LOSS = PingTestData( dedent( """\ @@ -693,14 +749,15 @@ [WINDOWS_UNREACHABLE_1, "Windows"], [WINDOWS_UNREACHABLE_2, "Windows"], [IPV6_LINUX, "Linux"], + [LINUX_PIPE, "Linux"], ], ) def test_normal_text(self, ping_parser, test_data, parser_name): stats = ping_parser.parse(test_data.value) - print("[input text]\n{}\n".format(test_data.value)) - print("[expected]\n{}\n".format(test_data.expected)) - print("[actual]\n{}\n".format(stats.as_dict())) + print(f"[input text]\n{test_data.value}\n") + print(f"[expected]\n{test_data.expected}\n") + print(f"[actual]\n{stats.as_dict()}\n") for icmp_reply in stats.icmp_replies: print(icmp_reply) @@ -715,9 +772,9 @@ def test_normal_timestamp(self, ping_parser, test_data, parser_name): stats = ping_parser.parse(test_data.value) - print("[input text]\n{}\n".format(test_data.value)) - print("[expected]\n{}\n".format(test_data.expected)) - print("[actual]\n{}\n".format(stats.as_dict())) + print(f"[input text]\n{test_data.value}\n") + print(f"[expected]\n{test_data.expected}\n") + print(f"[actual]\n{stats.as_dict()}\n") for icmp_reply in stats.icmp_replies: print(icmp_reply) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pingparsing-1.3.1/tox.ini new/pingparsing-1.4.0/tox.ini --- old/pingparsing-1.3.1/tox.ini 2021-05-05 09:44:57.000000000 +0200 +++ new/pingparsing-1.4.0/tox.ini 2021-10-24 17:08:57.000000000 +0200 @@ -1,6 +1,6 @@ [tox] envlist = - py{35,36,37,38,39,310} + py{36,37,38,39,310} pypy3 build clean @@ -28,17 +28,17 @@ [testenv:clean] skip_install = true deps = - cleanpy + cleanpy>=0.3.1 commands = cleanpy --all --exclude-envs . [testenv:cov] deps = .[test] - coverage[toml] - pytest-cov + coverage[toml]>=5 commands = - pytest --cov {posargs:-vv} + coverage run -m pytest {posargs:-vv} + coverage report -m [testenv:docs] basepython = python3.8 @@ -64,15 +64,15 @@ skip_install = true deps = codespell - mypy>=0.761 + mypy>=0.910 pylama - pytype + types-pytz + types-simplejson commands = python setup.py check codespell pingparsing docs/pages examples test -q 2 --check-filenames - -pytype --keep-going --jobs 2 --disable import-error pingparsing - -mypy pingparsing setup.py --ignore-missing-imports --show-error-context --show-error-codes --python-version 3.5 - -pylama + mypy pingparsing setup.py + pylama setup.py examples pingparsing test [testenv:readme] changedir = docs
