diff --git a/qubesadmin/events/__init__.py b/qubesadmin/events/__init__.py index 48666853..e6d98260 100644 --- a/qubesadmin/events/__init__.py +++ b/qubesadmin/events/__init__.py @@ -31,8 +31,19 @@ class EventsDispatcher(object): ''' Events dispatcher, responsible for receiving events and calling appropriate handlers''' - def __init__(self, app, api_method='admin.Events'): - '''Initialize EventsDispatcher''' + def __init__(self, app, api_method='admin.Events', enable_cache=True): + """Initialize EventsDispatcher + + :param app :py:class:`qubesadmin.Qubes` object + :param api_method Admin API method producing events + :param enable_cache Enable caching (see below) + + Connecting :py:class:`EventsDispatcher` object to a + :py:class:`qubesadmin.Qubes` implicitly enables caching. It is important + to actually run the dispatcher (:py:meth:`listen_for_events`), otherwise + the cache won't be updated. Alternatively, disable caching by setting + :py:attr:`qubesadmin.Qubes.cache_enabled` property to `False`. + """ #: Qubes() object self.app = app @@ -41,6 +52,10 @@ def __init__(self, app, api_method='admin.Events'): #: event handlers - dict of event -> handlers self.handlers = {} + if enable_cache: + self.app.register_cache_handlers(self) + self.app.cache_enabled = True + def add_handler(self, event, handler): '''Register handler for event diff --git a/qubesadmin/events/utils.py b/qubesadmin/events/utils.py index c6c8e4da..92d62f79 100644 --- a/qubesadmin/events/utils.py +++ b/qubesadmin/events/utils.py @@ -57,7 +57,7 @@ def wait_for_domain_shutdown(vms): return app = list(vms)[0].app vms = set(vms) - events = qubesadmin.events.EventsDispatcher(app) + events = qubesadmin.events.EventsDispatcher(app, enable_cache=False) events.add_handler('domain-shutdown', functools.partial(interrupt_on_vm_shutdown, vms)) events.add_handler('connection-established',