diff --git a/dvc/dependency/base.py b/dvc/dependency/base.py index b08435653..9a7faa698 100644 --- a/dvc/dependency/base.py +++ b/dvc/dependency/base.py @@ -1,6 +1,7 @@ from typing import Type from dvc.exceptions import DvcException +from dvc.fs import download as fs_download from dvc.output import Output @@ -32,3 +33,6 @@ class Dependency(Output): def update(self, rev=None): pass + + def download(self, to, jobs=None): + fs_download(self.fs, self.fs_path, to, jobs=jobs) diff --git a/dvc/fs/__init__.py b/dvc/fs/__init__.py index db8fbdd0a..9a0a09e60 100644 --- a/dvc/fs/__init__.py +++ b/dvc/fs/__init__.py @@ -26,6 +26,7 @@ from dvc_objects.fs.errors import ( # noqa: F401 ) from dvc_objects.fs.path import Path # noqa: F401 +from .callbacks import Callback from .data import DataFileSystem # noqa: F401 from .dvc import DVCFileSystem # noqa: F401 from .git import GitFileSystem # noqa: F401 @@ -47,6 +48,14 @@ known_implementations.update( # pylint: enable=unused-import +def download(fs, fs_path, to, jobs=None): + with Callback.as_tqdm_callback( + desc=f"Downloading {fs.path.name(fs_path)}", + unit="files", + ) as cb: + fs.get(fs_path, to.fs_path, batch_size=jobs, callback=cb) + + def get_fs_config(config, **kwargs): name = kwargs.get("name") if name: diff --git a/dvc/output.py b/dvc/output.py index a88323816..1ddcd7a83 100644 --- a/dvc/output.py +++ b/dvc/output.py @@ -797,15 +797,6 @@ class Output: f"binary file '{self.fs_path}' cannot be used as metrics." ) - def download(self, to, jobs=None): - from dvc.fs.callbacks import Callback - - with Callback.as_tqdm_callback( - desc=f"Downloading {self.fs.path.name(self.fs_path)}", - unit="files", - ) as cb: - self.fs.get(self.fs_path, to.fs_path, batch_size=jobs, callback=cb) - def get_obj( self, filter_info: Optional[str] = None, **kwargs ) -> Optional["HashFile"]: