code: def md5sum(path):
      
  
      if path is None or len(path) == 0 or not os.path.exists(path):
          return None
  
      try:
          with open(path + '.md5sum') as f:
              md5 = f.read()
              if len(md5) == 32:
                  return md5
      # Unicode error is when user rename an image to .md5sum ....
      except (OSError, UnicodeDecodeError):
          pass
  
      try:
          m = hashlib.md5()
          with open(path, 'rb') as f:
              while True:
                  buf = f.read(128)
                  if not buf:
                      break
                  m.update(buf)
          digest = m.hexdigest()
      except OSError as e:
          log.error("Can't create digest of %s: %s", path, str(e))
          return None
  
      try:
          with open('{}.md5sum'.format(path), 'w+') as f:
              f.write(digest)
      except OSError as e:
          log.error("Can't write digest of %s: %s", path, str(e))
  
      return digest
docs: Return the md5sum of an image and cache it on disk
  
      :param path: Path to the image
      :returns: Digest of the image