Skip to content

Commit bc51af3

Browse files
committed
Refactored TextFileParser
1 parent 421747a commit bc51af3

1 file changed

Lines changed: 52 additions & 20 deletions

File tree

ixcom/cmdline.py

Lines changed: 52 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,23 @@ def __init__(self, outputfile, print_request = True):
1212
self.outputfile = outputfile
1313
self.print_request = print_request
1414
self.messageSearcher.disableCRC = True
15+
self._indent_level = 0
1516
self.add_subscriber(self)
17+
18+
def __handle_loglist2(self, message):
19+
self.write_output(f"Channel: {message.payload.data['reserved_paramheader']}\n")
20+
for log in message.payload.data['loglist']:
21+
msgid = log['msgid']
22+
if msgid in ixcom.data.MessagePayloadDictionary:
23+
message_class = ixcom.data.MessagePayloadDictionary[msgid]
24+
zeile = "msgid: %s\n" % (message_class.get_name())
25+
else:
26+
zeile = f'msgid: {msgid}\n'
27+
self.write_divider()
28+
self.write_output(zeile)
29+
self.write_output(f'divider: {log["divider"]}\n')
30+
self.write_output(f'running: {log["running"]}\n')
31+
self.write_output('\n\n')
1632

1733
def handle_message(self, message, from_device):
1834
zeile = "Header Time: %.4f\n" % (message.header.get_time())
@@ -28,30 +44,46 @@ def handle_message(self, message, from_device):
2844
elif message.header.msgID == ixcom.data.MessageID.COMMAND:
2945
zeile = "Command: %s\n" % message.payload.get_name()
3046
self.write_output(zeile)
31-
for key in message.payload.data:
32-
if key == 'str':
33-
try:
34-
tmp = message.payload.data[key].decode('ascii')
35-
tmp = tmp.split('\0')[0]
36-
zeile = "%s: %s\n" % (key, tmp)
37-
except:
38-
zeile = "%s: %s\n" % (key, message.payload.data[key])
39-
elif key in ['ip', 'subnetmask', 'gateway', 'defaultAddress', 'serverAddress']:
40-
ipbinary = message.payload.data[key]
41-
zeile = "%s: %s\n" % (key, socket.inet_ntoa(struct.pack('!L', ipbinary)))
42-
elif message.payload.get_name() == 'PARXCOM_LOGLIST2' and 'msgid' in key:
43-
value = message.payload.data[key]
44-
if value in ixcom.data.MessagePayloadDictionary:
45-
message_class = ixcom.data.MessagePayloadDictionary[value]
46-
zeile = "%s: %s\n" % (key, message_class.get_name())
47-
else:
48-
zeile = "%s: %s\n" % (key, message.payload.data[key])
47+
if isinstance(message.payload, ixcom.data.PARXCOM_LOGLIST2_Payload):
48+
self.__handle_loglist2(message)
49+
else:
50+
self.__convert_dict(message.payload.data)
51+
zeile = "\n\n"
4952
self.write_output(zeile)
50-
zeile = "\n\n"
53+
54+
def write_divider(self):
55+
self.write_output('-'*10+'\n')
56+
57+
58+
def __convert_dict(self, d):
59+
for key in d:
60+
if isinstance(d[key], list) and isinstance(d[key][0], dict):
61+
self.write_output(f'{key}:\n')
62+
self._indent_level += 1
63+
for new_d in d[key]:
64+
self.write_divider()
65+
self.__convert_dict(new_d)
66+
self._indent_level -= 1
67+
else:
68+
self.__convert_key(key, d)
69+
70+
def __convert_key(self, key, d):
71+
if key in ['ip', 'subnetmask', 'gateway', 'defaultAddress', 'serverAddress', 'ipAddress', 'destAddr', 'udpAddr']:
72+
ipbinary = d[key]
73+
zeile = "%s: %s\n" % (key, socket.inet_ntoa(struct.pack('!L', ipbinary)))
74+
elif isinstance(d[key], bytes):
75+
try:
76+
tmp = d[key].split(b'\0')[0]
77+
tmp = tmp.decode('ascii')
78+
zeile = "%s: %s\n" % (key, tmp)
79+
except:
80+
zeile = "%s: %s\n" % (key, d[key])
81+
else:
82+
zeile = "%s: %s\n" % (key, d[key])
5183
self.write_output(zeile)
5284

5385
def write_output(self, line):
54-
self.outputfile.write(line)
86+
self.outputfile.write('\t'*self._indent_level+line)
5587

5688
def parse_file(self, inputfile):
5789
while True:

0 commit comments

Comments
 (0)