mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
get: split command for getting url and getting files from url functions
This commit is contained in:
+19
-5
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user