diff env/lib/python3.7/site-packages/galaxy/util/hash_util.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.7/site-packages/galaxy/util/hash_util.py	Sat May 02 07:14:21 2020 -0400
@@ -0,0 +1,88 @@
+"""
+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
+
+from . import smart_str
+
+
+log = logging.getLogger(__name__)
+
+BLOCK_SIZE = 1024 * 1024
+
+sha1 = hashlib.sha1
+sha256 = hashlib.sha256
+sha512 = hashlib.sha512
+sha = sha1
+md5 = hashlib.md5
+
+HASH_NAME_MAP = {
+    "MD5": md5,
+    "SHA-1": sha1,
+    "SHA-256": sha256,
+    "SHA-512": sha512,
+}
+HASH_NAMES = list(HASH_NAME_MAP.keys())
+
+
+def memory_bound_hexdigest(hash_func=None, hash_func_name=None, path=None, file=None):
+    if hash_func is None:
+        assert hash_func_name is not None
+        hash_func = HASH_NAME_MAP[hash_func_name]
+
+    hasher = hash_func()
+    if file is None:
+        assert path is not None
+        file = open(path, "rb")
+    else:
+        assert path is None, "Cannot specify path and path keyword arguments."
+
+    try:
+        for block in iter(lambda: file.read(BLOCK_SIZE), b''):
+            hasher.update(block)
+        return hasher.hexdigest()
+    finally:
+        file.close()
+
+
+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
+
+
+def new_secure_hash(text_type):
+    """
+    Returns the hexdigest of the sha1 hash of the argument `text_type`.
+    """
+    assert text_type is not None
+    return sha1(smart_str(text_type)).hexdigest()
+
+
+def hmac_new(key, value):
+    return hmac.new(key, value, sha).hexdigest()
+
+
+def is_hashable(value):
+    try:
+        hash(value)
+    except Exception:
+        return False
+    return True
+
+
+__all__ = ('md5', 'hashlib', 'sha1', 'sha', 'new_secure_hash', 'hmac_new', 'is_hashable')