diff --git a/dvc/dependency/__init__.py b/dvc/dependency/__init__.py index 45de5bf57d..1fa2073e24 100644 --- a/dvc/dependency/__init__.py +++ b/dvc/dependency/__init__.py @@ -2,6 +2,7 @@ from urllib.parse import urlparse import dvc.output as output +from dvc.dependency.azure import AzureDependency from dvc.dependency.gs import GSDependency from dvc.dependency.hdfs import HDFSDependency from dvc.dependency.http import HTTPDependency @@ -17,6 +18,7 @@ from .repo import RepoDependency DEPS = [ + AzureDependency, GSDependency, HDFSDependency, HTTPDependency, @@ -30,6 +32,7 @@ Schemes.LOCAL: LocalDependency, Schemes.SSH: SSHDependency, Schemes.S3: S3Dependency, + Schemes.AZURE: AzureDependency, Schemes.GS: GSDependency, Schemes.HDFS: HDFSDependency, Schemes.HTTP: HTTPDependency, diff --git a/dvc/dependency/azure.py b/dvc/dependency/azure.py new file mode 100644 index 0000000000..c119d15efb --- /dev/null +++ b/dvc/dependency/azure.py @@ -0,0 +1,7 @@ +from dvc.dependency.base import BaseDependency +from dvc.output.base import BaseOutput +from dvc.remote.azure import AzureRemote + + +class AzureDependency(BaseDependency, BaseOutput): + REMOTE = AzureRemote diff --git a/dvc/remote/azure.py b/dvc/remote/azure.py index 90d76dbf81..e23d8ed2db 100644 --- a/dvc/remote/azure.py +++ b/dvc/remote/azure.py @@ -29,10 +29,8 @@ def __init__(self, repo, config): self.path_info = self.path_cls(url) if not self.path_info.bucket: - self.path_info = self.path_cls.from_parts( - scheme=self.scheme, - netloc=os.getenv("AZURE_STORAGE_CONTAINER_NAME"), - ) + container = os.getenv("AZURE_STORAGE_CONTAINER_NAME") + self.path_info = self.path_cls(f"azure://{container}") self.connection_string = config.get("connection_string") or os.getenv( "AZURE_STORAGE_CONNECTION_STRING" @@ -58,6 +56,15 @@ def blob_service(self): blob_service.create_container(self.path_info.bucket) return blob_service + def get_etag(self, path_info): + etag = self.blob_service.get_blob_properties( + path_info.bucket, path_info.path + ).properties.etag + return etag.strip('"') + + def get_file_checksum(self, path_info): + return self.get_etag(path_info) + def remove(self, path_info): if path_info.scheme != self.scheme: raise NotImplementedError diff --git a/tests/unit/dependency/test_azure.py b/tests/unit/dependency/test_azure.py new file mode 100644 index 0000000000..fff7910615 --- /dev/null +++ b/tests/unit/dependency/test_azure.py @@ -0,0 +1,7 @@ +from dvc.dependency.azure import AzureDependency +from tests.unit.dependency.test_local import TestLocalDependency + + +class TestAzureDependency(TestLocalDependency): + def _get_cls(self): + return AzureDependency