from dvc.utils.compat import str import os from uuid import uuid4 from dvc import logger from dvc.exceptions import DvcException from dvc.main import main from mock import patch from tests.basic_env import TestDvc from dvc.utils.compat import StringIO class TestCmdImport(TestDvc): def test(self): ret = main(["import", self.FOO, "import"]) self.assertEqual(ret, 0) self.assertTrue(os.path.exists("import.dvc")) ret = main(["import", "non-existing-file", "import"]) self.assertNotEqual(ret, 0) def test_unsupported(self): ret = main(["import", "unsupported://path", "import_unsupported"]) self.assertNotEqual(ret, 0) class TestDefaultOutput(TestDvc): def test(self): tmpdir = self.mkdtemp() filename = str(uuid4()) tmpfile = os.path.join(tmpdir, filename) with open(tmpfile, "w") as fd: fd.write("content") ret = main(["import", tmpfile]) self.assertEqual(ret, 0) self.assertTrue(os.path.exists(filename)) self.assertEqual(open(filename).read(), "content") class TestFailedImportMessage(TestDvc): color_patch = patch.object(logger, "colorize", new=lambda x, color="": x) def test(self): self.color_patch.start() self._test() self.color_patch.stop() @patch("dvc.command.imp.urlparse") def _test(self, imp_urlparse_patch): logger.logger.handlers[1].stream = StringIO() page_address = "http://somesite.com/file_name" def dvc_exception(*args, **kwargs): raise DvcException("message") imp_urlparse_patch.side_effect = dvc_exception main(["import", page_address]) self.assertIn( "Error: failed to import " "http://somesite.com/file_name. You could also try " "downloading it manually and adding it with `dvc add` " "command.", logger.logger.handlers[1].stream.getvalue(), )