i am just about to create a python script which periodically checks for dead torrents, as it happens sometimes that I get dead torrents of rss feeds (usually tv show premieres). Those are choking the download queue :/. I managed to get torrent status items by using
Code: Select all
status["total_seeds"]
How can i get the amount of data downloaded of a specific torrent? In the Copy Limit Plugin there is an implementation of the functionality i want(get_torrents_status), how can i port this to a python script (not a deluge plugin)?
CopyLimit core.py:
Code: Select all
#
# core.py
#
# Copyright (C) 2009 Florentino Sainz (BlackIceSpain) <blackicespa@gmail.com>
#
# Basic plugin template created by:
# Copyright (C) 2008 Martijn Voncken <mvoncken@gmail.com>
# Copyright (C) 2007-2009 Andrew Resch <andrewresch@gmail.com>
# Copyright (C) 2009 Damien Churchill <damoxc@gmail.com>
#
# Deluge is free software.
#
# You may redistribute it and/or modify it under the terms of the
# GNU General Public License, as published by the Free Software
# Foundation; either version 3 of the License, or (at your option)
# any later version.
#
# deluge is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
from deluge.log import LOG as log
from deluge.plugins.pluginbase import CorePluginBase
import deluge.component as component
import deluge.configmanager
from deluge.core.rpcserver import export
from twisted.internet.task import LoopingCall
DEFAULT_PREFS = {
"LIM_COPIAS":7,
"MIN_SIZE":400,
"UPLOAD_RATE":20
}
class Core(CorePluginBase):
def enable(self):
self.config = deluge.configmanager.ConfigManager("copylimit.conf", DEFAULT_PREFS)
self.core = component.get("Core")
self.ratio = self.config["LIM_COPIAS"]
self.tamano = self.config["MIN_SIZE"]
self.upload = self.config["UPLOAD_RATE"]
self.tamanoReal = self.tamano * 1024 *1024
self.update_status_timer = LoopingCall(self.trabaja)
self.update_status_timer.start(20)
def disable(self):
pass
def update(self):
pass
def trabaja(self):
[b] torrents = self.core.get_torrents_status({"state":"Downloading"}, ["name", "total_size", "total_uploaded"]).items()
for torrent_id, torrent in torrents:[/b]
uploaded = torrent["total_uploaded"]
tamano_total= torrent["total_size"]
if ((self.ratio * tamano_total) < uploaded) & (tamano_total > self.tamanoReal):
self.core.set_torrent_options([torrent_id],{"max_upload_speed":self.upload})
@export
def set_config(self, config):
"""Sets the config dictionary"""
for key in config.keys():
self.config[key] = config[key]
self.ratio = self.config["LIM_COPIAS"]
self.tamano = self.config["MIN_SIZE"]
self.upload = self.config["UPLOAD_RATE"]
self.tamanoReal = self.tamano * 1024 *1024
self.config.save()
@export
def get_config(self):
"""Returns the config dictionary"""
return self.config.config
Code: Select all
for torrent_id, status in torrents.items():
# delete torrent if it is somewhere in path and has 0 seeds and this after beeing added over 5 hours ago; 18000s = 5h
if torrentdir in status["save_path"] and \
status["total_seeds"] < 1 and \
not status["is_finished"] and \
status["active_time"] > 18000 :
global do_remove_data
successmsg = " Removed: %s from %s because recognized as dead" % (status["name"], status["save_path"])
errormsg = "Error removing %s" % (status["name"])
# tlist.append(client.core.remove_torrent(torrent_id, do_remove_data).addCallbacks(printSuccess, printError, callbackArgs = (True, successmsg), errbackArgs = (errormsg)))
else:
printSuccess(None, False, " Skipping: %s from %s" % (status["name"], status["save_path"]))
defer.DeferredList(tlist).addCallback(printReport)
Thanks in advance,
ratze