mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-09 07:18:27 +01:00
refactor: dvc/dependency class names unification (#3688)
This commit is contained in:
+34
-34
@@ -2,38 +2,38 @@ from urllib.parse import urlparse
|
||||
from collections import defaultdict
|
||||
|
||||
import dvc.output as output
|
||||
from dvc.dependency.gs import DependencyGS
|
||||
from dvc.dependency.hdfs import DependencyHDFS
|
||||
from dvc.dependency.http import DependencyHTTP
|
||||
from dvc.dependency.https import DependencyHTTPS
|
||||
from dvc.dependency.local import DependencyLOCAL
|
||||
from dvc.dependency.s3 import DependencyS3
|
||||
from dvc.dependency.ssh import DependencySSH
|
||||
from dvc.dependency.param import DependencyPARAMS
|
||||
from dvc.dependency.gs import GSDependency
|
||||
from dvc.dependency.hdfs import HDFSDependency
|
||||
from dvc.dependency.http import HTTPDependency
|
||||
from dvc.dependency.https import HTTPSDependency
|
||||
from dvc.dependency.local import LocalDependency
|
||||
from dvc.dependency.s3 import S3Dependency
|
||||
from dvc.dependency.ssh import SSHDependency
|
||||
from dvc.dependency.param import ParamsDependency
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.remote import Remote
|
||||
from dvc.scheme import Schemes
|
||||
from .repo import DependencyREPO
|
||||
from .repo import RepoDependency
|
||||
|
||||
|
||||
DEPS = [
|
||||
DependencyGS,
|
||||
DependencyHDFS,
|
||||
DependencyHTTP,
|
||||
DependencyHTTPS,
|
||||
DependencyS3,
|
||||
DependencySSH,
|
||||
# NOTE: DependencyLOCAL is the default choice
|
||||
GSDependency,
|
||||
HDFSDependency,
|
||||
HTTPDependency,
|
||||
HTTPSDependency,
|
||||
S3Dependency,
|
||||
SSHDependency,
|
||||
# NOTE: LocalDependency is the default choice
|
||||
]
|
||||
|
||||
DEP_MAP = {
|
||||
Schemes.LOCAL: DependencyLOCAL,
|
||||
Schemes.SSH: DependencySSH,
|
||||
Schemes.S3: DependencyS3,
|
||||
Schemes.GS: DependencyGS,
|
||||
Schemes.HDFS: DependencyHDFS,
|
||||
Schemes.HTTP: DependencyHTTP,
|
||||
Schemes.HTTPS: DependencyHTTPS,
|
||||
Schemes.LOCAL: LocalDependency,
|
||||
Schemes.SSH: SSHDependency,
|
||||
Schemes.S3: S3Dependency,
|
||||
Schemes.GS: GSDependency,
|
||||
Schemes.HDFS: HDFSDependency,
|
||||
Schemes.HTTP: HTTPDependency,
|
||||
Schemes.HTTPS: HTTPSDependency,
|
||||
}
|
||||
|
||||
|
||||
@@ -44,8 +44,8 @@ DEP_MAP = {
|
||||
SCHEMA = output.SCHEMA.copy()
|
||||
del SCHEMA[OutputBase.PARAM_CACHE]
|
||||
del SCHEMA[OutputBase.PARAM_METRIC]
|
||||
SCHEMA.update(DependencyREPO.REPO_SCHEMA)
|
||||
SCHEMA.update(DependencyPARAMS.PARAM_SCHEMA)
|
||||
SCHEMA.update(RepoDependency.REPO_SCHEMA)
|
||||
SCHEMA.update(ParamsDependency.PARAM_SCHEMA)
|
||||
|
||||
|
||||
def _get(stage, p, info):
|
||||
@@ -54,18 +54,18 @@ def _get(stage, p, info):
|
||||
remote = Remote(stage.repo, name=parsed.netloc)
|
||||
return DEP_MAP[remote.scheme](stage, p, info, remote=remote)
|
||||
|
||||
if info and info.get(DependencyREPO.PARAM_REPO):
|
||||
repo = info.pop(DependencyREPO.PARAM_REPO)
|
||||
return DependencyREPO(repo, stage, p, info)
|
||||
if info and info.get(RepoDependency.PARAM_REPO):
|
||||
repo = info.pop(RepoDependency.PARAM_REPO)
|
||||
return RepoDependency(repo, stage, p, info)
|
||||
|
||||
if info and info.get(DependencyPARAMS.PARAM_PARAMS):
|
||||
params = info.pop(DependencyPARAMS.PARAM_PARAMS)
|
||||
return DependencyPARAMS(stage, p, params)
|
||||
if info and info.get(ParamsDependency.PARAM_PARAMS):
|
||||
params = info.pop(ParamsDependency.PARAM_PARAMS)
|
||||
return ParamsDependency(stage, p, params)
|
||||
|
||||
for d in DEPS:
|
||||
if d.supported(p):
|
||||
return d(stage, p, info)
|
||||
return DependencyLOCAL(stage, p, info)
|
||||
return LocalDependency(stage, p, info)
|
||||
|
||||
|
||||
def loadd_from(stage, d_list):
|
||||
@@ -79,7 +79,7 @@ def loadd_from(stage, d_list):
|
||||
def loads_from(stage, s_list, erepo=None):
|
||||
ret = []
|
||||
for s in s_list:
|
||||
info = {DependencyREPO.PARAM_REPO: erepo} if erepo else {}
|
||||
info = {RepoDependency.PARAM_REPO: erepo} if erepo else {}
|
||||
ret.append(_get(stage, s, info))
|
||||
return ret
|
||||
|
||||
@@ -102,7 +102,7 @@ def loads_params(stage, s_list):
|
||||
d_list.append(
|
||||
{
|
||||
OutputBase.PARAM_PATH: path,
|
||||
DependencyPARAMS.PARAM_PARAMS: params,
|
||||
ParamsDependency.PARAM_PARAMS: params,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ class DependencyIsStageFileError(DvcException):
|
||||
)
|
||||
|
||||
|
||||
class DependencyBase(object):
|
||||
class BaseDependency(object):
|
||||
IS_DEPENDENCY = True
|
||||
|
||||
DoesNotExistError = DependencyDoesNotExistError
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import DependencyBase
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.gs import OutputGS
|
||||
|
||||
|
||||
class DependencyGS(DependencyBase, OutputGS):
|
||||
class GSDependency(BaseDependency, OutputGS):
|
||||
pass
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import DependencyBase
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.hdfs import OutputHDFS
|
||||
|
||||
|
||||
class DependencyHDFS(DependencyBase, OutputHDFS):
|
||||
class HDFSDependency(BaseDependency, OutputHDFS):
|
||||
pass
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.dependency.base import DependencyBase
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.remote.http import HTTPRemote
|
||||
|
||||
|
||||
class DependencyHTTP(DependencyBase, OutputBase):
|
||||
class HTTPDependency(BaseDependency, OutputBase):
|
||||
REMOTE = HTTPRemote
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from .http import DependencyHTTP
|
||||
from .http import HTTPDependency
|
||||
from dvc.remote.https import HTTPSRemote
|
||||
|
||||
|
||||
class DependencyHTTPS(DependencyHTTP):
|
||||
class HTTPSDependency(HTTPDependency):
|
||||
REMOTE = HTTPSRemote
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import DependencyBase
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.local import OutputLOCAL
|
||||
|
||||
|
||||
class DependencyLOCAL(DependencyBase, OutputLOCAL):
|
||||
class LocalDependency(BaseDependency, OutputLOCAL):
|
||||
pass
|
||||
|
||||
@@ -6,7 +6,7 @@ import dpath.util
|
||||
from voluptuous import Any
|
||||
|
||||
from dvc.compat import fspath_py35
|
||||
from dvc.dependency.local import DependencyLOCAL
|
||||
from dvc.dependency.local import LocalDependency
|
||||
from dvc.exceptions import DvcException
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class BadParamFileError(DvcException):
|
||||
pass
|
||||
|
||||
|
||||
class DependencyPARAMS(DependencyLOCAL):
|
||||
class ParamsDependency(LocalDependency):
|
||||
PARAM_PARAMS = "params"
|
||||
PARAM_SCHEMA = {PARAM_PARAMS: Any(dict, list, None)}
|
||||
DEFAULT_PARAMS_FILE = "params.yaml"
|
||||
|
||||
@@ -2,12 +2,12 @@ import os
|
||||
|
||||
from voluptuous import Required
|
||||
|
||||
from .local import DependencyLOCAL
|
||||
from .local import LocalDependency
|
||||
from dvc.exceptions import OutputNotFoundError
|
||||
from dvc.path_info import PathInfo
|
||||
|
||||
|
||||
class DependencyREPO(DependencyLOCAL):
|
||||
class RepoDependency(LocalDependency):
|
||||
PARAM_REPO = "repo"
|
||||
PARAM_URL = "url"
|
||||
PARAM_REV = "rev"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import DependencyBase
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.s3 import OutputS3
|
||||
|
||||
|
||||
class DependencyS3(DependencyBase, OutputS3):
|
||||
class S3Dependency(BaseDependency, OutputS3):
|
||||
pass
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import DependencyBase
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.ssh import OutputSSH
|
||||
|
||||
|
||||
class DependencySSH(DependencyBase, OutputSSH):
|
||||
class SSHDependency(BaseDependency, OutputSSH):
|
||||
pass
|
||||
|
||||
@@ -5,7 +5,7 @@ from dvc.repo import locked
|
||||
from dvc.path_info import PathInfo
|
||||
from dvc.compat import fspath_py35
|
||||
from dvc.exceptions import DvcException
|
||||
from dvc.dependency.param import DependencyPARAMS
|
||||
from dvc.dependency.param import ParamsDependency
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -17,10 +17,10 @@ class NoParamsError(DvcException):
|
||||
|
||||
def _collect_configs(repo):
|
||||
configs = set()
|
||||
configs.add(PathInfo(repo.root_dir) / DependencyPARAMS.DEFAULT_PARAMS_FILE)
|
||||
configs.add(PathInfo(repo.root_dir) / ParamsDependency.DEFAULT_PARAMS_FILE)
|
||||
for stage in repo.stages:
|
||||
for dep in stage.deps:
|
||||
if not isinstance(dep, DependencyPARAMS):
|
||||
if not isinstance(dep, ParamsDependency):
|
||||
continue
|
||||
|
||||
configs.add(dep.path_info)
|
||||
|
||||
@@ -194,7 +194,7 @@ class Stage(params.StageParams):
|
||||
if not self.is_import:
|
||||
return False
|
||||
|
||||
return isinstance(self.deps[0], dependency.DependencyREPO)
|
||||
return isinstance(self.deps[0], dependency.RepoDependency)
|
||||
|
||||
def _changed_deps(self):
|
||||
if self.locked:
|
||||
|
||||
@@ -6,7 +6,7 @@ from functools import wraps
|
||||
def rwlocked(call, read=None, write=None):
|
||||
import sys
|
||||
from dvc.rwlock import rwlock
|
||||
from dvc.dependency.repo import DependencyREPO
|
||||
from dvc.dependency.repo import RepoDependency
|
||||
|
||||
if read is None:
|
||||
read = []
|
||||
@@ -23,9 +23,9 @@ def rwlocked(call, read=None, write=None):
|
||||
item.path_info
|
||||
for attr in names
|
||||
for item in getattr(stage, attr)
|
||||
# There is no need to lock DependencyREPO deps, as there is no
|
||||
# There is no need to lock RepoDependency deps, as there is no
|
||||
# corresponding OutputREPO, so we can't even write it.
|
||||
if not isinstance(item, DependencyREPO)
|
||||
if not isinstance(item, RepoDependency)
|
||||
]
|
||||
|
||||
cmd = " ".join(sys.argv)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.dependency.gs import DependencyGS
|
||||
from tests.unit.dependency.test_local import TestDependencyLOCAL
|
||||
from dvc.dependency.gs import GSDependency
|
||||
from tests.unit.dependency.test_local import TestLocalDependency
|
||||
|
||||
|
||||
class TestDependencyGS(TestDependencyLOCAL):
|
||||
class TestGSDependency(TestLocalDependency):
|
||||
def _get_cls(self):
|
||||
return DependencyGS
|
||||
return GSDependency
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.dependency.hdfs import DependencyHDFS
|
||||
from tests.unit.dependency.test_local import TestDependencyLOCAL
|
||||
from dvc.dependency.hdfs import HDFSDependency
|
||||
from tests.unit.dependency.test_local import TestLocalDependency
|
||||
|
||||
|
||||
class TestDependencyHDFS(TestDependencyLOCAL):
|
||||
class TestHDFSDependency(TestLocalDependency):
|
||||
def _get_cls(self):
|
||||
return DependencyHDFS
|
||||
return HDFSDependency
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.dependency.http import DependencyHTTP
|
||||
from tests.unit.dependency.test_local import TestDependencyLOCAL
|
||||
from dvc.dependency.http import HTTPDependency
|
||||
from tests.unit.dependency.test_local import TestLocalDependency
|
||||
|
||||
|
||||
class TestDependencyHTTP(TestDependencyLOCAL):
|
||||
class TestHTTPDependency(TestLocalDependency):
|
||||
def _get_cls(self):
|
||||
return DependencyHTTP
|
||||
return HTTPDependency
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import mock
|
||||
|
||||
from dvc.dependency import DependencyLOCAL
|
||||
from dvc.dependency import LocalDependency
|
||||
from dvc.stage import Stage
|
||||
from tests.basic_env import TestDvc
|
||||
|
||||
|
||||
class TestDependencyLOCAL(TestDvc):
|
||||
class TestLocalDependency(TestDvc):
|
||||
def _get_cls(self):
|
||||
return DependencyLOCAL
|
||||
return LocalDependency
|
||||
|
||||
def _get_dependency(self):
|
||||
stage = Stage(self.dvc)
|
||||
|
||||
@@ -2,7 +2,7 @@ import yaml
|
||||
|
||||
import pytest
|
||||
|
||||
from dvc.dependency import DependencyPARAMS, loads_params, loadd_from
|
||||
from dvc.dependency import ParamsDependency, loads_params, loadd_from
|
||||
from dvc.dependency.param import BadParamFileError, MissingParamsError
|
||||
from dvc.stage import Stage
|
||||
|
||||
@@ -20,12 +20,12 @@ def test_loads_params(dvc):
|
||||
deps = loads_params(stage, ["foo", "bar,baz", "a_file:qux"])
|
||||
assert len(deps) == 2
|
||||
|
||||
assert isinstance(deps[0], DependencyPARAMS)
|
||||
assert deps[0].def_path == DependencyPARAMS.DEFAULT_PARAMS_FILE
|
||||
assert isinstance(deps[0], ParamsDependency)
|
||||
assert deps[0].def_path == ParamsDependency.DEFAULT_PARAMS_FILE
|
||||
assert deps[0].params == ["foo", "bar", "baz"]
|
||||
assert deps[0].info == {}
|
||||
|
||||
assert isinstance(deps[1], DependencyPARAMS)
|
||||
assert isinstance(deps[1], ParamsDependency)
|
||||
assert deps[1].def_path == "a_file"
|
||||
assert deps[1].params == ["qux"]
|
||||
assert deps[1].info == {}
|
||||
@@ -35,14 +35,14 @@ def test_loadd_from(dvc):
|
||||
stage = Stage(dvc)
|
||||
deps = loadd_from(stage, [{"params": PARAMS}])
|
||||
assert len(deps) == 1
|
||||
assert isinstance(deps[0], DependencyPARAMS)
|
||||
assert deps[0].def_path == DependencyPARAMS.DEFAULT_PARAMS_FILE
|
||||
assert isinstance(deps[0], ParamsDependency)
|
||||
assert deps[0].def_path == ParamsDependency.DEFAULT_PARAMS_FILE
|
||||
assert deps[0].params == list(PARAMS.keys())
|
||||
assert deps[0].info == PARAMS
|
||||
|
||||
|
||||
def test_dumpd_with_info(dvc):
|
||||
dep = DependencyPARAMS(Stage(dvc), None, PARAMS)
|
||||
dep = ParamsDependency(Stage(dvc), None, PARAMS)
|
||||
assert dep.dumpd() == {
|
||||
"path": "params.yaml",
|
||||
"params": PARAMS,
|
||||
@@ -50,7 +50,7 @@ def test_dumpd_with_info(dvc):
|
||||
|
||||
|
||||
def test_dumpd_without_info(dvc):
|
||||
dep = DependencyPARAMS(Stage(dvc), None, list(PARAMS.keys()))
|
||||
dep = ParamsDependency(Stage(dvc), None, list(PARAMS.keys()))
|
||||
assert dep.dumpd() == {
|
||||
"path": "params.yaml",
|
||||
"params": list(PARAMS.keys()),
|
||||
@@ -58,13 +58,13 @@ def test_dumpd_without_info(dvc):
|
||||
|
||||
|
||||
def test_read_params_nonexistent_file(dvc):
|
||||
dep = DependencyPARAMS(Stage(dvc), None, ["foo"])
|
||||
dep = ParamsDependency(Stage(dvc), None, ["foo"])
|
||||
assert dep.read_params() == {}
|
||||
|
||||
|
||||
def test_read_params_unsupported_format(tmp_dir, dvc):
|
||||
tmp_dir.gen("params.yaml", b"\0\1\2\3\4\5\6\7")
|
||||
dep = DependencyPARAMS(Stage(dvc), None, ["foo"])
|
||||
dep = ParamsDependency(Stage(dvc), None, ["foo"])
|
||||
with pytest.raises(BadParamFileError):
|
||||
dep.read_params()
|
||||
|
||||
@@ -73,18 +73,18 @@ def test_read_params_nested(tmp_dir, dvc):
|
||||
tmp_dir.gen(
|
||||
"params.yaml", yaml.dump({"some": {"path": {"foo": ["val1", "val2"]}}})
|
||||
)
|
||||
dep = DependencyPARAMS(Stage(dvc), None, ["some.path.foo"])
|
||||
dep = ParamsDependency(Stage(dvc), None, ["some.path.foo"])
|
||||
assert dep.read_params() == {"some.path.foo": ["val1", "val2"]}
|
||||
|
||||
|
||||
def test_save_info_missing_config(dvc):
|
||||
dep = DependencyPARAMS(Stage(dvc), None, ["foo"])
|
||||
dep = ParamsDependency(Stage(dvc), None, ["foo"])
|
||||
with pytest.raises(MissingParamsError):
|
||||
dep.save_info()
|
||||
|
||||
|
||||
def test_save_info_missing_param(tmp_dir, dvc):
|
||||
tmp_dir.gen("params.yaml", "bar: baz")
|
||||
dep = DependencyPARAMS(Stage(dvc), None, ["foo"])
|
||||
dep = ParamsDependency(Stage(dvc), None, ["foo"])
|
||||
with pytest.raises(MissingParamsError):
|
||||
dep.save_info()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.dependency.s3 import DependencyS3
|
||||
from tests.unit.dependency.test_local import TestDependencyLOCAL
|
||||
from dvc.dependency.s3 import S3Dependency
|
||||
from tests.unit.dependency.test_local import TestLocalDependency
|
||||
|
||||
|
||||
class TestDependencyS3(TestDependencyLOCAL):
|
||||
class TestS3Dependency(TestLocalDependency):
|
||||
def _get_cls(self):
|
||||
return DependencyS3
|
||||
return S3Dependency
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.dependency.ssh import DependencySSH
|
||||
from tests.unit.dependency.test_local import TestDependencyLOCAL
|
||||
from dvc.dependency.ssh import SSHDependency
|
||||
from tests.unit.dependency.test_local import TestLocalDependency
|
||||
|
||||
|
||||
class TestDependencySSH(TestDependencyLOCAL):
|
||||
class TestSSHDependency(TestLocalDependency):
|
||||
def _get_cls(self):
|
||||
return DependencySSH
|
||||
return SSHDependency
|
||||
|
||||
@@ -6,7 +6,7 @@ from unittest import TestCase
|
||||
import mock
|
||||
import pytest
|
||||
|
||||
from dvc.dependency.repo import DependencyREPO
|
||||
from dvc.dependency.repo import RepoDependency
|
||||
from dvc.stage import Stage
|
||||
from dvc.stage.exceptions import StageUpdateError
|
||||
|
||||
@@ -60,7 +60,7 @@ class TestPathConversion(TestCase):
|
||||
|
||||
|
||||
def test_stage_update(mocker):
|
||||
dep = DependencyREPO({"url": "example.com"}, None, "dep_path")
|
||||
dep = RepoDependency({"url": "example.com"}, None, "dep_path")
|
||||
mocker.patch.object(dep, "update", return_value=None)
|
||||
|
||||
stage = Stage(None, "path", deps=[dep])
|
||||
|
||||
Reference in New Issue
Block a user