From 7540fd7b48ef5386c6a6e216999878155bc676f3 Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Fri, 3 May 2019 01:26:18 +0530 Subject: [PATCH 1/6] Add `dvc version` command --- dvc/cli.py | 2 ++ dvc/command/version.py | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 dvc/command/version.py diff --git a/dvc/cli.py b/dvc/cli.py index 55949d715..3450aced7 100644 --- a/dvc/cli.py +++ b/dvc/cli.py @@ -33,6 +33,7 @@ import dvc.command.daemon as daemon import dvc.command.commit as commit import dvc.command.tag as tag import dvc.command.diff as diff +import dvc.command.version as version from dvc.exceptions import DvcParserError @@ -65,6 +66,7 @@ COMMANDS = [ commit, tag, diff, + version, ] diff --git a/dvc/command/version.py b/dvc/command/version.py new file mode 100644 index 000000000..90a686700 --- /dev/null +++ b/dvc/command/version.py @@ -0,0 +1,41 @@ +from __future__ import unicode_literals + +import platform +import argparse +import logging + +from dvc.command.base import CmdBase, append_doc_link +from dvc.version import _BASE_VERSION + + +logger = logging.getLogger(__name__) + + +class CmdVersion(CmdBase): + def run(self): + info = ( + "DVC version: {dvc_version}\n" + "Python version: {python_version}\n" + "Platform: {platform_type}" + ).format( + dvc_version=_BASE_VERSION, + python_version=platform.python_version(), + platform_type=platform.platform(), + ) + logger.info(info) + return 0 + + +def add_parser(subparsers, parent_parser): + ADD_HELP = ( + "Output the system/environment information along with the DVC version" + ) + + add_parser = subparsers.add_parser( + "version", + parents=[parent_parser], + description=append_doc_link(ADD_HELP, "version"), + help=ADD_HELP, + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + add_parser.set_defaults(func=CmdVersion) From 9e8ad95e6dafe73b861efe3699e02931d702edde Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Fri, 3 May 2019 16:35:25 +0530 Subject: [PATCH 2/6] Change import of DVC version --- dvc/command/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index 90a686700..4add10856 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -5,7 +5,7 @@ import argparse import logging from dvc.command.base import CmdBase, append_doc_link -from dvc.version import _BASE_VERSION +from dvc.version import __version__ logger = logging.getLogger(__name__) @@ -18,7 +18,7 @@ class CmdVersion(CmdBase): "Python version: {python_version}\n" "Platform: {platform_type}" ).format( - dvc_version=_BASE_VERSION, + dvc_version=__version__, python_version=platform.python_version(), platform_type=platform.platform(), ) From 21388952e9cd7e9d4259d63843a7ff782aa09ca2 Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Fri, 10 May 2019 09:31:30 +0530 Subject: [PATCH 3/6] Write tests for `dvc version` --- tests/func/test_version.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tests/func/test_version.py diff --git a/tests/func/test_version.py b/tests/func/test_version.py new file mode 100644 index 000000000..ab7ea4593 --- /dev/null +++ b/tests/func/test_version.py @@ -0,0 +1,20 @@ +from dvc.main import main +from dvc.command.version import CmdVersion +from dvc.cli import parse_args + +from tests.basic_env import TestDvc + + +class TestVersion(TestDvc): + def test_run(self): + ret = main(["version"]) + self.assertEqual(ret, 0) + + +def test_info(dvc, mocker, caplog): + cmd = CmdVersion(parse_args(["version"])) + cmd.run() + for record in caplog.records: + assert "DVC version" in record.msg + assert "Python version" in record.msg + assert "Platform" in record.msg From db07f3a08d84eb9193b19226612b7bd3f6dbfea0 Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Fri, 10 May 2019 13:00:42 +0530 Subject: [PATCH 4/6] Modify tests to use pytest fixture --- dvc/command/version.py | 6 +++--- tests/func/test_version.py | 30 ++++++++++++++++++------------ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index 4add10856..02e5a7779 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -27,15 +27,15 @@ class CmdVersion(CmdBase): def add_parser(subparsers, parent_parser): - ADD_HELP = ( + VERSION_HELP = ( "Output the system/environment information along with the DVC version" ) add_parser = subparsers.add_parser( "version", parents=[parent_parser], - description=append_doc_link(ADD_HELP, "version"), - help=ADD_HELP, + description=append_doc_link(VERSION_HELP, "version"), + help=VERSION_HELP, formatter_class=argparse.RawDescriptionHelpFormatter, ) add_parser.set_defaults(func=CmdVersion) diff --git a/tests/func/test_version.py b/tests/func/test_version.py index ab7ea4593..add694f97 100644 --- a/tests/func/test_version.py +++ b/tests/func/test_version.py @@ -1,20 +1,26 @@ -from dvc.main import main +import re + from dvc.command.version import CmdVersion from dvc.cli import parse_args -from tests.basic_env import TestDvc + +def test_run(): + cmd = CmdVersion(parse_args(["version"])) + ret = cmd.run_cmd() + assert ret == 0 -class TestVersion(TestDvc): - def test_run(self): - ret = main(["version"]) - self.assertEqual(ret, 0) - - -def test_info(dvc, mocker, caplog): +def test_info(caplog): + check_data = ["DVC version", "Python version", "Platform"] cmd = CmdVersion(parse_args(["version"])) cmd.run() + info_dict = {} + for record in caplog.records: - assert "DVC version" in record.msg - assert "Python version" in record.msg - assert "Platform" in record.msg + msg = re.sub(r"\n", ": ", record.msg) + info_list = msg.split(": ") + for i in range(0, len(info_list), 2): + info_dict[info_list[i]] = info_list[i + 1] + + for info_type in check_data: + assert re.match(r".*", info_dict.get(info_type)) From bf9ca598c07a03d88c2eaaf2e782cae23bc0ce33 Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Fri, 10 May 2019 19:45:17 +0530 Subject: [PATCH 5/6] Pass codeclimate test --- dvc/command/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dvc/command/version.py b/dvc/command/version.py index 02e5a7779..422be7472 100644 --- a/dvc/command/version.py +++ b/dvc/command/version.py @@ -31,11 +31,11 @@ def add_parser(subparsers, parent_parser): "Output the system/environment information along with the DVC version" ) - add_parser = subparsers.add_parser( + version_parser = subparsers.add_parser( "version", parents=[parent_parser], description=append_doc_link(VERSION_HELP, "version"), help=VERSION_HELP, formatter_class=argparse.RawDescriptionHelpFormatter, ) - add_parser.set_defaults(func=CmdVersion) + version_parser.set_defaults(func=CmdVersion) From 46325808b89d98512a436e41b6d92a7c1a758212 Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Sat, 11 May 2019 18:29:03 +0530 Subject: [PATCH 6/6] Change regex pattern and move test under unit/command --- tests/func/test_version.py | 26 -------------------------- tests/unit/command/test_version.py | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 26 deletions(-) delete mode 100644 tests/func/test_version.py create mode 100644 tests/unit/command/test_version.py diff --git a/tests/func/test_version.py b/tests/func/test_version.py deleted file mode 100644 index add694f97..000000000 --- a/tests/func/test_version.py +++ /dev/null @@ -1,26 +0,0 @@ -import re - -from dvc.command.version import CmdVersion -from dvc.cli import parse_args - - -def test_run(): - cmd = CmdVersion(parse_args(["version"])) - ret = cmd.run_cmd() - assert ret == 0 - - -def test_info(caplog): - check_data = ["DVC version", "Python version", "Platform"] - cmd = CmdVersion(parse_args(["version"])) - cmd.run() - info_dict = {} - - for record in caplog.records: - msg = re.sub(r"\n", ": ", record.msg) - info_list = msg.split(": ") - for i in range(0, len(info_list), 2): - info_dict[info_list[i]] = info_list[i + 1] - - for info_type in check_data: - assert re.match(r".*", info_dict.get(info_type)) diff --git a/tests/unit/command/test_version.py b/tests/unit/command/test_version.py new file mode 100644 index 000000000..42adda4c8 --- /dev/null +++ b/tests/unit/command/test_version.py @@ -0,0 +1,19 @@ +import re + +from dvc.command.version import CmdVersion +from dvc.cli import parse_args + + +def test_run(): + cmd = CmdVersion(parse_args(["version"])) + ret = cmd.run_cmd() + assert ret == 0 + + +def test_info(caplog): + cmd = CmdVersion(parse_args(["version"])) + cmd.run() + + assert re.search(re.compile(r"DVC version: \d+\.\d+\.\d+"), caplog.text) + assert re.search(re.compile(r"Python version: \d\.\d\.\d"), caplog.text) + assert re.search(re.compile(r"Platform: .*"), caplog.text)