def commandline_handler(): parser = argparse.ArgumentParser() parser.add_argument("-c", "--config", dest="config_file", default="autotorrent.conf", help="Path to config file") parser.add_argument( "-l", "--client", dest="client", default="default", help="Name of client to use (when multiple configured)") parser.add_argument("--create_config", dest="create_config_file", nargs='?', const='autotorrent.conf', default=None, help="Creates a new configuration file") parser.add_argument("-t", "--test_connection", action="store_true", dest="test_connection", default=False, help='Tests the connection to the torrent client') parser.add_argument( "--dry-run", nargs='?', const='txt', default=None, dest="dry_run", choices=['txt', 'json'], help= "Don't do any actual adding, just scan for files needed for torrents.") parser.add_argument("-r", "--rebuild", dest="rebuild", default=False, help='Rebuild the database', nargs='*') parser.add_argument("-a", "--addfile", dest="addfile", default=False, help='Add a new torrent file to client', nargs='+') parser.add_argument( "-d", "--delete_torrents", action="store_true", dest="delete_torrents", default=False, help='Delete torrents when they are added to the client') parser.add_argument("--verbose", help="increase output verbosity", action="store_true", dest="verbose") args = parser.parse_args() logging.basicConfig(level=logging.DEBUG if args.verbose else logging.ERROR) if args.create_config_file: # autotorrent.conf if os.path.exists(args.create_config_file): parser.error("Target %r already exists, not creating" % args.create_config_file) else: src = os.path.join(os.path.dirname(__file__), 'autotorrent.conf.dist') shutil.copy(src, args.create_config_file) print('Created configuration file %r' % args.create_config_file) client_config = { 'client': 'rtorrent', 'url': 'http://*****:*****@127.0.0.1/RPC2', 'label': 'autotorrent', } if query_yes_no( 'Do you want to try and auto-configure torrent client?'): working_clients = [] for client_name, cls in TORRENT_CLIENTS.items(): obj = cls.auto_config() try: if obj.test_connection(): working_clients.append(obj) except: continue if working_clients: print('Found %i clients - please choose a client to use' % len(working_clients)) for i, client in enumerate(working_clients, 1): print('[%i] %s' % (i, client.identifier)) print( '[0] None of the above - do not auto-configure any client\n' ) while True: error = False try: choice = int(input('> ')) except ValueError: error = True else: if len(working_clients) < choice or choice < 0: error = True if error: print('Invalid choice, please choose again') else: if choice > 0: client = working_clients[choice - 1] print('Setting client to %s' % client.identifier) client_config = client.get_config() client_config['client'] = client.identifier break else: print( 'Unable to auto-detect any clients, you will have to configure it manually.' ) config = configparser.ConfigParser() config.read(args.create_config_file) for k, v in client_config.items(): config.set('client', k, v) with open(args.create_config_file, 'w') as configfile: config.write(configfile) quit() if not os.path.isfile(args.config_file): parser.error("Config file not found %r" % args.config_file) config = configparser.ConfigParser() config.read(args.config_file) current_path = os.getcwd() os.chdir(os.path.dirname(os.path.abspath( args.config_file))) # Changing directory to where the config file is. if not config.has_section('general'): parser.error('AutoTorrent is not properly configured, please edit %r' % args.config_file) quit(1) disks = [disk for _, disk in config.items('disks')] scan_mode = set(config.get('general', 'scan_mode').split(',')) exact_mode = 'exact' in scan_mode unsplitable_mode = 'unsplitable' in scan_mode normal_mode = 'normal' in scan_mode hash_name_mode = 'hash_name' in scan_mode hash_size_mode = 'hash_size' in scan_mode hash_slow_mode = 'hash_slow' in scan_mode db = Database(config.get('general', 'db'), disks, config.get('general', 'ignore_files').split(','), normal_mode, unsplitable_mode, exact_mode, hash_name_mode, hash_size_mode, hash_slow_mode) client_option = 'client' if args.client != 'default': client_option += '-%s' % args.client try: client_name = config.get(client_option, 'client') except configparser.NoSectionError: print('It seems like %r is not a configured client' % args.client) quit(1) if client_name not in TORRENT_CLIENTS: print('Unknown client %r - Known clients are: %s' % (client_name, ', '.join(TORRENT_CLIENTS.keys()))) quit(1) client_options = dict(config.items(client_option)) client_options.pop('client') client = TORRENT_CLIENTS[client_name](**client_options) at = AutoTorrent( db, client, config.get('general', 'store_path'), config.getint('general', 'add_limit_size'), config.getfloat('general', 'add_limit_percent'), args.delete_torrents, (config.get('general', 'link_type') if config.has_option( 'general', 'link_type') else 'soft'), ) if args.test_connection: proxy_test_result = client.test_connection() if proxy_test_result: print('Connected to torrent client successfully!') print(' result: %s' % proxy_test_result) if isinstance(args.rebuild, list): if args.rebuild: print('Adding new folders to database') db.rebuild(args.rebuild) print('Added to database') else: print('Rebuilding database') db.rebuild() print('Database rebuilt') if args.addfile: dry_run = bool(args.dry_run) dry_run_data = [] print('Found %s torrent(s)' % len(args.addfile)) if not dry_run: at.populate_torrents_seeded() for torrent in args.addfile: result = at.handle_torrentfile(os.path.join(current_path, torrent), dry_run) if dry_run: dry_run_data.append({ 'torrent': torrent, 'found_bytes': result[0], 'missing_bytes': result[1], 'would_add': not result[2], 'local_files': result[3], }) if dry_run: if args.dry_run == 'json': print(json.dumps(dry_run_data)) elif args.dry_run == 'txt': for torrent in dry_run_data: print('Torrent: %s' % torrent['torrent']) print( ' Found data: %s - Missing data: %s - Would add: %s' % (humanize_bytes(torrent['found_bytes']), humanize_bytes(torrent['missing_bytes']), torrent['would_add'] and 'Yes' or 'No')) print(' Local files used:') for f in torrent['local_files']: print(' %s' % f) print('')
def commandline_handler(): parser = argparse.ArgumentParser() parser.add_argument("-c", "--config", dest="config_file", default="autotorrent.conf", help="Path to config file") parser.add_argument("-l", "--client", dest="client", default="default", help="Name of client to use (when multiple configured)") parser.add_argument("--create_config", dest="create_config_file", nargs='?', const='autotorrent.conf', default=None, help="Creates a new configuration file") parser.add_argument("-t", "--test_connection", action="store_true", dest="test_connection", default=False, help='Tests the connection to the torrent client') parser.add_argument("--dry-run", nargs='?', const='txt', default=None, dest="dry_run", choices=['txt', 'json'], help="Don't do any actual adding, just scan for files needed for torrents.") parser.add_argument("-r", "--rebuild", dest="rebuild", default=False, help='Rebuild the database', nargs='*') parser.add_argument("-a", "--addfile", dest="addfile", default=False, help='Add a new torrent file to client', nargs='+') parser.add_argument("-d", "--delete_torrents", action="store_true", dest="delete_torrents", default=False, help='Delete torrents when they are added to the client') parser.add_argument("--verbose", help="increase output verbosity", action="store_true", dest="verbose") args = parser.parse_args() logging.basicConfig(level=logging.DEBUG if args.verbose else logging.ERROR) if args.create_config_file: # autotorrent.conf if os.path.exists(args.create_config_file): parser.error("Target %r already exists, not creating" % args.create_config_file) else: src = os.path.join(os.path.dirname(__file__), 'autotorrent.conf.dist') shutil.copy(src, args.create_config_file) print('Created configuration file %r' % args.create_config_file) client_config = { 'client': 'rtorrent', 'url': 'http://*****:*****@127.0.0.1/RPC2', 'label': 'autotorrent', } if query_yes_no('Do you want to try and auto-configure torrent client?'): working_clients = [] for client_name, cls in TORRENT_CLIENTS.items(): obj = cls.auto_config() try: if obj.test_connection(): working_clients.append(obj) except: continue if working_clients: print('Found %i clients - please choose a client to use' % len(working_clients)) for i, client in enumerate(working_clients, 1): print('[%i] %s' % (i, client.identifier)) print('[0] None of the above - do not auto-configure any client\n') while True: error = False try: choice = int(input('> ')) except ValueError: error = True else: if len(working_clients) < choice or choice < 0: error = True if error: print('Invalid choice, please choose again') else: if choice > 0: client = working_clients[choice-1] print('Setting client to %s' % client.identifier) client_config = client.get_config() client_config['client'] = client.identifier break else: print('Unable to auto-detect any clients, you will have to configure it manually.') config = configparser.ConfigParser() config.read(args.create_config_file) for k, v in client_config.items(): config.set('client', k, v) with open(args.create_config_file, 'w') as configfile: config.write(configfile) quit() if not os.path.isfile(args.config_file): parser.error("Config file not found %r" % args.config_file) config = configparser.ConfigParser() config.read(args.config_file) current_path = os.getcwd() os.chdir(os.path.dirname(os.path.abspath(args.config_file))) # Changing directory to where the config file is. if not config.has_section('general'): parser.error('AutoTorrent is not properly configured, please edit %r' % args.config_file) quit(1) disks = [disk for _, disk in config.items('disks')] scan_mode = set(config.get('general', 'scan_mode').split(',')) exact_mode = 'exact' in scan_mode unsplitable_mode = 'unsplitable' in scan_mode normal_mode = 'normal' in scan_mode hash_name_mode = 'hash_name' in scan_mode hash_size_mode = 'hash_size' in scan_mode hash_slow_mode = 'hash_slow' in scan_mode db = Database(config.get('general', 'db'), disks, config.get('general', 'ignore_files').split(','), normal_mode, unsplitable_mode, exact_mode, hash_name_mode, hash_size_mode, hash_slow_mode) client_option = 'client' if args.client != 'default': client_option += '-%s' % args.client try: client_name = config.get(client_option, 'client') except configparser.NoSectionError: print('It seems like %r is not a configured client' % args.client) quit(1) if client_name not in TORRENT_CLIENTS: print('Unknown client %r - Known clients are: %s' % (client_name, ', '.join(TORRENT_CLIENTS.keys()))) quit(1) client_options = dict(config.items(client_option)) client_options.pop('client') client = TORRENT_CLIENTS[client_name](**client_options) at = AutoTorrent( db, client, config.get('general', 'store_path'), config.getint('general', 'add_limit_size'), config.getfloat('general', 'add_limit_percent'), args.delete_torrents, (config.get('general', 'link_type') if config.has_option('general', 'link_type') else 'soft'), ) if args.test_connection: proxy_test_result = client.test_connection() if proxy_test_result: print('Connected to torrent client successfully!') print(' result: %s' % proxy_test_result) if isinstance(args.rebuild, list): if args.rebuild: print('Adding new folders to database') db.rebuild(args.rebuild) print('Added to database') else: print('Rebuilding database') db.rebuild() print('Database rebuilt') if args.addfile: dry_run = bool(args.dry_run) dry_run_data = [] print('Found %s torrent(s)' % len(args.addfile)) if not dry_run: at.populate_torrents_seeded() for torrent in args.addfile: result = at.handle_torrentfile(os.path.join(current_path, torrent), dry_run) if dry_run: dry_run_data.append({ 'torrent': torrent, 'found_bytes': result[0], 'missing_bytes': result[1], 'would_add': not result[2], 'local_files': result[3], }) if dry_run: if args.dry_run == 'json': print(json.dumps(dry_run_data)) elif args.dry_run == 'txt': for torrent in dry_run_data: print('Torrent: %s' % torrent['torrent']) print(' Found data: %s - Missing data: %s - Would add: %s' % (humanize_bytes(torrent['found_bytes']), humanize_bytes(torrent['missing_bytes']), torrent['would_add'] and 'Yes' or 'No')) print(' Local files used:') for f in torrent['local_files']: print(' %s' % f) print('')
def commandline_handler(): parser = argparse.ArgumentParser() parser.add_argument("-c", "--config", dest="config_file", default="autotorrent.conf", help="Path to config file") parser.add_argument( "-l", "--client", dest="client", default="default", help="Name of client to use (when multiple configured)" ) parser.add_argument( "--create_config", dest="create_config_file", nargs="?", const="autotorrent.conf", default=None, help="Creates a new configuration file", ) parser.add_argument( "-t", "--test_connection", action="store_true", dest="test_connection", default=False, help="Tests the connection to the torrent client", ) parser.add_argument( "--dry-run", nargs="?", const="txt", default=None, dest="dry_run", choices=["txt", "json"], help="Don't do any actual adding, just scan for files needed for torrents.", ) parser.add_argument("-r", "--rebuild", dest="rebuild", default=False, help="Rebuild the database", nargs="*") parser.add_argument( "-a", "--addfile", dest="addfile", default=False, help="Add a new torrent file to client", nargs="+" ) parser.add_argument( "-d", "--delete_torrents", action="store_true", dest="delete_torrents", default=False, help="Delete torrents when they are added to the client", ) parser.add_argument("--verbose", help="increase output verbosity", action="store_true", dest="verbose") args = parser.parse_args() logging.basicConfig(level=logging.DEBUG if args.verbose else logging.ERROR) if args.create_config_file: # autotorrent.conf if os.path.exists(args.create_config_file): parser.error("Target %r already exists, not creating" % args.create_config_file) else: src = os.path.join(os.path.dirname(__file__), "autotorrent.conf.dist") shutil.copy(src, args.create_config_file) print("Created configuration file %r" % args.create_config_file) client_config = {"client": "rtorrent", "url": "http://*****:*****@127.0.0.1/RPC2", "label": "autotorrent"} if query_yes_no("Do you want to try and auto-configure torrent client?"): working_clients = [] for client_name, cls in TORRENT_CLIENTS.items(): obj = cls.auto_config() try: if obj.test_connection(): working_clients.append(obj) except: continue if working_clients: print("Found %i clients - please choose a client to use" % len(working_clients)) for i, client in enumerate(working_clients, 1): print("[%i] %s" % (i, client.identifier)) print("[0] None of the above - do not auto-configure any client\n") while True: error = False try: choice = int(input("> ")) except ValueError: error = True else: if len(working_clients) < choice or choice < 0: error = True if error: print("Invalid choice, please choose again") else: if choice > 0: client = working_clients[choice - 1] print("Setting client to %s" % client.identifier) client_config = client.get_config() client_config["client"] = client.identifier break else: print("Unable to auto-detect any clients, you will have to configure it manually.") config = configparser.ConfigParser() config.read(args.create_config_file) for k, v in client_config.items(): config.set("client", k, v) with open(args.create_config_file, "w") as configfile: config.write(configfile) quit() if not os.path.isfile(args.config_file): parser.error("Config file not found %r" % args.config_file) config = configparser.ConfigParser() config.read(args.config_file) current_path = os.getcwd() os.chdir(os.path.dirname(os.path.abspath(args.config_file))) # Changing directory to where the config file is. if not config.has_section("general"): parser.error("AutoTorrent is not properly configured, please edit %r" % args.config_file) quit(1) i = 1 disks = [] while config.has_option("disks", "disk%s" % i): disks.append(config.get("disks", "disk%s" % i)) i += 1 scan_mode = set(config.get("general", "scan_mode").split(",")) exact_mode = "exact" in scan_mode unsplitable_mode = "unsplitable" in scan_mode normal_mode = "normal" in scan_mode hash_name_mode = "hash_name" in scan_mode hash_size_mode = "hash_size" in scan_mode hash_slow_mode = "hash_slow" in scan_mode db = Database( config.get("general", "db"), disks, config.get("general", "ignore_files").split(","), normal_mode, unsplitable_mode, exact_mode, hash_name_mode, hash_size_mode, hash_slow_mode, ) client_option = "client" if args.client != "default": client_option += "-%s" % args.client try: client_name = config.get(client_option, "client") except configparser.NoSectionError: print("It seems like %r is not a configured client" % args.client) quit(1) if client_name not in TORRENT_CLIENTS: print("Unknown client %r - Known clients are: %s" % (client_name, ", ".join(TORRENT_CLIENTS.keys()))) quit(1) client_options = dict(config.items(client_option)) client_options.pop("client") client = TORRENT_CLIENTS[client_name](**client_options) at = AutoTorrent( db, client, config.get("general", "store_path"), config.getint("general", "add_limit_size"), config.getfloat("general", "add_limit_percent"), args.delete_torrents, (config.get("general", "link_type") if config.has_option("general", "link_type") else "soft"), ) if args.test_connection: proxy_test_result = client.test_connection() if proxy_test_result: print("Connected to torrent client successfully!") print(" result: %s" % proxy_test_result) if isinstance(args.rebuild, list): if args.rebuild: print("Adding new folders to database") db.rebuild(args.rebuild) print("Added to database") else: print("Rebuilding database") db.rebuild() print("Database rebuilt") if args.addfile: dry_run = bool(args.dry_run) dry_run_data = [] print("Found %s torrent(s)" % len(args.addfile)) if not dry_run: at.populate_torrents_seeded() for torrent in args.addfile: result = at.handle_torrentfile(os.path.join(current_path, torrent), dry_run) if dry_run: dry_run_data.append( { "torrent": torrent, "found_bytes": result[0], "missing_bytes": result[1], "would_add": not result[2], "local_files": result[3], } ) if dry_run: if args.dry_run == "json": print(json.dumps(dry_run_data)) elif args.dry_run == "txt": for torrent in dry_run_data: print("Torrent: %s" % torrent["torrent"]) print( " Found data: %s - Missing data: %s - Would add: %s" % ( humanize_bytes(torrent["found_bytes"]), humanize_bytes(torrent["missing_bytes"]), torrent["would_add"] and "Yes" or "No", ) ) print(" Local files used:") for f in torrent["local_files"]: print(" %s" % f) print("")