forked from Archive/PX4-Autopilot
Rework px_process_params.py into a fully featured program.
This commit is contained in:
parent
55e66f5ad1
commit
8d41155fb6
|
@ -0,0 +1,2 @@
|
||||||
|
parameters.wiki
|
||||||
|
parameters.xml
|
|
@ -1,4 +0,0 @@
|
||||||
parameters.wiki
|
|
||||||
parameters.xml
|
|
||||||
parameters.wikirpc.xml
|
|
||||||
cookies.txt
|
|
|
@ -1,9 +1 @@
|
||||||
h1. PX4 Parameters Processor
|
This folder contains a python library used by px_process_params.py
|
||||||
|
|
||||||
It's designed to scan PX4 source codes, find declarations of tunable parameters,
|
|
||||||
and generate the list in various formats.
|
|
||||||
|
|
||||||
Currently supported formats are:
|
|
||||||
|
|
||||||
* XML for the parametric UI generator
|
|
||||||
* Human-readable description in DokuWiki format
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
__all__ = ["srcscanner", "srcparser", "xmlout", "dokuwikiout", "dokuwikirpc"]
|
|
@ -47,30 +47,3 @@ class DokuWikiTablesOutput():
|
||||||
def Save(self, filename):
|
def Save(self, filename):
|
||||||
with codecs.open(filename, 'w', 'utf-8') as f:
|
with codecs.open(filename, 'w', 'utf-8') as f:
|
||||||
f.write(self.output)
|
f.write(self.output)
|
||||||
|
|
||||||
def SaveRpc(self, filename):
|
|
||||||
with codecs.open(filename, 'w', 'utf-8') as f:
|
|
||||||
f.write("""<?xml version='1.0'?>
|
|
||||||
<methodCall>
|
|
||||||
<methodName>wiki.putPage</methodName>
|
|
||||||
<params>
|
|
||||||
<param>
|
|
||||||
<value>
|
|
||||||
<string>:firmware:parameters</string>
|
|
||||||
</value>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<value>
|
|
||||||
<string>""")
|
|
||||||
f.write(escape(self.output))
|
|
||||||
f.write("""</string>
|
|
||||||
</value>
|
|
||||||
</param>
|
|
||||||
<param>
|
|
||||||
<value>
|
|
||||||
<name>sum</name>
|
|
||||||
<string>Updated parameters automagically from code.</string>
|
|
||||||
</value>
|
|
||||||
</param>
|
|
||||||
</params>
|
|
||||||
</methodCall>""")
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
try:
|
||||||
|
import xmlrpclib
|
||||||
|
except ImportError:
|
||||||
|
import xmlrpc.client as xmlrpclib
|
||||||
|
|
||||||
|
# See https://www.dokuwiki.org/devel:xmlrpc for a list of available functions!
|
||||||
|
# Usage example:
|
||||||
|
# xmlrpc = dokuwikirpc.get_xmlrpc(url, username, password)
|
||||||
|
# print(xmlrpc.dokuwiki.getVersion())
|
||||||
|
|
||||||
|
def get_xmlrpc(url, username, password):
|
||||||
|
#proto, url = url.split("://")
|
||||||
|
#url = proto + "://" + username + ":" + password + "@" + url + "/lib/exe/xmlrpc.php"
|
||||||
|
url += "/lib/exe/xmlrpc.php?u=" + username + "&p=" + password
|
||||||
|
|
||||||
|
return xmlrpclib.ServerProxy(url)
|
|
@ -1,31 +0,0 @@
|
||||||
import codecs
|
|
||||||
|
|
||||||
class DokuWikiListingsOutput():
|
|
||||||
def __init__(self, groups):
|
|
||||||
result = ""
|
|
||||||
for group in groups:
|
|
||||||
result += "==== %s ====\n\n" % group.GetName()
|
|
||||||
for param in group.GetParams():
|
|
||||||
code = param.GetFieldValue("code")
|
|
||||||
name = param.GetFieldValue("short_desc")
|
|
||||||
if code != name:
|
|
||||||
name = "%s (%s)" % (name, code)
|
|
||||||
result += "=== %s ===\n\n" % name
|
|
||||||
long_desc = param.GetFieldValue("long_desc")
|
|
||||||
if long_desc is not None:
|
|
||||||
result += "%s\n\n" % long_desc
|
|
||||||
min_val = param.GetFieldValue("min")
|
|
||||||
if min_val is not None:
|
|
||||||
result += "* Minimal value: %s\n" % min_val
|
|
||||||
max_val = param.GetFieldValue("max")
|
|
||||||
if max_val is not None:
|
|
||||||
result += "* Maximal value: %s\n" % max_val
|
|
||||||
def_val = param.GetFieldValue("default")
|
|
||||||
if def_val is not None:
|
|
||||||
result += "* Default value: %s\n" % def_val
|
|
||||||
result += "\n"
|
|
||||||
self.output = result
|
|
||||||
|
|
||||||
def Save(self, filename):
|
|
||||||
with codecs.open(filename, 'w', 'utf-8') as f:
|
|
||||||
f.write(self.output)
|
|
|
@ -1,67 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
############################################################################
|
|
||||||
#
|
|
||||||
# Copyright (C) 2013 PX4 Development Team. All rights reserved.
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
#
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in
|
|
||||||
# the documentation and/or other materials provided with the
|
|
||||||
# distribution.
|
|
||||||
# 3. Neither the name PX4 nor the names of its contributors may be
|
|
||||||
# used to endorse or promote products derived from this software
|
|
||||||
# without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
||||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
||||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
||||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
||||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
# POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#
|
|
||||||
############################################################################
|
|
||||||
|
|
||||||
#
|
|
||||||
# PX4 paramers processor (main executable file)
|
|
||||||
#
|
|
||||||
# It scans src/ subdirectory of the project, collects all parameters
|
|
||||||
# definitions, and outputs list of parameters in XML and DokuWiki formats.
|
|
||||||
#
|
|
||||||
|
|
||||||
import srcscanner
|
|
||||||
import srcparser
|
|
||||||
import output_xml
|
|
||||||
import output_dokuwiki_tables
|
|
||||||
import output_dokuwiki_listings
|
|
||||||
|
|
||||||
# Initialize parser
|
|
||||||
parser = srcparser.SourceParser()
|
|
||||||
|
|
||||||
# Scan directories, and parse the files
|
|
||||||
scanner = srcscanner.SourceScanner()
|
|
||||||
scanner.ScanDir("../../src", parser)
|
|
||||||
groups = parser.GetParamGroups()
|
|
||||||
|
|
||||||
# Output into XML
|
|
||||||
out = output_xml.XMLOutput(groups)
|
|
||||||
out.Save("parameters.xml")
|
|
||||||
|
|
||||||
# Output to DokuWiki listings
|
|
||||||
#out = output_dokuwiki_listings.DokuWikiListingsOutput(groups)
|
|
||||||
#out.Save("parameters.wiki")
|
|
||||||
|
|
||||||
# Output to DokuWiki tables
|
|
||||||
out = output_dokuwiki_tables.DokuWikiTablesOutput(groups)
|
|
||||||
out.Save("parameters.wiki")
|
|
||||||
out.SaveRpc("parameters.wikirpc.xml")
|
|
|
@ -1,5 +0,0 @@
|
||||||
python px_process_params.py
|
|
||||||
|
|
||||||
rm cookies.txt
|
|
||||||
curl --cookie cookies.txt --cookie-jar cookies.txt --user-agent Mozilla/4.0 --data "u=$XMLRPCUSER&p=$XMLRPCPASS" https://pixhawk.org/start?do=login
|
|
||||||
curl -k --cookie cookies.txt -H "Content-Type: application/xml" -X POST --data-binary @parameters.wikirpc.xml "https://pixhawk.org/lib/exe/xmlrpc.php"
|
|
|
@ -0,0 +1,140 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
############################################################################
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013-2014 PX4 Development Team. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions
|
||||||
|
# are met:
|
||||||
|
#
|
||||||
|
# 1. Redistributions of source code must retain the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer.
|
||||||
|
# 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer in
|
||||||
|
# the documentation and/or other materials provided with the
|
||||||
|
# distribution.
|
||||||
|
# 3. Neither the name PX4 nor the names of its contributors may be
|
||||||
|
# used to endorse or promote products derived from this software
|
||||||
|
# without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
############################################################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# PX4 paramers processor (main executable file)
|
||||||
|
#
|
||||||
|
# This tool scans the PX4 source code for declarations of tunable parameters
|
||||||
|
# and outputs the list in various formats.
|
||||||
|
#
|
||||||
|
# Currently supported formats are:
|
||||||
|
# * XML for the parametric UI generator
|
||||||
|
# * Human-readable description in DokuWiki page format
|
||||||
|
#
|
||||||
|
# This tool also allows to automatically upload the human-readable version
|
||||||
|
# to the DokuWiki installation via XML-RPC.
|
||||||
|
#
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import argparse
|
||||||
|
from px4params import srcscanner, srcparser, xmlout, dokuwikiout, dokuwikirpc
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Parse command line arguments
|
||||||
|
parser = argparse.ArgumentParser(description="Process parameter documentation.")
|
||||||
|
parser.add_argument("-s", "--src-path",
|
||||||
|
default="../src",
|
||||||
|
metavar="PATH",
|
||||||
|
help="path to source files to scan for parameters")
|
||||||
|
parser.add_argument("-x", "--xml",
|
||||||
|
nargs='?',
|
||||||
|
const="parameters.xml",
|
||||||
|
metavar="FILENAME",
|
||||||
|
help="Create XML file"
|
||||||
|
" (default FILENAME: parameters.xml)")
|
||||||
|
parser.add_argument("-w", "--wiki",
|
||||||
|
nargs='?',
|
||||||
|
const="parameters.wiki",
|
||||||
|
metavar="FILENAME",
|
||||||
|
help="Create DokuWiki file"
|
||||||
|
" (default FILENAME: parameters.wiki)")
|
||||||
|
parser.add_argument("-u", "--wiki-update",
|
||||||
|
nargs='?',
|
||||||
|
const="firmware:parameters",
|
||||||
|
metavar="PAGENAME",
|
||||||
|
help="Update DokuWiki page"
|
||||||
|
" (default PAGENAME: firmware:parameters)")
|
||||||
|
parser.add_argument("--wiki-url",
|
||||||
|
default="https://pixhawk.org",
|
||||||
|
metavar="URL",
|
||||||
|
help="DokuWiki URL"
|
||||||
|
" (default: https://pixhawk.org)")
|
||||||
|
parser.add_argument("--wiki-user",
|
||||||
|
default=os.environ.get('XMLRPCUSER', None),
|
||||||
|
metavar="USERNAME",
|
||||||
|
help="DokuWiki XML-RPC user name"
|
||||||
|
" (default: $XMLRPCUSER environment variable)")
|
||||||
|
parser.add_argument("--wiki-pass",
|
||||||
|
default=os.environ.get('XMLRPCPASS', None),
|
||||||
|
metavar="PASSWORD",
|
||||||
|
help="DokuWiki XML-RPC user password"
|
||||||
|
" (default: $XMLRPCUSER environment variable)")
|
||||||
|
parser.add_argument("--wiki-summary",
|
||||||
|
metavar="SUMMARY",
|
||||||
|
default="Automagically updated parameter documentation from code.",
|
||||||
|
help="DokuWiki page edit summary")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Check for valid command
|
||||||
|
if not (args.xml or args.wiki or args.wiki_update):
|
||||||
|
print("Error: You need to specify at least one output method!\n")
|
||||||
|
parser.print_usage()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Initialize source scanner and parser
|
||||||
|
scanner = srcscanner.SourceScanner()
|
||||||
|
parser = srcparser.SourceParser()
|
||||||
|
|
||||||
|
# Scan directories, and parse the files
|
||||||
|
print("Scanning source path " + args.src_path)
|
||||||
|
scanner.ScanDir(args.src_path, parser)
|
||||||
|
param_groups = parser.GetParamGroups()
|
||||||
|
|
||||||
|
# Output to XML file
|
||||||
|
if args.xml:
|
||||||
|
print("Creating XML file " + args.xml)
|
||||||
|
out = xmlout.XMLOutput(param_groups)
|
||||||
|
out.Save(args.xml)
|
||||||
|
|
||||||
|
# Output to DokuWiki tables
|
||||||
|
if args.wiki or args.wiki_update:
|
||||||
|
out = dokuwikiout.DokuWikiTablesOutput(param_groups)
|
||||||
|
if args.wiki:
|
||||||
|
print("Creating wiki file " + args.wiki)
|
||||||
|
out.Save(args.wiki)
|
||||||
|
if args.wiki_update:
|
||||||
|
if args.wiki_user and args.wiki_pass:
|
||||||
|
print("Updating wiki page " + args.wiki_update)
|
||||||
|
xmlrpc = dokuwikirpc.get_xmlrpc(args.wiki_url, args.wiki_user, args.wiki_pass)
|
||||||
|
xmlrpc.wiki.putPage(args.wiki_update, out.output, {'sum': args.wiki_summary})
|
||||||
|
else:
|
||||||
|
print("Error: You need to specify DokuWiki XML-RPC username and password!")
|
||||||
|
|
||||||
|
print("All done!")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Remember to set the XMLRPCUSER and XMLRPCPASS environment variables
|
||||||
|
python px_process_params.py --wiki-update
|
Loading…
Reference in New Issue