[WebUI] Fix error stopping daemon in connection manager

The wrong number of arguments was being parsed from get_host_info.
This commit is contained in:
Calum Lind 2024-08-19 18:04:22 +01:00
commit 1e5f248fb8
No known key found for this signature in database
GPG key ID: 90597A687B836BA3
2 changed files with 22 additions and 53 deletions

View file

@ -78,27 +78,28 @@ class TestWebAPI(WebServerTestBase):
@defer.inlineCallbacks @defer.inlineCallbacks
def get_host_status(self): def get_host_status(self):
host = list(self.deluge_web.web_api._get_host(self.host_id)) host = list(self.deluge_web.web_api.hostlist.get_host_info(self.host_id))
host[3] = 'Online' host[3] = 'Online'
host[4] = '2.0.0.dev562' host[4] = '2.0.0.dev562'
status = yield self.deluge_web.web_api.get_host_status(self.host_id) status = yield self.deluge_web.web_api.get_host_status(self.host_id)
assert status == tuple(status) assert status == tuple(status)
def test_get_host(self): def test_get_hosts(self):
assert not self.deluge_web.web_api._get_host('invalid_id') hosts = self.deluge_web.web_api.hostlist.get_hosts_info()
conn = list(self.deluge_web.web_api.hostlist.get_hosts_info()[0]) assert self.deluge_web.web_api.get_hosts() == hosts
assert self.deluge_web.web_api._get_host(conn[0]) == conn[0:4]
def test_add_host(self): def test_add_host(self):
conn = ['abcdef', '10.0.0.1', 0, 'user123', 'pass123'] conn = ['abcdef', '10.0.0.1', 0, 'user123', 'pass123']
assert not self.deluge_web.web_api._get_host(conn[0]) assert not self.deluge_web.web_api.hostlist.get_host_info(conn[0])
# Add valid host # Add valid host
result, host_id = self.deluge_web.web_api.add_host( result, host_id = self.deluge_web.web_api.add_host(
conn[1], conn[2], conn[3], conn[4] conn[1], conn[2], conn[3], conn[4]
) )
assert result assert result
conn[0] = host_id conn[0] = host_id
assert self.deluge_web.web_api._get_host(conn[0]) == conn[0:4] assert (
list(self.deluge_web.web_api.hostlist.get_host_info(conn[0])) == conn[0:4]
)
# Add already existing host # Add already existing host
ret = self.deluge_web.web_api.add_host(conn[1], conn[2], conn[3], conn[4]) ret = self.deluge_web.web_api.add_host(conn[1], conn[2], conn[3], conn[4])
@ -112,10 +113,10 @@ class TestWebAPI(WebServerTestBase):
def test_remove_host(self): def test_remove_host(self):
conn = ['connection_id', '', 0, '', ''] conn = ['connection_id', '', 0, '', '']
self.deluge_web.web_api.hostlist.config['hosts'].append(conn) self.deluge_web.web_api.hostlist.config['hosts'].append(conn)
assert self.deluge_web.web_api._get_host(conn[0]) == conn[0:4] assert self.deluge_web.web_api.hostlist.get_host_info(conn[0]) == conn[0:4]
# Remove valid host # Remove valid host
assert self.deluge_web.web_api.remove_host(conn[0]) assert self.deluge_web.web_api.remove_host(conn[0])
assert not self.deluge_web.web_api._get_host(conn[0]) assert not self.deluge_web.web_api.hostlist.get_host_info(conn[0])
# Remove non-existing host # Remove non-existing host
assert not self.deluge_web.web_api.remove_host(conn[0]) assert not self.deluge_web.web_api.remove_host(conn[0])

View file

@ -22,9 +22,10 @@ from twisted.web import http, resource, server
from deluge import component, httpdownloader from deluge import component, httpdownloader
from deluge.common import AUTH_LEVEL_DEFAULT, get_magnet_info, is_magnet from deluge.common import AUTH_LEVEL_DEFAULT, get_magnet_info, is_magnet
from deluge.configmanager import get_config_dir from deluge.configmanager import get_config_dir
from deluge.decorators import maybe_coroutine
from deluge.error import NotAuthorizedError from deluge.error import NotAuthorizedError
from deluge.i18n import get_languages from deluge.i18n import get_languages
from deluge.ui.client import Client, client from deluge.ui.client import client
from deluge.ui.common import FileTree2, TorrentInfo from deluge.ui.common import FileTree2, TorrentInfo
from deluge.ui.coreconfig import CoreConfig from deluge.ui.coreconfig import CoreConfig
from deluge.ui.hostlist import HostList from deluge.ui.hostlist import HostList
@ -744,18 +745,6 @@ class WebApi(JSONComponent):
deferreds.append(d) deferreds.append(d)
return DeferredList(deferreds, consumeErrors=False) return DeferredList(deferreds, consumeErrors=False)
def _get_host(self, host_id):
"""Information about a host from supplied host id.
Args:
host_id (str): The id of the host.
Returns:
list: The host information, empty list if not found.
"""
return list(self.hostlist.get_host_info(host_id))
@export @export
def get_hosts(self): def get_hosts(self):
""" """
@ -838,39 +827,18 @@ class WebApi(JSONComponent):
client.start_daemon(port, get_config_dir()) client.start_daemon(port, get_config_dir())
@export @export
def stop_daemon(self, host_id): @maybe_coroutine
""" async def stop_daemon(self, host_id):
Stops a running daemon.
:param host_id: the hash id of the host
:type host_id: string
"""
main_deferred = Deferred()
host = self._get_host(host_id)
if not host:
main_deferred.callback((False, _('Daemon does not exist')))
return main_deferred
try: try:
await self.hostlist.connect_host(host_id)
except Exception as err:
msg = f'Error occurred stopping daemon: {err}'
result = (False, msg)
else:
client.daemon.shutdown()
result = (True,)
def on_connect(connected, c): return Deferred().callback(result)
if not connected:
main_deferred.callback((False, _('Daemon not running')))
return
c.daemon.shutdown()
main_deferred.callback((True,))
def on_connect_failed(reason):
main_deferred.callback((False, reason))
host, port, user, password = host[1:5]
c = Client()
d = c.connect(host, port, user, password)
d.addCallback(on_connect, c)
d.addErrback(on_connect_failed)
except Exception:
main_deferred.callback((False, 'An error occurred'))
return main_deferred
@export @export
def get_config(self): def get_config(self):