Browse Source

qubes: disable events by default not to interfere with loading from XML

Wojtek Porczyk 9 years ago
parent
commit
7f16e0a73b
4 changed files with 10 additions and 5 deletions
  1. 4 2
      qubes/__init__.py
  2. 4 1
      qubes/events.py
  3. 2 0
      qubes/tests/events.py
  4. 0 2
      qubes/vm/__init__.py

+ 4 - 2
qubes/__init__.py

@@ -450,6 +450,7 @@ class VMCollection(object):
                 'name={!r} ({!r})'.format(value.name, self[value.name]))
 
         self._dict[value.qid] = value
+        value.events_enabled = True
         self.app.fire_event('domain-added', value)
 
 
@@ -799,6 +800,7 @@ class PropertyHolder(qubes.events.Emitter):
     '''
 
     def __init__(self, xml, **kwargs):
+        super(PropertyHolder, self).__init__()
         self.xml = xml
 
         for key, value in kwargs.items():
@@ -810,8 +812,6 @@ class PropertyHolder(qubes.events.Emitter):
                 continue
             setattr(self, key, kwargs.pop(key))
 
-        super(PropertyHolder, self).__init__(**kwargs)
-
 
     @classmethod
     def property_list(cls, load_stage=None):
@@ -1141,6 +1141,8 @@ class Qubes(PropertyHolder):
         if load:
             self.load()
 
+        self.events_enabled = True
+
 
     def load(self):
         '''Open qubes.xml

+ 4 - 1
qubes/events.py

@@ -93,13 +93,16 @@ class EmitterMeta(type):
 
 class Emitter(object):
     '''Subject that can emit events.
+
+    By default all events are disabled not to interfere with loading from XML.
+    To enable event dispatch, set :py:attr:`events_enabled` to :py:obj:`True`.
     '''
 
     __metaclass__ = EmitterMeta
 
     def __init__(self, *args, **kwargs):
         super(Emitter, self).__init__(*args, **kwargs)
-        self.events_enabled = True
+        self.events_enabled = False
 
 
     @classmethod

+ 2 - 0
qubes/tests/events.py

@@ -37,6 +37,7 @@ class TC_00_Emitter(qubes.tests.QubesTestCase):
 
         emitter = qubes.events.Emitter()
         emitter.add_handler('testevent', on_testevent)
+        emitter.events_enabled = True
         emitter.fire_event('testevent')
         self.assertTrue(testevent_fired[0])
 
@@ -53,5 +54,6 @@ class TC_00_Emitter(qubes.tests.QubesTestCase):
                     self.testevent_fired = True
 
         emitter = TestEmitter()
+        emitter.events_enabled = True
         emitter.fire_event('testevent')
         self.assertTrue(emitter.testevent_fired)

+ 0 - 2
qubes/vm/__init__.py

@@ -148,8 +148,6 @@ class BaseVM(qubes.PropertyHolder):
     def __init__(self, app, xml, services=None, devices=None, tags=None,
             **kwargs):
         # pylint: disable=redefined-outer-name
-
-        self.events_enabled = False
         super(BaseVM, self).__init__(xml, **kwargs)
 
         #: mother :py:class:`qubes.Qubes` object