Exemplo n.º 1
0
    def add(self, data, timeout=None, **kwargs):
        """
        Add torrent to transfers list. Takes a base64 encoded .torrent file in data.
        Additional arguments are:

        ===================== ===== =========== =============================================================
        Argument              RPC   Replaced by Description
        ===================== ===== =========== =============================================================
        ``bandwidthPriority`` 8 -               Priority for this transfer.
        ``cookies``           13 -              One or more HTTP cookie(s).
        ``download_dir``      1 -               The directory where the downloaded contents will be saved in.
        ``files_unwanted``    1 -               A list of file id's that shouldn't be downloaded.
        ``files_wanted``      1 -               A list of file id's that should be downloaded.
        ``paused``            1 -               If True, does not start the transfer when added.
        ``peer_limit``        1 -               Maximum number of peers allowed.
        ``priority_high``     1 -               A list of file id's that should have high priority.
        ``priority_low``      1 -               A list of file id's that should have low priority.
        ``priority_normal``   1 -               A list of file id's that should have normal priority.
        ===================== ===== =========== =============================================================

        """
        args = {}
        if data:
            args = {"metainfo": data}
        elif "metainfo" not in kwargs and "filename" not in kwargs:
            raise ValueError("No torrent data or torrent uri.")
        for key, value in kwargs.iteritems():
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert("torrent-add", argument, value, self.rpc_version)
            args[arg] = val
        return self._request("torrent-add", args, timeout=timeout)
Exemplo n.º 2
0
    def add(self, data, timeout=None, **kwargs):
        """
        Add torrent to transfers list. Takes a base64 encoded .torrent file in data.
        Additional arguments are:

        ===================== ==== =============================================================
        Argument              RPC  Description                                                  
        ===================== ==== =============================================================
        ``bandwidthPriority`` 8 -  Priority for this transfer.                                  
        ``download_dir``      1 -  The directory where the downloaded contents will be saved in.
        ``filename``          1 -  A filepath or URL to a torrent file or a magnet link.        
        ``files_unwanted``    1 -  A list of file id's that shouldn't be downloaded.            
        ``files_wanted``      1 -  A list of file id's that should be downloaded.               
        ``metainfo``          1 -  The content of a torrent file, base64 encoded.               
        ``paused``            1 -  If True, does not start the transfer when added.             
        ``peer_limit``        1 -  Maximum number of peers allowed.                             
        ``priority_high``     1 -  A list of file id's that should have high priority.          
        ``priority_low``      1 -  A list of file id's that should have low priority.           
        ``priority_normal``   1 -  A list of file id's that should have normal priority.        
        ===================== ==== =============================================================
        """
        args = {}
        if data:
            args = {'metainfo': data}
        elif 'metainfo' not in kwargs and 'filename' not in kwargs:
            raise ValueError('No torrent data or torrent uri.')
        for key, value in kwargs.iteritems():
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('torrent-add', argument, value,
                                                self.rpc_version)
            args[arg] = val
        return self._request('torrent-add', args, timeout=timeout)
Exemplo n.º 3
0
    def add(self, data, timeout=None, **kwargs):
        """
        Add torrent to transfers list. Takes a base64 encoded .torrent file in data.
        Additional arguments are:

        ===================== ==== =============================================================
        Argument              RPC  Description                                                  
        ===================== ==== =============================================================
        ``bandwidthPriority`` 8 -  Priority for this transfer.                                  
        ``download_dir``      1 -  The directory where the downloaded contents will be saved in.
        ``filename``          1 -  A filepath or URL to a torrent file or a magnet link.        
        ``files_unwanted``    1 -  A list of file id's that shouldn't be downloaded.            
        ``files_wanted``      1 -  A list of file id's that should be downloaded.               
        ``metainfo``          1 -  The content of a torrent file, base64 encoded.               
        ``paused``            1 -  If True, does not start the transfer when added.             
        ``peer_limit``        1 -  Maximum number of peers allowed.                             
        ``priority_high``     1 -  A list of file id's that should have high priority.          
        ``priority_low``      1 -  A list of file id's that should have low priority.           
        ``priority_normal``   1 -  A list of file id's that should have normal priority.        
        ===================== ==== =============================================================
        """
        args = {}
        if data:
            args = {'metainfo': data}
        elif 'metainfo' not in kwargs and 'filename' not in kwargs:
            raise ValueError('No torrent data or torrent uri.')
        for key, value in kwargs.iteritems():
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('torrent-add',
                                        argument, value, self.rpc_version)
            args[arg] = val
        return self._request('torrent-add', args, timeout=timeout)
