diff --git a/src/_zkapauthorizer/_storage_server.py b/src/_zkapauthorizer/_storage_server.py index 2455cc6ab1441d1536affe676c018d1bb4d67121..f76443a1e285f5743cea9a1cf0e568e71ec3ad7f 100644 --- a/src/_zkapauthorizer/_storage_server.py +++ b/src/_zkapauthorizer/_storage_server.py @@ -459,7 +459,8 @@ def get_share_sizes(storage_server, storage_index_or_slot, sharenums): :param sharenums: A container of share numbers to use to filter the results. Only information about share numbers in this container is - included in the result. + included in the result. Or, ``None`` to get sizes for all shares + which exist. :return: A generator of tuples of (int, int) where the first element is a share number and the second element is the data size for that share @@ -475,7 +476,7 @@ def get_share_sizes(storage_server, storage_index_or_slot, sharenums): get_size = get_slot_share_size else: get_size = get_storage_index_share_size - if sharenum in sharenums: + if sharenums is None or sharenum in sharenums: yield sharenum, get_size(sharepath) diff --git a/src/_zkapauthorizer/foolscap.py b/src/_zkapauthorizer/foolscap.py index 0b704b7a571d9caf919049c3d251e64d018a8a3e..4e77b5a5075ec4b215d221cbbb8c9e941401cf29 100644 --- a/src/_zkapauthorizer/foolscap.py +++ b/src/_zkapauthorizer/foolscap.py @@ -6,8 +6,9 @@ from foolscap.constraint import ( ByteStringConstraint, ) from foolscap.api import ( - DictOf, + ChoiceOf, SetOf, + DictOf, ListOf, ) from foolscap.remoteinterface import ( @@ -124,7 +125,7 @@ class RIPrivacyPassAuthorizedStorageServer(RemoteInterface): def share_sizes( storage_index_or_slot=StorageIndex, - sharenums=SetOf(int, maxLength=MAX_BUCKETS), + sharenums=ChoiceOf(None, SetOf(int, maxLength=MAX_BUCKETS)), ): """ Get the size of the given shares in the given storage index or slot. If a diff --git a/src/_zkapauthorizer/tests/test_storage_server.py b/src/_zkapauthorizer/tests/test_storage_server.py index 07cc6e16ccf007061306d8eb4f8ff62a86e4588f..d74fa0a5bf05b59f78ffe9f207a8257adc084b14 100644 --- a/src/_zkapauthorizer/tests/test_storage_server.py +++ b/src/_zkapauthorizer/tests/test_storage_server.py @@ -44,6 +44,8 @@ from hypothesis.strategies import ( integers, lists, tuples, + one_of, + just, ) from privacypass import ( RandomToken, @@ -470,7 +472,7 @@ class PassValidationTests(TestCase): lease_renew_secrets(), lease_cancel_secrets(), ), - sharenums=sharenum_sets(), + sharenums=one_of(just(None), sharenum_sets()), test_and_write_vectors_for_shares=test_and_write_vectors_for_shares(), ) def test_mutable_share_sizes(self, slot, secrets, sharenums, test_and_write_vectors_for_shares): @@ -523,7 +525,7 @@ class PassValidationTests(TestCase): sharenum: get_implied_data_length(data_vector, new_length) for (sharenum, (testv, data_vector, new_length)) in tw_vectors.items() - if sharenum in sharenums + if sharenums is None or sharenum in sharenums } actual_sizes = self.storage_server.doRemoteCall(