From fea456ea4005bb740014fd2e2702ec43ebb8399c Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 17 Mar 2016 19:37:28 +0200 Subject: Add RepositoryInterface.get_client_checksum_key --- obnamlib/delegator.py | 4 ++++ obnamlib/fmt_6/repo_fmt_6.py | 3 +++ obnamlib/fmt_ga/client.py | 5 +++++ obnamlib/repo_interface.py | 16 +++++++++++++++- obnamlib/whole_file_checksummer.py | 7 +++---- obnamlib/whole_file_checksummer_tests.py | 8 ++++---- 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): -- cgit v1.2.1