#!/usr/bin/env python3 import click import os from transmission_rpc import Client from datetime import timedelta, datetime def convert_to_seconds(s): units = {"s": "seconds", "m": "minutes", "h": "hours", "d": "days", "w": "weeks"} count = int(s[:-1]) unit = units[s[-1]] td = timedelta(**{unit: count}) return td.seconds + 60 * 60 * 24 * td.days def has_links(torrent): for file in torrent.get_files(): file_path = torrent.download_dir + '/' + file.name if not os.path.exists(file_path): continue if os.stat(file_path).st_nlink > 1: return True return False @click.command() @click.option('--port', default=9091) @click.option('--host', default="localhost") @click.option('--tag', required=True) @click.option('--min-age', default='1w') def main(host, port, tag, min_age): """ Deletes torrents older than the specified age if no file has a link. """ c = Client(host=host, port=port) torrents = c.get_torrents() for torrent in torrents: if tag not in torrent.labels: continue specified_age = convert_to_seconds(min_age) age_in_seconds = int((datetime.today().timestamp() - torrent.done_date.timestamp())) if age_in_seconds < specified_age: continue if not has_links(torrent): print(f"Deleting {torrent.name}") c.remove_torrent(torrent.id, delete_data=True) if __name__ == '__main__': main()