From ed319c2e92d46a9018b80f579ec4218f2d519807 Mon Sep 17 00:00:00 2001 From: Diego Ripley Date: Sat, 28 Jun 2025 21:08:05 +0000 Subject: [PATCH] Create torrent of a dataset. Has HTTP seed URLs that work (when created through py3createtorrent). I am able to max out my internet connection when downloading the torrent. --- .../canvec_50K_QC_Hydro_fgdb.zip.torrent | Bin 0 -> 32823 bytes experiments/torrent/create_torrent_torf.ipynb | 76 ++++++++++++++++++ .../torrent/create_torrent_works.ipynb | 70 ++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 experiments/torrent/canvec_50K_QC_Hydro_fgdb.zip.torrent create mode 100644 experiments/torrent/create_torrent_torf.ipynb create mode 100644 experiments/torrent/create_torrent_works.ipynb diff --git a/experiments/torrent/canvec_50K_QC_Hydro_fgdb.zip.torrent b/experiments/torrent/canvec_50K_QC_Hydro_fgdb.zip.torrent new file mode 100644 index 0000000000000000000000000000000000000000..2420f74a2c109b1c81ebcf6e83467e0bbac47839 GIT binary patch literal 32823 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 literal 0 HcmV?d00001 diff --git a/experiments/torrent/create_torrent_torf.ipynb b/experiments/torrent/create_torrent_torf.ipynb new file mode 100644 index 0000000..67eb84d --- /dev/null +++ b/experiments/torrent/create_torrent_torf.ipynb @@ -0,0 +1,76 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "add9fae2-a445-4a97-9705-bc5c399fb3b5", + "metadata": {}, + "source": [ + "# The HTTP seeding URLs are not included in the torrent when I open it up with qBittorrent" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "175125b4-f8c3-4072-970d-5c4ca17e47e4", + "metadata": {}, + "outputs": [], + "source": [ + "from torf import Torrent\n", + "\n", + "data_folder = \"/data/canvec\"\n", + "filename = f\"{data_folder}/canvec_50K_QC_Hydro_fgdb.zip\"\n", + "trackers = [\"https://tracker.yemekyedim.com:443/announce\", \n", + " \"udp://tracker.opentrackr.org:1337/announce\"]\n", + "httpseeds = [\"https://data-02.dataforcanada.org/archive/natural_resources_canada/hydro/2019/canvec_50K_QC_Hydro_fgdb.zip\",\n", + " \"https://archive.org/download/canvec-hydro-50k-2019-07-24/canvec_50K_QC_Hydro_fgdb.zip\",\n", + " \"https://zenodo.org/records/15350060/files/canvec_50K_QC_Hydro_fgdb.zip?download=1\"\n", + " ]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "bd43692b-12d8-496c-a869-8d93171e3c88", + "metadata": {}, + "outputs": [], + "source": [ + "t = Torrent(path=filename,\n", + " trackers=trackers,\n", + " httpseeds=httpseeds,\n", + " private=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a106687c-5fcb-4c43-8e35-c2736443e902", + "metadata": {}, + "outputs": [], + "source": [ + "t.generate()\n", + "t.write(\"testing-canvec_50K_QC_Hydro_fgdb.zip.torrent\", overwrite=True)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/experiments/torrent/create_torrent_works.ipynb b/experiments/torrent/create_torrent_works.ipynb new file mode 100644 index 0000000..99f53b1 --- /dev/null +++ b/experiments/torrent/create_torrent_works.ipynb @@ -0,0 +1,70 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "4ad35784-72f1-4da1-8310-bdc701b3bf57", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Successfully created torrent:\n", + " Name: canvec_50K_QC_Hydro_fgdb.zip\n", + " Size: 3212.87 MiB\n", + " Pieces: 1607 x 2048 KiB\n", + " Comment: created with py3createtorrent v1.2.1\n", + " Private: no\n", + " Creation date: 2025-06-27 16:05:37\n", + " DHT bootstrap nodes: (none)\n", + " Webseeds: ['https://data-02.dataforcanada.org/archive/natural_resources_canada/hydro/2019/canvec_50K_QC_Hydro_fgdb.zip', 'https://archive.org/download/canvec-hydro-50k-2019-07-24/canvec_50K_QC_Hydro_fgdb.zip', 'https://zenodo.org/records/15350060/files/canvec_50K_QC_Hydro_fgdb.zip?download=1']\n", + " Primary tracker: https://tracker.yemekyedim.com:443/announce\n", + " Backup trackers:\n", + " udp://tracker.opentrackr.org:1337/announce\n" + ] + } + ], + "source": [ + "py3createtorrent --tracker \"https://tracker.yemekyedim.com:443/announce\" \\\n", + " --tracker \"udp://tracker.opentrackr.org:1337/announce\" \\\n", + " --webseed \"https://data-02.dataforcanada.org/archive/natural_resources_canada/hydro/2019/canvec_50K_QC_Hydro_fgdb.zip\" \\\n", + " --webseed \"https://archive.org/download/canvec-hydro-50k-2019-07-24/canvec_50K_QC_Hydro_fgdb.zip\" \\\n", + " --webseed \"https://zenodo.org/records/15350060/files/canvec_50K_QC_Hydro_fgdb.zip?download=1\" \\\n", + " /data/canvec/canvec_50K_QC_Hydro_fgdb.zip \\\n", + " --output canvec_50K_QC_Hydro_fgdb.zip.torrent \\\n", + " --force" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "213373da-ecb0-468a-9ab8-79d7cad42f2c", + "metadata": {}, + "outputs": [], + "source": [ + "py3createtorrent --tracker \"https://tracker.yemekyedim.com:443/announce\" \\\n", + " --tracker \"udp://tracker.opentrackr.org:1337/announce\" \\\n", + " --webseed \"https://data-02.dataforcanada.org/archive/s2maps/2023/s2maps-sentinel2-2023.pmtiles\" \\\n", + " s2maps-sentinel2-2023.pmtiles \\\n", + " --output s2maps-sentinel2-2023.pmtiles.torrent \\\n", + " --force" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Bash", + "language": "bash", + "name": "bash" + }, + "language_info": { + "codemirror_mode": "shell", + "file_extension": ".sh", + "mimetype": "text/x-sh", + "name": "bash" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}