summaryrefslogtreecommitdiff
path: root/morphlib
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2012-05-17 14:55:47 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2012-05-18 09:13:40 +0000
commitaa1ae3333d723b7bf91beab4f357c1cb99ecf742 (patch)
treee733186a0df4cd4624130e96603e1d77f520381f /morphlib
parentac7e1908daa969e7fcd16ad9e5a80b34b92417ad (diff)
downloadmorph-aa1ae3333d723b7bf91beab4f357c1cb99ecf742.tar.gz
CacheKeyComputer: re-use dict hash logic for morphology hashing
CacheKeyComputer already re-invents the wheel for hashing a dict, so re-use that logic rather than re-implement it as creating a huge string.
Diffstat (limited to 'morphlib')
-rw-r--r--morphlib/cachekeycomputer.py19
-rw-r--r--morphlib/cachekeycomputer_tests.py13
2 files changed, 2 insertions, 30 deletions
diff --git a/morphlib/cachekeycomputer.py b/morphlib/cachekeycomputer.py
index 6ae2b107..e8cbed2c 100644
--- a/morphlib/cachekeycomputer.py
+++ b/morphlib/cachekeycomputer.py
@@ -91,24 +91,9 @@ class CacheKeyComputer(object):
elif kind in ('system', 'stratum'):
morphology = artifact.source.morphology
le_dict = dict((k,morphology[k]) for k in morphology.keys())
- checksum = hashlib.sha1(self._stringify(le_dict))
+ checksum = hashlib.sha1()
+ self._hash_thing(checksum, le_dict)
keys['morphology-sha1'] = checksum.hexdigest()
return keys
- def _stringify(self, value):
- if type(value) in [str, unicode, int]:
- return str(value)
- elif value is None:
- return ''
- elif type(value) is list:
- return '[' + ','.join(self._stringify(x) for x in value) + ']'
- elif type(value) is dict:
- keys = value.keys()
- keys.sort(key=lambda s: [ord(c) for c in s])
- pairs = ['%s:%s' % (self._stringify(k), self._stringify(value[k]))
- for k in keys]
- return '{' + ','.join(pairs) + '}'
- else: # pragma: no cover
- raise NotImplementedError(
- 'type %s is not stringified' % type(value))
diff --git a/morphlib/cachekeycomputer_tests.py b/morphlib/cachekeycomputer_tests.py
index 32aef02e..807fbe89 100644
--- a/morphlib/cachekeycomputer_tests.py
+++ b/morphlib/cachekeycomputer_tests.py
@@ -166,17 +166,4 @@ class CacheKeyComputerTests(unittest.TestCase):
old_sha = self.ckc.compute_key(old_artifact)
new_sha = self.ckc.compute_key(new_artifact)
self.assertEqual(old_sha, new_sha)
-
- def test_stringifies_string(self):
- self.assertEqual(self.ckc._stringify('foo'), 'foo')
-
- def test_stringifies_integer(self):
- self.assertEqual(self.ckc._stringify(12765), '12765')
-
- def test_stringifies_dict(self):
- self.assertEqual(self.ckc._stringify({'foo': 'bar', 'yo': 'foobar' }),
- '{foo:bar,yo:foobar}')
-
- def test_stringifies_list(self):
- self.assertEqual(self.ckc._stringify(['foo', 'bar']), '[foo,bar]')