attach to signals, make DelugeWeb and JSON components
make the server print out its pid and url like paster does
This commit is contained in:
parent
fe6f045be1
commit
71ac5884dc
|
@ -26,6 +26,7 @@ import os
|
||||||
import time
|
import time
|
||||||
import locale
|
import locale
|
||||||
import shutil
|
import shutil
|
||||||
|
import signal
|
||||||
import urllib
|
import urllib
|
||||||
import gettext
|
import gettext
|
||||||
import hashlib
|
import hashlib
|
||||||
|
@ -39,7 +40,7 @@ from twisted.web import http, resource, server, static
|
||||||
|
|
||||||
from mako.template import Template as MakoTemplate
|
from mako.template import Template as MakoTemplate
|
||||||
|
|
||||||
from deluge import common
|
from deluge import common, component
|
||||||
from deluge.configmanager import ConfigManager
|
from deluge.configmanager import ConfigManager
|
||||||
from deluge.log import setupLogger, LOG as _log
|
from deluge.log import setupLogger, LOG as _log
|
||||||
from deluge.ui import common as uicommon
|
from deluge.ui import common as uicommon
|
||||||
|
@ -67,24 +68,16 @@ current_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
CONFIG_DEFAULTS = {
|
CONFIG_DEFAULTS = {
|
||||||
"port": 8112,
|
"port": 8112,
|
||||||
"button_style": 2,
|
"template": "slate",
|
||||||
"auto_refresh": False,
|
|
||||||
"auto_refresh_secs": 10,
|
|
||||||
"template": "white",
|
|
||||||
"pwd_salt": "2\xe8\xc7\xa6(n\x81_\x8f\xfc\xdf\x8b\xd1\x1e\xd5\x90",
|
"pwd_salt": "2\xe8\xc7\xa6(n\x81_\x8f\xfc\xdf\x8b\xd1\x1e\xd5\x90",
|
||||||
"pwd_md5": ".\xe8w\\+\xec\xdb\xf2id4F\xdb\rUc",
|
"pwd_md5": ".\xe8w\\+\xec\xdb\xf2id4F\xdb\rUc",
|
||||||
"cache_templates": True,
|
|
||||||
"connections": [],
|
|
||||||
"daemon": "http://localhost:58846",
|
|
||||||
"base": "",
|
"base": "",
|
||||||
"disallow": {},
|
|
||||||
"sessions": [],
|
"sessions": [],
|
||||||
"sidebar_show_zero": False,
|
"sidebar_show_zero": False,
|
||||||
"sidebar_show_trackers": False,
|
"sidebar_show_trackers": False,
|
||||||
"show_keyword_search": False,
|
"show_keyword_search": False,
|
||||||
"show_sidebar": True,
|
"show_sidebar": True,
|
||||||
"https": False,
|
"https": False
|
||||||
"refresh_secs": 10
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFAULT_HOST = "127.0.0.1"
|
DEFAULT_HOST = "127.0.0.1"
|
||||||
|
@ -101,7 +94,6 @@ HOSTLIST_COL_USER = 4
|
||||||
HOSTLIST_COL_PASS = 5
|
HOSTLIST_COL_PASS = 5
|
||||||
HOSTLIST_COL_VERSION = 6
|
HOSTLIST_COL_VERSION = 6
|
||||||
|
|
||||||
config = ConfigManager("webui06.conf", CONFIG_DEFAULTS)
|
|
||||||
hostlist = ConfigManager("hostlist.conf.1.2", DEFAULT_HOSTS)
|
hostlist = ConfigManager("hostlist.conf.1.2", DEFAULT_HOSTS)
|
||||||
|
|
||||||
def rpath(path):
|
def rpath(path):
|
||||||
|
@ -126,7 +118,7 @@ class JSONException(Exception):
|
||||||
self.inner_exception = inner_exception
|
self.inner_exception = inner_exception
|
||||||
Exception.__init__(self, str(inner_exception))
|
Exception.__init__(self, str(inner_exception))
|
||||||
|
|
||||||
class JSON(resource.Resource):
|
class JSON(resource.Resource, component.Component):
|
||||||
"""
|
"""
|
||||||
A Twisted Web resource that exposes a JSON-RPC interface for web clients
|
A Twisted Web resource that exposes a JSON-RPC interface for web clients
|
||||||
to use.
|
to use.
|
||||||
|
@ -134,6 +126,7 @@ class JSON(resource.Resource):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
resource.Resource.__init__(self)
|
resource.Resource.__init__(self)
|
||||||
|
component.Component.__init__(self, "JSON")
|
||||||
self._remote_methods = []
|
self._remote_methods = []
|
||||||
self._local_methods = {
|
self._local_methods = {
|
||||||
"web.update_ui": self.update_ui,
|
"web.update_ui": self.update_ui,
|
||||||
|
@ -379,6 +372,7 @@ class JSON(resource.Resource):
|
||||||
def login(self, password):
|
def login(self, password):
|
||||||
"""Method to allow the webui to authenticate
|
"""Method to allow the webui to authenticate
|
||||||
"""
|
"""
|
||||||
|
config = component.get("DelugeWeb").config
|
||||||
m = hashlib.md5()
|
m = hashlib.md5()
|
||||||
m.update(config['pwd_salt'])
|
m.update(config['pwd_salt'])
|
||||||
m.update(password)
|
m.update(password)
|
||||||
|
@ -558,10 +552,31 @@ class TopLevel(resource.Resource):
|
||||||
request.setHeader("content-type", "text/html; charset=utf-8")
|
request.setHeader("content-type", "text/html; charset=utf-8")
|
||||||
return template.render()
|
return template.render()
|
||||||
|
|
||||||
class DelugeWeb:
|
class DelugeWeb(component.Component):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
super(DelugeWeb, self).__init__("DelugeWeb")
|
||||||
self.site = server.Site(TopLevel())
|
self.site = server.Site(TopLevel())
|
||||||
self.port = config["port"]
|
self.config = ConfigManager("web.conf", CONFIG_DEFAULTS)
|
||||||
|
self.port = self.config["port"]
|
||||||
|
|
||||||
|
signal.signal(signal.SIGINT, self.shutdown)
|
||||||
|
signal.signal(signal.SIGTERM, self.shutdown)
|
||||||
|
if not common.windows_check():
|
||||||
|
signal.signal(signal.SIGHUP, self.shutdown)
|
||||||
|
else:
|
||||||
|
from win32api import SetConsoleCtrlHandler
|
||||||
|
from win32con import CTRL_CLOSE_EVENT
|
||||||
|
from win32con import CTRL_SHUTDOWN_EVENT
|
||||||
|
def win_handler(ctrl_type):
|
||||||
|
log.debug("ctrl_type: %s", ctrl_type)
|
||||||
|
if ctrl_type == CTRL_CLOSE_EVENT or \
|
||||||
|
ctrl_type == CTRL_SHUTDOWN_EVENT:
|
||||||
|
self.__shutdown()
|
||||||
|
return 1
|
||||||
|
SetConsoleCtrlHandler(win_handler)
|
||||||
|
|
||||||
|
def shutdown(self):
|
||||||
|
self.config.save()
|
||||||
|
|
||||||
if __name__ == "__builtin__":
|
if __name__ == "__builtin__":
|
||||||
deluge_web = DelugeWeb()
|
deluge_web = DelugeWeb()
|
||||||
|
|
|
@ -24,9 +24,16 @@
|
||||||
|
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
|
|
||||||
|
|
||||||
class WebUI:
|
class WebUI:
|
||||||
def __init__(self, args):
|
def __init__(self, args):
|
||||||
import server
|
import os
|
||||||
|
import server
|
||||||
|
print "Starting server in PID %s." % os.getpid()
|
||||||
deluge_web = server.DelugeWeb()
|
deluge_web = server.DelugeWeb()
|
||||||
reactor.listenTCP(deluge_web.port, deluge_web.site)
|
reactor.listenTCP(deluge_web.port, deluge_web.site)
|
||||||
|
|
||||||
|
print "serving on 0.0.0.0:%(port)s view at http://127.0.0.1:%(port)s" % {
|
||||||
|
"port": deluge_web.port
|
||||||
|
}
|
||||||
reactor.run()
|
reactor.run()
|
Loading…
Reference in New Issue