def _calculate_md5_from_file(fileobj): start_position = fileobj.tell() md5 = get_md5() for chunk in iter(lambda: fileobj.read(1024 * 1024), b''): md5.update(chunk) fileobj.seek(start_position) return md5.digest()
def _sse_md5(params, sse_member_prefix='SSECustomer'): if not _needs_s3_sse_customization(params, sse_member_prefix): return sse_key_member = sse_member_prefix + 'Key' sse_md5_member = sse_member_prefix + 'KeyMD5' key_as_bytes = params[sse_key_member] if isinstance(key_as_bytes, six.text_type): key_as_bytes = key_as_bytes.encode('utf-8') key_md5_str = base64.b64encode( get_md5(key_as_bytes).digest()).decode('utf-8') key_b64_encoded = base64.b64encode(key_as_bytes).decode('utf-8') params[sse_key_member] = key_b64_encoded params[sse_md5_member] = key_md5_str
def test_unavailable_raises_error(self): with mock.patch('ibm_botocore.compat.MD5_AVAILABLE', False): with self.assertRaises(MD5UnavailableError): get_md5()
def _calculate_md5_from_bytes(body_bytes): md5 = get_md5(body_bytes) return md5.digest()
def test_available(self): md5 = mock.Mock() with mock.patch('ibm_botocore.compat.MD5_AVAILABLE', True): with mock.patch('hashlib.md5', mock.Mock(return_value=md5)): self.assertEqual(get_md5(), md5)