- Supporta solo Film - Monitor di Download - Rinominazione dei file alla fine del download
95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
from __future__ import division
|
|
import click
|
|
from os import path, getcwd
|
|
|
|
from . import VERSION
|
|
from .api import Torrent
|
|
from .utils import humanize_filesize, upload_to_cache_server, get_open_trackers_from_remote, \
|
|
get_open_trackers_from_local
|
|
from .exceptions import RemoteUploadError, RemoteDownloadError
|
|
|
|
|
|
@click.group()
|
|
@click.version_option(version='.'.join(map(str, VERSION)))
|
|
def start():
|
|
"""Torrentool command line utilities."""
|
|
|
|
|
|
@start.group()
|
|
def torrent():
|
|
"""Torrent-related commands."""
|
|
|
|
|
|
@torrent.command()
|
|
@click.argument('torrent_path', type=click.Path(exists=True, writable=False, dir_okay=False))
|
|
def info(torrent_path):
|
|
"""Print out information from .torrent file."""
|
|
|
|
my_torrent = Torrent.from_file(torrent_path)
|
|
|
|
size = my_torrent.total_size
|
|
|
|
click.secho('Name: %s' % my_torrent.name, fg='blue')
|
|
click.secho('Files:')
|
|
for file_tuple in my_torrent.files:
|
|
click.secho(file_tuple.name)
|
|
|
|
click.secho('Hash: %s' % my_torrent.info_hash, fg='blue')
|
|
click.secho('Size: %s (%s)' % (humanize_filesize(size), size), fg='blue')
|
|
click.secho('Magnet: %s' % my_torrent.get_magnet(), fg='yellow')
|
|
|
|
|
|
@torrent.command()
|
|
@click.argument('source', type=click.Path(exists=True, writable=False))
|
|
@click.option('--dest', default=getcwd, type=click.Path(file_okay=False), help='Destination path to put .torrent file into. Default: current directory.')
|
|
@click.option('--tracker', default=None, help='Tracker announce URL (multiple comma-separated values supported).')
|
|
@click.option('--open_trackers', default=False, is_flag=True, help='Add open trackers announce URLs.')
|
|
@click.option('--comment', default=None, help='Arbitrary comment.')
|
|
@click.option('--cache', default=False, is_flag=True, help='Upload file to torrent cache services.')
|
|
def create(source, dest, tracker, open_trackers, comment, cache):
|
|
"""Create torrent file from a single file or a directory."""
|
|
|
|
source_title = path.basename(source).replace('.', '_').replace(' ', '_')
|
|
dest = '%s.torrent' % path.join(dest, source_title)
|
|
|
|
click.secho('Creating torrent from %s ...' % source)
|
|
|
|
my_torrent = Torrent.create_from(source)
|
|
|
|
if comment:
|
|
my_torrent.comment = comment
|
|
|
|
urls = []
|
|
|
|
if tracker:
|
|
urls = tracker.split(',')
|
|
|
|
if open_trackers:
|
|
click.secho('Fetching an up-to-date open tracker list ...')
|
|
try:
|
|
urls.extend(get_open_trackers_from_remote())
|
|
except RemoteDownloadError:
|
|
click.secho('Failed. Using built-in open tracker list.', fg='red', err=True)
|
|
urls.extend(get_open_trackers_from_local())
|
|
|
|
if urls:
|
|
my_torrent.announce_urls = urls
|
|
|
|
my_torrent.to_file(dest)
|
|
|
|
click.secho('Torrent file created: %s' % dest, fg='green')
|
|
click.secho('Torrent info hash: %s' % my_torrent.info_hash, fg='blue')
|
|
|
|
if cache:
|
|
click.secho('Uploading to %s torrent cache service ...')
|
|
try:
|
|
result = upload_to_cache_server(dest)
|
|
click.secho('Cached torrent URL: %s' % result, fg='yellow')
|
|
|
|
except RemoteUploadError as e:
|
|
click.secho('Failed: %s' % e, fg='red', err=True)
|
|
|
|
|
|
def main():
|
|
start(obj={})
|