From: Jeremy Kerr Date: Thu, 11 Sep 2008 05:53:08 +0000 (+1000) Subject: Add HashField.construct() method X-Git-Url: https://git.ozlabs.org/?p=patchwork;a=commitdiff_plain;h=0deabd4014cbc9419d203356786e966c4f803ea3 Add HashField.construct() method To construct a new hash object for the given algorithm. While we're at it, clean up the hashlib-wrapping code. Signed-off-by: Jeremy Kerr --- diff --git a/apps/patchwork/models.py b/apps/patchwork/models.py index 62ce592..226a69c 100644 --- a/apps/patchwork/models.py +++ b/apps/patchwork/models.py @@ -176,19 +176,19 @@ class HashField(models.CharField): self.algorithm = algorithm try: import hashlib - self.hashlib = True + def _construct(string = ''): + return hashlib.new(self.algorithm, string) + self.construct = _construct self.n_bytes = len(hashlib.new(self.algorithm).hexdigest()) except ImportError: - self.hashlib = False - if algorithm == 'sha1': - import sha - hash_constructor = sha.new - elif algorithm == 'md5': - import md5 - hash_constructor = md5.new - else: + modules = { 'sha1': 'sha', 'md5': 'md5'} + + if algorithm not in modules.keys(): raise NameError("Unknown algorithm '%s'" % algorithm) - self.n_bytes = len(hash_constructor().hexdigest()) + + self.construct = __import__(modules[algorithm]).new + + self.n_bytes = len(self.construct().hexdigest()) kwargs['max_length'] = self.n_bytes super(HashField, self).__init__(*args, **kwargs)