mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
refactor: dvc/output class names unification (#3695)
This commit is contained in:
@@ -10,7 +10,7 @@ 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.output.base import BaseOutput
|
||||
from dvc.remote import Remote
|
||||
from dvc.scheme import Schemes
|
||||
from .repo import RepoDependency
|
||||
@@ -42,8 +42,8 @@ DEP_MAP = {
|
||||
# cached, see -o and -O flags for `dvc run`) and 'metric' (whether or not
|
||||
# output is a metric file and how to parse it, see `-M` flag for `dvc run`).
|
||||
SCHEMA = output.SCHEMA.copy()
|
||||
del SCHEMA[OutputBase.PARAM_CACHE]
|
||||
del SCHEMA[OutputBase.PARAM_METRIC]
|
||||
del SCHEMA[BaseOutput.PARAM_CACHE]
|
||||
del SCHEMA[BaseOutput.PARAM_METRIC]
|
||||
SCHEMA.update(RepoDependency.REPO_SCHEMA)
|
||||
SCHEMA.update(ParamsDependency.PARAM_SCHEMA)
|
||||
|
||||
@@ -71,7 +71,7 @@ def _get(stage, p, info):
|
||||
def loadd_from(stage, d_list):
|
||||
ret = []
|
||||
for d in d_list:
|
||||
p = d.pop(OutputBase.PARAM_PATH, None)
|
||||
p = d.pop(BaseOutput.PARAM_PATH, None)
|
||||
ret.append(_get(stage, p, d))
|
||||
return ret
|
||||
|
||||
@@ -101,7 +101,7 @@ def loads_params(stage, s_list):
|
||||
for path, params in params_by_path.items():
|
||||
d_list.append(
|
||||
{
|
||||
OutputBase.PARAM_PATH: path,
|
||||
BaseOutput.PARAM_PATH: path,
|
||||
ParamsDependency.PARAM_PARAMS: params,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.gs import OutputGS
|
||||
from dvc.output.gs import GSOutput
|
||||
|
||||
|
||||
class GSDependency(BaseDependency, OutputGS):
|
||||
class GSDependency(BaseDependency, GSOutput):
|
||||
pass
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.hdfs import OutputHDFS
|
||||
from dvc.output.hdfs import HDFSOutput
|
||||
|
||||
|
||||
class HDFSDependency(BaseDependency, OutputHDFS):
|
||||
class HDFSDependency(BaseDependency, HDFSOutput):
|
||||
pass
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.output.base import BaseOutput
|
||||
from dvc.remote.http import HTTPRemote
|
||||
|
||||
|
||||
class HTTPDependency(BaseDependency, OutputBase):
|
||||
class HTTPDependency(BaseDependency, BaseOutput):
|
||||
REMOTE = HTTPRemote
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.local import OutputLOCAL
|
||||
from dvc.output.local import LocalOutput
|
||||
|
||||
|
||||
class LocalDependency(BaseDependency, OutputLOCAL):
|
||||
class LocalDependency(BaseDependency, LocalOutput):
|
||||
pass
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.s3 import OutputS3
|
||||
from dvc.output.s3 import S3Output
|
||||
|
||||
|
||||
class S3Dependency(BaseDependency, OutputS3):
|
||||
class S3Dependency(BaseDependency, S3Output):
|
||||
pass
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from dvc.dependency.base import BaseDependency
|
||||
from dvc.output.ssh import OutputSSH
|
||||
from dvc.output.ssh import SSHOutput
|
||||
|
||||
|
||||
class SSHDependency(BaseDependency, OutputSSH):
|
||||
class SSHDependency(BaseDependency, SSHOutput):
|
||||
pass
|
||||
|
||||
+27
-27
@@ -1,12 +1,12 @@
|
||||
from urllib.parse import urlparse
|
||||
from voluptuous import Any, Required, Lower, Length, Coerce, And, SetTo
|
||||
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.output.gs import OutputGS
|
||||
from dvc.output.hdfs import OutputHDFS
|
||||
from dvc.output.local import OutputLOCAL
|
||||
from dvc.output.s3 import OutputS3
|
||||
from dvc.output.ssh import OutputSSH
|
||||
from dvc.output.base import BaseOutput
|
||||
from dvc.output.gs import GSOutput
|
||||
from dvc.output.hdfs import HDFSOutput
|
||||
from dvc.output.local import LocalOutput
|
||||
from dvc.output.s3 import S3Output
|
||||
from dvc.output.ssh import SSHOutput
|
||||
from dvc.remote import Remote
|
||||
from dvc.remote.hdfs import HDFSRemote
|
||||
from dvc.remote.local import LocalRemote
|
||||
@@ -14,19 +14,19 @@ from dvc.remote.s3 import S3Remote
|
||||
from dvc.scheme import Schemes
|
||||
|
||||
OUTS = [
|
||||
OutputHDFS,
|
||||
OutputS3,
|
||||
OutputGS,
|
||||
OutputSSH,
|
||||
# NOTE: OutputLOCAL is the default choice
|
||||
HDFSOutput,
|
||||
S3Output,
|
||||
GSOutput,
|
||||
SSHOutput,
|
||||
# NOTE: LocalOutput is the default choice
|
||||
]
|
||||
|
||||
OUTS_MAP = {
|
||||
Schemes.HDFS: OutputHDFS,
|
||||
Schemes.S3: OutputS3,
|
||||
Schemes.GS: OutputGS,
|
||||
Schemes.SSH: OutputSSH,
|
||||
Schemes.LOCAL: OutputLOCAL,
|
||||
Schemes.HDFS: HDFSOutput,
|
||||
Schemes.S3: S3Output,
|
||||
Schemes.GS: GSOutput,
|
||||
Schemes.SSH: SSHOutput,
|
||||
Schemes.LOCAL: LocalOutput,
|
||||
}
|
||||
|
||||
CHECKSUM_SCHEMA = Any(
|
||||
@@ -52,11 +52,11 @@ CHECKSUMS_SCHEMA = {
|
||||
TAGS_SCHEMA = {str: CHECKSUMS_SCHEMA}
|
||||
|
||||
SCHEMA = CHECKSUMS_SCHEMA.copy()
|
||||
SCHEMA[Required(OutputBase.PARAM_PATH)] = str
|
||||
SCHEMA[OutputBase.PARAM_CACHE] = bool
|
||||
SCHEMA[OutputBase.PARAM_METRIC] = OutputBase.METRIC_SCHEMA
|
||||
SCHEMA[OutputBase.PARAM_TAGS] = TAGS_SCHEMA
|
||||
SCHEMA[OutputBase.PARAM_PERSIST] = bool
|
||||
SCHEMA[Required(BaseOutput.PARAM_PATH)] = str
|
||||
SCHEMA[BaseOutput.PARAM_CACHE] = bool
|
||||
SCHEMA[BaseOutput.PARAM_METRIC] = BaseOutput.METRIC_SCHEMA
|
||||
SCHEMA[BaseOutput.PARAM_TAGS] = TAGS_SCHEMA
|
||||
SCHEMA[BaseOutput.PARAM_PERSIST] = bool
|
||||
|
||||
|
||||
def _get(stage, p, info, cache, metric, persist=False, tags=None):
|
||||
@@ -87,7 +87,7 @@ def _get(stage, p, info, cache, metric, persist=False, tags=None):
|
||||
persist=persist,
|
||||
tags=tags,
|
||||
)
|
||||
return OutputLOCAL(
|
||||
return LocalOutput(
|
||||
stage,
|
||||
p,
|
||||
info,
|
||||
@@ -102,11 +102,11 @@ def _get(stage, p, info, cache, metric, persist=False, tags=None):
|
||||
def loadd_from(stage, d_list):
|
||||
ret = []
|
||||
for d in d_list:
|
||||
p = d.pop(OutputBase.PARAM_PATH)
|
||||
cache = d.pop(OutputBase.PARAM_CACHE, True)
|
||||
metric = d.pop(OutputBase.PARAM_METRIC, False)
|
||||
persist = d.pop(OutputBase.PARAM_PERSIST, False)
|
||||
tags = d.pop(OutputBase.PARAM_TAGS, None)
|
||||
p = d.pop(BaseOutput.PARAM_PATH)
|
||||
cache = d.pop(BaseOutput.PARAM_CACHE, True)
|
||||
metric = d.pop(BaseOutput.PARAM_METRIC, False)
|
||||
persist = d.pop(BaseOutput.PARAM_PERSIST, False)
|
||||
tags = d.pop(BaseOutput.PARAM_TAGS, None)
|
||||
ret.append(
|
||||
_get(
|
||||
stage,
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ class OutputIsStageFileError(DvcException):
|
||||
super().__init__("Stage file '{}' cannot be an output.".format(path))
|
||||
|
||||
|
||||
class OutputBase(object):
|
||||
class BaseOutput(object):
|
||||
IS_DEPENDENCY = False
|
||||
|
||||
REMOTE = BaseRemote
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
from dvc.output.s3 import OutputS3
|
||||
from dvc.output.s3 import S3Output
|
||||
from dvc.remote.gs import GSRemote
|
||||
|
||||
|
||||
class OutputGS(OutputS3):
|
||||
class GSOutput(S3Output):
|
||||
REMOTE = GSRemote
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.output.base import BaseOutput
|
||||
from dvc.remote.hdfs import HDFSRemote
|
||||
|
||||
|
||||
class OutputHDFS(OutputBase):
|
||||
class HDFSOutput(BaseOutput):
|
||||
REMOTE = HDFSRemote
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ from urllib.parse import urlparse
|
||||
|
||||
from dvc.exceptions import DvcException
|
||||
from dvc.istextfile import istextfile
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.output.base import BaseOutput
|
||||
from dvc.remote.local import LocalRemote
|
||||
from dvc.utils import relpath
|
||||
from dvc.compat import fspath_py35
|
||||
@@ -14,7 +14,7 @@ from dvc.utils.fs import path_isin
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class OutputLOCAL(OutputBase):
|
||||
class LocalOutput(BaseOutput):
|
||||
REMOTE = LocalRemote
|
||||
sep = os.sep
|
||||
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.output.base import BaseOutput
|
||||
from dvc.remote.s3 import S3Remote
|
||||
|
||||
|
||||
class OutputS3(OutputBase):
|
||||
class S3Output(BaseOutput):
|
||||
REMOTE = S3Remote
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.output.base import BaseOutput
|
||||
from dvc.remote.ssh import SSHRemote
|
||||
|
||||
|
||||
class OutputSSH(OutputBase):
|
||||
class SSHOutput(BaseOutput):
|
||||
REMOTE = SSHRemote
|
||||
|
||||
@@ -455,7 +455,7 @@ class Stage(params.StageParams):
|
||||
}
|
||||
|
||||
def _compute_md5(self):
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.output.base import BaseOutput
|
||||
|
||||
d = self.dumpd()
|
||||
|
||||
@@ -471,15 +471,15 @@ class Stage(params.StageParams):
|
||||
del d[self.PARAM_WDIR]
|
||||
|
||||
# NOTE: excluding parameters that don't affect the state of the
|
||||
# pipeline. Not excluding `OutputLOCAL.PARAM_CACHE`, because if
|
||||
# pipeline. Not excluding `LocalOutput.PARAM_CACHE`, because if
|
||||
# it has changed, we might not have that output in our cache.
|
||||
m = dict_md5(
|
||||
d,
|
||||
exclude=[
|
||||
self.PARAM_LOCKED,
|
||||
OutputBase.PARAM_METRIC,
|
||||
OutputBase.PARAM_TAGS,
|
||||
OutputBase.PARAM_PERSIST,
|
||||
BaseOutput.PARAM_METRIC,
|
||||
BaseOutput.PARAM_TAGS,
|
||||
BaseOutput.PARAM_PERSIST,
|
||||
],
|
||||
)
|
||||
logger.debug("Computed {} md5: '{}'".format(self, m))
|
||||
|
||||
@@ -23,7 +23,7 @@ from dvc.exceptions import CyclicGraphError
|
||||
from dvc.exceptions import ReproductionError
|
||||
from dvc.exceptions import StagePathAsOutputError
|
||||
from dvc.main import main
|
||||
from dvc.output.base import OutputBase
|
||||
from dvc.output.base import BaseOutput
|
||||
from dvc.path_info import URLInfo
|
||||
from dvc.remote.local import LocalRemote
|
||||
from dvc.repo import Repo as DvcRepo
|
||||
@@ -1341,9 +1341,9 @@ class TestReproAlreadyCached(TestRepro):
|
||||
)
|
||||
|
||||
patch_checkout = patch.object(
|
||||
OutputBase,
|
||||
BaseOutput,
|
||||
"checkout",
|
||||
side_effect=OutputBase.checkout,
|
||||
side_effect=BaseOutput.checkout,
|
||||
autospec=True,
|
||||
)
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ from dvc.exceptions import OverlappingOutputPathsError
|
||||
from dvc.exceptions import StagePathAsOutputError
|
||||
from dvc.dvcfile import DVC_FILE_SUFFIX
|
||||
from dvc.main import main
|
||||
from dvc.output import OutputBase
|
||||
from dvc.output import BaseOutput
|
||||
from dvc.output.base import OutputIsStageFileError
|
||||
from dvc.repo import Repo as DvcRepo
|
||||
from dvc.stage import Stage
|
||||
@@ -667,7 +667,7 @@ class TestRunPersist(TestDvc):
|
||||
def stage_should_contain_persist_flag(self, stage_file):
|
||||
stage_file_content = load_stage_file(stage_file)
|
||||
self.assertEqual(
|
||||
True, stage_file_content["outs"][0][OutputBase.PARAM_PERSIST]
|
||||
True, stage_file_content["outs"][0][BaseOutput.PARAM_PERSIST]
|
||||
)
|
||||
|
||||
def should_append_upon_repro(self, file, stage_file):
|
||||
|
||||
@@ -3,7 +3,7 @@ import tempfile
|
||||
import pytest
|
||||
|
||||
from dvc.main import main
|
||||
from dvc.output.local import OutputLOCAL
|
||||
from dvc.output.local import LocalOutput
|
||||
from dvc.remote.local import LocalRemote
|
||||
from dvc.repo import Repo
|
||||
from dvc.stage import Stage
|
||||
@@ -54,15 +54,15 @@ def test_empty_list():
|
||||
|
||||
def test_list():
|
||||
lst = [
|
||||
{OutputLOCAL.PARAM_PATH: "foo", LocalRemote.PARAM_CHECKSUM: "123"},
|
||||
{OutputLOCAL.PARAM_PATH: "bar", LocalRemote.PARAM_CHECKSUM: None},
|
||||
{OutputLOCAL.PARAM_PATH: "baz"},
|
||||
{LocalOutput.PARAM_PATH: "foo", LocalRemote.PARAM_CHECKSUM: "123"},
|
||||
{LocalOutput.PARAM_PATH: "bar", LocalRemote.PARAM_CHECKSUM: None},
|
||||
{LocalOutput.PARAM_PATH: "baz"},
|
||||
]
|
||||
d = {Stage.PARAM_DEPS: lst}
|
||||
SingleStageFile.validate(d)
|
||||
|
||||
lst[0][OutputLOCAL.PARAM_CACHE] = True
|
||||
lst[1][OutputLOCAL.PARAM_CACHE] = False
|
||||
lst[0][LocalOutput.PARAM_CACHE] = True
|
||||
lst[1][LocalOutput.PARAM_CACHE] = False
|
||||
d = {Stage.PARAM_OUTS: lst}
|
||||
SingleStageFile.validate(d)
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.output.gs import OutputGS
|
||||
from tests.unit.output.test_local import TestOutputLOCAL
|
||||
from dvc.output.gs import GSOutput
|
||||
from tests.unit.output.test_local import TestLocalOutput
|
||||
|
||||
|
||||
class TestOutputGS(TestOutputLOCAL):
|
||||
class TestGSOutput(TestLocalOutput):
|
||||
def _get_cls(self):
|
||||
return OutputGS
|
||||
return GSOutput
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.output.hdfs import OutputHDFS
|
||||
from tests.unit.output.test_local import TestOutputLOCAL
|
||||
from dvc.output.hdfs import HDFSOutput
|
||||
from tests.unit.output.test_local import TestLocalOutput
|
||||
|
||||
|
||||
class TestOutputHDFS(TestOutputLOCAL):
|
||||
class TestHDFSOutput(TestLocalOutput):
|
||||
def _get_cls(self):
|
||||
return OutputHDFS
|
||||
return HDFSOutput
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import os
|
||||
|
||||
from mock import patch
|
||||
from dvc.output import OutputLOCAL
|
||||
from dvc.output import LocalOutput
|
||||
from dvc.remote.local import LocalRemote
|
||||
from dvc.stage import Stage
|
||||
from dvc.utils import relpath
|
||||
from tests.basic_env import TestDvc
|
||||
|
||||
|
||||
class TestOutputLOCAL(TestDvc):
|
||||
class TestLocalOutput(TestDvc):
|
||||
def _get_cls(self):
|
||||
return OutputLOCAL
|
||||
return LocalOutput
|
||||
|
||||
def _get_output(self):
|
||||
stage = Stage(self.dvc)
|
||||
@@ -25,19 +25,19 @@ class TestOutputLOCAL(TestDvc):
|
||||
|
||||
def test_str_workdir_outside_repo(erepo_dir):
|
||||
stage = Stage(erepo_dir.dvc)
|
||||
output = OutputLOCAL(stage, "path", cache=False)
|
||||
output = LocalOutput(stage, "path", cache=False)
|
||||
|
||||
assert relpath("path", erepo_dir.dvc.root_dir) == str(output)
|
||||
|
||||
|
||||
def test_str_workdir_inside_repo(dvc):
|
||||
stage = Stage(dvc)
|
||||
output = OutputLOCAL(stage, "path", cache=False)
|
||||
output = LocalOutput(stage, "path", cache=False)
|
||||
|
||||
assert "path" == str(output)
|
||||
|
||||
stage = Stage(dvc, wdir="some_folder")
|
||||
output = OutputLOCAL(stage, "path", cache=False)
|
||||
output = LocalOutput(stage, "path", cache=False)
|
||||
|
||||
assert os.path.join("some_folder", "path") == str(output)
|
||||
|
||||
@@ -47,7 +47,7 @@ def test_str_on_local_absolute_path(dvc):
|
||||
|
||||
rel_path = os.path.join("path", "to", "file")
|
||||
abs_path = os.path.abspath(rel_path)
|
||||
output = OutputLOCAL(stage, abs_path, cache=False)
|
||||
output = LocalOutput(stage, abs_path, cache=False)
|
||||
|
||||
assert output.def_path == rel_path
|
||||
assert output.path_info.fspath == abs_path
|
||||
@@ -59,7 +59,7 @@ def test_str_on_external_absolute_path(dvc):
|
||||
|
||||
rel_path = os.path.join("..", "path", "to", "file")
|
||||
abs_path = os.path.abspath(rel_path)
|
||||
output = OutputLOCAL(stage, abs_path, cache=False)
|
||||
output = LocalOutput(stage, abs_path, cache=False)
|
||||
|
||||
assert output.def_path == abs_path
|
||||
assert output.path_info.fspath == abs_path
|
||||
@@ -69,14 +69,14 @@ def test_str_on_external_absolute_path(dvc):
|
||||
class TestGetFilesNumber(TestDvc):
|
||||
def _get_output(self):
|
||||
stage = Stage(self.dvc)
|
||||
return OutputLOCAL(stage, "path")
|
||||
return LocalOutput(stage, "path")
|
||||
|
||||
def test_return_0_on_no_cache(self):
|
||||
o = self._get_output()
|
||||
o.use_cache = False
|
||||
self.assertEqual(0, o.get_files_number())
|
||||
|
||||
@patch.object(OutputLOCAL, "checksum", "12345678.dir")
|
||||
@patch.object(LocalOutput, "checksum", "12345678.dir")
|
||||
@patch.object(
|
||||
LocalRemote,
|
||||
"get_dir_cache",
|
||||
@@ -87,8 +87,8 @@ class TestGetFilesNumber(TestDvc):
|
||||
|
||||
self.assertEqual(2, o.get_files_number())
|
||||
|
||||
@patch.object(OutputLOCAL, "checksum", "12345678")
|
||||
@patch.object(OutputLOCAL, "is_dir_checksum", False)
|
||||
@patch.object(LocalOutput, "checksum", "12345678")
|
||||
@patch.object(LocalOutput, "is_dir_checksum", False)
|
||||
def test_return_1_on_single_file_cache(self):
|
||||
o = self._get_output()
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ from funcy import first
|
||||
from voluptuous import Schema, MultipleInvalid
|
||||
|
||||
from dvc.cache import NamedCache
|
||||
from dvc.output import CHECKSUM_SCHEMA, OutputBase
|
||||
from dvc.output import CHECKSUM_SCHEMA, BaseOutput
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
@@ -74,15 +74,15 @@ def test_get_used_cache(exists, expected_message, mocker, caplog):
|
||||
mocker.patch.object(stage, "__str__", return_value="stage: 'stage.dvc'")
|
||||
mocker.patch.object(stage, "addressing", "stage.dvc")
|
||||
|
||||
output = OutputBase(stage, "path")
|
||||
output = BaseOutput(stage, "path")
|
||||
|
||||
mocker.patch.object(output, "use_cache", True)
|
||||
mocker.patch.object(stage, "is_repo_import", False)
|
||||
mocker.patch.object(
|
||||
OutputBase, "checksum", new_callable=mocker.PropertyMock
|
||||
BaseOutput, "checksum", new_callable=mocker.PropertyMock
|
||||
).return_value = None
|
||||
mocker.patch.object(
|
||||
OutputBase, "exists", new_callable=mocker.PropertyMock
|
||||
BaseOutput, "exists", new_callable=mocker.PropertyMock
|
||||
).return_value = exists
|
||||
|
||||
with caplog.at_level(logging.WARNING, logger="dvc"):
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.output.s3 import OutputS3
|
||||
from tests.unit.output.test_local import TestOutputLOCAL
|
||||
from dvc.output.s3 import S3Output
|
||||
from tests.unit.output.test_local import TestLocalOutput
|
||||
|
||||
|
||||
class TestOutputS3(TestOutputLOCAL):
|
||||
class TestS3Output(TestLocalOutput):
|
||||
def _get_cls(self):
|
||||
return OutputS3
|
||||
return S3Output
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from dvc.output.ssh import OutputSSH
|
||||
from tests.unit.output.test_local import TestOutputLOCAL
|
||||
from dvc.output.ssh import SSHOutput
|
||||
from tests.unit.output.test_local import TestLocalOutput
|
||||
|
||||
|
||||
class TestOutputSSH(TestOutputLOCAL):
|
||||
class TestSSHOutput(TestLocalOutput):
|
||||
def _get_cls(self):
|
||||
return OutputSSH
|
||||
return SSHOutput
|
||||
|
||||
Reference in New Issue
Block a user