#!/usr/bin/env python3 """qbt_sum_size.py Description: Get the total size of all added torrents and the total size of all completed torrents from a qBittorrent instance. Usage: qbt_sum_size.py (HOSTNAME) (USERNAME) (PASSWORD) qbt_sum_size.py -h Examples: qbt_sum_size.py "http://localhost:8080" "admin" "adminadmin" qbt_sum_size.py "https://cat.seedhost.eu/lol/qbittorrent" "lol" "supersecretpassword" Options: -h, --help show this help message and exit """ import qbittorrentapi from docopt import docopt # convert byte units def human_bytes(bites: int) -> str: B = float(bites) KiB = float(1024) MiB = float(KiB**2) GiB = float(KiB**3) TiB = float(KiB**4) match B: case B if B < KiB: return "{0} {1}".format(B, "bytes" if 0 == B > 1 else "byte") case B if KiB <= B < MiB: return "{0:.2f} KiB".format(B / KiB) case B if MiB <= B < GiB: return "{0:.2f} MiB".format(B / MiB) case B if GiB <= B < TiB: return "{0:.2f} GiB".format(B / GiB) case B if TiB <= B: return "{0:.2f} TiB".format(B / TiB) case _: return "" if __name__ == "__main__": args = docopt(__doc__) # type: ignore completed_torrent_sizes = [] total_added_bytes = int() with qbittorrentapi.Client( host=args["HOSTNAME"], username=args["USERNAME"], password=args["PASSWORD"] ) as qbt_client: try: qbt_client.auth_log_in() except qbittorrentapi.LoginFailed as e: print(e) for torrent in qbt_client.torrents_info(): if torrent.completion_on != 0: completed_torrent_sizes.append(torrent.total_size) total_added_bytes = sum( [torrent.total_size for torrent in qbt_client.torrents_info()] ) total_completed_bytes = sum(completed_torrent_sizes) print(f"\nTotal completed size: {human_bytes(total_completed_bytes)}") print(f"Total added size: {human_bytes(total_added_bytes)}\n")