def portable_data_hash(self):
stripped = self.stripped_manifest().encode()
- return hashlib.md5(stripped).hexdigest() + '+' + str(len(stripped))
+ return '{}+{}'.format(hashlib.md5(stripped).hexdigest(), len(stripped))
def manifest_text(self):
self.finish_current_stream()
from __future__ import absolute_import
from __future__ import division
from future import standard_library
+from future.utils import native_str
standard_library.install_aliases()
from builtins import next
from builtins import str
def __str__(self):
return '+'.join(
- str(s) for s in [self.md5sum, self.size,
- self.permission_hint()] + self.hints
+ native_str(s)
+ for s in [self.md5sum, self.size,
+ self.permission_hint()] + self.hints
if s is not None)
def stripped(self):
cw.finish()
return cw.portable_data_hash()
+ def test_pdh_is_native_str(self):
+ pdh = self.write_foo_bar_baz()
+ self.assertEqual(type(''), type(pdh))
+
def test_keep_local_store(self):
self.assertEqual(self.keep_client.put(b'foo'), 'acbd18db4cc2f85cedef654fccc4a4d8+3', 'wrong md5 hash from Keep.put')
self.assertEqual(self.keep_client.get('acbd18db4cc2f85cedef654fccc4a4d8+3'), b'foo', 'wrong data from Keep.get')
locator = '+'.join((base,) + loc_hints)
self.assertEqual(locator, str(KeepLocator(locator)))
+ def test_str_type(self):
+ base = next(self.base_locators(1))
+ locator = KeepLocator(base)
+ self.assertEqual(type(''), type(locator.__str__()))
+
def test_expiry_passed(self):
base = next(self.base_locators(1))
signature = next(self.signatures(1))