summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2016-03-17 19:37:28 +0200
committerLars Wirzenius <liw@liw.fi>2016-03-17 20:55:26 +0200
commitfea456ea4005bb740014fd2e2702ec43ebb8399c (patch)
tree79b1ab3547fe95c4320e69ec02e04d6bfde84b6b
parente6ec2ffbad0164b04005e3ca1014c6752a088c27 (diff)
downloadobnam-fea456ea4005bb740014fd2e2702ec43ebb8399c.tar.gz
Add RepositoryInterface.get_client_checksum_key
-rw-r--r--obnamlib/delegator.py4
-rw-r--r--obnamlib/fmt_6/repo_fmt_6.py3
-rw-r--r--obnamlib/fmt_ga/client.py5
-rw-r--r--obnamlib/repo_interface.py16
-rw-r--r--obnamlib/whole_file_checksummer.py7
-rw-r--r--obnamlib/whole_file_checksummer_tests.py8
6 files changed, 34 insertions, 9 deletions
diff --git a/obnamlib/delegator.py b/obnamlib/delegator.py
index c873374a..441505e3 100644
--- a/obnamlib/delegator.py
+++ b/obnamlib/delegator.py
@@ -267,6 +267,10 @@ class RepositoryDelegator(obnamlib.RepositoryInterface):
return client.set_file_keys_from_metadata(
generation_id.gen_number, filename, metadata)
+ def get_client_checksum_key(self, client_name):
+ client = self._lookup_client(client_name)
+ return client.get_client_checksum_key()
+
def get_file_chunk_ids(self, generation_id, filename):
client = self._lookup_client_by_generation(generation_id)
return client.get_file_chunk_ids(generation_id.gen_number, filename)
diff --git a/obnamlib/fmt_6/repo_fmt_6.py b/obnamlib/fmt_6/repo_fmt_6.py
index 6f95ee3c..d56439f3 100644
--- a/obnamlib/fmt_6/repo_fmt_6.py
+++ b/obnamlib/fmt_6/repo_fmt_6.py
@@ -993,6 +993,9 @@ class RepositoryFormat6(obnamlib.RepositoryInterface):
client_name=client_name,
key_name=obnamlib.repo_key_name(key))
+ def get_client_checksum_key(self, client_name):
+ return obnamlib.REPO_FILE_MD5
+
def get_file_chunk_ids(self, generation_id, filename):
self._require_existing_file(generation_id, filename)
client_name, gen_number = self._unpack_gen_id(generation_id)
diff --git a/obnamlib/fmt_ga/client.py b/obnamlib/fmt_ga/client.py
index b204c720..d29c85a6 100644
--- a/obnamlib/fmt_ga/client.py
+++ b/obnamlib/fmt_ga/client.py
@@ -53,6 +53,11 @@ class GAClient(object):
def set_default_checksum_algorithm(self, name):
self._default_checksum_algorithm = name
+ def get_client_checksum_key(self):
+ self._load_data()
+ assert self._checksum_algorithm is not None
+ return obnamlib.get_checksum_algorithm_key(self._checksum_algorithm)
+
def set_dir_bag_size(self, size):
self._dir_bag_size = size
if self._blob_store:
diff --git a/obnamlib/repo_interface.py b/obnamlib/repo_interface.py
index 6ab93ccd..3bba872f 100644
--- a/obnamlib/repo_interface.py
+++ b/obnamlib/repo_interface.py
@@ -575,6 +575,10 @@ class RepositoryInterface(object):
'''Return list of allowed per-client keys for thist format.'''
raise NotImplementedError()
+ def get_client_checksum_key(self, client_name):
+ '''Return file key for preferred checksum for client, or None.'''
+ raise NotImplementedError()
+
def get_client_key(self, client_name, key):
'''Return current value of a key for a given client.
@@ -779,7 +783,6 @@ class RepositoryInterface(object):
self.set_file_key(generation_id, filename, key, None)
def get_file_chunk_ids(self, generation_id, filename):
-
'''Get the list of chunk ids for a file.'''
raise NotImplementedError()
@@ -1945,6 +1948,17 @@ class RepositoryInterfaceTests(unittest.TestCase): # pragma: no cover
gen_id_2, '/foo/bar', obnamlib.REPO_FILE_SYMLINK_TARGET)
self.assertEqual(value_2, 'second')
+ def test_returns_an_acceptable_checksum_file_key_or_none(self):
+ self.setup_client()
+ self.assertTrue(
+ self.repo.get_client_checksum_key('fooclient') in
+ [None,
+ obnamlib.REPO_FILE_MD5,
+ obnamlib.REPO_FILE_SHA224,
+ obnamlib.REPO_FILE_SHA256,
+ obnamlib.REPO_FILE_SHA384,
+ obnamlib.REPO_FILE_SHA512])
+
def test_new_file_has_no_chunk_ids(self):
gen_id = self.create_generation()
self.repo.add_file(gen_id, '/foo/bar')
diff --git a/obnamlib/whole_file_checksummer.py b/obnamlib/whole_file_checksummer.py
index 517c09a1..b08655b9 100644
--- a/obnamlib/whole_file_checksummer.py
+++ b/obnamlib/whole_file_checksummer.py
@@ -35,11 +35,10 @@ class WholeFileCheckSummer(object):
'''
- def __init__(self, repo):
- self._summer = self._create_checksum_algorithm(repo)
+ def __init__(self, file_key):
+ self._summer = self._create_checksum_algorithm(file_key)
- def _create_checksum_algorithm(self, repo):
- file_key = repo.get_file_checksum_key()
+ def _create_checksum_algorithm(self, file_key):
if file_key is None:
return _NullChecksum()
name = obnamlib.get_checksum_algorithm_name(file_key)
diff --git a/obnamlib/whole_file_checksummer_tests.py b/obnamlib/whole_file_checksummer_tests.py
index c2addbec..c06becab 100644
--- a/obnamlib/whole_file_checksummer_tests.py
+++ b/obnamlib/whole_file_checksummer_tests.py
@@ -25,7 +25,7 @@ class WholeFileCheckSummerTests(unittest.TestCase):
def test_computes_nothing_if_repo_wants_no_checksum(self):
repo = FakeRepository(None)
- summer = obnamlib.WholeFileCheckSummer(repo)
+ summer = obnamlib.WholeFileCheckSummer(None)
chunk = 'hello'
token = repo.prepare_chunk_for_indexes(chunk)
summer.append_chunk(chunk, token)
@@ -33,7 +33,7 @@ class WholeFileCheckSummerTests(unittest.TestCase):
def test_computes_checksum_for_md5(self):
repo = FakeRepository(obnamlib.REPO_FILE_MD5)
- summer = obnamlib.WholeFileCheckSummer(repo)
+ summer = obnamlib.WholeFileCheckSummer(obnamlib.REPO_FILE_MD5)
chunk = 'hello'
token = repo.prepare_chunk_for_indexes(chunk)
summer.append_chunk(chunk, token)
@@ -43,7 +43,7 @@ class WholeFileCheckSummerTests(unittest.TestCase):
def test_computes_checksum_for_sha512(self):
repo = FakeRepository(obnamlib.REPO_FILE_SHA512)
- summer = obnamlib.WholeFileCheckSummer(repo)
+ summer = obnamlib.WholeFileCheckSummer(obnamlib.REPO_FILE_SHA512)
chunk = 'hello'
token = repo.prepare_chunk_for_indexes(chunk)
summer.append_chunk(chunk, token)
@@ -58,7 +58,7 @@ class FakeRepository(object):
def __init__(self, file_key):
self._file_key = file_key
- def get_file_checksum_key(self):
+ def get_client_checksum_key(self, client_name):
return self._file_key
def prepare_chunk_for_indexes(self, data):