if self.result is None or force:
self.result = None
self.done = False
- self.fileHasher = self._new()
+ self.fileHasher = self.newHasher()
if self.ORDER[self.hashTypeNum]['name'] == 'sha1':
self.pieceHasher = None
else:
- self.pieceHasher = self._newSHA1()
+ self.pieceHasher = self.newPieceHasher()
self.pieceSize = 0
self.fileHash = None
self.pieceHash = []
self.fileHex = None
self.fileNormHash = None
- def _new(self):
+ def newHasher(self):
"""Create a new hashing object according to the hash type."""
if sys.version_info < (2, 5):
mod = __import__(self.ORDER[self.hashTypeNum]['old_module'], globals(), locals(), [])
func = getattr(hashlib, self.ORDER[self.hashTypeNum]['hashlib_func'])
return func()
- def _newSHA1(self):
+ def newPieceHasher(self):
"""Create a new SHA1 hashing object."""
if sys.version_info < (2, 5):
import sha
# Save the first piece digest and initialize a new piece hasher
self.pieceHash.append(self.fileHasher.digest())
- self.pieceHasher = self._newSHA1()
+ self.pieceHasher = self.newPieceHasher()
if self.pieceHasher:
# Loop in case the data contains multiple pieces
# Save the piece hash and start a new one
self.pieceHasher.update(data[:(PIECE_SIZE - self.pieceSize)])
self.pieceHash.append(self.pieceHasher.digest())
- self.pieceHasher = self._newSHA1()
+ self.pieceHasher = self.newPieceHasher()
# Don't forget to hash the data normally
self.fileHasher.update(data[:(PIECE_SIZE - self.pieceSize)])
"""Hashes a file in a separate thread, returning a deferred that will callback with the result."""
file.restat(False)
if not file.exists():
- df = defer.Deferred()
- df.errback(HashError("file not found"))
- return df
+ return defer.fail(HashError("file not found"))
df = threads.deferToThread(self._hashInThread, file)
return df
def verify(self):
"""Verify that the added file data hash matches the expected hash."""
+ self.digest()
if self.result is None and self.fileHash is not None and self.expHash is not None:
self.result = (self.fileHash == self.expHash and self.size == self.expSize)
return self.result