instant.signatures

Package instant :: Module signatures |
[hide private]
[frames] | no frames]

# Source Code for Module instant.signatures

     1  """This module contains helper functions for working with checksums."""
     2
     3  import hashlib
     4  from output import instant_assert, instant_debug, instant_error
     5
     6 -def compute_checksum(text="", filenames=[]):
     7      """
     8      Get the checksum value of filename
     9      modified based on Python24\Tools\Scripts\md5.py
    10      """
    11      instant_assert(isinstance(text, str), "Expecting string.")
    12      instant_assert(isinstance(filenames, (list,tuple)), "Expecting sequence.")
    13
    14      m = hashlib.new('sha1')
    15      if text:
    16          m.update(text)
    17
    18      for filename in sorted(filenames):
    19          instant_debug("Adding file '%s' to checksum." % filename)
    20          try:
    21              fp = open(filename, 'rb')
    22          except IOError, e:
    23              instant_error("Can't open file '%s': %s" % (filename, e))
    24
    25          try:
    26              while 1:
    27                  data = fp.read()
    28                  if not data:
    29                      break
    30                  m.update(data)
    31          except IOError, e:
    32              instant_error("I/O error reading '%s': %s" % (filename, e))
    33
    34          fp.close()
    35
    36      return m.hexdigest().lower()
    37
    38
    39 -def _test():
    40      signature = "(Test signature)"
    41      files = ["signatures.py", "__init__.py"]
    42      print
    43      print "Signature:", repr(signature)
    44      print "Checksum:", compute_checksum(signature, [])
    45      print
    46      print "Files:", files
    47      print "Checksum:", compute_checksum("", files)
    48      print
    49
    50  if __name__ == "__main__":
    51      _test()
    52