From 7af8f90cfe8c13323b3e3ec6f2ed4bbdf18d2520 Mon Sep 17 00:00:00 2001 From: Brett Smith Date: Fri, 24 May 2024 11:04:03 -0400 Subject: [PATCH] 21020: Make arv-keepdocker use a cache from the environment Arvados-DCO-1.1-Signed-off-by: Brett Smith --- sdk/python/arvados/commands/keepdocker.py | 14 +++++++++++--- sdk/python/tests/test_arv_keepdocker.py | 10 ++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/sdk/python/arvados/commands/keepdocker.py b/sdk/python/arvados/commands/keepdocker.py index 6823ee1bea..188f8be457 100644 --- a/sdk/python/arvados/commands/keepdocker.py +++ b/sdk/python/arvados/commands/keepdocker.py @@ -18,6 +18,7 @@ import tempfile import ciso8601 from operator import itemgetter +from pathlib import Path from stat import * import arvados @@ -27,6 +28,10 @@ import arvados.commands._util as arv_cmd import arvados.commands.put as arv_put from arvados._version import __version__ +from typing import ( + Callable, +) + logger = logging.getLogger('arvados.keepdocker') logger.setLevel(logging.DEBUG if arvados.config.get('ARVADOS_DEBUG') else logging.INFO) @@ -181,9 +186,12 @@ def save_image(image_hash, image_file): except STAT_CACHE_ERRORS: pass # We won't resume from this cache. No big deal. -def get_cache_dir(): - return arv_cmd.make_home_conf_dir( - os.path.join('.cache', 'arvados', 'docker'), 0o700) +def get_cache_dir( + mkparent: Callable[[], Path]=arvados.util._BaseDirectories('CACHE').storage_path, +) -> str: + path = mkparent() / 'docker' + path.mkdir(mode=0o700, exist_ok=True) + return str(path) def prep_image_file(filename): # Return a file object ready to save a Docker image, diff --git a/sdk/python/tests/test_arv_keepdocker.py b/sdk/python/tests/test_arv_keepdocker.py index 5d23dfb378..c5bcfff41b 100644 --- a/sdk/python/tests/test_arv_keepdocker.py +++ b/sdk/python/tests/test_arv_keepdocker.py @@ -18,6 +18,7 @@ from pathlib import Path from unittest import mock import parameterized +import pytest import arvados.commands.keepdocker as arv_keepdocker from . import arvados_testutil as tutil @@ -255,3 +256,12 @@ class ImageMetadataTestCase(unittest.TestCase): def test_image_config(self): self.assertIsInstance(self.config, collections.abc.Mapping) self.assertEqual(self.config.get('created'), '2023-05-02T16:49:27Z') + + +def test_get_cache_dir(tmp_path): + actual = arv_keepdocker.get_cache_dir(lambda: tmp_path) + assert isinstance(actual, str) + actual = Path(actual) + assert actual.is_dir() + assert actual.name == 'docker' + assert actual.parent == tmp_path -- 2.30.2