mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-03-03 04:03:59 -04:00
autotest: logger_metadata: understand , in @LoggerMessage
This means multiple messages use exactly the same meaning in the fields Also retain ordering of fields
This commit is contained in:
parent
de36b6a16a
commit
e671a0912e
@ -1066,6 +1066,15 @@ class AutoTest(ABC):
|
||||
(length, min_length))
|
||||
self.progress("xml file length is %u" % length)
|
||||
|
||||
from lxml import objectify
|
||||
xml = open(xml_filepath,'rb').read()
|
||||
objectify.enable_recursive_str()
|
||||
tree = objectify.fromstring(xml)
|
||||
for thing in tree.logformat:
|
||||
print("Got (%s)" % str(thing.get("name")))
|
||||
# for entry in tree.children:
|
||||
# print("Got entry (%s)" % str(entry))
|
||||
|
||||
def initialise_after_reboot_sitl(self):
|
||||
|
||||
# after reboot stream-rates may be zero. Prompt MAVProxy to
|
||||
|
@ -41,7 +41,7 @@ DO NOT EDIT
|
||||
print(' <table>', file=self.fh)
|
||||
print(" <tr><th>FieldName</th><th>Description</th><tr>",
|
||||
file=self.fh)
|
||||
for f in docco.fields:
|
||||
for f in docco.fields_order:
|
||||
if "description" in docco.fields[f]:
|
||||
fdesc = docco.fields[f]["description"]
|
||||
else:
|
||||
|
@ -39,7 +39,7 @@ This is a list of log messages which may be present in logs produced and stored
|
||||
print("~" * len(line), file=self.fh)
|
||||
|
||||
rows = []
|
||||
for f in docco.fields:
|
||||
for f in docco.fields_order:
|
||||
if "description" in docco.fields[f]:
|
||||
fdesc = docco.fields[f]["description"]
|
||||
else:
|
||||
|
@ -27,7 +27,7 @@ class XMLEmitter(emitter.Emitter):
|
||||
print(' <description>%s</description>' %
|
||||
docco.description, file=self.fh)
|
||||
print(' <fields>', file=self.fh)
|
||||
for f in docco.fields:
|
||||
for f in docco.fields_order:
|
||||
print(' <field name="%s">' % f, file=self.fh)
|
||||
if "description" in docco.fields[f]:
|
||||
print(' <description>%s</description>' %
|
||||
|
@ -3,6 +3,7 @@
|
||||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import copy
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
@ -14,7 +15,7 @@ import emit_xml
|
||||
topdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../../')
|
||||
topdir = os.path.realpath(topdir)
|
||||
|
||||
re_loggermessage = re.compile(r"@LoggerMessage\s*:\s*(\w+)", re.MULTILINE)
|
||||
re_loggermessage = re.compile(r"@LoggerMessage\s*:\s*([\w,]+)", re.MULTILINE)
|
||||
re_commentline = re.compile(r"\s*//")
|
||||
re_description = re.compile(r"\s*//\s*@Description\s*:\s*(.*)")
|
||||
re_url = re.compile(r"\s*//\s*@URL\s*:\s*(.*)")
|
||||
@ -53,6 +54,7 @@ class LoggerDocco(object):
|
||||
self.url = None
|
||||
self.description = None
|
||||
self.fields = {}
|
||||
self.fields_order = []
|
||||
self.vehicles = None
|
||||
|
||||
def set_description(self, desc):
|
||||
@ -61,14 +63,17 @@ class LoggerDocco(object):
|
||||
def set_url(self, url):
|
||||
self.url = url
|
||||
|
||||
def set_field_description(self, field, description):
|
||||
def ensure_field(self, field):
|
||||
if field not in self.fields:
|
||||
self.fields[field] = {}
|
||||
self.fields_order.append(field)
|
||||
|
||||
def set_field_description(self, field, description):
|
||||
self.ensure_field(field)
|
||||
self.fields[field]["description"] = description
|
||||
|
||||
def set_field_bits(self, field, bits):
|
||||
if field not in self.fields:
|
||||
self.fields = {}
|
||||
self.ensure_field(field)
|
||||
self.fields[field]["bits"] = bits
|
||||
|
||||
def set_vehicles(self, vehicles):
|
||||
@ -104,6 +109,8 @@ class LoggerDocco(object):
|
||||
if m is None:
|
||||
continue
|
||||
name = m.group(1)
|
||||
if "," in name:
|
||||
name = name.split(",")
|
||||
state = state_inside
|
||||
docco = LoggerDocco.Docco(name)
|
||||
elif state == state_inside:
|
||||
@ -140,8 +147,18 @@ class LoggerDocco(object):
|
||||
self.parse_file(_file)
|
||||
|
||||
def emit_output(self):
|
||||
# expand things like PIDR,PIDQ,PIDA into multiple doccos
|
||||
new_doccos = []
|
||||
for docco in self.doccos:
|
||||
if type(docco.name) == list:
|
||||
for name in docco.name:
|
||||
tmpdocco = copy.copy(docco)
|
||||
tmpdocco.name = name
|
||||
new_doccos.append(tmpdocco)
|
||||
else:
|
||||
new_doccos.append(docco)
|
||||
for emitter in self.emitters:
|
||||
emitter.emit(self.doccos)
|
||||
emitter.emit(new_doccos)
|
||||
|
||||
def run(self):
|
||||
self.files = []
|
||||
|
Loading…
Reference in New Issue
Block a user