Exemplo n.º 4
0
    def set_session(self, timeout=None, **kwargs):
        """
        Set session parameters. The parameters are:
        
        ================================ ===== ================= ==========================================================================================================================
        Argument                         RPC   Replaced by       Description                                                                                                               
        ================================ ===== ================= ==========================================================================================================================
        ``alt_speed_down``               5 -                     Alternate session download speed limit (in Kib/s).                                                                        
        ``alt_speed_enabled``            5 -                     Enables alternate global download speed limiter.                                                                          
        ``alt_speed_time_begin``         5 -                     Time when alternate speeds should be enabled. Minutes after midnight.                                                     
        ``alt_speed_time_day``           5 -                     Enables alternate speeds scheduling these days.                                                                           
        ``alt_speed_time_enabled``       5 -                     Enables alternate speeds scheduling.                                                                                      
        ``alt_speed_time_end``           5 -                     Time when alternate speeds should be disabled. Minutes after midnight.                                                    
        ``alt_speed_up``                 5 -                     Alternate session upload speed limit (in Kib/s).                                                                          
        ``blocklist_enabled``            5 -                     Enables the block list                                                                                                    
        ``cache_size_mb``                10 -                    The maximum size of the disk cache in MB                                                                                  
        ``dht_enabled``                  6 -                     Enables DHT.                                                                                                              
        ``download_dir``                 1 -                     Set the session download directory.                                                                                       
        ``encryption``                   1 -                     Set the session encryption mode, one of ``required``, ``preferred`` or ``tolerated``.                                     
        ``idle_seeding_limit``           10 -                    The default seed inactivity limit in minutes.                                                                             
        ``idle_seeding_limit_enabled``   10 -                    Enables the default seed inactivity limit                                                                                 
        ``incomplete_dir``               7 -                     The path to the directory of incomplete transfer data.                                                                    
        ``incomplete_dir_enabled``       7 -                     Enables the incomplete transfer data directory. Otherwise data for incomplete transfers are stored in the download target.
        ``lpd_enabled``                  9 -                     Enables local peer discovery for public torrents.                                                                         
        ``peer_limit``                   1 - 5 peer-limit-global Maximum number of peers                                                                                                   
        ``peer_limit_global``            5 -                     Maximum number of peers                                                                                                   
        ``peer_limit_per_torrent``       5 -                     Maximum number of peers per transfer                                                                                      
        ``peer_port``                    5 -                     Peer port.                                                                                                                
        ``peer_port_random_on_start``    5 -                     Enables randomized peer port on start of Transmission.                                                                    
        ``pex_allowed``                  1 - 5 pex-enabled       Allowing PEX in public torrents.                                                                                          
        ``pex_enabled``                  5 -                     Allowing PEX in public torrents.                                                                                          
        ``port``                         1 - 5 peer-port         Peer port.                                                                                                                
        ``port_forwarding_enabled``      1 -                     Enables port forwarding.                                                                                                  
        ``rename_partial_files``         8 -                     Appends ".part" to incomplete files                                                                                       
        ``script_torrent_done_enabled``  9 -                     Whether or not to call the "done" script.                                                                                 
        ``script_torrent_done_filename`` 9 -                     Filename of the script to run when the transfer is done.                                                                  
        ``seedRatioLimit``               5 -                     Seed ratio limit. 1.0 means 1:1 download and upload ratio.                                                                
        ``seedRatioLimited``             5 -                     Enables seed ration limit.                                                                                                
        ``speed_limit_down``             1 -                     Download speed limit (in Kib/s).                                                                                          
        ``speed_limit_down_enabled``     1 -                     Enables download speed limiting.                                                                                          
        ``speed_limit_up``               1 -                     Upload speed limit (in Kib/s).                                                                                            
        ``speed_limit_up_enabled``       1 -                     Enables upload speed limiting.                                                                                            
        ``start_added_torrents``         9 -                     Added torrents will be started right away.                                                                                
        ``trash_original_torrent_files`` 9 -                     The .torrent file of added torrents will be deleted.                                                                      
        ================================ ===== ================= ==========================================================================================================================

        .. NOTE::
    	   transmissionrpc will try to automatically fix argument errors.
        """
        args = {}
        for key, value in kwargs.iteritems():
            if key == 'encryption' and value not in ['required', 'preferred', 'tolerated']:
                raise ValueError('Invalid encryption value')
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('session-set'
                                , argument, value, self.rpc_version)
            args[arg] = val
        if len(args) > 0:
            self._request('session-set', args, timeout=timeout)
Exemplo n.º 5
0
        def add_torrent(self, torrent, timeout=None, **kwargs):
            if torrent is None:
                raise ValueError('add_torrent requires data or a URI.')
            torrent_data = None
            parsed_uri = urlparse(torrent)
            if parsed_uri.scheme in ['ftp', 'ftps', 'http', 'https']:
                # there has been some problem with T's built in torrent fetcher,
                # use a python one instead
                opener = build_opener()
                opener.addheaders = [('User-Agent', 'BGmi/Torrent-Downloader')]
                torrent_file = opener.open(torrent)

                torrent_data = torrent_file.read()
                torrent_data = base64.b64encode(torrent_data).decode('utf-8')
            if parsed_uri.scheme in ['file']:
                filepath = torrent
                # uri decoded different on linux / windows ?
                if len(parsed_uri.path) > 0:
                    filepath = parsed_uri.path
                elif len(parsed_uri.netloc) > 0:
                    filepath = parsed_uri.netloc
                torrent_file = open(filepath, 'rb')
                torrent_data = torrent_file.read()
                torrent_data = base64.b64encode(torrent_data).decode('utf-8')
            if not torrent_data:
                if torrent.endswith('.torrent') or torrent.startswith(
                        'magnet:'):
                    torrent_data = None
                else:
                    might_be_base64 = False
                    try:
                        # check if this is base64 data
                        if IS_PYTHON3:
                            base64.b64decode(torrent.encode('utf-8'))
                        else:
                            base64.b64decode(torrent)
                        might_be_base64 = True
                    except Exception:
                        pass
                    if might_be_base64:
                        torrent_data = torrent
            args = {}
            if torrent_data:
                args = {'metainfo': torrent_data}
            else:
                args = {'filename': torrent}
            for key, value in iteritems(kwargs):
                argument = make_rpc_name(key)
                (arg, val) = argument_value_convert('torrent-add', argument,
                                                    value, self.rpc_version)
                args[arg] = val
            return list(
                self._request('torrent-add', args,
                              timeout=timeout).values())[0]
Exemplo n.º 6
0
 def set_session(self, timeout=None, **kwargs):
     """Set session parameters"""
     args = {}
     for key, value in kwargs.iteritems():
         if key == 'encryption' and value not in ['required', 'preferred', 'tolerated']:
             raise ValueError('Invalid encryption value')
         argument = make_rpc_name(key)
         (arg, val) = argument_value_convert('session-set'
                             , argument, value, self.rpc_version)
         args[arg] = val
     if len(args) > 0:
         self._request('session-set', args, timeout=timeout)
Exemplo n.º 7
0
        def add_torrent(self, torrent, timeout=None, **kwargs):
            if torrent is None:
                raise ValueError("add_torrent requires data or a URI.")
            torrent_data = None
            parsed_uri = urlparse(torrent)
            if parsed_uri.scheme in ["ftp", "ftps", "http", "https"]:
                # there has been some problem with T's built in torrent fetcher,
                # use a python one instead
                opener = build_opener()
                opener.addheaders = [("User-Agent", "BGmi/Torrent-Downloader")]
                torrent_file = opener.open(torrent)

                torrent_data = torrent_file.read()
                torrent_data = base64.b64encode(torrent_data).decode("utf-8")
            if parsed_uri.scheme in ["file"]:
                filepath = torrent
                # uri decoded different on linux / windows ?
                if len(parsed_uri.path) > 0:
                    filepath = parsed_uri.path
                elif len(parsed_uri.netloc) > 0:
                    filepath = parsed_uri.netloc
                torrent_file = open(filepath, "rb")
                torrent_data = torrent_file.read()
                torrent_data = base64.b64encode(torrent_data).decode("utf-8")
            if not torrent_data:
                if torrent.endswith(".torrent") or torrent.startswith(
                        "magnet:"):
                    torrent_data = None
                else:
                    might_be_base64 = False
                    try:
                        # check if this is base64 data
                        base64.b64decode(torrent.encode("utf-8"))
                        might_be_base64 = True
                    except Exception:
                        pass
                    if might_be_base64:
                        torrent_data = torrent
            args = {}
            if torrent_data:
                args = {"metainfo": torrent_data}
            else:
                args = {"filename": torrent}
            for key, value in kwargs.items():
                argument = make_rpc_name(key)
                (arg, val) = argument_value_convert("torrent-add", argument,
                                                    value, self.rpc_version)
                args[arg] = val
            return list(
                self._request("torrent-add", args,
                              timeout=timeout).values())[0]
Exemplo n.º 8
0
        def add_torrent(self, torrent, timeout=None, **kwargs):
            if torrent is None:
                raise ValueError('add_torrent requires data or a URI.')
            torrent_data = None
            parsed_uri = urlparse(torrent)
            if parsed_uri.scheme in ['ftp', 'ftps', 'http', 'https']:
                # there has been some problem with T's built in torrent fetcher,
                # use a python one instead
                opener = build_opener()
                opener.addheaders = [('User-Agent', 'BGmi/Torrent-Downloader')]
                torrent_file = opener.open(torrent)

                torrent_data = torrent_file.read()
                torrent_data = base64.b64encode(torrent_data).decode('utf-8')
            if parsed_uri.scheme in ['file']:
                filepath = torrent
                # uri decoded different on linux / windows ?
                if len(parsed_uri.path) > 0:
                    filepath = parsed_uri.path
                elif len(parsed_uri.netloc) > 0:
                    filepath = parsed_uri.netloc
                torrent_file = open(filepath, 'rb')
                torrent_data = torrent_file.read()
                torrent_data = base64.b64encode(torrent_data).decode('utf-8')
            if not torrent_data:
                if torrent.endswith('.torrent') or torrent.startswith('magnet:'):
                    torrent_data = None
                else:
                    might_be_base64 = False
                    try:
                        # check if this is base64 data
                        if IS_PYTHON3:
                            base64.b64decode(torrent.encode('utf-8'))
                        else:
                            base64.b64decode(torrent)
                        might_be_base64 = True
                    except Exception:
                        pass
                    if might_be_base64:
                        torrent_data = torrent
            args = {}
            if torrent_data:
                args = {'metainfo': torrent_data}
            else:
                args = {'filename': torrent}
            for key, value in iteritems(kwargs):
                argument = make_rpc_name(key)
                (arg, val) = argument_value_convert('torrent-add', argument, value, self.rpc_version)
                args[arg] = val
            return list(self._request('torrent-add', args, timeout=timeout).values())[0]
Exemplo n.º 9
0
    def change_torrent(self, ids, timeout=None, **kwargs):
        """
    	Change torrent parameters for the torrent(s) with the supplied id's. The
    	parameters are:

        ============================ ===== =============== =======================================================================================
        Argument                     RPC   Replaced by     Description
        ============================ ===== =============== =======================================================================================
        ``bandwidthPriority``        5 -                   Priority for this transfer.
        ``downloadLimit``            5 -                   Set the speed limit for download in Kib/s.
        ``downloadLimited``          5 -                   Enable download speed limiter.
        ``files_unwanted``           1 -                   A list of file id's that shouldn't be downloaded.
        ``files_wanted``             1 -                   A list of file id's that should be downloaded.
        ``honorsSessionLimits``      5 -                   Enables or disables the transfer to honour the upload limit set in the session.
        ``location``                 1 -                   Local download location.
        ``peer_limit``               1 -                   The peer limit for the torrents.
        ``priority_high``            1 -                   A list of file id's that should have high priority.
        ``priority_low``             1 -                   A list of file id's that should have normal priority.
        ``priority_normal``          1 -                   A list of file id's that should have low priority.
        ``queuePosition``            14 -                  Position of this transfer in its queue.
        ``seedIdleLimit``            10 -                  Seed inactivity limit in minutes.
        ``seedIdleMode``             10 -                  Seed inactivity mode. 0 = Use session limit, 1 = Use transfer limit, 2 = Disable limit.
        ``seedRatioLimit``           5 -                   Seeding ratio.
        ``seedRatioMode``            5 -                   Which ratio to use. 0 = Use session limit, 1 = Use transfer limit, 2 = Disable limit.
        ``speed_limit_down``         1 - 5 downloadLimit   Set the speed limit for download in Kib/s.
        ``speed_limit_down_enabled`` 1 - 5 downloadLimited Enable download speed limiter.
        ``speed_limit_up``           1 - 5 uploadLimit     Set the speed limit for upload in Kib/s.
        ``speed_limit_up_enabled``   1 - 5 uploadLimited   Enable upload speed limiter.
        ``trackerAdd``               10 -                  Array of string with announce URLs to add.
        ``trackerRemove``            10 -                  Array of ids of trackers to remove.
        ``trackerReplace``           10 -                  Array of (id, url) tuples where the announce URL should be replaced.
        ``uploadLimit``              5 -                   Set the speed limit for upload in Kib/s.
        ``uploadLimited``            5 -                   Enable upload speed limiter.
        ============================ ===== =============== =======================================================================================

    	.. NOTE::
    	   transmissionrpc will try to automatically fix argument errors.
        """
        args = {}
        for key, value in iteritems(kwargs):
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('torrent-set', argument, value,
                                                self.rpc_version)
            args[arg] = val

        if len(args) > 0:
            self._request('torrent-set', args, ids, True, timeout=timeout)
        else:
            ValueError("No arguments to set")
Exemplo n.º 10
0
    def change(self, ids, timeout=None, **kwargs):
        """
    	Change torrent parameters for the torrent(s) with the supplied id's. The
    	parameters are:

        ============================ ===== =============== =======================================================================================
        Argument                     RPC   Replaced by     Description
        ============================ ===== =============== =======================================================================================
        ``bandwidthPriority``        5 -                   Priority for this transfer.
        ``downloadLimit``            5 -                   Set the speed limit for download in Kib/s.
        ``downloadLimited``          5 -                   Enable download speed limiter.
        ``files_unwanted``           1 -                   A list of file id's that shouldn't be downloaded.
        ``files_wanted``             1 -                   A list of file id's that should be downloaded.
        ``honorsSessionLimits``      5 -                   Enables or disables the transfer to honour the upload limit set in the session.
        ``location``                 1 -                   Local download location.
        ``peer_limit``               1 -                   The peer limit for the torrents.
        ``priority_high``            1 -                   A list of file id's that should have high priority.
        ``priority_low``             1 -                   A list of file id's that should have normal priority.
        ``priority_normal``          1 -                   A list of file id's that should have low priority.
        ``queuePosition``            14 -                  Position of this transfer in its queue.
        ``seedIdleLimit``            10 -                  Seed inactivity limit in minutes.
        ``seedIdleMode``             10 -                  Seed inactivity mode. 0 = Use session limit, 1 = Use transfer limit, 2 = Disable limit.
        ``seedRatioLimit``           5 -                   Seeding ratio.
        ``seedRatioMode``            5 -                   Which ratio to use. 0 = Use session limit, 1 = Use transfer limit, 2 = Disable limit.
        ``speed_limit_down``         1 - 5 downloadLimit   Set the speed limit for download in Kib/s.
        ``speed_limit_down_enabled`` 1 - 5 downloadLimited Enable download speed limiter.
        ``speed_limit_up``           1 - 5 uploadLimit     Set the speed limit for upload in Kib/s.
        ``speed_limit_up_enabled``   1 - 5 uploadLimited   Enable upload speed limiter.
        ``trackerAdd``               10 -                  Array of string with announce URLs to add.
        ``trackerRemove``            10 -                  Array of ids of trackers to remove.
        ``trackerReplace``           10 -                  Array of (id, url) tuples where the announce URL should be replaced.
        ``uploadLimit``              5 -                   Set the speed limit for upload in Kib/s.
        ``uploadLimited``            5 -                   Enable upload speed limiter.
        ============================ ===== =============== =======================================================================================

    	.. NOTE::
    	   transmissionrpc will try to automatically fix argument errors.
        """
        args = {}
        for key, value in kwargs.iteritems():
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('torrent-set'
                                    , argument, value, self.rpc_version)
            args[arg] = val

        if len(args) > 0:
            self._request('torrent-set', args, ids, True, timeout=timeout)
        else:
            ValueError("No arguments to set")
Exemplo n.º 11
0
    def change(self, ids, timeout=None, **kwargs):
        """
        Change torrent parameters. This is the list of parameters that.
        """
        args = {}
        for key, value in kwargs.iteritems():
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('torrent-set'
                                    , argument, value, self.rpc_version)
            args[arg] = val

        if len(args) > 0:
            self._request('torrent-set', args, ids, True, timeout=timeout)
        else:
            ValueError("No arguments to set")
Exemplo n.º 12
0
    def add(self, data, timeout=None, **kwargs):
        """

        .. WARNING::
            Deprecated, please use add_torrent.
        """
        args = {}
        if data:
            args = {'metainfo': data}
        elif 'metainfo' not in kwargs and 'filename' not in kwargs:
            raise ValueError('No torrent data or torrent uri.')
        for key, value in iteritems(kwargs):
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('torrent-add', argument, value, self.rpc_version)
            args[arg] = val
        warnings.warn('add has been deprecated, please use add_torrent instead.', DeprecationWarning)
        return self._request('torrent-add', args, timeout=timeout)
Exemplo n.º 13
0
 def add_torrent(self, torrent, downloader=None, timeout=None, **kwargs):
     """基类方法使用urlopen下载种子文件, 没有提供绕过反爬的功能"""
     if torrent is None:
         raise ValueError('add_torrent requires data or a URI.')
     torrent_data = None
     parsed_uri = urlparse(torrent)
     if parsed_uri.scheme in ['ftp', 'ftps', 'http', 'https']:
         # there has been some problem with T's built in torrent fetcher,
         # use a python one instead
         torrent_data = downloader.download(torrent)
         torrent_data = base64.b64encode(torrent_data).decode('utf-8')
         time.sleep(3)
     if parsed_uri.scheme in ['file']:
         filepath = torrent
         # uri decoded different on linux / windows ?
         if len(parsed_uri.path) > 0:
             filepath = parsed_uri.path
         elif len(parsed_uri.netloc) > 0:
             filepath = parsed_uri.netloc
         torrent_file = open(filepath, 'rb')
         torrent_data = torrent_file.read()
         torrent_data = base64.b64encode(torrent_data).decode('utf-8')
     if not torrent_data:
         if torrent.endswith('.torrent') or torrent.startswith('magnet:'):
             torrent_data = None
         else:
             might_be_base64 = False
             # noinspection PyBroadException
             try:
                 # check if this is base64 data
                 base64.b64decode(torrent.encode('utf-8'))
                 might_be_base64 = True
             except Exception:
                 pass
             if might_be_base64:
                 torrent_data = torrent
     if torrent_data:
         args = {'metainfo': torrent_data}
     else:
         args = {'filename': torrent}
     for key, value in kwargs.items():
         argument = make_rpc_name(key)
         (arg, val) = argument_value_convert('torrent-add', argument, value, self.rpc_version)
         args[arg] = val
     return list(self._request('torrent-add', args, timeout=timeout).values())[0]
