From 374e6b85df6e4e695598635c9230445ccea4be0c Mon Sep 17 00:00:00 2001 From: Sebastian Bank Date: Tue, 6 Oct 2020 21:07:25 +0200 Subject: [PATCH] adapt version() for development version format in Graphviz 2.44.2 --- CHANGES.txt | 3 +++ graphviz/backend.py | 20 ++++++++++++++++++-- tests/test_backend.py | 2 ++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index d2a1dafdfd..f1b8085d0c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,6 +5,9 @@ Changelog Version 0.14.2 (in development) ------------------------------- +Adapt `graphviz.version()` to support the Graphviz Release version entry format +introduced with `2.44.2` (`version()` is needed to run the tests). + Drop Python 3.5 support. diff --git a/graphviz/backend.py b/graphviz/backend.py index 49f79154da..a62ac67dba 100644 --- a/graphviz/backend.py +++ b/graphviz/backend.py @@ -254,17 +254,33 @@ def version(): graphviz.ExecutableNotFound: If the Graphviz executable is not found. subprocess.CalledProcessError: If the exit status is non-zero. RuntimmeError: If the output cannot be parsed into a version number. + + Note: + Ignores the ``~dev.`` portion of development versions. + + See also Graphviz Release version entry format: + https://gitlab.com/graphviz/graphviz/-/blob/f94e91ba819cef51a4b9dcb2d76153684d06a913/gen_version.py#L17-20 """ cmd = ['dot', '-V'] out, _ = run(cmd, check=True, encoding='ascii', stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - ma = re.search(r'graphviz version (\d+\.\d+(?:\.\d+){,2})', out) + ma = re.search(r'graphviz version' + r' ' + r'(\d+)\.(\d+)' + r'(?:\.(\d+)' + r'(?:' + r'~dev\.\d{8}\.\d{4}' + r'|' + r'\.(\d+)' + r')?' + r')?' + r' ', out) if ma is None: raise RuntimeError('cannot parse %r output: %r' % (cmd, out)) - return tuple(int(d) for d in ma.group(1).split('.')) + return tuple(int(d) for d in ma.groups() if d is not None) def view(filepath, quiet=False): diff --git a/tests/test_backend.py b/tests/test_backend.py index b2dfe44e9d..d1bb359cac 100644 --- a/tests/test_backend.py +++ b/tests/test_backend.py @@ -262,6 +262,8 @@ def test_version_parsefail_mocked(mocker, Popen): # noqa: N803 (b'dot - graphviz version 1.2.3 (mocked)', (1, 2, 3)), (b'dot - graphviz version 2.43.20190912.0211 (20190912.0211)\n', (2, 43, 20190912, 211)), (b'dot - graphviz version 2.44.2~dev.20200927.0217 (20200927.0217)\n', (2, 44, 2)), + (b'dot - graphviz version 2.44.1 (mocked)\n', (2, 44, 1)), + (b'dot - graphviz version 2.44.2~dev.20200704.1652 (mocked)\n', (2, 44, 2)), ]) def test_version_mocked(mocker, Popen, stdout, expected): # noqa: N803 proc = Popen.return_value