MCPcopy Index your code
hub / github.com/HelloZeroNet/ZeroNet / hashBigfile

Method hashBigfile

plugins/Bigfile/BigfilePlugin.py:232–280  ·  view source on GitHub ↗
(self, file_in, size, piece_size=1024 * 1024, file_out=None)

Source from the content-addressed store, hash-verified

230 break
231
232 def hashBigfile(self, file_in, size, piece_size=1024 * 1024, file_out=None):
233 self.site.settings["has_bigfile"] = True
234
235 recv = 0
236 try:
237 piece_hash = CryptHash.sha512t()
238 piece_hashes = []
239 piece_recv = 0
240
241 mt = merkletools.MerkleTools()
242 mt.hash_function = CryptHash.sha512t
243
244 part = ""
245 for part in self.readFile(file_in, size):
246 if file_out:
247 file_out.write(part)
248
249 recv += len(part)
250 piece_recv += len(part)
251 piece_hash.update(part)
252 if piece_recv >= piece_size:
253 piece_digest = piece_hash.digest()
254 piece_hashes.append(piece_digest)
255 mt.leaves.append(piece_digest)
256 piece_hash = CryptHash.sha512t()
257 piece_recv = 0
258
259 if len(piece_hashes) % 100 == 0 or recv == size:
260 self.log.info("- [HASHING:%.0f%%] Pieces: %s, %.1fMB/%.1fMB" % (
261 float(recv) / size * 100, len(piece_hashes), recv / 1024 / 1024, size / 1024 / 1024
262 ))
263 part = ""
264 if len(part) > 0:
265 piece_digest = piece_hash.digest()
266 piece_hashes.append(piece_digest)
267 mt.leaves.append(piece_digest)
268 except Exception as err:
269 raise err
270 finally:
271 if file_out:
272 file_out.close()
273
274 mt.make_tree()
275 merkle_root = mt.get_merkle_root()
276 if type(merkle_root) is bytes: # Python <3.5
277 merkle_root = merkle_root.decode()
278 return merkle_root, piece_size, {
279 "sha512_pieces": piece_hashes
280 }
281
282 def hashFile(self, dir_inner_path, file_relative_path, optional=False):
283 inner_path = dir_inner_path + file_relative_path

Callers 2

hashFileMethod · 0.95
actionBigfileUploadMethod · 0.80

Calls 5

readFileMethod · 0.95
writeMethod · 0.45
updateMethod · 0.45
digestMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected