1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 try:
26 from types import StringType, IntType
27 except ImportError:
28 StringType = bytes
29 IntType = int
33 "An object containing its udi, properties and children"
35 self.udi = properties['info.udi']
36
37 self.properties = properties
38 self.children = []
39 self.classification = None
40
41 if 'info.parent' in properties:
42 self.parent_udi = properties['info.parent']
43 else:
44 self.parent_udi = None
45
46 self.parent = None
47
49 print(self.udi, ":")
50 for property, value in self.properties.items():
51 print(" ", property," ==> ", value)
52
58 self.head = None
59 self.no_parent_yet = []
60
61
62 - def add(self, hal_device):
63 if hal_device.parent_udi:
64 parent = self.__find_node(hal_device.parent_udi)
65 if parent:
66 parent.children.append(hal_device)
67 hal_device.parent = parent
68 else:
69 self.no_parent_yet.append(hal_device)
70 else:
71 self.head = hal_device
72
73
74 self.__get_lost_children(hal_device)
75
76
78 found_list = []
79 indexes = []
80 no_parent_yet_copy = self.no_parent_yet[:]
81 for dev in no_parent_yet_copy:
82 if dev.parent_udi == hal_device.udi:
83 dev.parent = hal_device
84 hal_device.children.append(dev)
85 self.no_parent_yet.remove(dev)
86
88 """
89 This takes a node in the HalDevice tree and returns the HalDevice with
90 the given udi.
91 """
92 if self.head:
93 node = HalTree.__find_node_worker(self.head, udi)
94 if node:
95 return node
96
97 for node in self.no_parent_yet:
98 found_node = HalTree.__find_node_worker(node, udi)
99 if found_node:
100 return found_node
101 return None
102
103 @staticmethod
105 if node.udi == udi:
106 return node
107 for device in node.children:
108 res = HalTree.__find_node_worker(device, udi)
109 if res:
110 return res
111 return None
112
115
117 print(indent, node.udi)
118 print(indent, "CLASS:", node.classification)
119 for name, property in node.properties.items():
120 if (type(property) == StringType):
121 if property.isdigit():
122 print(indent + " ", "%-20s ==> %s" % (name, hex(int(property))))
123 else:
124 print(indent + " ", "%-20s ==> %s" % (name, property))
125 elif (type(property) == IntType):
126 print(indent + " ", "%-20s ==> %s" % (name, hex(int(property))))
127 else:
128 print(indent + " ", "%-20s ==> %s" % (name, property))
129 print
130 for child in node.children:
131 self.__print_dev_tree(child, indent + " ")
132