Drop Python 3.5 support (#3792)

* drop python 3.5 support

* dvc: remove fspath() use inside os.path calls

* dvc: replace dvc.compat.fspath with os.fspath

* tests: replace dvc.compat.fspath with os.fspath

* utils: relpath() should use fspath/str

* utils: os.readlink doesn't support path-like obj on Windows until 3.8
This commit is contained in:
Peter Rowlands (변기호)
2020-05-14 01:46:42 +03:00
committed by GitHub
parent 3916d4fa07
commit 833e82a7ea
45 changed files with 268 additions and 358 deletions
+37 -27
View File
@@ -4,7 +4,6 @@ import os
import pytest
from dvc.cache import Cache
from dvc.compat import fspath
from dvc.exceptions import PathMissingError
from dvc.main import main
from dvc.repo import Repo
@@ -18,7 +17,7 @@ def test_get_repo_file(tmp_dir, erepo_dir):
with erepo_dir.chdir():
erepo_dir.dvc_gen("file", "contents", commit="create file")
Repo.get(fspath(erepo_dir), "file", "file_imported")
Repo.get(os.fspath(erepo_dir), "file", "file_imported")
assert os.path.isfile("file_imported")
assert (tmp_dir / "file_imported").read_text() == "contents"
@@ -28,10 +27,10 @@ def test_get_repo_dir(tmp_dir, erepo_dir):
with erepo_dir.chdir():
erepo_dir.dvc_gen({"dir": {"file": "contents"}}, commit="create dir")
Repo.get(fspath(erepo_dir), "dir", "dir_imported")
Repo.get(os.fspath(erepo_dir), "dir", "dir_imported")
assert os.path.isdir("dir_imported")
trees_equal(fspath(erepo_dir / "dir"), "dir_imported")
trees_equal(erepo_dir / "dir", "dir_imported")
def test_get_git_file(tmp_dir, erepo_dir):
@@ -40,7 +39,7 @@ def test_get_git_file(tmp_dir, erepo_dir):
erepo_dir.scm_gen({src: "hello"}, commit="add a regular file")
Repo.get(fspath(erepo_dir), src, dst)
Repo.get(os.fspath(erepo_dir), src, dst)
assert (tmp_dir / dst).is_file()
assert (tmp_dir / dst).read_text() == "hello"
@@ -52,10 +51,10 @@ def test_get_git_dir(tmp_dir, erepo_dir):
erepo_dir.scm_gen({src: {"file.txt": "hello"}}, commit="add a regular dir")
Repo.get(fspath(erepo_dir), src, dst)
Repo.get(os.fspath(erepo_dir), src, dst)
assert (tmp_dir / dst).is_dir()
trees_equal(fspath(erepo_dir / src), fspath(tmp_dir / dst))
trees_equal(erepo_dir / src, tmp_dir / dst)
def test_cache_type_is_properly_overridden(tmp_dir, erepo_dir):
@@ -69,7 +68,7 @@ def test_cache_type_is_properly_overridden(tmp_dir, erepo_dir):
erepo_dir.dvc_gen("file", "contents", "create file")
assert System.is_symlink(erepo_dir / "file")
Repo.get(fspath(erepo_dir), "file", "file_imported")
Repo.get(os.fspath(erepo_dir), "file", "file_imported")
assert not System.is_symlink("file_imported")
assert (tmp_dir / "file_imported").read_text() == "contents"
@@ -79,20 +78,20 @@ def test_get_repo_rev(tmp_dir, erepo_dir):
with erepo_dir.chdir(), erepo_dir.branch("branch", new=True):
erepo_dir.dvc_gen("file", "contents", commit="create file on branch")
Repo.get(fspath(erepo_dir), "file", "file_imported", rev="branch")
Repo.get(os.fspath(erepo_dir), "file", "file_imported", rev="branch")
assert (tmp_dir / "file_imported").read_text() == "contents"
def test_get_from_non_dvc_repo(tmp_dir, git_dir):
git_dir.scm_gen({"some_file": "contents"}, commit="create file")
Repo.get(fspath(git_dir), "some_file", "file_imported")
Repo.get(os.fspath(git_dir), "some_file", "file_imported")
assert (tmp_dir / "file_imported").read_text() == "contents"
def test_get_a_dvc_file(tmp_dir, erepo_dir):
with pytest.raises(GetDVCFileError):
Repo.get(fspath(erepo_dir), "some_file.dvc")
Repo.get(os.fspath(erepo_dir), "some_file.dvc")
# https://github.com/iterative/dvc/pull/2837#discussion_r352123053
@@ -102,9 +101,11 @@ def test_get_full_dvc_path(tmp_dir, erepo_dir, tmp_path_factory):
external_data.write_text("ext_data")
with erepo_dir.chdir():
erepo_dir.dvc_add(fspath(external_data), commit="add external data")
erepo_dir.dvc_add(os.fspath(external_data), commit="add external data")
Repo.get(fspath(erepo_dir), fspath(external_data), "ext_data_imported")
Repo.get(
os.fspath(erepo_dir), os.fspath(external_data), "ext_data_imported"
)
assert (tmp_dir / "ext_data_imported").read_text() == "ext_data"
@@ -120,7 +121,7 @@ def test_non_cached_output(tmp_dir, erepo_dir):
)
erepo_dir.scm_add([src, src + ".dvc"], commit="add non-cached output")
Repo.get(fspath(erepo_dir), src, dst)
Repo.get(os.fspath(erepo_dir), src, dst)
assert (tmp_dir / dst).is_file()
# NOTE: using strip() to account for `echo` differences on win and *nix
@@ -130,17 +131,17 @@ def test_non_cached_output(tmp_dir, erepo_dir):
# https://github.com/iterative/dvc/pull/2837#discussion_r352123053
def test_absolute_file_outside_repo(tmp_dir, erepo_dir):
with pytest.raises(PathMissingError):
Repo.get(fspath(erepo_dir), "/root/")
Repo.get(os.fspath(erepo_dir), "/root/")
def test_absolute_file_outside_git_repo(tmp_dir, git_dir):
with pytest.raises(PathMissingError):
Repo.get(fspath(git_dir), "/root/")
Repo.get(os.fspath(git_dir), "/root/")
def test_unknown_path(tmp_dir, erepo_dir):
with pytest.raises(PathMissingError):
Repo.get(fspath(erepo_dir), "a_non_existing_file")
Repo.get(os.fspath(erepo_dir), "a_non_existing_file")
@pytest.mark.parametrize("dname", [".", "dir", "dir/subdir"])
@@ -150,7 +151,7 @@ def test_get_to_dir(tmp_dir, erepo_dir, dname):
makedirs(dname, exist_ok=True)
Repo.get(fspath(erepo_dir), "file", dname)
Repo.get(os.fspath(erepo_dir), "file", dname)
assert (tmp_dir / dname).is_dir()
assert (tmp_dir / dname / "file").read_text() == "contents"
@@ -164,7 +165,7 @@ def test_get_from_non_dvc_master(tmp_dir, git_dir, caplog):
caplog.clear()
with caplog.at_level(logging.INFO, logger="dvc"):
Repo.get(fspath(git_dir), "some_file", out="some_dst", rev="branch")
Repo.get(os.fspath(git_dir), "some_file", out="some_dst", rev="branch")
assert caplog.text == ""
assert (tmp_dir / "some_dst").read_text() == "some text"
@@ -183,17 +184,19 @@ def test_get_file_from_dir(tmp_dir, erepo_dir):
commit="create dir",
)
Repo.get(fspath(erepo_dir), os.path.join("dir", "1"))
Repo.get(os.fspath(erepo_dir), os.path.join("dir", "1"))
assert (tmp_dir / "1").read_text() == "1"
Repo.get(fspath(erepo_dir), os.path.join("dir", "2"), out="file")
Repo.get(os.fspath(erepo_dir), os.path.join("dir", "2"), out="file")
assert (tmp_dir / "file").read_text() == "2"
Repo.get(fspath(erepo_dir), os.path.join("dir", "subdir"))
Repo.get(os.fspath(erepo_dir), os.path.join("dir", "subdir"))
assert (tmp_dir / "subdir" / "foo").read_text() == "foo"
assert (tmp_dir / "subdir" / "bar").read_text() == "bar"
Repo.get(fspath(erepo_dir), os.path.join("dir", "subdir", "foo"), out="X")
Repo.get(
os.fspath(erepo_dir), os.path.join("dir", "subdir", "foo"), out="X"
)
assert (tmp_dir / "X").read_text() == "foo"
@@ -205,14 +208,21 @@ def test_get_url_positive(tmp_dir, erepo_dir, caplog, setup_remote):
caplog.clear()
with caplog.at_level(logging.ERROR, logger="dvc"):
assert main(["get", fspath(erepo_dir), "foo", "--show-url"]) == 0
assert main(["get", os.fspath(erepo_dir), "foo", "--show-url"]) == 0
assert caplog.text == ""
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"])
main(
[
"get",
os.fspath(erepo_dir),
"not-existing-file",
"--show-url",
]
)
== 1
)
assert "failed to show URL" in caplog.text
@@ -222,7 +232,7 @@ 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 main(["get", os.fspath(tmp_dir), "foo", "--show-url"]) == 1
assert "failed to show URL" in caplog.text
@@ -240,5 +250,5 @@ def test_get_pipeline_tracked_outs(
dvc.scm.commit("add pipeline stage")
with git_dir.chdir():
Repo.get("file:///{}".format(fspath(tmp_dir)), "bar", out="baz")
Repo.get("file:///{}".format(os.fspath(tmp_dir)), "bar", out="baz")
assert (git_dir / "baz").read_text() == "foo"