Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.util.hash_util

"""
Utility functions for bi-directional Python version compatibility.  Python 2.5
introduced hashlib which replaced sha in Python 2.4 and previous versions.
"""
from __future__ import absolute_import

import hashlib
import hmac
import logging

log = logging.getLogger(__name__)

sha1 = hashlib.sha1
sha = sha1
md5 = hashlib.md5


def md5_hash_file(path):
    """
    Return a md5 hashdigest for a file or None if path could not be read.
    """
    hasher = hashlib.md5()
    try:
        with open(path, 'rb') as afile:
            buf = afile.read()
            hasher.update(buf)
            return hasher.hexdigest()
    except IOError:
        # This may happen if path has been deleted
        return None


[docs]def new_secure_hash(text_type=None): """ Returns either a sha1 hash object (if called with no arguments), or a hexdigest of the sha1 hash of the argument `text_type`. """ if text_type: return sha1(text_type).hexdigest() else: return sha1()
[docs]def hmac_new(key, value): return hmac.new(key, value, sha).hexdigest()
[docs]def is_hashable(value): try: hash(value) except: return False return True
__all__ = ('md5', 'hashlib', 'sha1', 'sha', 'new_secure_hash', 'hmac_new', 'is_hashable')