mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-03-03 12:14:10 -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))
|
(length, min_length))
|
||||||
self.progress("xml file length is %u" % 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):
|
def initialise_after_reboot_sitl(self):
|
||||||
|
|
||||||
# after reboot stream-rates may be zero. Prompt MAVProxy to
|
# after reboot stream-rates may be zero. Prompt MAVProxy to
|
||||||
|
@ -41,7 +41,7 @@ DO NOT EDIT
|
|||||||
print(' <table>', file=self.fh)
|
print(' <table>', file=self.fh)
|
||||||
print(" <tr><th>FieldName</th><th>Description</th><tr>",
|
print(" <tr><th>FieldName</th><th>Description</th><tr>",
|
||||||
file=self.fh)
|
file=self.fh)
|
||||||
for f in docco.fields:
|
for f in docco.fields_order:
|
||||||
if "description" in docco.fields[f]:
|
if "description" in docco.fields[f]:
|
||||||
fdesc = docco.fields[f]["description"]
|
fdesc = docco.fields[f]["description"]
|
||||||
else:
|
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)
|
print("~" * len(line), file=self.fh)
|
||||||
|
|
||||||
rows = []
|
rows = []
|
||||||
for f in docco.fields:
|
for f in docco.fields_order:
|
||||||
if "description" in docco.fields[f]:
|
if "description" in docco.fields[f]:
|
||||||
fdesc = docco.fields[f]["description"]
|
fdesc = docco.fields[f]["description"]
|
||||||
else:
|
else:
|
||||||
|
@ -27,7 +27,7 @@ class XMLEmitter(emitter.Emitter):
|
|||||||
print(' <description>%s</description>' %
|
print(' <description>%s</description>' %
|
||||||
docco.description, file=self.fh)
|
docco.description, file=self.fh)
|
||||||
print(' <fields>', 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)
|
print(' <field name="%s">' % f, file=self.fh)
|
||||||
if "description" in docco.fields[f]:
|
if "description" in docco.fields[f]:
|
||||||
print(' <description>%s</description>' %
|
print(' <description>%s</description>' %
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import copy
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
@ -14,7 +15,7 @@ import emit_xml
|
|||||||
topdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../../')
|
topdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../../')
|
||||||
topdir = os.path.realpath(topdir)
|
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_commentline = re.compile(r"\s*//")
|
||||||
re_description = re.compile(r"\s*//\s*@Description\s*:\s*(.*)")
|
re_description = re.compile(r"\s*//\s*@Description\s*:\s*(.*)")
|
||||||
re_url = re.compile(r"\s*//\s*@URL\s*:\s*(.*)")
|
re_url = re.compile(r"\s*//\s*@URL\s*:\s*(.*)")
|
||||||
@ -53,6 +54,7 @@ class LoggerDocco(object):
|
|||||||
self.url = None
|
self.url = None
|
||||||
self.description = None
|
self.description = None
|
||||||
self.fields = {}
|
self.fields = {}
|
||||||
|
self.fields_order = []
|
||||||
self.vehicles = None
|
self.vehicles = None
|
||||||
|
|
||||||
def set_description(self, desc):
|
def set_description(self, desc):
|
||||||
@ -61,14 +63,17 @@ class LoggerDocco(object):
|
|||||||
def set_url(self, url):
|
def set_url(self, url):
|
||||||
self.url = url
|
self.url = url
|
||||||
|
|
||||||
def set_field_description(self, field, description):
|
def ensure_field(self, field):
|
||||||
if field not in self.fields:
|
if field not in self.fields:
|
||||||
self.fields[field] = {}
|
self.fields[field] = {}
|
||||||
|
self.fields_order.append(field)
|
||||||
|
|
||||||
|
def set_field_description(self, field, description):
|
||||||
|
self.ensure_field(field)
|
||||||
self.fields[field]["description"] = description
|
self.fields[field]["description"] = description
|
||||||
|
|
||||||
def set_field_bits(self, field, bits):
|
def set_field_bits(self, field, bits):
|
||||||
if field not in self.fields:
|
self.ensure_field(field)
|
||||||
self.fields = {}
|
|
||||||
self.fields[field]["bits"] = bits
|
self.fields[field]["bits"] = bits
|
||||||
|
|
||||||
def set_vehicles(self, vehicles):
|
def set_vehicles(self, vehicles):
|
||||||
@ -104,6 +109,8 @@ class LoggerDocco(object):
|
|||||||
if m is None:
|
if m is None:
|
||||||
continue
|
continue
|
||||||
name = m.group(1)
|
name = m.group(1)
|
||||||
|
if "," in name:
|
||||||
|
name = name.split(",")
|
||||||
state = state_inside
|
state = state_inside
|
||||||
docco = LoggerDocco.Docco(name)
|
docco = LoggerDocco.Docco(name)
|
||||||
elif state == state_inside:
|
elif state == state_inside:
|
||||||
@ -140,8 +147,18 @@ class LoggerDocco(object):
|
|||||||
self.parse_file(_file)
|
self.parse_file(_file)
|
||||||
|
|
||||||
def emit_output(self):
|
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:
|
for emitter in self.emitters:
|
||||||
emitter.emit(self.doccos)
|
emitter.emit(new_doccos)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.files = []
|
self.files = []
|
||||||
|
Loading…
Reference in New Issue
Block a user