Exemplo n.º 14
0
    def add(self, data, timeout=None, **kwargs):
        """

        .. WARNING::
            Deprecated, please use add_torrent.
        """
        args = {}
        if data:
            args = {'metainfo': data}
        elif 'metainfo' not in kwargs and 'filename' not in kwargs:
            raise ValueError('No torrent data or torrent uri.')
        for key, value in iteritems(kwargs):
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('torrent-add', argument, value,
                                                self.rpc_version)
            args[arg] = val
        warnings.warn(
            'add has been deprecated, please use add_torrent instead.',
            DeprecationWarning)
        return self._request('torrent-add', args, timeout=timeout)
Exemplo n.º 15
0
    def set_session(self, timeout=None, **kwargs):
        """
        Set session parameters. The parameters are:

        ================================ ===== ================= ==========================================================================================================================
        Argument                         RPC   Replaced by       Description
        ================================ ===== ================= ==========================================================================================================================
        ``alt_speed_down``               5 -                     Alternate session download speed limit (in Kib/s).
        ``alt_speed_enabled``            5 -                     Enables alternate global download speed limiter.
        ``alt_speed_time_begin``         5 -                     Time when alternate speeds should be enabled. Minutes after midnight.
        ``alt_speed_time_day``           5 -                     Enables alternate speeds scheduling these days.
        ``alt_speed_time_enabled``       5 -                     Enables alternate speeds scheduling.
        ``alt_speed_time_end``           5 -                     Time when alternate speeds should be disabled. Minutes after midnight.
        ``alt_speed_up``                 5 -                     Alternate session upload speed limit (in Kib/s).
        ``blocklist_enabled``            5 -                     Enables the block list
        ``blocklist_url``                11 -                    Location of the block list. Updated with blocklist-update.
        ``cache_size_mb``                10 -                    The maximum size of the disk cache in MB
        ``dht_enabled``                  6 -                     Enables DHT.
        ``download_dir``                 1 -                     Set the session download directory.
        ``download_queue_enabled``       14 -                    Enables download queue.
        ``download_queue_size``          14 -                    Number of slots in the download queue.
        ``encryption``                   1 -                     Set the session encryption mode, one of ``required``, ``preferred`` or ``tolerated``.
        ``idle_seeding_limit``           10 -                    The default seed inactivity limit in minutes.
        ``idle_seeding_limit_enabled``   10 -                    Enables the default seed inactivity limit
        ``incomplete_dir``               7 -                     The path to the directory of incomplete transfer data.
        ``incomplete_dir_enabled``       7 -                     Enables the incomplete transfer data directory. Otherwise data for incomplete transfers are stored in the download target.
        ``lpd_enabled``                  9 -                     Enables local peer discovery for public torrents.
        ``peer_limit``                   1 - 5 peer-limit-global Maximum number of peers.
        ``peer_limit_global``            5 -                     Maximum number of peers.
        ``peer_limit_per_torrent``       5 -                     Maximum number of peers per transfer.
        ``peer_port``                    5 -                     Peer port.
        ``peer_port_random_on_start``    5 -                     Enables randomized peer port on start of Transmission.
        ``pex_allowed``                  1 - 5 pex-enabled       Allowing PEX in public torrents.
        ``pex_enabled``                  5 -                     Allowing PEX in public torrents.
        ``port``                         1 - 5 peer-port         Peer port.
        ``port_forwarding_enabled``      1 -                     Enables port forwarding.
        ``queue_stalled_enabled``        14 -                    Enable tracking of stalled transfers.
        ``queue_stalled_minutes``        14 -                    Number of minutes of idle that marks a transfer as stalled.
        ``rename_partial_files``         8 -                     Appends ".part" to incomplete files
        ``script_torrent_done_enabled``  9 -                     Whether or not to call the "done" script.
        ``script_torrent_done_filename`` 9 -                     Filename of the script to run when the transfer is done.
        ``seed_queue_enabled``           14 -                    Enables upload queue.
        ``seed_queue_size``              14 -                    Number of slots in the upload queue.
        ``seedRatioLimit``               5 -                     Seed ratio limit. 1.0 means 1:1 download and upload ratio.
        ``seedRatioLimited``             5 -                     Enables seed ration limit.
        ``speed_limit_down``             1 -                     Download speed limit (in Kib/s).
        ``speed_limit_down_enabled``     1 -                     Enables download speed limiting.
        ``speed_limit_up``               1 -                     Upload speed limit (in Kib/s).
        ``speed_limit_up_enabled``       1 -                     Enables upload speed limiting.
        ``start_added_torrents``         9 -                     Added torrents will be started right away.
        ``trash_original_torrent_files`` 9 -                     The .torrent file of added torrents will be deleted.
        ``utp_enabled``                  13 -                    Enables Micro Transport Protocol (UTP).
        ================================ ===== ================= ==========================================================================================================================

        .. NOTE::
    	   transmissionrpc will try to automatically fix argument errors.
        """
        args = {}
        for key, value in iteritems(kwargs):
            if key == 'encryption' and value not in [
                    'required', 'preferred', 'tolerated'
            ]:
                raise ValueError('Invalid encryption value')
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('session-set', argument, value,
                                                self.rpc_version)
            args[arg] = val
        if len(args) > 0:
            self._request('session-set', args, timeout=timeout)
