]> git.phdru.name Git - m_lib.git/blob - m_lib/md5wrapper.py
Fix encoding for Py3 compatibility
[m_lib.git] / m_lib / md5wrapper.py
1 #! /usr/bin/env python
2 """User wrapper for md5 builtin object"""
3
4 from __future__ import print_function
5 import sys
6 if sys.version < '2.5':
7     from md5 import md5
8 else:
9     from hashlib import md5
10
11 __all__ = ['md5wrapper']
12
13 class md5wrapper:
14    def __init__(self, init=None):
15       if init:
16          if not isinstance(init, bytes):
17             init = init.encode('ascii')
18          self._md5 = md5(init)
19       else:
20          self._md5 = md5()
21
22    def update(self, data):
23       self._md5.update(data)
24
25    def digest(self):
26       return self._md5.digest()
27
28    def __repr__(self):
29       str = self.digest()
30       if isinstance(str, bytes):
31          str = str.decode('latin1')
32       return "%02x"*len(str) % tuple(map(ord, str))
33          # This nice was suggested by Guido
34
35    def md5file(self, f):
36       if type(f) == type(''): # If f is string - use it as file's name
37          infile = open(f, 'r')
38       else:
39          infile = f           # else assume it is file or file-like object
40
41       try:
42          while 1:
43             buf = infile.read(16*1024)
44             if not buf: break
45             self.update(buf)
46
47       finally:
48          if type(f) == type(''): # If f was opened - close it
49             infile.close()
50
51 if __name__ == "__main__":
52    print("This must print exactly the string")
53    print("Test: 900150983cd24fb0d6963f7d28e17f72")
54    print("Test:", md5wrapper("abc"))