MCPcopy
hub / github.com/HelloZeroNet/ZeroNet / addTask

Method addTask

plugins/Bigfile/BigfilePlugin.py:566–604  ·  view source on GitHub ↗
(self, inner_path, *args, **kwargs)

Source from the content-addressed store, hash-verified

564@PluginManager.registerTo("WorkerManager")
565class WorkerManagerPlugin(object):
566 def addTask(self, inner_path, *args, **kwargs):
567 file_info = kwargs.get("file_info")
568 if file_info and "piecemap" in file_info: # Bigfile
569 self.site.settings["has_bigfile"] = True
570
571 piecemap_inner_path = helper.getDirname(file_info["content_inner_path"]) + file_info["piecemap"]
572 piecemap_task = None
573 if not self.site.storage.isFile(piecemap_inner_path):
574 # Start download piecemap
575 piecemap_task = super(WorkerManagerPlugin, self).addTask(piecemap_inner_path, priority=30)
576 autodownload_bigfile_size_limit = self.site.settings.get("autodownload_bigfile_size_limit", config.autodownload_bigfile_size_limit)
577 if "|" not in inner_path and self.site.isDownloadable(inner_path) and file_info["size"] / 1024 / 1024 <= autodownload_bigfile_size_limit:
578 gevent.spawn_later(0.1, self.site.needFile, inner_path + "|all") # Download all pieces
579
580 if "|" in inner_path:
581 # Start download piece
582 task = super(WorkerManagerPlugin, self).addTask(inner_path, *args, **kwargs)
583
584 inner_path, file_range = inner_path.split("|")
585 pos_from, pos_to = map(int, file_range.split("-"))
586 task["piece_i"] = int(pos_from / file_info["piece_size"])
587 task["sha512"] = file_info["sha512"]
588 else:
589 if inner_path in self.site.bad_files:
590 del self.site.bad_files[inner_path]
591 if piecemap_task:
592 task = piecemap_task
593 else:
594 fake_evt = gevent.event.AsyncResult() # Don't download anything if no range specified
595 fake_evt.set(True)
596 task = {"evt": fake_evt}
597
598 if not self.site.storage.isFile(inner_path):
599 self.site.storage.createSparseFile(inner_path, file_info["size"], file_info["sha512"])
600 piece_num = int(math.ceil(float(file_info["size"]) / file_info["piece_size"]))
601 self.site.storage.piecefields[file_info["sha512"]].frombytes(b"\x00" * piece_num)
602 else:
603 task = super(WorkerManagerPlugin, self).addTask(inner_path, *args, **kwargs)
604 return task
605
606 def taskAddPeer(self, task, peer):
607 if "piece_i" in task:

Callers

nothing calls this directly

Calls 5

createSparseFileMethod · 0.80
getMethod · 0.45
isFileMethod · 0.45
isDownloadableMethod · 0.45
frombytesMethod · 0.45

Tested by

no test coverage detected