get: split command for getting url and getting files from url functions

This commit is contained in:
Saugat Pachhai
2020-01-16 19:28:14 +05:45
parent 4509f82bc3
commit eb252e055b
3 changed files with 41 additions and 11 deletions
+19 -5
View File
@@ -3,21 +3,32 @@ import logging
from .base import append_doc_link
from .base import CmdBaseNoRepo
from dvc.exceptions import DvcException
from dvc.exceptions import DvcException, NotDvcRepoError
logger = logging.getLogger(__name__)
class CmdGet(CmdBaseNoRepo):
def _run_get_url(self):
def _show_url(self):
from dvc.api import get_url
try:
url = get_url(
self.args.path, repo=self.args.url, rev=self.args.rev
)
logger.info("{} {}".format(self.args.path, url))
logger.info(url)
except NotDvcRepoError:
# NOTE: there's no way to get direct links to files inside
# git repository.
logger.exception(
"Could not show url for '{}' from '{}'. ".format(
self.args.path, self.args.url
)
+ "Only DVC repository is supported currently.",
exc_info=None,
)
return 1
except DvcException:
logger.exception(
"failed to show url for '{}' from '{}'".format(
@@ -25,13 +36,16 @@ class CmdGet(CmdBaseNoRepo):
)
)
return 1
return 0
def run(self):
if self.args.show_url:
return self._run_get_url()
return self._show_url()
return self._get_file_from_repo()
def _get_file_from_repo(self):
from dvc.repo import Repo
try:
+21 -6
View File
@@ -187,13 +187,28 @@ def test_get_from_non_dvc_master(tmp_dir, erepo_dir, caplog):
assert (tmp_dir / dst).read_text() == "some_contents"
def test_get_url(tmp_dir, erepo_dir):
def test_get_url_positive(tmp_dir, erepo_dir, caplog):
with erepo_dir.chdir():
erepo_dir.dvc_gen("foo", "foo")
assert main(["get", ".", "foo", "--show-url"]) == 0
caplog.clear()
with caplog.at_level(logging.ERROR, logger="dvc"):
assert main(["get", fspath(erepo_dir), "foo", "--show-url"]) == 0
assert caplog.text == ""
def test_get_url_not_existing(tmp_dir, erepo_dir):
with erepo_dir.chdir():
erepo_dir.dvc_gen("foo", "foo")
assert main(["get", ".", "food", "--show-url"]) == 1
def test_get_url_not_existing(tmp_dir, erepo_dir, caplog):
with caplog.at_level(logging.ERROR, logger="dvc"):
assert (
main(["get", fspath(erepo_dir), "not-existing-file", "--show-url"])
== 1
)
assert "failed to show url for 'not-existing-file'" in caplog.text
def test_get_url_git_only_repo(tmp_dir, scm, caplog):
tmp_dir.scm_gen({"foo": "foo"}, commit="initial")
with caplog.at_level(logging.ERROR):
assert main(["get", fspath(tmp_dir), "foo", "--show-url"]) == 1
assert "Only DVC repository is supported currently" in caplog.text
+1
View File
@@ -24,6 +24,7 @@ def test_get_url(mocker):
cmd = cli_args.func(cli_args)
m = mocker.patch("dvc.api.get_url")
m.return_value = "url"
assert cmd.run() == 0