from base64 import ( b64encode, ) from math import ( ceil, ) def _message_maker(label): def make_message(storage_index): return u"{label} {storage_index}".format( label=label, storage_index=b64encode(storage_index), ) return make_message allocate_buckets_message = _message_maker(u"allocate_buckets") add_lease_message = _message_maker(u"add_lease") renew_lease_message = _message_maker(u"renew_lease") slot_testv_and_readv_and_writev_message = _message_maker(u"slot_testv_and_readv_and_writev") # The number of bytes we're willing to store for a lease period for each pass # submitted. BYTES_PER_PASS = 128 * 1024 def required_passes(bytes_per_pass, share_nums, share_size): """ Calculate the number of passes that are required to store ``stored_bytes`` for one lease period. :param int stored_bytes: A number of bytes of storage for which to calculate a price in passes. :return int: The number of passes. """ return int( ceil( (len(share_nums) * share_size) / bytes_per_pass, ), )