From c0a06d2cebeeaa9ab98e14870fad9d3adcd64604 Mon Sep 17 00:00:00 2001 From: Ivan Shcheklein Date: Sun, 23 Jun 2019 13:58:42 -0700 Subject: [PATCH 1/3] pipeline show command: ignore stage if command is not defined --- dvc/command/pipeline.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dvc/command/pipeline.py b/dvc/command/pipeline.py index 99525fd9e..70b8bd79d 100644 --- a/dvc/command/pipeline.py +++ b/dvc/command/pipeline.py @@ -29,6 +29,8 @@ class CmdPipelineShow(CmdBase): for n in nodes: if commands: + if stages[n].cmd is None: + continue logger.info(stages[n].cmd) elif outs: for out in stages[n].outs: From 6f05e7747ffe15c3b59dbba9d67609b5f99bc120 Mon Sep 17 00:00:00 2001 From: Ivan Shcheklein Date: Sun, 23 Jun 2019 13:59:11 -0700 Subject: [PATCH 2/3] logger: use custom handler to propagare logging exceptions --- dvc/logger.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/dvc/logger.py b/dvc/logger.py index 35e873738..45432eed4 100644 --- a/dvc/logger.py +++ b/dvc/logger.py @@ -10,6 +10,12 @@ import logging.config import colorama +class LoggingException(Exception): + def __init__(self, record): + msg = "failed to log {}".format(str(record)) + super(LoggingException, self).__init__(msg) + + class ExcludeErrorsFilter(logging.Filter): def filter(self, record): return record.levelno < logging.ERROR @@ -149,6 +155,12 @@ class ColorFormatter(logging.Formatter): progress.clearln() +class LoggerHandler(logging.StreamHandler): + def handleError(self, record): + super(LoggerHandler, self).handleError(record) + raise LoggingException(record) + + def setup(level=logging.INFO): colorama.init() @@ -159,14 +171,14 @@ def setup(level=logging.INFO): "formatters": {"color": {"()": ColorFormatter}}, "handlers": { "console": { - "class": "logging.StreamHandler", + "class": "dvc.logger.LoggerHandler", "level": "DEBUG", "formatter": "color", "stream": "ext://sys.stdout", "filters": ["exclude_errors"], }, "console_errors": { - "class": "logging.StreamHandler", + "class": "dvc.logger.LoggerHandler", "level": "ERROR", "formatter": "color", "stream": "ext://sys.stderr", From 478d6aec2f265b3371f6786a2805d250be3b13c3 Mon Sep 17 00:00:00 2001 From: Ivan Shcheklein Date: Sun, 23 Jun 2019 14:09:22 -0700 Subject: [PATCH 3/3] test: ls/dir depends on platform, dir is not supported by Mac --- tests/func/test_add.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/func/test_add.py b/tests/func/test_add.py index 38c8f49d8..122a06ec0 100644 --- a/tests/func/test_add.py +++ b/tests/func/test_add.py @@ -296,8 +296,9 @@ class TestShouldUpdateStateEntryForDirectoryAfterAdd(TestDvc): self.assertEqual(ret, 0) self.assertEqual(file_md5_counter.mock.call_count, 3) + ls = "dir" if os.name == "nt" else "ls" ret = main( - ["run", "-d", self.DATA_DIR, "dir {}".format(self.DATA_DIR)] + ["run", "-d", self.DATA_DIR, "{} {}".format(ls, self.DATA_DIR)] ) self.assertEqual(ret, 0) self.assertEqual(file_md5_counter.mock.call_count, 3)