-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsnippets
More file actions
44 lines (35 loc) · 1.45 KB
/
snippets
File metadata and controls
44 lines (35 loc) · 1.45 KB
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# analyze the structure of a gpb message descriptor and create TreeItems
# based on that structure
#def analyze_message(self,descriptor, parent, l=0):
#if not labels: self.setText(0,descriptor.name)
#else: for i,l in enumerate(labels): self.setText(i,str(l))
if not descriptor: return
if not hasattr(descriptor,'fields_by_number'): return
global type_map, label_map
fields = descriptor.fields_by_number
for key,value in fields.items():
if not type_map: type_map=create_value_map(value,"TYPE_")
if not label_map: label_map=create_value_map(value,"LABEL_")
if value.message_type: typename = value.message_type.name
elif value.enum_type: typename = value.enum_type.name
else: typename = type_map[value.type]
if value.default_value :
if value.enum_type:
default_value = value.enum_type.values_by_number[value.default_value].name
else:
default_value=str(value.default_value)
else:
default_value=""
labels=[value.name, value.type,typename,label_map[value.label], default_value]
# recurse
if ( value.message_type ) :
TreeItem(value, self,labels)
else:
TreeItem(value,self, labels)
#child.show_enum(value.enum_type, child, l+4)
# create a field when it is required and not yet existing
if not self.gpbitem.HasField(fd.name):
if fd.type == FD.STRING:
setattr(self.gpbitem, fd.name, fd.default_value.encode('utf-8'))
else:
setattr(self.gpbitem, fd.name, fd.default_value)