admin-scripts/python/qbt_sum_size.py

79 lines
2.1 KiB
Python
Executable File

# /// script
# dependencies = [
# "qbittorrent-api",
# "docopt",
# ]
# ///
"""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")