Exemplo n.º 16
0
    def add_torrent(self, torrent, timeout=None, **kwargs):
        """
        Add torrent to transfers list. Takes a uri to a torrent or base64 encoded torrent data in ``torrent``.
        Additional arguments are:

        ===================== ===== =========== =============================================================
        Argument              RPC   Replaced by Description
        ===================== ===== =========== =============================================================
        ``bandwidthPriority`` 8 -               Priority for this transfer.
        ``cookies``           13 -              One or more HTTP cookie(s).
        ``download_dir``      1 -               The directory where the downloaded contents will be saved in.
        ``files_unwanted``    1 -               A list of file id's that shouldn't be downloaded.
        ``files_wanted``      1 -               A list of file id's that should be downloaded.
        ``paused``            1 -               If True, does not start the transfer when added.
        ``peer_limit``        1 -               Maximum number of peers allowed.
        ``priority_high``     1 -               A list of file id's that should have high priority.
        ``priority_low``      1 -               A list of file id's that should have low priority.
        ``priority_normal``   1 -               A list of file id's that should have normal priority.
        ===================== ===== =========== =============================================================

        Returns a Torrent object with the fields.
        """
        if torrent is None:
            raise ValueError('add_torrent requires data or a URI.')
        torrent_data = None
        parsed_uri = urlparse(torrent)
        if parsed_uri.scheme in ['ftp', 'ftps', 'http', 'https']:
            # there has been some problem with T's built in torrent fetcher,
            # use a python one instead
            req = Request(torrent, headers={'User-Agent': 'TransmissionRPC'})
            torrent_file = urlopen(req)
            torrent_data = torrent_file.read()
            torrent_data = base64.b64encode(torrent_data).decode('utf-8')
        if parsed_uri.scheme in ['file']:
            filepath = torrent
            # uri decoded different on linux / windows ?
            if len(parsed_uri.path) > 0:
                filepath = parsed_uri.path
            elif len(parsed_uri.netloc) > 0:
                filepath = parsed_uri.netloc
            torrent_file = open(filepath, 'rb')
            torrent_data = torrent_file.read()
            torrent_data = base64.b64encode(torrent_data).decode('utf-8')
        if not torrent_data:
            if torrent.endswith('.torrent') or torrent.startswith('magnet:'):
                torrent_data = None
            else:
                might_be_base64 = False
                try:
                    # check if this is base64 data
                    if PY3:
                        base64.b64decode(torrent.encode('utf-8'))
                    else:
                        base64.b64decode(torrent)
                    might_be_base64 = True
                except Exception:
                    pass
                if might_be_base64:
                    torrent_data = torrent
        args = {}
        if torrent_data:
            args = {'metainfo': torrent_data}
        else:
            args = {'filename': torrent}
        for key, value in iteritems(kwargs):
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('torrent-add', argument, value,
                                                self.rpc_version)
            args[arg] = val
        return list(
            self._request('torrent-add', args, timeout=timeout).values())[0]
Exemplo n.º 17
0
    def add_torrent(self, torrent, timeout=None, **kwargs):
        """
        Add torrent to transfers list. Takes a uri to a torrent or base64 encoded torrent data in ``torrent``.
        Additional arguments are:

        ===================== ===== =========== =============================================================
        Argument              RPC   Replaced by Description
        ===================== ===== =========== =============================================================
        ``bandwidthPriority`` 8 -               Priority for this transfer.
        ``cookies``           13 -              One or more HTTP cookie(s).
        ``download_dir``      1 -               The directory where the downloaded contents will be saved in.
        ``files_unwanted``    1 -               A list of file id's that shouldn't be downloaded.
        ``files_wanted``      1 -               A list of file id's that should be downloaded.
        ``paused``            1 -               If True, does not start the transfer when added.
        ``peer_limit``        1 -               Maximum number of peers allowed.
        ``priority_high``     1 -               A list of file id's that should have high priority.
        ``priority_low``      1 -               A list of file id's that should have low priority.
        ``priority_normal``   1 -               A list of file id's that should have normal priority.
        ===================== ===== =========== =============================================================

        Returns a Torrent object with the fields.
        """
        if torrent is None:
            raise ValueError('add_torrent requires data or a URI.')
        torrent_data = None
        parsed_uri = urlparse(torrent)
        if parsed_uri.scheme in ['ftp', 'ftps', 'http', 'https']:
            # there has been some problem with T's built in torrent fetcher,
            # use a python one instead
            user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
            headers = { 'User-Agent' : user_agent }
            opener = build_opener()
            opener.addheaders = headers.items()
            torrent_file = opener.open(torrent)
               
            if torrent_file.info().get('Content-Encoding') == 'gzip':
                buf = BytesIO(torrent_file.read())
                gzip_file = GzipFile(fileobj=buf)
                torrent_data = gzip_file.read()
            else:
                torrent_data = torrent_file.read()
            torrent_data = base64.b64encode(torrent_data).decode('utf-8')
        if parsed_uri.scheme in ['file']:
            filepath = torrent
            # uri decoded different on linux / windows ?
            if len(parsed_uri.path) > 0:
                filepath = parsed_uri.path
            elif len(parsed_uri.netloc) > 0:
                filepath = parsed_uri.netloc
            torrent_file = open(filepath, 'rb')
            torrent_data = torrent_file.read()
            torrent_data = base64.b64encode(torrent_data).decode('utf-8')
        if not torrent_data:
            if torrent.endswith('.torrent') or torrent.startswith('magnet:'):
                torrent_data = None
            else:
                might_be_base64 = False
                try:
                    # check if this is base64 data
                    if PY3:
                        base64.b64decode(torrent.encode('utf-8'))
                    else:
                        base64.b64decode(torrent)
                    might_be_base64 = True
                except Exception:
                    pass
                if might_be_base64:
                    torrent_data = torrent
        args = {}
        if torrent_data:
            args = {'metainfo': torrent_data}
        else:
            args = {'filename': torrent}
        for key, value in iteritems(kwargs):
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert('torrent-add', argument, value, self.rpc_version)
            args[arg] = val
        return list(self._request('torrent-add', args, timeout=timeout).values())[0]
