Exemple #1
0
class CommonNameData(gobject.GObject):
    __gsignals__ = {
        'introspect_data_changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,())
                   }

    def __init__(self):
        super(CommonNameData, self).__init__()

        self.unique_name = None
        self.bus = None
        self.process_id = None
        self.process_path = None
        self.process_name = 'Unknown or Remote' 
        self._introspecting = False
        self._introspection_data = IntrospectData() 
        self._introspect_object_queue = []

    # there is a race condition here but D-Bus
    # doesn't have a signal for introspection data change
    # which would be impractical for some highly dynamic objects 
    def _introspect(self, name, node):
        self._introspecting = True
        obj = self.bus.get_object(name, node, follow_name_owner_changes=True)
        obj.Introspect(dbus_interface='org.freedesktop.DBus.Introspectable',
                       reply_handler=lambda xml: self._query_introspect_data_cb(name, node, xml),
                       error_handler=self._query_introspect_data_error_cb)

    def _query_introspect_data_error_cb(self, error):
        print error
        self._introspecting = False
        # errors are expected

    def _query_introspect_data_cb(self, name, parent_node, xml):
        self._introspecting = False
        data = _introspect_parser.process_introspection_data(xml)
        for node in data['child_nodes']:
            cnode = ''
            if parent_node != '/':
                cnode = parent_node
                
            cnode += '/' + node 
            self._introspect_object_queue.append(cnode)            

        if self._introspect_object_queue:
            obj = self._introspect_object_queue.pop(0)
            self._introspect(name, obj)

        if data['interfaces']:
            self._introspection_data.append(parent_node, data)
        
             
        self.emit('introspect_data_changed')
Exemple #2
0
    def __init__(self):
        super(CommonNameData, self).__init__()

        self.unique_name = None
        self.bus = None
        self.process_id = None
        self.process_path = None
        self.process_name = 'Unknown or Remote' 
        self._introspecting = False
        self._introspection_data = IntrospectData() 
        self._introspect_object_queue = []