diff --git a/scripts/download_blob_from_peer.py b/scripts/download_blob_from_peer.py new file mode 100644 index 000000000..488b04efc --- /dev/null +++ b/scripts/download_blob_from_peer.py @@ -0,0 +1,43 @@ +import sys +import os +import asyncio +import socket +from lbrynet.conf import Config +from lbrynet.extras.daemon.storage import SQLiteStorage +from lbrynet.blob.blob_manager import BlobFileManager +from lbrynet.blob_exchange.client import BlobExchangeClientProtocol, request_blob +import logging + +log = logging.getLogger("lbrynet") +log.addHandler(logging.StreamHandler()) +log.setLevel(logging.DEBUG) + + +async def main(blob_hash: str, url: str): + conf = Config() + loop = asyncio.get_running_loop() + host_url, port = url.split(":") + host_info = await loop.getaddrinfo( + host_url, 'https', + proto=socket.IPPROTO_TCP, + ) + host = host_info[0][4][0] + + storage = SQLiteStorage(conf, os.path.join(conf.data_dir, "lbrynet.sqlite")) + blob_manager = BlobFileManager(loop, os.path.join(conf.data_dir, "blobfiles"), storage) + await storage.open() + await blob_manager.setup() + + blob = blob_manager.get_blob(blob_hash) + protocol = BlobExchangeClientProtocol(loop, conf.blob_download_timeout) + success, keep = await request_blob(loop, blob, protocol, host, int(port), conf.peer_connect_timeout) + print(success, keep) + if blob.get_is_verified(): + await blob_manager.delete_blobs([blob.blob_hash]) + + +if __name__ == "__main__": # usage: python download_blob_from_peer.py [host url:port] + url = 'reflector.lbry.io:5567' + if len(sys.argv) > 2: + url = sys.argv[2] + asyncio.run(main(sys.argv[1], url))