Exemplo n.º 18
0
    def add_torrent(self, torrent, timeout=None, **kwargs):
        """
        Add torrent to transfers list. Takes a uri to a torrent or base64 encoded torrent data in ``torrent``.
        Additional arguments are:

        ===================== ===== =========== =============================================================
        Argument              RPC   Replaced by Description
        ===================== ===== =========== =============================================================
        ``bandwidthPriority`` 8 -               Priority for this transfer.
        ``cookies``           13 -              One or more HTTP cookie(s).
        ``download_dir``      1 -               The directory where the downloaded contents will be saved in.
        ``files_unwanted``    1 -               A list of file id's that shouldn't be downloaded.
        ``files_wanted``      1 -               A list of file id's that should be downloaded.
        ``paused``            1 -               If True, does not start the transfer when added.
        ``peer_limit``        1 -               Maximum number of peers allowed.
        ``priority_high``     1 -               A list of file id's that should have high priority.
        ``priority_low``      1 -               A list of file id's that should have low priority.
        ``priority_normal``   1 -               A list of file id's that should have normal priority.
        ===================== ===== =========== =============================================================

        Returns a Torrent object with the fields.
        """
        if torrent is None:
            raise ValueError("add_torrent requires data or a URI.")
        torrent_data = None
        parsed_uri = urlparse(torrent)
        if parsed_uri.scheme in ["ftp", "ftps", "http", "https"]:
            # there has been some problem with T's built in torrent fetcher,
            # use a python one instead
            try:
                torrent_file = urlopen(torrent)
                if torrent_file.info().get("Content-Encoding") == "gzip":
                    torrent_data = gzip.decompress(torrent_file.read())
                else:
                    torrent_data = torrent_file.read()
                torrent_data = base64.b64encode(torrent_data).decode("utf-8")
            except HTTPError as e:
                # follow links that directly redirect to a magnet (redirects to
                # non-http/ftp files return a 302 error)
                if e.code == 302 and e.url.startswith("magnet:"):
                    return self.add_torrent(e.url, timeout=timeout, **kwargs)
                else:
                    raise e
        if parsed_uri.scheme in ["file"]:
            filepath = torrent
            # uri decoded different on linux / windows ?
            if parsed_uri.path:
                filepath = parsed_uri.path
            elif parsed_uri.netloc:
                filepath = parsed_uri.netloc
            if filepath.endswith(".gz"):
                with gzip.open(filepath, "rb") as torrent_file:
                    torrent_data = torrent_file.read()
            else:
                with open(filepath, "rb") as torrent_file:
                    torrent_data = torrent_file.read()
            torrent_data = base64.b64encode(torrent_data).decode("utf-8")
        if not torrent_data:
            if torrent.endswith(".torrent") or torrent.startswith("magnet:"):
                torrent_data = None
            else:
                might_be_base64 = False
                try:
                    base64.b64decode(torrent.encode("utf-8"))
                    might_be_base64 = True
                except Exception:
                    pass
                if might_be_base64:
                    torrent_data = torrent
        args = {}
        if torrent_data:
            args = {"metainfo": torrent_data}
        else:
            args = {"filename": torrent}
        for key, value in list(kwargs.items()):
            argument = make_rpc_name(key)
            (arg, val) = argument_value_convert("torrent-add", argument, value,
                                                self.rpc_version)
            args[arg] = val
        return list(
            self._request("torrent-add", args, timeout=timeout).values())[0]