mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-06 08:28:39 +00:00
sync-wrapper for new async client
This commit is contained in:
parent
762f8a52af
commit
217d7eaa90
7 changed files with 129 additions and 12 deletions
|
@ -134,3 +134,23 @@ class Plugins(config.Form):
|
||||||
raise forms.ValidationError("SAVE:TODO")
|
raise forms.ValidationError("SAVE:TODO")
|
||||||
|
|
||||||
config.register_block('deluge','plugins', Plugins)
|
config.register_block('deluge','plugins', Plugins)
|
||||||
|
|
||||||
|
|
||||||
|
class Queue(config.Form):
|
||||||
|
title = _("Queue")
|
||||||
|
info = _("queue-cfg not finished")
|
||||||
|
|
||||||
|
queue_top = config.CheckBox(_("Queue new torrents to top"))
|
||||||
|
total_active = config.DelugeInt(_("Total active torrents"))
|
||||||
|
total_seeding = config.DelugeInt(_("Total active seeding"))
|
||||||
|
total_downloading = config.DelugeInt(_("Total active downloading"))
|
||||||
|
|
||||||
|
queue_bottom = config.CheckBox(_("Queue completed torrents to bottom"))
|
||||||
|
stop_on_ratio = config.CheckBox(_("Stop seeding when ratio reaches"))
|
||||||
|
stop_ratio = config.DelugeInt(_("TODO:float-edit-box"))
|
||||||
|
remove_after_stop = config.CheckBox(_("Remve torrent when ratio reached"))
|
||||||
|
|
||||||
|
def save(self, value):
|
||||||
|
raise forms.ValidationError("SAVE:TODO")
|
||||||
|
|
||||||
|
config.register_block('plugins','queue', Queue)
|
|
@ -55,9 +55,16 @@ class Template(config.WebCfgForm):
|
||||||
class Server(config.WebCfgForm):
|
class Server(config.WebCfgForm):
|
||||||
title = _("Server")
|
title = _("Server")
|
||||||
|
|
||||||
|
try:
|
||||||
|
import OpenSSL
|
||||||
|
except ImportError:
|
||||||
|
info = _("pyopenssl not installed, install this for https.")
|
||||||
|
|
||||||
port = forms.IntegerField(label = _("Port"),min_value=80)
|
port = forms.IntegerField(label = _("Port"),min_value=80)
|
||||||
|
|
||||||
use_https = config.CheckBox(_("Use https"))
|
use_https = config.CheckBox(_("Use https"))
|
||||||
|
|
||||||
|
|
||||||
def post_save(self):
|
def post_save(self):
|
||||||
pass
|
pass
|
||||||
#raise forms.ValidationError(
|
#raise forms.ValidationError(
|
||||||
|
|
|
@ -1,15 +1,42 @@
|
||||||
"""
|
"""
|
||||||
pretty debug errors
|
adapted for deluge-webui:
|
||||||
(part of web.py)
|
-edit-box with traceback for cut+paste.
|
||||||
|
-pretty errors for well known exceptions.
|
||||||
|
|
||||||
|
|
||||||
|
web.py :
|
||||||
adapted from Django <djangoproject.com>
|
adapted from Django <djangoproject.com>
|
||||||
Copyright (c) 2005, the Lawrence Journal-World
|
Copyright (c) 2005, the Lawrence Journal-World
|
||||||
Used under the modified BSD license:
|
Used under the modified BSD license:
|
||||||
http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
|
http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__all__ = ["debugerror", "djangoerror"]
|
__all__ = ["debugerror", "djangoerror"]
|
||||||
|
|
||||||
|
import utils
|
||||||
|
print utils
|
||||||
|
print dir(utils)
|
||||||
|
|
||||||
|
|
||||||
|
pretty_errors_str = {
|
||||||
|
"org.freedesktop.DBus.Error.ServiceUnknown":
|
||||||
|
""" Webui Lost the connection to deluge <br \>
|
||||||
|
Unable to reconnect, please restart deluge.
|
||||||
|
<!--<a href="/kill">click here to stop the webui</a>-->""",
|
||||||
|
"InvalidUniqueIDError:":
|
||||||
|
"""
|
||||||
|
this torrent was removed,
|
||||||
|
<a href="/home">click here to go to the torrent-list</a>
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pretty_errors_cls = {
|
||||||
|
type(utils.UnknownTorrentError):"""
|
||||||
|
this torrent was removed,
|
||||||
|
<a href="/home">click here to go to the torrent-list</a>
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
|
||||||
import sys, urlparse, pprint
|
import sys, urlparse, pprint
|
||||||
from lib.webpy022.net import websafe
|
from lib.webpy022.net import websafe
|
||||||
from lib.webpy022.template import Template
|
from lib.webpy022.template import Template
|
||||||
|
@ -299,6 +326,16 @@ def djangoerror():
|
||||||
exception_message = 'no message'
|
exception_message = 'no message'
|
||||||
exception_type = exception_type.__name__
|
exception_type = exception_type.__name__
|
||||||
|
|
||||||
|
"""
|
||||||
|
for err_str in pretty_errors:
|
||||||
|
if err_str in exception_message:
|
||||||
|
#from render import render
|
||||||
|
return render.error(pretty_errors[err_str])
|
||||||
|
"""
|
||||||
|
if exception_type in pretty_errors_cls:
|
||||||
|
from render import render
|
||||||
|
return render.error(pretty_errors_cls[exception_type])
|
||||||
|
|
||||||
version_info = (
|
version_info = (
|
||||||
"WebUi : rev." + ws.REVNO
|
"WebUi : rev." + ws.REVNO
|
||||||
+ "Python : " + str(sys.version)
|
+ "Python : " + str(sys.version)
|
||||||
|
|
|
@ -39,6 +39,10 @@ import config_tabs_webui #auto registers
|
||||||
import config_tabs_deluge #auto registers
|
import config_tabs_deluge #auto registers
|
||||||
from config import config_page
|
from config import config_page
|
||||||
#import forms
|
#import forms
|
||||||
|
#
|
||||||
|
from debugerror import deluge_debugerror
|
||||||
|
web.webapi.internalerror = deluge_debugerror
|
||||||
|
#
|
||||||
|
|
||||||
import lib.webpy022 as web
|
import lib.webpy022 as web
|
||||||
from lib.webpy022.http import seeother, url
|
from lib.webpy022.http import seeother, url
|
||||||
|
|
|
@ -1,6 +1,15 @@
|
||||||
$def with (torrent_list, all_torrents)
|
$def with (torrent_list, all_torrents)
|
||||||
$:render.header(_('Torrent list'))
|
$:render.header(_('Torrent list'))
|
||||||
|
|
||||||
|
<script language="javascript">
|
||||||
|
/*for select_all shortcut/button*/
|
||||||
|
var all_torrents = [
|
||||||
|
$for t in torrent_list:
|
||||||
|
"$t.id",
|
||||||
|
]
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<div class="panel" id="toolbar">
|
<div class="panel" id="toolbar">
|
||||||
|
|
||||||
<a class='toolbar_btn' href="#"
|
<a class='toolbar_btn' href="#"
|
||||||
|
@ -45,7 +54,6 @@ $:render.header(_('Torrent list'))
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="tableContainer" class="tableContainer">
|
<div id="tableContainer" class="tableContainer">
|
||||||
<table class="torrent_list" border=0 cellspacing=0 cellpadding=2 id="torrent_list">
|
<table class="torrent_list" border=0 cellspacing=0 cellpadding=2 id="torrent_list">
|
||||||
<thead class="fixedHeader">
|
<thead class="fixedHeader">
|
||||||
|
@ -142,6 +150,6 @@ $:part_stats()
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
$:render.footer()
|
$:render.footer()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,10 +48,7 @@ from urlparse import urlparse
|
||||||
|
|
||||||
from webserver_common import REVNO, VERSION, TORRENT_KEYS, STATE_MESSAGES
|
from webserver_common import REVNO, VERSION, TORRENT_KEYS, STATE_MESSAGES
|
||||||
from webserver_common import ws
|
from webserver_common import ws
|
||||||
from debugerror import deluge_debugerror
|
|
||||||
|
|
||||||
#init:
|
|
||||||
web.webapi.internalerror = deluge_debugerror
|
|
||||||
debug_unicode = False
|
debug_unicode = False
|
||||||
|
|
||||||
#methods:
|
#methods:
|
||||||
|
@ -146,6 +143,10 @@ def get_torrent_status(torrent_id):
|
||||||
ws.log.warning('torrent_status:None key in status:%s' % key)
|
ws.log.warning('torrent_status:None key in status:%s' % key)
|
||||||
|
|
||||||
|
|
||||||
|
if status.tracker == 0:
|
||||||
|
#0.6 does not raise a decent error on non-existing torrent.
|
||||||
|
raise UnknownTorrentError(torrent_id)
|
||||||
|
|
||||||
status["id"] = torrent_id
|
status["id"] = torrent_id
|
||||||
|
|
||||||
url = urlparse(status.tracker)
|
url = urlparse(status.tracker)
|
||||||
|
@ -253,3 +254,10 @@ def get_category_choosers(torrent_list):
|
||||||
|
|
||||||
#/utils
|
#/utils
|
||||||
|
|
||||||
|
class WebUiError(Exception):
|
||||||
|
"""the message of these exceptions will be rendered in
|
||||||
|
render.error(e.message) in debugerror.py"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
class UnknownTorrentError(WebUiError):
|
||||||
|
pass
|
||||||
|
|
|
@ -108,6 +108,36 @@ CONFIG_DEFAULTS = {
|
||||||
#/constants
|
#/constants
|
||||||
|
|
||||||
|
|
||||||
|
class SyncProxyFunction():
|
||||||
|
"""
|
||||||
|
helper class for SyncProxy
|
||||||
|
"""
|
||||||
|
def __init__(self,client, func_name):
|
||||||
|
self.func_name = func_name
|
||||||
|
self.client = client
|
||||||
|
|
||||||
|
def __call__(self,*args,**kwargs):
|
||||||
|
sync_result = []
|
||||||
|
|
||||||
|
def callback( result):
|
||||||
|
sync_result.append(result)
|
||||||
|
func = getattr(self.client,self.func_name)
|
||||||
|
|
||||||
|
func(callback,*args)
|
||||||
|
|
||||||
|
self.client.force_call(block=True)
|
||||||
|
|
||||||
|
return sync_result[0]
|
||||||
|
|
||||||
|
class SyncProxy(object):
|
||||||
|
"""acts like the old synchonous proxy"""
|
||||||
|
def __init__(self, client):
|
||||||
|
self.client = client
|
||||||
|
|
||||||
|
def __getattr__(self, attr,*args,**kwargs):
|
||||||
|
return SyncProxyFunction(self.client, attr)
|
||||||
|
|
||||||
|
|
||||||
class Ws:
|
class Ws:
|
||||||
"""
|
"""
|
||||||
singleton
|
singleton
|
||||||
|
@ -141,11 +171,15 @@ class Ws:
|
||||||
self.config = pickle.load(open(self.config_file))
|
self.config = pickle.load(open(self.config_file))
|
||||||
|
|
||||||
def init_06(self, uri = 'http://localhost:58846'):
|
def init_06(self, uri = 'http://localhost:58846'):
|
||||||
import deluge.ui.client as proxy
|
import deluge.ui.client as async_proxy
|
||||||
from deluge.log import LOG as log
|
from deluge.log import LOG as log
|
||||||
self.log = log
|
self.log = log
|
||||||
proxy.set_core_uri(uri)
|
async_proxy.set_core_uri(uri)
|
||||||
self.proxy = proxy
|
self.async_proxy = async_proxy
|
||||||
|
|
||||||
|
self.proxy = SyncProxy(self.async_proxy)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#MONKEY PATCH, TODO->REMOVE!!!
|
#MONKEY PATCH, TODO->REMOVE!!!
|
||||||
def add_torrent_filecontent(name , data_b64):
|
def add_torrent_filecontent(name , data_b64):
|
||||||
|
@ -174,7 +208,6 @@ class Ws:
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
self.init_process()
|
self.init_process()
|
||||||
self.proxy = proxy
|
|
||||||
self.env = '0.6'
|
self.env = '0.6'
|
||||||
|
|
||||||
def init_05(self):
|
def init_05(self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue