Merge branch 'master' into autoadd
This commit is contained in:
commit
1cfc4f522e
|
@ -42,31 +42,43 @@ class ComponentAlreadyRegistered(Exception):
|
||||||
|
|
||||||
class Component(object):
|
class Component(object):
|
||||||
"""
|
"""
|
||||||
Component objects are singletons managed by the `:class:ComponentRegistry`.
|
Component objects are singletons managed by the :class:`ComponentRegistry`.
|
||||||
When a new Component object is instantiated, it will be automatically
|
When a new Component object is instantiated, it will be automatically
|
||||||
registered with the `:class:ComponentRegistry`.
|
registered with the :class:`ComponentRegistry`.
|
||||||
|
|
||||||
The ComponentRegistry has the ability to start, stop, pause and shutdown the
|
The ComponentRegistry has the ability to start, stop, pause and shutdown the
|
||||||
components registered with it.
|
components registered with it.
|
||||||
|
|
||||||
Events:
|
**Events:**
|
||||||
|
|
||||||
start() - This method is called when the client has connected to a
|
**start()** - This method is called when the client has connected to a
|
||||||
Deluge core.
|
Deluge core.
|
||||||
|
|
||||||
stop() - This method is called when the client has disconnected from a
|
**stop()** - This method is called when the client has disconnected from a
|
||||||
Deluge core.
|
Deluge core.
|
||||||
|
|
||||||
update() - This method is called every 1 second by default while the
|
**update()** - This method is called every 1 second by default while the
|
||||||
Componented is in a "Started" state. The interval can be
|
Componented is in a *Started* state. The interval can be
|
||||||
specified during instantiation. The update() timer can be
|
specified during instantiation. The update() timer can be
|
||||||
paused by instructing the `:class:ComponentRegistry` to pause
|
paused by instructing the :class:`ComponentRegistry` to pause
|
||||||
this Component.
|
this Component.
|
||||||
|
|
||||||
shutdown() - This method is called when the client is exiting. If the
|
**shutdown()** - This method is called when the client is exiting. If the
|
||||||
Component is in a "Started" state when this is called, a
|
Component is in a "Started" state when this is called, a
|
||||||
call to stop() will be issued prior to shutdown().
|
call to stop() will be issued prior to shutdown().
|
||||||
|
|
||||||
|
**States:**
|
||||||
|
|
||||||
|
A Component can be in one of these 3 states.
|
||||||
|
|
||||||
|
**Started** - The Component has been started by the :class:`ComponentRegistry`
|
||||||
|
and will have it's update timer started.
|
||||||
|
|
||||||
|
**Stopped** - The Component has either been stopped or has yet to be started.
|
||||||
|
|
||||||
|
**Paused** - The Component has had it's update timer stopped, but will
|
||||||
|
still be considered in a Started state.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def __init__(self, name, interval=1, depend=None):
|
def __init__(self, name, interval=1, depend=None):
|
||||||
self._component_name = name
|
self._component_name = name
|
||||||
|
@ -158,7 +170,7 @@ class Component(object):
|
||||||
class ComponentRegistry(object):
|
class ComponentRegistry(object):
|
||||||
"""
|
"""
|
||||||
The ComponentRegistry holds a list of currently registered
|
The ComponentRegistry holds a list of currently registered
|
||||||
`:class:Component` objects. It is used to manage the Components by
|
:class:`Component` objects. It is used to manage the Components by
|
||||||
starting, stopping, pausing and shutting them down.
|
starting, stopping, pausing and shutting them down.
|
||||||
"""
|
"""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -172,8 +184,7 @@ class ComponentRegistry(object):
|
||||||
:param obj: the Component object
|
:param obj: the Component object
|
||||||
:type obj: object
|
:type obj: object
|
||||||
|
|
||||||
:raises ComponentAlreadyRegistered: if a component with the same name
|
:raises ComponentAlreadyRegistered: if a component with the same name is already registered.
|
||||||
is already registered.
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
name = obj._component_name
|
name = obj._component_name
|
||||||
|
@ -205,15 +216,14 @@ class ComponentRegistry(object):
|
||||||
def start(self, names=[]):
|
def start(self, names=[]):
|
||||||
"""
|
"""
|
||||||
Starts Components that are currently in a Stopped state and their
|
Starts Components that are currently in a Stopped state and their
|
||||||
dependencies. If `:param:names` is specified, will only start those
|
dependencies. If *names* is specified, will only start those
|
||||||
Components and their dependencies and if not it will start all
|
Components and their dependencies and if not it will start all
|
||||||
registered components.
|
registered components.
|
||||||
|
|
||||||
:param names: a list of Components to start
|
:param names: a list of Components to start
|
||||||
:type names: list
|
:type names: list
|
||||||
|
|
||||||
:returns: a Deferred object that will fire once all Components have been
|
:returns: a Deferred object that will fire once all Components have been sucessfully started
|
||||||
sucessfully started
|
|
||||||
:rtype: twisted.internet.defer.Deferred
|
:rtype: twisted.internet.defer.Deferred
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -242,30 +252,20 @@ class ComponentRegistry(object):
|
||||||
def stop(self, names=[]):
|
def stop(self, names=[]):
|
||||||
"""
|
"""
|
||||||
Stops Components that are currently not in a Stopped state. If
|
Stops Components that are currently not in a Stopped state. If
|
||||||
`:param:names` is specified, then it will only stop those Components,
|
*names* is specified, then it will only stop those Components,
|
||||||
and if not it will stop all the registered Components.
|
and if not it will stop all the registered Components.
|
||||||
|
|
||||||
:param names: a list of Components to start
|
:param names: a list of Components to start
|
||||||
:type names: list
|
:type names: list
|
||||||
|
|
||||||
:returns: a Deferred object that will fire once all Components have been
|
:returns: a Deferred object that will fire once all Components have been sucessfully stopped
|
||||||
sucessfully stopped
|
|
||||||
:rtype: twisted.internet.defer.Deferred
|
:rtype: twisted.internet.defer.Deferred
|
||||||
|
|
||||||
:raises KeyError: if a component name is not registered
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not names:
|
if not names:
|
||||||
names = self.components.keys()
|
names = self.components.keys()
|
||||||
elif isinstance(names, str):
|
elif isinstance(names, str):
|
||||||
if names in self.components:
|
names = [names]
|
||||||
names = [names]
|
|
||||||
else:
|
|
||||||
raise KeyError("%s is not a registered component!" % names)
|
|
||||||
|
|
||||||
for name in names:
|
|
||||||
if name not in self.components:
|
|
||||||
raise KeyError("%s is not a registered component!" % name)
|
|
||||||
|
|
||||||
deferreds = []
|
deferreds = []
|
||||||
|
|
||||||
|
@ -278,14 +278,13 @@ class ComponentRegistry(object):
|
||||||
def pause(self, names=[]):
|
def pause(self, names=[]):
|
||||||
"""
|
"""
|
||||||
Pauses Components that are currently in a Started state. If
|
Pauses Components that are currently in a Started state. If
|
||||||
`:param:names` is specified, then it will only pause those Components,
|
*names* is specified, then it will only pause those Components,
|
||||||
and if not it will pause all the registered Components.
|
and if not it will pause all the registered Components.
|
||||||
|
|
||||||
:param names: a list of Components to pause
|
:param names: a list of Components to pause
|
||||||
:type names: list
|
:type names: list
|
||||||
|
|
||||||
:returns: a Deferred object that will fire once all Components have been
|
:returns: a Deferred object that will fire once all Components have been sucessfully paused
|
||||||
sucessfully paused
|
|
||||||
:rtype: twisted.internet.defer.Deferred
|
:rtype: twisted.internet.defer.Deferred
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -305,14 +304,13 @@ class ComponentRegistry(object):
|
||||||
def resume(self, names=[]):
|
def resume(self, names=[]):
|
||||||
"""
|
"""
|
||||||
Resumes Components that are currently in a Paused state. If
|
Resumes Components that are currently in a Paused state. If
|
||||||
`:param:names` is specified, then it will only resume those Components,
|
*names* is specified, then it will only resume those Components,
|
||||||
and if not it will resume all the registered Components.
|
and if not it will resume all the registered Components.
|
||||||
|
|
||||||
:param names: a list of Components to resume
|
:param names: a list of Components to resume
|
||||||
:type names: list
|
:type names: list
|
||||||
|
|
||||||
:returns: a Deferred object that will fire once all Components have been
|
:returns: a Deferred object that will fire once all Components have been sucessfully resumed
|
||||||
sucessfully resumed
|
|
||||||
:rtype: twisted.internet.defer.Deferred
|
:rtype: twisted.internet.defer.Deferred
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -332,12 +330,11 @@ class ComponentRegistry(object):
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
"""
|
"""
|
||||||
Shutdowns all Components regardless of state. This will call
|
Shutdowns all Components regardless of state. This will call
|
||||||
`:meth:stop` on call the components prior to shutting down. This should
|
:meth:`stop` on call the components prior to shutting down. This should
|
||||||
be called when the program is exiting to ensure all Components have a
|
be called when the program is exiting to ensure all Components have a
|
||||||
chance to properly shutdown.
|
chance to properly shutdown.
|
||||||
|
|
||||||
:returns: a Deferred object that will fire once all Components have been
|
:returns: a Deferred object that will fire once all Components have been sucessfully resumed
|
||||||
sucessfully resumed
|
|
||||||
:rtype: twisted.internet.defer.Deferred
|
:rtype: twisted.internet.defer.Deferred
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -4,13 +4,22 @@ import common
|
||||||
|
|
||||||
from deluge.core.alertmanager import AlertManager
|
from deluge.core.alertmanager import AlertManager
|
||||||
from deluge.core.core import Core
|
from deluge.core.core import Core
|
||||||
|
import deluge.component as component
|
||||||
|
|
||||||
class AlertManagerTestCase(unittest.TestCase):
|
class AlertManagerTestCase(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.core = Core()
|
self.core = Core()
|
||||||
|
|
||||||
self.am = AlertManager()
|
self.am = component.get("AlertManager")
|
||||||
self.am.start()
|
component.start(["AlertManager"])
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
def on_shutdown(result):
|
||||||
|
component._ComponentRegistry.components = {}
|
||||||
|
del self.am
|
||||||
|
del self.core
|
||||||
|
|
||||||
|
return component.shutdown().addCallback(on_shutdown)
|
||||||
|
|
||||||
def test_register_handler(self):
|
def test_register_handler(self):
|
||||||
def handler(alert):
|
def handler(alert):
|
||||||
|
|
Loading…
Reference in New Issue