Source code for pypersist.hashing

"""Default method used by `persist` for hashing keys"""

from . import pickling
from hashlib import sha256
from base64 import urlsafe_b64encode

CHAR_ENCODING = "utf-8"


[docs]def hash(key): """Return a string which is a hash of the argument given It computes the SHA-256 sum of the key and returns it as a base 64 string. The string consists of alphanumeric characters, hyphens and underscores, and is precisely 43 characters long. Examples -------- >>> hash("somestringkey123") 'wXS1bv_UbdX4riiyyA3Djjo7JeiEfyGI7o1-hGMnkz0' >>> hash(3.141592654) 'nAh_dG9CDZL7bAFWX7E3iUXN2HXZ5eUiYUzdCJXDH-k' >>> hash(None) 'Tz_DSKgYlBpGTkFf_2udQWwd3DscZHQ4YdMo-8NFvNY' >>> key = (("arg1", [1,1,2,3,5,8,13]), ("x", "hello")) >>> hash(key) '1TBQNjqeAKCcCBmy-Sk_T1Xm01juuHOWiKotF5WYeZ8' >>> hash("somestringkey123") 'wXS1bv_UbdX4riiyyA3Djjo7JeiEfyGI7o1-hGMnkz0' """ b = pickling.pickle_to_bytes(key) # Pickle the key to a bytes object b = sha256(b).digest() # Hash the bytes using sha-256 b = urlsafe_b64encode(b) # Convert the hash to a base64 string assert b.endswith(b"=") b = b[0:-1] # Strip the final padding character ("=") s = b.decode(CHAR_ENCODING) # Convert from bytes to string return s