def BuildClassFilesAndHash(jarfile,ignoreDirs = [],ignoreFiles = []): print 'Building ClassFiles' zip = zipfile.ZipFile(jarfile) files = [] for name in zip.namelist(): isokay = True for x in ignoreDirs: if name.startswith(x): isokay = False break for x in ignoreFiles: if name.endswith(x): isokay = False break if isokay == True: files.append(name) for name in files: if name.endswith('.class'): hasher = hashlib.md5() t = zip.open(name) temp = ClassFile(t) ClassFiles[name.replace(".class","")]=temp t = zip.open(name) hasher.update(t.read()) Hashes[name.replace(".class","")]=hasher.hexdigest() t.close() elif not name.endswith("/"): t = zip.open(name) hasher = hashlib.md5() hasher.update(t.read()) FingerPrint["other"][name] = hasher.hexdigest()
def read_class(self, classname): if is_classfile_ext(classname): raise Exception('Invalid classname "{}" - omit ".class"'.format(classname)) class_names = self.classfiles() if classname not in class_names: raise KeyError('{} not found in jar.'.format(classname)) entry_name = format_classfile_ext(classname) return ClassFile(self.open_zip.open(entry_name, self.mode))